【蓝桥杯-单片机设计与开发】3.定时器实现数码管显示

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;
	

}



posted @ 2022-01-04 11:22  寥若辰星  阅读(906)  评论(0编辑  收藏  举报