基于51单片机的LED时钟设计.docx
《基于51单片机的LED时钟设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的LED时钟设计.docx(16页珍藏版)》请在冰点文库上搜索。
基于51单片机的LED时钟设计
《微机原理与接口技术》
MicrocontrollerandInterfaceTechnique
研究性教学训练载体—学生作品
所属学院:
机械与电子控制工程学院
专题名称:
基于51单片机的LED时钟设计
授课时间:
2016-2017学年第二学期
项目组长:
彭润锋
项目组员:
杨万琪、李学、三奇尔
指导教师:
万里冰
提交日期:
2017年6月9日
摘要:
自诞生以来,单片机的应用日趋广泛,应用领域日趋扩展,而MCS-51系列单片机是各单片机中最为典型的一种。
这次课题设计,以AT89C51芯片为核心,通过必要的电路,构成简单的电子时钟。
数字时钟系统的主要任务是:
采用单片机为核心器件产生24h(24小时)时间,并用LED显示器将他显示出来。
这样简单的设计,直观反映单片机的应用。
软件和硬件的开发是这次设计必不可少的。
关键词:
AT89C51;数字时钟;LED数码显示管
1.研究背景与意义
随着电子技术的飞速发展,以单片机为核心设计的数字钟越来越受到人们喜爱。
因其具有功能强、体积小、功耗低、价格便宜、工作可靠等特点,广泛应用于自动控制、智能化仪器仪表等各个领域。
一个完整的数字钟电路就是一个单片机的最小系统,该系统由键盘输入电路、单片机、复位电路和LED显示电路几个方面构成。
数字钟采用数字电路实现时、分、秒计时,应用非常广泛。
由于集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动启闭路灯、定时通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟设计及其应用,有着非常现实的意义。
通过本论文课题的研究,预计达到:
本设计由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。
与传统机械表相比,它具有走时精确,显示直观等特点。
它的计时周期为24小时,显满刻度为“23时59分59秒”,另外可通过三个按键实现清零、调小时、分钟的功能。
该电子钟可以做到的功能:
上电或按键复位后能自动显示系统默认时间“12-00-00”进入时钟运行状态。
2.系统总体设计流程
基于51单片机的LED时钟设计内容,包括有时钟运行程序的设计、Proteus的时钟模拟、实物时钟的电路连接三个主要部分。
由中断产生的秒、分、小时数据,经转换子程序转换成适应LED显示屏显示的数据,并通过单片机的输出功能输入到LED显示屏,再通过显示扫描程序,显示出时钟的走时时间。
用计时程序来完成计时,数时功能,再通过单片机综合控制将数字显示出来。
同时
,我们可以通过添加按键来进行时间的调节。
图2-1设计思路流程图
图2-2简易结构图
3.时钟程序解析
3.1时、分、秒程序
设定初始时间12点00分00秒:
MOV30H,#01H
MOV31H,#02H
MOV32H,#00H
MOV33H,#00H
MOV34H,#00H
MOV35H,#00H
小时程序:
XS:
MOV40H,#0FEH;设定初值
MOVDPTR,#TAB;译码表地址
MOVP2,40H;片选信号
MOVA,30H;装入偏移量
MOVCA,@A+DPTR;查表程序
MOVP0,A;显示小时的十位
LCALLYS1MS;延时
MOVP0,#0FFH;断开显示
MOVA,40H;
RLA;片选小时的个位
MOV40H,A
MOVP2,40H
MOVA,31H
ADDA,#0AH;偏移
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
分、秒与小时类似。
3.2按键程序
按键查询:
JNBP1.0,P100;查询P100键是否按下,P100为清零键
JNBP1.1,P1000;查询P1000键是否按下,P1000为小时加1键
JNBP1.2,P10000;查询P10000键是否按下,P10000为分加1键
全部清零:
P100:
MOV30H,#00H
MOV31H,#00H
MOV32H,#00H
MOV33H,#00H
MOV34H,#00H
MOV35H,#00H;30H-35H全部置0
小时加1、分钟加1:
JIA:
CLRTF0;清除中断标志
MOVA,35H
CJNEA,#09H,JIA1;查询是否进位
MOV35H,00H;进位恢复
MOVA,34H;
CJNEA,#05H,JIA10;查询进位
MOV34H,#00H;进位恢复
P10000:
JNBP1.2,P10000;查询按键是否按下
MOVA,33H
CJNEA,#09H,JIA100;调用子程序,调节分钟的个位
MOV33H,#00H
MOVA,32H
CJNEA,#05H,JIA1000;调用子程序,调节分钟的十位
MOV32H,#00H
P1000:
JNBP1.1,P1000;查询按键是否按下
MOVA,31H
CJNEA,#09H,JIA10000;调用子程序,调节小时的个位
MOV31H,#00H
MOVA,30H
CJNEA,#02H,JIA100000;调用子程序,调节小时的十位
MOV30H,#00H
AJMPXS0
4.Proteus仿真电路
各个控制键的功能:
可对时间进行校准调节(只能加1);时加1、分加1键是在校准时间时或设置闹钟时间对小时数或分钟数调节而设置的;清零键可以对闹钟清零。
Proteus模拟运行结果演示
5.实物电路及结果
6.研究总结
我们通过《微机原理与接口技术》课上讲的知识,在基于51单片机学习的基础上,通过汇编语言编写了实现目标功能的程序,并通过仿真,最终连接出实物。
小组的各位成员都获得了丰富了理论知识和实践经验,真正让我们学会了利用单片机知识来解决现实生活中实际问题的思维、能力和方法。
相信在我们的不断努力下,今后一定能做出更优秀的作品。
参考文献
[1]叶晓斌.LCD显示器件驱动电路中的电压调整和电压控制器件设计[D].北京:
清华大学,2000.
[2]王志慧,李树华.单片机控制实时时钟的设计与实现[J].内蒙古大学学报(自然科[3]求是科技.单片机典型模块设计实例导航[M].北京:
人民邮电出版社,2005.学版),1999,30(6):
766~768
附件1程序
(1)主程序:
(2)
/*初始化时钟为12:
00:
00*/
ORG0000H
MOV30H,#01H
MOV31H,#02H
MOV32H,#00H
MOV33H,#00H
MOV34H,#00H
MOV35H,#00H
MOVTMOD,#01H;设置定时器工作方式为方式1
XS0:
SETBTR0;启动定时器
MOVTH0,#00H;设置初值
MOVTL0,#00H;设置初值
XS:
MOV40H,#0FEH;设置初值
MOVDPTR,#TAB;将指令表起始地址送入DPTR
MOVP2,40H;送入片选信号
MOVA,30H;装入偏移量
MOVCA,@A+DPTR;查表
MOVP0,A;显示小时的十位
LCALLYS1MS;延时
MOVP0,#0FFH;断开显示
MOVA,40H
RLA
MOV40H,A;片选小时的个位
MOVP2,40H;送入片选信号
MOVA,31H;装入偏移量
ADDA,#0AH;偏移
MOVCA,@A+DPTR;偏移后地址所在寄存器内容存放进累加器中
MOVP0,A;显示小时的个位
LCALLYS1MS;延时
/*以下分别为分钟与秒钟的运行程序,基本与小时的程序相同,故不再全部注释*/
MOVP0,#0FFH
MOVA,40H
RLA
MOV40H,A
MOVP2,40H
MOVA,32H
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#0FFH
MOVA,40H
RLA
MOV40H,A
MOVP2,40H
MOVA,33H
ADDA,#0AH
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#0FFH
MOVA,40H
RLA
MOV40H,A
MOVP2,40H
MOVA,34H
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#0FFH
MOVA,40H
RLA
MOV40H,A
MOVP2,40H
MOVA,35H
MOVCA,@A+DPTR
MOVP0,A
LCALLYS1MS
MOVP0,#0FFH
MOVA,40H
RLA
MOV40H,A
JBTF0,JIA;中断跳转,可得到1s
/*判定按键是否按下*/
JNBP1.0,P100;查询P100键是否按下,P100为清零键
JNBP1.1,P1000;查询P1000键是否按下,P1000为小时加1键
JNBP1.2,P10000;查询P10000键是否按下,P10000为分加1键
AJMPXS
/*P100为全部清零键*/
按键查询:
JNBP1.0,P100;查询P100键是否按下,P100为清零键
JNBP1.1,P1000;查询P1000键是否按下,P1000为小时加1键
JNBP1.2,P10000;查询P10000键是否按下,P10000为分加1键
全部清零:
P100:
MOV30H,#00H
MOV31H,#00H
MOV32H,#00H
MOV33H,#00H
MOV34H,#00H
MOV35H,#00H;30H-35H全部置0
小时加1、分钟加1:
JIA:
CLRTF0;清除中断标志
MOVA,35H
CJNEA,#09H,JIA1;查询是否进位
MOV35H,00H;进位恢复
MOVA,34H;
CJNEA,#05H,JIA10;查询进位
MOV34H,#00H;进位恢复
P10000:
JNBP1.2,P10000;查询按键是否按下
MOVA,33H
CJNEA,#09H,JIA100;调用子程序,调节分钟的个位
MOV33H,#00H
MOVA,32H
CJNEA,#05H,JIA1000;调用子程序,调节分钟的十位
MOV32H,#00H
P1000:
JNBP1.1,P1000;查询按键是否按下
MOVA,31H
CJNEA,#09H,JIA10000;调用子程序,调节小时的个位
MOV31H,#00H
MOVA,30H
CJNEA,#02H,JIA100000;调用子程序,调节小时的十位
MOV30H,#00H
AJMPXS0
(3)子程序:
(4)
JIA100000:
INC30H;调整第一个数字
AJMPXS0
/*限制时钟显示为0点到23点*/
JIA10000:
CJNEA,#03H,JIAJIA
MOVA,30H
CJNEA,#02H,JIAJIA
MOV30H,#00H;超过23点置0
MOV31H,#00H
AJMPXS0
JIAJIA:
INC31H;调整第二个数字
AJMPXS0
JIA1000:
INC32H
AJMPXS0
JIA100:
INC33H
AJMPXS0
JIA10:
INC34H
AJMPXS0
JIA1:
INC35H
AJMPXS0
RET
YS1MS:
MOVR6,#09H;延时1s
YL1:
MOVR7,#19H
DJNZR7,$
DJNZR6,YL1
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
DB040H,079H,024H,030H,019H,012H,002H,078H,000H,010H
END