1.为什么是动态的?
1.采用了发光管的余晖和人眼的视觉暂留效应,使人看到好像各位数码管都在同时显示
2.特点:
1.同样是利用了138译码器对高低电平进行操作
2. 动态显示将所有的数码管的段选线并联,采用循环的方式对每一位进行操作
3.关于138译码器
输出高低电频是有着一定规律的
如果是110(LSA,LSB,LSC),则为L3为低电平;(反向二进制)
同时,要注意看真值表(X为任意值,L为低电平,H为高电平)
4.关于怎样实现动态的具体操作
1.使用数组来时数码管实现输出数字
2.使用for循环来时函数进行循环操作
3.使用switch case函数实现不同字段的选择
4.同时使用delay()函数和最后对P0值刷新进行消影处理
#include
typedef unsigned char u8;
typedef unsigned int u16;
//138译码器
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//书写子函数
void delay(u16 i)
{
while(i--);
}
void Digdisplay() //显示0到7
{
u8 i;
for(i=0;i<8;i++)
{
switch(i)
{
case 0:
LSA=0;LSB=0;LSC=0;break;
case 1:
LSA=1;LSB=0;LSC=0;break;
case 2:
LSA=0;LSB=1;LSC=0;break;
case 3:
LSA=1;LSB=1;LSC=0;break;
case 4:
LSA=0;LSB=0;LSC=1;break;
case 5:
LSA=1;LSB=0;LSC=1;break;
case 6:
LSA=0;LSB=1;LSC=1;break;
case 7:
LSA=1;LSB=1;LSC=1;break;
}
//发送字码
P0=smgduan[i];
//延时
delay(100);
//进行消影处理,防止重影
P0=0X00;
}
}
void main()
{
while(1)
{
Digdisplay();
}
}