嵌入式设计 | 基于51单片机,用六位数码管做一个时钟

6位数码管,从左到右,小时、分钟、秒,涉及到定时器0和动态数码管知识

#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int
uint n;
uint sec, min, hour;
sbit dula=P2^6;
sbit wela=P2^7;

uchar code table_dula[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};

uint time[6]={0,0,0,0,0,0};
void reset()//初始化函数
{
	sec=0;//自定义时间
	min=0;
	hour=0;
	TMOD=0x01;
	EA=1;
	ET0=1;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	TR0=1;
}

void delay(uint z)
{
	uchar x,y;
	for(x=z;x>0;x--)
		for(y=50;y>0;y--);
}

void main()
{
	reset();
	while(1)
	{
		//h 十位
		dula=1;
		P0=table_dula[time[0]];
		dula=0;
		P0=0xff;
		wela=1;
		P0=0xfe;
		wela=0;
		delay(1);
		
		//h 个位
		dula=1;
		P0=table_dula[time[1]];
		dula=0;
		P0=0xff;
		wela=1;
		P0=0xfd;
		wela=0;	
		delay(1);
		
		//min 十位
		dula=1;
		P0=table_dula[time[2]];
		dula=0;
		P0=0xff;
		wela=1;
		P0=0xfb;
		wela=0;
		delay(1);
		
		//min 个位
		dula=1;
		P0=table_dula[time[3]];
		dula=0;
		P0=0xff;
		wela=1;
		P0=0xf7;
		wela=0;
		delay(1);
		
		//sec 十位
		dula=1;
		P0=table_dula[time[4]];
		dula=0;
		P0=0xff;
		wela=1;
		P0=0xef;
		wela=0;
		delay(1); 
		
		//sec 个位
		dula=1;
		P0=table_dula[time[5]];
		dula=0;
		P0=0xff;
		wela=1;
		P0=0xdf;
		wela=0;
		delay(1);
	}
}

void Time_0() interrupt 1
{
	n++;
	if(n==20)
	{
		n=0;
		sec++;
		if(sec==60)
		{
			sec=0; min++;
			if(min==60)
			{
				min=0; hour++;
				if(hour==24)
				{
					sec=0;min=0;hour=0;
				}
			}
		}
	}
	time[0]=hour/10;
	time[1]=hour%10;
	time[2]=min/10;
	time[3]=min%10;
	time[4]=sec/10;
	time[5]=sec%10;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
}

  • 14
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
### 回答1: 当我听到“51单片机”时,我首先想到的是一款基于MCS-51架构的微控制器,它在嵌入系统中广泛应用。 对于单片机设计来说,设计师需要考虑很多因素,比如系统的时钟速度、存储器的容量和接口的选择等等。时钟速度非常重要,因为它决定了单片机能够执行的指令数量。同时,存储器的容量也非常关键,因为它限制了单片机能够存储的程序和数据的大小。 当选择51单片机时,设计师需要考虑这些因素以及其他一些因素,例如应用的复杂程度和所需的性能等。然后,他们可以选择适合他们应用需求的具体型号,并设计出一个完整的系统。 总之,51单片机是一款功能强大的微控制器,它在嵌入系统中广泛使用,可以用于控制各种不同类型的设备和系统。 ### 回答2: 基于51单片机设计时钟需要进行以下步骤: 1. 硬件设计:选择适当的时钟芯片来提供外部时钟信号。这可以是晶振、时钟模块或者RTC芯片。同时,还需要设计合适的电路用于连接单片机和时钟芯片。 2. 程序设计:使用汇编或C语言进行程序编写。首先,需要编写初始化代码,设置单片机相关寄存器和外部中断设置。然后,编写时钟模块的代码,包括获取当前时间,显示时间和实现闹钟功能。 3. 时钟模块设计:在时钟模块中,需要使用定时器来读取时钟芯片的时间,并将其转换为可读的格。定时器可以设置一个适当的时间间隔,以确保时钟准确无误地进行。 4. 数码管显示:通过数码管显示时间,需要将时钟数值转换为数码管控制代码,并通过IO口输出到数码管。可以使用数码管显示驱动文件进行编程。 5. 闹钟功能设计:通过添加按钮和外部中断实现闹钟功能。当设定的闹钟时间到达时,产生一个中断信号,即触发闹钟,可以通过发出声音或者闪烁LED等方来提醒用户。 6. 能源管理:为了保证时钟的正常运行,可以考虑添加电池供电功能,以防停电或者外部电源故障情况下时钟无法正常工作。 7. 调试和测试:完成硬件和软件的设计之后,需要对整个时钟进行调试和测试,验证时钟的准确性和稳定性。 总之,基于51单片机设计时钟需要进行硬件设计、程序设计时钟模块设计数码管显示、闹钟功能设计、能源管理以及调试和测试。这个过程中需要综合运用电子技术、编程技术和测试技术,确保时钟的功能和性能达到要求。 ### 回答3: 设计基于51单片机时钟是一个很有趣的项目。首先,我们需要一个51单片机,这是一个非常流行且常用的单片机型号,容易获得且价格便宜。接下来,我们需要一块LCD屏幕,用于显示时间。可以使用4位数码管显示时间,但LCD屏幕更加直观且易读。还需要一个实时时钟模块,它能够提供精确的时间数据。 首先,将单片机与LCD屏幕和实时时钟模块连接。然后,编写程序来读取实时时钟模块的时间,并将其显示在LCD屏幕上。此外,还可以加入一些附加功能,如设置闹钟、显示日期等。 为了确保时钟的准确性,可以使用外部晶振来提供更稳定的时钟信号。此外,还可以添加蜂鸣器,以在设定的闹钟时间发出警报声。 在设计时钟的过程中,还需要考虑电源问题。可以通过连接适当的电池来提供电源,以确保时钟在断电情况下仍能继续运行。 最后,在设计完成后,可以将时钟固定在一个漂亮的外壳中,以增加外观的美观度。 总之,基于51单片机设计时钟是一个有趣的项目,它不仅能够提供准确的时间显示,还可以拥有多种功能,如设置闹钟等。同时,这个项目也可以增强我们对单片机编程和硬件设计的理解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值