一、实验现象

1.利用开发板设计数字钟,并显示在数码管上。


2.利用开发板设计带按键调整时钟的数字钟。


3.四个按键(S1—小时加 1,S2—小时减 1,S3—分加 1,S4—分减 1。)


二、实验目的


1.掌握数码管显示原理以及程序编写方法



2.理解定时计数器的功能和工作原理



3.掌握定时器中断方式实现定时功能的程序编写方法



三、实验原理



1.为了使 LED 数码管显示不同的数字或符号,需要把某些段的发光二极管点亮,这样就



要为 LED 数码管提供代码,因为这些代码可使 LED 相应的段发光,从而显示不同字型,因此



该代码也称为段码(或称字型码)。 LED 数码管共有 8 个笔画段,因此提供给 LED 数码管的



段码(或字型码)正好是一个字节。在使用中,习惯上是以“a”段对应段码字节的最低位。



各段与字节中各位对应关系见表 1。




数码管时间刷新python 用数码管显示时间_51单片机


 


2. LED 数码管有静态显示和动态显示两种显示方式。


(1)静态显示


静态显示指无论多少位 LED 数码管,都同时处于显示状态。


(2)动态显示


当显示位数较多,静态显示所需的 I/O 口太多,这时常采用动态显示方式。动态显示


方式是将所有数码管的段码端的相应段并接在一起,由一个 8 位 I/O 口控制,而各位显示位


的公共端分别由相应的 I/O 线控制,称为位选端。


四、实验代码


经过上一篇的学习,想必大家对定时计数器已经有了一定的了解,时钟的设计离不开他,秒针的跳动就是靠他实现的,所有,我们先配置一下定时计数器。




void init()		
	{
		P2=0xff;
		P0=0xff;
		hour=20;min=56;sec=0;ms=0;
		TMOD=0x01;								
		TH0=(65536-10000)/256;
		TL0=(65536-10000)%256;
		EA=1;
		ET0=1;
		TR0=1;
}

到这里,只是初步配置了定时计数器,他需要实现什么功能还需要进行下一步的代码编写

void time_init() interrupt 1
	{
		TH0=(65536-10000)/256;
		TL0=(65536-10000)%256;
	if(K4==0){
		delay(7);
		if(K4==1){
		mos=0;
				if(hour==24){
				hour=0;
				}
				else{hour+=1;}
			}
		}
	display();
	if(K5==0){
		delay(7);
		if(K5==1){
		mos=0;
		if(min==60){
		min=0;
		}
		else{min+=1;}
	}}
	display();
	if(K1==0){
		
	mos=1;
	}
	if(K2==0){
	mos=0;
	}
		if(K3==0){
	mos=2;
	}
	switch(mos){
		case 0:break;
		case 1:ms++;pd();break;
		case 2:hour=0;min=0;sec=0;ms=0;break;
	}

秒针的跳动利用定时计数器来完成,接下来,我们看一下时和分的实现代码

void pd(){
	
	if(ms==100){
		ms=0;
		sec++;
		
	if(sec==60)
	{
		sec=0;
		min++;
	
	 if(min==60)
	{
		min=0;
		hour++;
	
 if(hour==24){
		hour=0;
	}
}}}
	}

这样,时钟的数据我们已经完成了,那如何让他显示到数码管上呢

void display()
{
	uchar i;
		 if(min==60)
	{
		min=0;
	}
 if(hour==24){
		hour=0;
	} 
	shu[0]=hour/10;
	shu[1]=hour%10;
	shu[2]=min/10;
	shu[3]=min%10;
	shu[4]=sec/10;
	shu[5]=sec%10;
	shu[6]=ms/10;
	shu[7]=ms%10;
	for(i=0;i<8;i++){
		if(i==1||i==3||i==5){
		P2=xs_wei[i];
		P0=xs_shud[shu[i]];
		}
		else{
		P2=xs_wei[i];
		P0=xs_shu[shu[i]];
		}
		delay(1);
	}
		
}

这样,我们的主函数调用以下这些函数即可。

五、资源连接