1.显示原理:
(1)静态显示
静态显示方式是指当显示器显示某一字符时,发光二极管的位选始终被选中。在这种显示方式下,每一个LED数码管显示器都需要一个8位的输出口进行控制。采用这种方法的缺点是,采用的IO口较多,因为单片机的IO口资源有限,通常需要扩展IO口。
(2)动态显示
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效,选亮数码管采用动态扫描显示。
所谓动态扫描显示即利用发光二极管的余辉和人眼视觉暂留作用,使人感觉好像各位数码管同时都在显示。不过动态显示的亮度要比静态显示要差一些,不过问题不大。
2.定时器实现数码管动态扫描
延时方法实现动态显示,在延时过程中单片机不能执行其他任务,只能等待,等到延时延时时间过去之后单片机才可以执行下一步任务。
采用定时器方法实现动态扫描则可以避免这种情况,定时器好比闹钟,设定时间到就会提醒一次,只要在提醒时进行数码管扫描就可以了。
3.原理图
4.共阳数码管段码表
/***********************************************************************
第一行是从0~9
第二行是从0~9带“.”
第三行是 “-”和 灭
************************************************************************/
unsigned char code SMG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
0xbf,0xff};
5.代码实现
unsigned char POS=0;
unsigned char smgdat[8]={21,21,21,21,21,21,21,21};
unsigned char code SMG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
0xbf,0xff};
void Timer2Init(void) //2毫秒@12.000MHz
{
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0x40; //设置定时初值
T2H = 0xA2; //设置定时初值
AUXR |= 0x10; //定时器2开始计时
/*后加的部分*/
EA=1;
IE2|=0x04;
}
void display(unsigned char pos,dat){
hc138(6);P0=0x01<<pos;P2&=0x1f;
hc138(7);P0=dat; P2&=0x1f;
}
void T2_Display()interrupt 12
{
hc138(6);P0=0x00;
display(POS,SMG[smgdat[POS]]);
if(++POS==8)POS=0;
}