单片机数字钟.docx
- 文档编号:9015213
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:26
- 大小:678.76KB
单片机数字钟.docx
《单片机数字钟.docx》由会员分享,可在线阅读,更多相关《单片机数字钟.docx(26页珍藏版)》请在冰豆网上搜索。
单片机数字钟
电子时钟
摘要:
本文对电子时钟走时、调时、日期显示及调整和闹钟定时及调整进行设计并实现其功能。
首先设计总体的系统方案,针对要实现的功能,采用AT89C51单片机进行设计,再画各个模块的流程图并编写相应的子程序。
通过Proteus软件绘制电路图,Keil软件进行编程并调试,然后将它们结合起来进行仿真并实现按键控制。
接下来根据电路图用Protel软件绘制原理图并生成PCB板。
关键词:
电子时钟按键控制单片机
Abstract:
Inthispaper,thetonewhenelectronicclock,andtheadjustmentdateisdisplayedandalarmclockregularlyandadjustmentofthedesignandrealizeitsfunction.Thedesignoftheoverallsystemsolutionfirst,accordingtothefunctiontorealize,AT89C51microcontrollertocarryonthedesign,draweachmoduleoftheflowchartsandwritethecorrespondingprocedure.ThroughtheProteussoftwarerenderingacircuitdiagram,Keilsoftwareprogrammingandcommissioning,andthenwilltheycombineandrealizethebuttoncontrol.AccordingtodesignthenextwithProtelsoftwarerenderingprinciplediagramandproducePCBboard.Keywords:
ElectronicclockButtoncontrolSingle-chipmicrocomputer
0引言
本组设计的题目是电子时钟,主要要求为:
1)用六个7段LED数码管为显示系统,设计时钟;
2)可以分别设定小时、分钟和秒,复位后时间为00:
00:
00;
3)秒钟复位功能,秒复位键按下时,秒回到00;
4)日期、时间切换功能*;
5)使用LCD取代LED作为显示设备*;
6)实现闹钟功能*。
课程设计的意义在于让我们将理论与实践相结合。
培养我们综合运用电子课程中单片机等的理论知识解决实际性问题的能力。
在电路图设计方面我们用Proteus绘制电路图,用Protel设计原理图并生成PCB板,同时在软件编程、排错调试等方面得到较全面的锻炼和提高,为今后能够独立完成某些单片机应用系统的开发和设计打下一个坚实的基础。
1系统方案
图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。
至于数值的合法性在程序里有具体的判断。
图11调时模式流程图
5)闹钟查询子程序
图12闹钟查询子程序流程图
6)定时器中断子程序
数值合法性在程序中处理与判断,流程图中不表现。
图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_LEQU31H;年份的低位
MONTHEQU32H;月份
DAYEQU33H;日期
DAY_MAXEQU34H;每月最大天数
HOUREQU35H;时钟
MINUTEEQU36H;分钟
SECONDEQU37H;秒钟
BOTTONEQU38H;键值
FLAGEQU39H;模式标记/0走时/1调时/2日期显示及调整/3闹钟调整及闹钟开关/
BEEPHEQU40H;闹钟时钟
BEEPMEQU41H;闹钟分钟
ENBEEPEQU42H;闹钟开关
ORG0000H
AJMPMAIN
ORG0003H
AJMPINTZ
ORG001BH
AJMPSERVE
MAIN:
CLRA
MOVR2,#14H
MOVTMOD,#10H;设为模式1,定时器1
MOVMONTH,#06;月份赋6
MOVDAY,#24H;日期赋24
MOVYEAR_L,#12H;年份赋12年
MOVHOUR,A;小时清零
MOVMINUTE,A;分钟清零
MOVSECOND,A;秒钟清零
MOVFLAG,A;初始化模式
CLRP3.7;开蜂鸣器
MOVENBEEP,#01H;闹钟默认开
MOVBEEPH,#00H;闹钟初值00:
00:
00
MOVBEEPM,#00H
MOVTH1,#4CH;赋定时初值
MOVTL1,#00H
SETBET1;开中断
SETBIT0
SETBEX0
SETBEA
SETBTR1;启动T1
MOVDPTR,#TAB;送段码表头
DIS:
LCALLDISPLAY;重复调用显示子程序
LCALLNEXT;查询当前模式
LCALLBEEP;查询闹钟开关
SJMPDIS
SERVE:
PUSHPSW;保护现场
PUSHACC
MOVTH1,#4CH
MOVTL1,#00H;重新赋计数初值
DJNZR2,BRIDGE;未满20次,返回
AJMPBREAK1
BRIDGE:
LJMPRETURN
BREAK1:
MOVR2,#14H;重置中断次数
MOVA,#01H;秒加1
ADDA,SECOND
DAA;转为BCD码
MOVSECOND,A
CJNEA,#60H,BRIDGE;未满60秒,返回
MOVSECOND,#00H;秒清零
MOVA,#01H;分加1
ADDA,MINUTE
DAA;转为BCD码
MOVMINUTE,A
CJNEA,#60H,RETURN;未满60分,返回
MOVMINUTE,#00H;分钟清零
MOVA,#01H;时加1
ADDA,HOUR
DAA;转为BCD码
MOVHOUR,A
CJNEA,#24H,RETURN;未满24小时,返回
MOVHOUR,#00H;小时清零
MOVA,MONTH
DAA;转为BCD码
CJNEA,#1H,JUDGE2;不是1月,转跳
AJMPSETDAT_MAX1
JUDGE2:
CJNEA,#3H,JUDGE3;不是3月,转跳
AJMPSETDAT_MAX1
JUDGE3:
CJNEA,#5H,JUDGE4;不是5月,转跳
AJMPSETDAT_MAX1
JUDGE4:
CJNEA,#7H,JUDGE5;不是7月,转跳
AJMPSETDAT_MAX1
JUDGE5:
CJNEA,#8H,JUDGE6;不是8月,转跳
AJMPSETDAT_MAX1
JUDGE6:
CJNEA,#10H,JUDGE7;不是10月,转跳
AJMPSETDAT_MAX1
JUDGE7:
CJNEA,#12H,SETDAT_MAX2;不是12月,转跳
SETDAT_MAX1:
MOVDAY_MAX,#32H;天上限为31
AJMPCONTINUE;返回
SETDAT_MAX2:
CJNEA,#2H,SETDAT_MAX3;不是2月,跳转
MOVDAY_MAX,#29H;2月,天上限28
SETDAT_MAX3:
MOVDAY_MAX,#31H;天上限为30
CONTINUE:
MOVA,#01H;天加1
ADDA,DAY
DAA;转为BCD码
MOVDAY,A
CJNEA,DAY_MAX,RETURN;未满天数上限,返回
MOVDAY,#01H;天数置1
MOVA,#01H;月份加1
ADDA,MONTH
DAA;转为BCD码
MOVMONTH,A
CJNEA,#13,RETURN;未满12月,返回
MOVMONTH,#01H;月份置1
MOVA,#01H;年低位加1
ADDA,YEAR_L
DAA;转为BCD码
MOVYEAR_L,A
CJNEA,#99,RETURN;未满99年,返回
MOVYEAR_L,#00H;年低位清零
RETURN:
POPACC
POPPSW;恢复现场
RETI;中断返回
;========显示子程序==========
DISPLAY:
PUSHPSW
PUSHACC
MOVA,R3
ANLA,#0FH
MOVCA,@A+DPTR
MOVP2,#0DFH;位选P2.5口显示秒低位
MOVP0,A;段选显示数字
LCALLDELAY
MOVA,R3
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR
MOVP2,#0EFH;位选P2.4口显示秒高位
MOVP0,A
LCALLDELAY
MOVA,R4
ANLA,#0FH
MOVCA,@A+DPTR
MOVP2,#0F7H;位选P2.3口显示分低位
MOVP0,A
LCALLDELAY
MOVA,R4
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR
MOVP2,#0FBH;位选P2.2口显示分低位
MOVP0,A
LCALLDELAY
MOVA,R5
ANLA,#0FH
MOVCA,@A+DPTR
MOVP2,#0FDH;位选P2.1口显示时低位
MOVP0,A
LCALLDELAY
MOVA,R5
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR
MOVP2,#0FEH;位选P2.0口显示时低位
MOVP0,A
LCALLDELAY
POPACC
POPPSW
RET
;===========按键中断==========
INTZ:
KEY:
MOVP1,#0FFH
MOVA,P1
CPLA
ANLA,#07H;判断是否有按键按下
JNZKEY1
RETI
KEY1:
MOVA,P1
CPLA
ANLA,#07H
JNZKEY2
RETI
KEY2:
MOVBOTTON,A
JBACC.0,SETMODE
RETI
SETMODE:
MOVA,FLAG
INCA
MOVFLAG,A
CJNEA,#04H,I1
MOVFLAG,#00H
AJMPEXIT
I1:
LCALLNEXT
EXIT:
RETI
;==========模式查询程序======
NEXT:
MOVA,FLAG
CJNEA,#00H,SETTIME
SETBTR1
MOVR3,SECOND
MOVR4,MINUTE
MOVR5,HOUR
MOVA,BOTTON
JBACC.1,STOP
JBACC.2,STOP
RET
;=========闹钟开关/查询===========
BEEP:
MOVA,FLAG
CJNEA,#00H,STOP
MOVA,ENBEEP
CJNEA,#01H,STOP
BEEPLAY:
MOVA,HOUR
CJNEA,BEEPH,STOP
MOVA,MINUTE
CJNEA,BEEPM,STOP
CLRP3.7;闹钟开启
RET
STOP:
SETBP3.7;闹钟关闭
MOVBOTTON,#00H
RET
;=============调时程序=============
SETTIME:
CLRTR1
CJNEA,#01H,SETDATE
MOVR3,SECOND
MOVR4,MINUTE
MOVR5,HOUR
MOVA,BOTTON
JBACC.1,MIN
JBACC.2,HOR
RET
MIN:
MOVA,#01H;分加1
ADDA,MINUTE
DAA
MOVMINUTE,A
CJNEA,#60H,BACK
MOVMINUTE,#00H
MOVBOTTON,#00H
RET
HOR:
MOVA,#01H;时加1
ADDA,HOUR
DAA
MOVHOUR,A
CJNEA,#24H,BACK
MOVHOUR,#00H
MOVBOTTON,#00H
RET
BACK:
MOVBOTTON,#00H
RET
;========日期显示及调整子程序=======
SETDATE:
CJNEA,#02H,SETBEEP
MOVR3,DAY
MOVR4,MONTH
MOVR5,YEAR_L
MOVA,BOTTON
JBACC.1,DAYS
JBACC.2,MO
RET
DAYS:
MOVA,MONTH
DAA;转为BCD码
CJNEA,#1H,JUDGEA;不是1月,转跳
AJMPSETDAT_MAXA
JUDGEA:
CJNEA,#3H,JUDGEB;不是3月,转跳
AJMPSETDAT_MAXA
JUDGEB:
CJNEA,#5H,JUDGEC;不是5月,转跳
AJMPSETDAT_MAXA
JUDGEC:
CJNEA,#7H,JUDGED;不是7月,转跳
AJMPSETDAT_MAXA
JUDGED:
CJNEA,#8H,JUDGEE;不是8月,转跳
AJMPSETDAT_MAXA
JUDGEE:
CJNEA,#10H,JUDGEF;不是10月,转跳
AJMPSETDAT_MAXA
JUDGEF:
CJNEA,#12H,SETDAT_MAXB;不是12月,转跳
SETDAT_MAXA:
MOVDAY_MAX,#32H;天上限为31
AJMPCONTINUE1;返回
SETDAT_MAXB:
CJNEA,#2H,SETDAT_MAXC;不是2月,转跳
MOVDAY_MAX,#29H
RET
SETDAT_MAXC:
MOVDAY_MAX,#31H;天上限为30
CONTINUE1:
MOVA,#01H;天加1
ADDA,DAY
DAA;转为BCD码
MOVDAY,A
CJNEA,DAY_MAX,BACK1
MOVDAY,#01H
MOVBOTTON,#00H
RET
MO:
MOVA,#01H
ADDA,MONTH
DAA
MOVMONTH,A
CJNEA,#13H,BACK1
MOVMONTH,#01H
BACK1:
MOVBOTTON,#00H
RET
;============闹钟调整程序===========
SETBEEP:
MOVR3,ENBEEP
MOVR4,BEEPM
MOVR5,BEEPH
MOVA,BOTTON
JBACC.1,SETM
JBACC.2,SETH
RET
SETM:
MOVA,#01H;闹钟分加1
ADDA,BEEPM
DAA
MOVBEEPM,A
CJNEA,#60H,BACK2
MOVBEEPM,#00H
SETH:
MOVA,#01H;闹钟时加1
ADDA,BEEPH
DAA
MOVBEEPH,A
CJNEA,#24H,BACK2
MOVBEEPH,#00H
BACK2:
MOVBOTTON,#00H
RET
;============延时子程序=============
DELAY:
MOVR0,#06H
DELAY1:
MOVR1,#0B2H
DJNZR1,$
DJNZR0,DELAY1
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H;段码
DB92H,82H,0F8H,80H,90H
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数字
![提示](https://static.bdocx.com/images/bang_tan.gif)