单片机电子时钟报告及汇编代码.docx
- 文档编号:10415938
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:55
- 大小:2.56MB
单片机电子时钟报告及汇编代码.docx
《单片机电子时钟报告及汇编代码.docx》由会员分享,可在线阅读,更多相关《单片机电子时钟报告及汇编代码.docx(55页珍藏版)》请在冰点文库上搜索。
单片机电子时钟报告及汇编代码
单片机电子日历时钟设计
一、设计的目的及其意义
(1)巩固、加深和扩大51系列单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力;
(2)培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力;
(3)对课题设计方案的分析、选择、比较、熟悉用51单片机做系统开发、研制的过程,软硬件设计的方法、内容及步骤。
二、本实验设计的功能
2.1基本功能
1)显示北京时间
2)校准时间;
3)使用汇编语言
4)时、分、秒之间或年、月、日间以小数点分隔;
2.2扩展功能
(1)显示公历日期
(2)校准日期
(3)运动秒表
(4)闹钟功能
三、总体设计方案
本实验使用汇编语言设计,程序的流程图大致如下:
主程序流程图:
显示闹钟子程序流程图:
运动秒表子程序流程图:
校准闹钟,日期和时间的子程序流程图:
四、源程序
ORG0000H
AJMPBEGIN
ORG000BH
LJMPTINTO
YEARHEQU30H;年高位存放地址
YEARLEQU31H;年低位存放地址
MONTHEQU32H;月存放地址
DAYEQU33H;日存放地址
HOUREQU34H;时存放地址
MINEQU35H;分存放地址
SECEQU36H;秒存放地址
MSECEQU37H;10ms存放地址
SECMEQU38H
YDMSECEQU39H;运动秒针存放地址
YDSECMEQU40H
BEEPBITP1^3;蜂鸣器
AHOUREQU41H;闹钟时存放地址
AMINEQU42H;闹钟分存放地址
DEDAEQU43H;5ms计数值
PFOURBITP0.4
PFIVEBITP0.5
PSIXBITP0.6
PSEVENBITP0.7
BEGIN:
CALLINITIAL
LOOP:
CALLSHOW_TIME1;默认为显示时间
CALLRING
CALLSCAN_KEY;键盘扫描
CJNEA,#0EEH,JUDGE1;如果A=EEH,则显示日期年和月
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE1
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
CALLSHOW_DATE2
JUDGE1:
CJNEA,#0DEH,JUDGE2;如果A=DEH,则显示闹钟
SA:
CALLSHOW_ALARM
CALLSCAN_KEY
CJNEA,#0EEH,SA;在显示闹钟时按下EEH键则是返回时间模式
JUDGE2:
CJNEA,#0EDH,JUDGE3;如果A=EDH,则依次调闹钟,日期和时间
CALLADJUST
JUDGE3:
CJNEA,#0DDH,JUDGE4;如果A=DDH,则显示时间分,秒
ST2:
CALLSHOW_TIME2
CALLSCAN_KEY
CJNEA,#0EDH,OTHER;在显示分,秒时按下EDH键则是运动秒表模式
CLRYD:
MOVMSEC,#0
MOVSECM,#0
AJMPST3
OTHER:
CJNEA,#0EEH,ST2;按下EEH键则是返回时间模式
AJMPJUDGE4
ST3:
;运动秒表计时开始
MOVYDMSEC,MSEC
MOVYDSECM,SECM
CALLSHOW_TIME3
CALLSCAN_KEY
CJNEA,#0DEH,ST3;按下DEH键则是停止秒表
STOP:
CALLSHOW_TIME3
CALLSCAN_KEY
CJNEA,#0DDH,OW;按下DDH键,运动秒表则从零从新开始计时
AJMPCLRYD
OW:
CJNEA,#0EDH,OTHERWISE;按下EDH键则继续运动秒表的计时,仍按DEH停止秒表
MOVMSEC,YDMSEC
MOVSECM,YDSECM
AJMPST3
OTHERWISE:
CJNEA,#0EEH,STOP;按下EEH键返回时间模式
JUDGE4:
AJMPLOOP
RING:
;若闹钟时钟为24,则闹钟为关闭状态
MOVA,HOUR
CJNEA,AHOUR,RT
MOVA,MIN
CJNEA,AMIN,RT
CLRBEEP
RT:
RET
SHOW_TIME1:
;显示时间(时和分)
MOVDPTR,#TABLE;数字编码表基址
MOVA,MIN;显示分,min
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#04H;点亮第三个数码管
CALLSHOW;显示数值
CALLDELAY
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#08H;点亮第四个数码管
CALLSHOW
CALLDELAY
MOVA,HOUR;显示小时,hour
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#01H;点亮第一个数码管
CALLSHOW
CALLDELAY
MOVDPTR,#TABLE2
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#02H;点亮第二个数码管
CALLSHOW
CALLDELAY
MOVP0,#00H
RET
SHOW_TIME2:
;显示时间(分和秒)
MOVDPTR,#TABLE;数字编码表基址
MOVA,SEC;显示秒,sec
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#04H;点亮第三个数码管
CALLSHOW
CALLDELAY
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#08H;点亮第四个数码管
CALLSHOW
CALLDELAY
MOVA,MIN;显示分钟min
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#01H;点亮第一个数码管
CALLSHOW
CALLDELAY
MOVDPTR,#TABLE2
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#02H;点亮第二个数码管
CALLSHOW
CALLDELAY
MOVP0,#00H;P0置零,熄灭数码管
RET
SHOW_TIME3:
;显示运动秒针(s和10ms)
MOVDPTR,#TABLE;数字编码表基址
MOVA,YDMSEC;显示10ms
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#04H;点亮第三个数码管
CALLSHOW
CALLDELAY
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#08H;点亮第四个数码管
CALLSHOW
CALLDELAY
MOVA,YDSECM;显示秒
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#01H;点亮第一个数码管
CALLSHOW
CALLDELAY
MOVDPTR,#TABLE2
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#02H;点亮第二个数码管
CALLSHOW
CALLDELAY
MOVP0,#00H;P0置零,熄灭数码管
RET
SHOW_DATE1:
;显示日期(年)
MOVDPTR,#TABLE;数字编码表基址
MOVA,YEARH
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#01H
CALLSHOW
CALLDELAY
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#02H
CALLSHOW
CALLDELAY
MOVA,YEARL
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#04H
CALLSHOW
CALLDELAY
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#08H
CALLSHOW
CALLDELAY
RET
SHOW_DATE2:
;显示日期(月和日)
MOVDPTR,#TABLE;数字编码表基址
MOVA,DAY
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#04H;点亮第3个数码管
CALLSHOW
CALLDELAY
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#08H;点亮第4个数码管
CALLSHOW
CALLDELAY
MOVA,MONTH
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#01H;点亮第1个数码管
CALLSHOW
CALLDELAY
MOVDPTR,#TABLE2
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#02H;点亮第2个数码管
CALLSHOW
CALLDELAY
MOVP0,#00H
RET
ADJUST:
;调整闹钟,日期和时间
ALARM1:
;调整闹钟的小时数
MOVDPTR,#TABLE
MOVA,AHOUR
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#01H;点亮第一个数码管
CALLSHOW
CALLDELAY
MOVDPTR,#TABLE2
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#02H;点亮第二个数码管
CALLSHOW
CALLDELAY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CJNEA,#0DEH,CHECK1;如果A=DEH,则闹钟小时加1
MOVA,AHOUR
CJNEA,#24,INC1
MOVAHOUR,#0
CALLLDELAY
AJMPALARM1
INC1:
INCA
MOVAHOUR,A
CALLLDELAY
AJMPALARM1
CHECK1:
CJNEA,#0EEH,CHECK2;如果A=EEH,则闹钟小时减1
MOVA,AHOUR
CJNEA,#0,DEC1
MOVAHOUR,#24;当闹钟时钟调到24的时候,则相当于关闭闹钟
CALLLDELAY
AJMPALARM1
DEC1:
DECA
MOVAHOUR,A
CALLLDELAY
AL1:
AJMPALARM1
CHECK2:
CJNEA,#0DDH,CHECK3;如果A=DDH,则返回
RET
CHECK3:
CJNEA,#0EDH,AL1;如果A=EDH,则调整闹钟的分钟数
ALARM2:
;调整闹钟的分钟数
MOVDPTR,#TABLE
MOVA,AMIN
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#04H;点亮第三个数码管
CALLSHOW;显示数值
CALLDELAY
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#08H;点亮第四个数码管
CALLSHOW
CALLDELAY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CJNEA,#0DEH,CHECK4;如果A=DEH,则闹钟分钟加1
MOVA,AMIN
CJNEA,#59,INC2
MOVAMIN,#0
CALLLDELAY
AJMPALARM2
INC2:
INCA
MOVAMIN,A
CALLLDELAY
AJMPALARM2
CHECK4:
CJNEA,#0EEH,CHECK5;如果A=EEH,则闹钟小时减1
MOVA,AMIN
CJNEA,#0,DEC2
MOVAMIN,#59
CALLLDELAY
AJMPALARM2
DEC2:
DECA
MOVAMIN,A
CALLLDELAY
AL2:
AJMPALARM2
CHECK5:
CJNEA,#0DDH,CHECK6;如果A=DDH,则返回
RET
CHECK6:
CJNEA,#0EDH,AL2;如果A=EDH,则调整日期(年)
DATE1:
;调整年的高位
MOVDPTR,#TABLE
MOVA,YEARH
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#01H;点亮第一个数码管
CALLSHOW
CALLDELAY
MOVA,B
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#02H;点亮第二个数码管
CALLSHOW
CALLDELAY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CALLSCAN_KEY
CJNEA,#0DEH,CHECKYH1;如果A=DEH,则日期年高位加1
MOVA,YEARH
CJNEA,#99,INCYRH1
MOVYEARH,#0
CALLLDELAY
AJMPDATE1
INCYRH1:
INCA
MOVYEARH,A
CALLLDELAY
AJMPDATE1
CHECKYH1:
CJNEA,#0EEH,CHECKYH2;如果A=EEH,则日期年高位减1
MOVA,YEARH
CJNEA,#0,DECYRH1
MOVYEARH,#99
CALLLDELAY
AD1:
AJMPDATE1
DECYRH1:
DECA
MOVYEARH,A
CALLLDELAY
AJMPDATE1
CHECKYH2:
CJNEA,#0DDH,CHECKYH3;如果A=DDH,则返回
RET
CHECKYH3:
CJNEA,#0EDH,AD1;如果A=EDH,则调整日期年的低位
DATE2:
;调整年的低位
MOVDPTR,#TABLE
MOVA,YEARL
MOVB,#10
DIVAB
MOVCA,@A+DPTR
ANLP0,#0F0H
ORLP0,#04H;点亮第3个数码管
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 电子 时钟 报告 汇编 代码