单片机数字钟.docx
- 文档编号:16054447
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:21
- 大小:327.94KB
单片机数字钟.docx
《单片机数字钟.docx》由会员分享,可在线阅读,更多相关《单片机数字钟.docx(21页珍藏版)》请在冰点文库上搜索。
单片机数字钟
电子时钟
摘 要:
本文对电子时钟走时、调时、日期显示及调整和闹钟定时及调整进行设计并实现其功能。
首先设计总体的系统方案,针对要实现的功能,采用AT89C51单片机进行设计,再画各个模块的流程图并编写相应的子程序。
通过Proteus软件绘制电路图,Keil软件进行编程并调试,然后将它们结合起来进行仿真并实现按键控制。
接下来根据电路图用Protel软件绘制原理图并生成PCB板。
关键词:
电子时钟 按键控制 单片机
Abstract:
Inthispaper,thetonewhenelectronicclock,andtheadjustmentdateisdisplayedandalarmclockregularlyandadjustmentofthedesignandrealizeitsfunction.Thedesignoftheoverallsystemsolutionfirst,accordingtothefunctiontorealize,AT89C51microcontrollertocarryonthedesign,draweachmoduleoftheflowchartsandwritethecorrespondingprocedure.ThroughtheProteussoftwarerenderingacircuitdiagram,Keilsoftwareprogrammingandcommissioning,andthenwilltheycombineandrealizethebuttoncontrol.AccordingtodesignthenextwithProtelsoftwarerenderingprinciplediagramandproducePCBboard.Keywords:
Electronicclock Buttoncontrol Single-chipmicrocomputer
0引言
本组设计的题目是电子时钟,主要要求为:
1)用六个7段LED数码管为显示系统,设计时钟;
2)可以分别设定小时、分钟和秒,复位后时间为00:
00:
00;
3)秒钟复位功能,秒复位键按下时,秒回到00;
4)日期、时间切换功能*;
5)使用LCD取代LED作为显示设备*;
6)实现闹钟功能*。
课程设计的意义在于让我们将理论与实践相结合。
培养我们综合运用电子课程中单片机等的理论知识解决实际性问题的能力。
在电路图设计方面我们用Proteus绘制电路图,用Protel设计原理图并生成PCB板,同时在软件编程、排错调试等方面得到较全面的锻炼和提高,为今后能够独立完成某些单片机应用系统的开发和设计打下一个坚实的基础。
1系统方案
AT89C51芯片
图1 设计原理框图
使用11.0592M晶振,故用单片机定时器中断原理实现数码管动态50ms循环扫描,20次后为1S,初值为4C00H。
同时完成计数功能,并经过多次中断产生“秒”信号。
可控制按键实现时、分加一功能。
考虑到设计硬件简单原则,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点,故本设计采用此方案。
2系统硬件电路
闹铃
图2 系统原理框图
闹钟部分电路:
图3闹钟电路图
工作原理:
预先设定闹铃时间,当时钟走到闹铃时间时,系统内部开始驱动扬声器且发出响声。
复位电路:
图4复位电路图
工作原理:
手动控制复位,当按下复位按键时,时间变为初值000000。
模式及按键电路:
图5按键控制电路
工作原理:
S键为模式键,通过该键实现走时、调时、日期显示及调整和闹铃定时及调整的相互转化。
S1、S2为功能键,用于时间及日期和闹铃的设置。
当调整时间和闹铃设置时,S1调分,S2调时;当调整日期时,S1调日,S2调月。
3系统软件设计
1)主流程图:
等待定时器中断
图6主流程图
流程图说明
初始化:
包括定时器赋初值,初始化各内存单元。
开定时器中断,开CPU中断,送段码表头地址给DPTR。
2)显示子程序流程图
恢复现场
图7显示子程序流程图
3)按键扫描子程序
模式查询子程序
图8按键扫描子程序流程图
4)模式查询子程序
闹钟显示及调整模式设置
关闹钟,清键值
图9模式查询子程序流程图
图10走时模式流程图
日期显示及调整子程序与闹钟显示及调整子程序流程图与调时模式子程序大同小异。
a)日期显示及调整子程序送给R3/R4/R5的数据为日/月/年,按功能键1日期加1,按功能键2月份加1。
至于数值的合法性在程序里有具体的判断。
b)闹钟显示及调整子程序送给R3/R4/R5的数据为闹钟开关值/闹钟分/闹钟时,按功能键1闹钟分加1,按功能键2闹钟时加1。
至于数值的合法性在程序里有具体的判断。
小时数值加1,键值清零
图11调时模式流程图
返回
5)闹钟查询子程序
图12闹钟查询子程序流程图
6)定时器中断子程序
N
数值合法性在程序中处理与判断,流程图中不表现。
图13定时器中断子程序流程图
4系统调试与结果分析
Keil软件调试单片机程序的时候,编译通过并不代表程序是正确的。
编译通过只能说明程序没有语法上的错误。
进行软件仿真或者下载到开发板上进行调试,经常会出现各种各样的错误。
许多超出预期效果的现象往往是一些微小错误引起的。
例如没有现场保护跟恢复现场等,所以养成良好的编程习惯也很重要。
又如有些想达成某些功能而添加的语句,实际上确一点效果也没有。
举个编程中的小问题:
当有按键按下时,为了防止按键跳转,设置软件防抖程序,利用中断控制按键防抖。
仿真结果:
1、时间仿真结果(时间设置为:
1时1分)
图14时间仿真结果
2、日期仿真结果(日期设置为12年6月24日)
图15日期仿真结果
3、闹钟仿真结果(时间设置为1时2分:
注意观察蜂鸣器高低电平变化)
图16闹钟仿真结果
5结论
硬件设计部分:
首先要通过计算与参考资料等决定参数。
而后通过仿真软件Protues和Keil调试,确定参数无误后再开始用Protel画原理图,进而生成PCB板。
软件设计部分:
设计软件首先要考虑要做的功能,确定出合理的算法。
合理的算法不仅要可以实现功能,而且在添加功能的时候要方便灵活。
有的人为了实现某种功能用了各种各样的方法来实现,结果程序结构无法实现,当想要添加功能或者修改其他功能的时候,将修改程序大部分结构,也就是说要破坏程序现有的结构。
在设计过程中我们认识到态度要积极,不要认为很简单就不紧不慢。
很多东西并不是自己设想的那么顺利,有时候一个小问题可以花上你半天甚至一天的时间。
在编写程序过程中我们遇到了许多问题,比如设计闹钟子程序的时候就花了很长时间,最后在我们共同的努力下才完成了对其的设计。
同时,我们也认识到了团队合作很重要,只有大家共同努力才能完成对其的设计。
也让我们明白了对于自己不能太过于自信,态度决定一切。
参考文献:
[1]杨欣,王玉凤,刘湘黔,张延强,51单片机应用实例详解,清华大学出版社
[2]洪志刚,杜维玲,井娥林,单片机应用系统设计,机械工业出版社
[3]潘永雄,新编单片机原理及应用,西安电子科技大学出版社
[4]胡启明,程钢,51单片机应用开发从入门到精通,人民邮电出版社
[5]王守中,51单片机开发入门与典型实例,人民邮电出版社
附录一:
protel原理图
附录二:
protelPCB板图
附录三:
protues电路图
附录四:
程序源代码
YEAR_L EQU 31H ;年份的低位
MONTH EQU 32H ;月份
DAY EQU 33H ;日期
DAY_MAX EQU 34H ;每月最大天数
HOUR EQU 35H ;时钟
MINUTE EQU 36H ;分钟
SECOND EQU 37H ;秒钟
BOTTON EQU 38H ;键值
FLAG EQU 39H ;模式标记/0走时/1调时/2日期显示及调整/3闹钟调整及闹钟开关/
BEEPH EQU 40H ;闹钟时钟
BEEPM EQU 41H ;闹钟分钟
ENBEEP EQU 42H ;闹钟开关
ORG 0000H
AJMP MAIN
ORG0003H
AJMP INTZ
ORG 001BH
AJMP SERVE
MAIN:
CLRA
MOVR2,#14H
MOV TMOD,#10H ;设为模式1,定时器1
MOV MONTH,#06 ;月份赋6
MOVDAY,#24H ;日期赋24
MOVYEAR_L,#12H ;年份赋12年
MOV HOUR,A ;小时清零
MOV MINUTE,A ;分钟清零
MOV SECOND,A ;秒钟清零
MOV FLAG,A ;初始化模式
CLR P3.7 ;开蜂鸣器
MOV ENBEEP,#01H ;闹钟默认开
MOVBEEPH,#00H ;闹钟初值00:
00:
00
MOVBEEPM,#00H
MOV TH1,#4CH ;赋定时初值
MOV TL1,#00H
SETB ET1 ;开中断
SETB IT0
SETB EX0
SETB EA
SETB TR1 ;启动T1
MOV DPTR,#TAB ;送段码表头
DIS:
LCALL DISPLAY ;重复调用显示子程序
LCALL NEXT ;查询当前模式
LCALL BEEP ;查询闹钟开关
SJMP DIS
SERVE:
PUSH PSW ;保护现场
PUSH ACC
MOV TH1,#4CH
MOV TL1,#00H ;重新赋计数初值
DJNZ R2,BRIDGE ;未满20次,返回
AJMP BREAK1
BRIDGE:
LJMP RETURN
BREAK1:
MOV R2,#14H ;重置中断次数
MOV A,#01H ;秒加1
ADD A,SECOND
DA A ;转为BCD码
MOV SECOND,A
CJNE A,#60H,BRIDGE;未满60秒,返回
MOV SECOND,#00H ;秒清零
MOV A,#01H ;分加1
ADD A,MINUTE
DA A ;转为BCD码
MOV MINUTE,A
CJNE A,#60H,RETURN ;未满60分,返回
MOV MINUTE,#00H ;分钟清零
MOV A,#01H ;时加1
ADD A,HOUR
DA A ;转为BCD码
MOV HOUR,A
CJNE A,#24H,RETURN ;未满24小时,返回
MOV HOUR,#00H ;小时清零
MOV A,MONTH
DA A ;转为BCD码
CJNE A,#1H,JUDGE2;不是1月,转跳
AJMP SETDAT_MAX1
JUDGE2:
CJNE A,#3H,JUDGE3 ;不是3月,转跳
AJMP SETDAT_MAX1
JUDGE3:
CJNE A,#5H,JUDGE4 ;不是5月,转跳
AJMP SETDAT_MAX1
JUDGE4:
CJNE A,#7H,JUDGE5 ;不是7月,转跳
AJMP SETDAT_MAX1
JUDGE5 :
CJNE A,#8H,JUDGE6 ;不是8月,转跳
AJMP SETDAT_MAX1
JUDGE6:
CJNE A,#10H,JUDGE7 ;不是10月,转跳
AJMP SETDAT_MAX1
JUDGE7:
CJNE A,#12H,SETDAT_MAX2;不是12月,转跳
SETDAT_MAX1:
MOV DAY_MAX,#32H ;天上限为31
AJMP CONTINUE ;返回
SETDAT_MAX2:
CJNE A,#2H,SETDAT_MAX3 ;不是2月,跳转
MOV DAY_MAX,#29H ;2月,天上限28
SETDAT_MAX3:
MOV DAY_MAX,#31H ;天上限为30
CONTINUE:
MOV A,#01H ;天加1
ADD A,DAY
DA A ;转为BCD码
MOV DAY,A
CJNE A,DAY_MAX,RETURN ;未满天数上限,返回
MOV DAY,#01H ;天数置1
MOV A,#01H ;月份加1
ADD A,MONTH
DA A ;转为BCD码
MOV MONTH,A
CJNE A,#13,RETURN ;未满12月,返回
MOV MONTH,#01H ;月份置1
MOV A,#01H ;年低位加1
ADD A,YEAR_L
DA A ;转为BCD码
MOV YEAR_L,A
CJNE A,#99,RETURN;未满99年,返回
MOV YEAR_L,#00H ;年低位清零
RETURN:
POP ACC
POP PSW ;恢复现场
RETI ;中断返回
;========显示子程序==========
DISPLAY:
PUSH PSW
PUSH ACC
MOV A,R3
ANL A,#0FH
MOVC A,@A+DPTR
MOV P2,#0DFH ;位选P2.5口显示秒低位
MOV P0,A ;段选显示数字
LCALL DELAY
MOV A,R3
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P2,#0EFH ;位选P2.4口显示秒高位
MOV P0,A
LCALL DELAY
MOV A,R4
ANL A,#0FH
MOVC A,@A+DPTR
MOV P2,#0F7H ;位选P2.3口显示分低位
MOV P0,A
LCALL DELAY
MOV A,R4
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P2,#0FBH ;位选P2.2口显示分低位
MOV P0,A
LCALL DELAY
MOV A,R5
ANL A,#0FH
MOVC A,@A+DPTR
MOV P2,#0FDH ;位选P2.1口显示时低位
MOV P0,A
LCALL DELAY
MOV A,R5
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P2,#0FEH ;位选P2.0口显示时低位
MOV P0,A
LCALL DELAY
POP ACC
POP PSW
RET
;===========按键中断==========
INTZ:
KEY:
MOV P1,#0FFH
MOV A,P1
CPL A
ANL A,#07H ;判断是否有按键按下
JNZ KEY1
RETI
KEY1:
MOV A,P1
CPL A
ANL A,#07H
JNZ KEY2
RETI
KEY2:
MOV BOTTON,A
JB ACC.0,SETMODE
RETI
SETMODE:
MOV A,FLAG
INC A
MOV FLAG,A
CJNE A,#04H,I1
MOV FLAG,#00H
AJMPEXIT
I1:
LCALLNEXT
EXIT:
RETI
;==========模式查询程序======
NEXT:
MOV A,FLAG
CJNE A,#00H,SETTIME
SETB TR1
MOV R3,SECOND
MOV R4,MINUTE
MOV R5,HOUR
MOV A,BOTTON
JB ACC.1,STOP
JB ACC.2,STOP
RET
;=========闹钟开关/查询===========
BEEP:
MOV A,FLAG
CJNE A,#00H,STOP
MOV A,ENBEEP
CJNE A,#01H,STOP
BEEPLAY:
MOV A,HOUR
CJNE A,BEEPH,STOP
MOV A,MINUTE
CJNE A,BEEPM,STOP
CLR P3.7 ;闹钟开启
RET
STOP:
SETB P3.7 ;闹钟关闭
MOV BOTTON,#00H
RET
;=============调时程序=============
SETTIME:
CLR TR1
CJNE A,#01H,SETDATE
MOV R3,SECOND
MOV R4,MINUTE
MOV R5,HOUR
MOVA,BOTTON
JB ACC.1,MIN
JB ACC.2,HOR
RET
MIN:
MOV A,#01H ;分加1
ADD A,MINUTE
DA A
MOV MINUTE,A
CJNE A,#60H,BACK
MOV MINUTE,#00H
MOV BOTTON,#00H
RET
HOR:
MOV A,#01H ;时加1
ADD A,HOUR
DA A
MOV HOUR,A
CJNE A,#24H,BACK
MOV HOUR,#00H
MOV BOTTON,#00H
RET
BACK:
MOV BOTTON,#00H
RET
;========日期显示及调整子程序=======
SETDATE:
CJNE A,#02H,SETBEEP
MOV R3,DAY
MOV R4,MONTH
MOV R5,YEAR_L
MOV A,BOTTON
JB ACC.1,DAYS
JB ACC.2,MO
RET
DAYS:
MOV A,MONTH
DA A ;转为BCD码
CJNE A,#1H,JUDGEA ;不是1月,转跳
AJMP SETDAT_MAXA
JUDGEA:
CJNE A,#3H,JUDGEB ;不是3月,转跳
AJMP SETDAT_MAXA
JUDGEB:
CJNE A,#5H,JUDGEC ;不是5月,转跳
AJMP SETDAT_MAXA
JUDGEC:
CJNE A,#7H,JUDGED ;不是7月,转跳
AJMP SETDAT_MAXA
JUDGED :
CJNE A,#8H,JUDGEE ;不是8月,转跳
AJMP SETDAT_MAXA
JUDGEE:
CJNE A,#10H,JUDGEF ;不是10月,转跳
AJMP SETDAT_MAXA
JUDGEF:
CJNE A,#12H,SETDAT_MAXB ;不是12月,转跳
SETDAT_MAXA:
MOV DAY_MAX,#32H ;天上限为31
AJMP CONTINUE1 ;返回
SETDAT_MAXB:
CJNE A,#2H,SETDAT_MAXC ;不是2月,转跳
MOV DAY_MAX,#29H
RET
SETDAT_MAXC:
MOV DAY_MAX,#31H ;天上限为30
CONTINUE1:
MOV A,#01H ;天加1
ADD A,DAY
DA A ;转为BCD码
MOV DAY,A
CJNE A,DAY_MAX,BACK1
MOV DAY,#01H
MOV BOTTON,#00H
RET
MO:
MOV A,#01H
ADD A,MONTH
DA A
MOV MONTH,A
CJNE A,#13H,BACK1
MOV MO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数字