51单片机数码管时钟设计,按键可调节时间

 一、实验现象

1.利用开发板设计数字钟,并显示在数码管上。
2.利用开发板设计带按键调整时钟的数字钟。
3.四个按键(S1—小时加 1,S2—小时减 1,S3—分加 1,S4—分减 1。)

二、实验目的

1.掌握数码管显示原理以及程序编写方法
2.理解定时计数器的功能和工作原理
3.掌握定时器中断方式实现定时功能的程序编写方法

三、实验原理

1.为了使 LED 数码管显示不同的数字或符号,需要把某些段的发光二极管点亮,这样就
要为 LED 数码管提供代码,因为这些代码可使 LED 相应的段发光,从而显示不同字型,因此
该代码也称为段码(或称字型码)。 LED 数码管共有 8 个笔画段,因此提供给 LED 数码管的
段码(或字型码)正好是一个字节。在使用中,习惯上是以“a”段对应段码字节的最低位。
各段与字节中各位对应关系见表 1。

 

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);
	}
		
}	

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

五、资源连接

【免费】51单片机的数码管时钟设计,按键可调节时间资源-CSDN文库

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惹清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值