日历时钟单片机课程设计附汇编程序+方案图+模块图+ddb模拟图Word文档格式.docx
《日历时钟单片机课程设计附汇编程序+方案图+模块图+ddb模拟图Word文档格式.docx》由会员分享,可在线阅读,更多相关《日历时钟单片机课程设计附汇编程序+方案图+模块图+ddb模拟图Word文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
AD6EQU45H;
年
初始化存储单元结束
ORG0000H
LJMPMAIN
ORG000BH;
T0中断入口
LJMPINT
ORG0030H
MAIN:
MOVR0,#AD1
MOVR7,#06H
LOOP0:
MOVA,#00H
MOV@R0,A
INCR0
DJNZR7,LOOP0;
R0~R7清零
MOVAD1,#37H
MOVAD2,#22H
MOVAD3,#0CH
MOVAD4,#08H
MOVAD5,#08H
MOVAD6,#08H;
初始化时间为12:
34:
56,日期为08年08月08日
MOVIE,#82H;
允许T0中断
MOVTMOD,#01H;
T0允许工作
MOVTH0,#4CH
MOVTL0,#00H;
送入计数初值0.05s
MOVR5,#00H
初始化结束
SETBTR0;
T0使能
LOOP:
LCALLTEST;
扫描键盘
CJNEA,#0FEH,NEXTD;
0FEH为1键
LCALLDY1MS
LCALLKEYDONE
NEXTD:
SJMPLOOP;
扫描键盘看是否需要调整日历
DISPLAY:
CJNEA,#0DFH,ERSHISI1;
0DFH为6键
SETBPSW.1;
显示十二小时
LJMPTIMEZHUAN
ERSHISI1:
CJNEA,#0EFH,ERSHISI2;
0EFH为5键
CLRPSW.1;
显示二十四小时
CLRCHANGE2
LJMPTIMEZHUAN
ERSHISI2:
CJNEA,#0CFH,CHANGE;
0CFH为5+6键
CLRPSW.1
SETBCHANGE2;
CHANGE2=1表示把十二表示法转换成二十四小时
CHANGE:
TIMEZHUAN:
LCALLTEST
CJNEA,#7FH,NEXTL;
7FH为8键
SETBPSW.5
LJMPZHUAN1
NEXTL:
CJNEA,#0BFH,ZHUAN1;
0BFH为7键
CLRPSW.5
ZHUAN1:
JBPSW.5,DAY;
PSW.5=0调整时间,为1则调整日期
MOVA,AD1;
调整时间键码分离
MOVB,#0AH
DIVAB
MOVR0,#DBUF
MOV@R0,B
MOVA,AD2
JBPSW.1,TIMEZHUAN1
LJMPTIMEZHUAN2
TIMEZHUAN1:
;
判断时间是否大于12
MOVA,AD3
MOVB,#0CH
SUBBA,B
JCNORMALT
MOVAD3,A
LJMPNORMALT
TIMEZHUAN2:
JNBCHANGE2,NORMALT;
判断是否加12
ADDA,#
CLRCHANGE2
NORMALT:
SJMPDDISP
DAY:
调整日期键码分离
MOVA,AD4
MOVA,AD5
MOVA,AD6
DDISP:
显示,串入并处的方式,上升沿写入
MOVR7,#06H
LOOP2:
MOVR6,#08H
MOVA,@R0
MOVDPTR,#TAB
MOVCA,@A+DPTR;
显示秒
CLRC
LOOP3:
RRCA
CLRCLK
MOVDISP,C
SETBCLK
DJNZR6,LOOP3
DJNZR7,LOOP2
RET
KEYDONE:
人工手动调整日历
AGAINB:
LCALLDY250MS;
防抖250ms
CJNEA,#7FH,NEXTL1;
LJMPZHUAN12
NEXTL1:
CJNEA,#0BFH,ZHUAN12
CLRPSW.5;
以上为扫描键盘并设置PSW.5
ZHUAN12:
JBPSW.5,NEXT6B;
判断调整日期还是时间
CJNEA,#0FDH,NEXTA;
0FDH为2键,如果按键值为FDH则结束
LJMPBACK
NEXTA:
CJNEA,#0FBH,NEXTB;
0FBH为3键
INCAD1;
秒加1
MOVA,AD1
CJNEA,#3CH,AGAINA
MOVAD1,#00H
SJMPAGAINA
NEXTB:
CJNEA,#0F7H,NEXTC;
0F7H为4键
INCAD2;
分加1
MOVAD2,#00H
NEXTC:
CJNEA,#0EFH,AGAINA;
INCAD3;
时加1
CJNEA,#18H,AGAINA
MOVAD3,#00H
NEXTT:
NEXT6B:
CJNEA,#0FDH,NEXTAB;
JIESHUJIAN;
0FDH为2键
NEXTAB:
CJNEA,#0FBH,NEXTBB;
INCAD4;
日加1
CJNEA,#20H,AGAINA
MOVAD4,#01H
NEXTBB:
CJNEA,#0F7H,NEXTCB;
INCAD5;
月加1
CJNEA,#0DH,AGAINA
MOVAD5,#01H
NEXTCB:
INCAD6;
年加1
CJNEA,#64H,AGAINA
MOVAD6,#00H
AGAINA:
LCALLDISPLAY
LJMPAGAINB
BACK:
INT:
INCR5
CJNER5,#20,NEXTS1;
循环20次,每次循环为0.05秒,共0.05*20=1秒
MOVR5,#00H
LCALLDISPLAY;
满一秒后的显示
LJMPMEND
NEXTS1:
LJMPNEXTS;
MEND:
CJNEA,#0AH,LAREMEND
SETBLED;
满十秒关灯,否则继续
LAREMEND:
INCAD1
CJNEA,#3CH,NEXTS2
LJMPMEND1
NEXTS2:
以上为看是否修改秒,满60,分加一否则跳转继续
MEND1:
INCAD2
CJNEA,#3CH,NEXTS3
LJMPMEND2
NEXTS3:
以上为看是否修改分,满60,时加一否则跳转继续
MEND2:
INCAD3
CJNEA,#0Ah,ZAIJIANCHA
AJMPBAOSHI
ZAIJIANCHA:
CJNEA,#0Bh,ZHENGCHANG
BAOSHI:
CLRLED;
以上为两个报时开灯
ZHENGCHANG:
CJNEA,#18H,NEXTS4;
不满二十四小时跳出
LJMPMEND3;
满二十四后跳到清零小时继续加天
NEXTS4:
LJMPNEXTS
MEND3:
MOVAD3,#00H
INCAD4
CJNEA,#02H,JIXUTIAN;
判断是否为二月份
MOVB,#4H
MOVA,B
JZRUNNIAN;
判断是否为闰年
PINGNIAN:
MOVA,AD4;
平年
CJNEA,#1DH,NEXTS
AJMPJIXUYUE
RUNNIAN:
闰年
CJNEA,#1EH,NEXTS
JIXUTIAN:
不为二月,再查看是那个月
CJNEA,#01H,PAN1
LJMPSANSHIYI
PAN1:
CJNEA,#03H,PAN3
PAN3:
CJNEA,#04H,PAN4
LJMPSANSHI
PAN4:
CJNEA,#05H,PAN5
PAN5:
CJNEA,#06H,PAN6
PAN6:
CJNEA,#07H,PAN7
PAN7:
CJNEA,#08H,PAN8
PAN8:
CJNEA,#09H,PAN9
PAN9:
CJNEA,#10H,PAN10
PAN10:
CJNEA,#11H,SANSHIYI
SANSHIYI:
月份:
1,3,5,7,8,10,12
CJNEA,#20H,NEXTS
SANSHI:
月份:
2,4,6,8,11
CJNEA,#1FH,NEXTS
JIXUYUE:
满月后加年
CJNEA,#0DH,NEXTS
INCAD6
CJNEA,#64H,NEXTS;
年满100后清零
NEXTS:
再赋初值
MOVTL0,#00H
RETI
DY250MS:
延迟防抖250ms
MOVR4,#0FAH
LOOP8:
DJNZR4,LOOP8
DY1MS:
延迟防抖1ms
MOVR5,#0B0H
LOOP7:
MOVR7,#2AH
DJNZR7,$
DJNZR5,LOOP7
键盘扫描子程序
TEST:
MOVR7,#08H
SETBP1.7
CLRP1.7;
低电平锁存
NOP
SETBP1.7;
高电平输出
MOVA,#0FFH
AGAIN3:
CLRP2.3
MOVC,P3.5;
把p3.5的状态存入C
SETBP2.3
RLCA;
键盘状态存入A
DJNZR7,AGAIN3;
扫描八个按键
TAB:
DB88H,0EBH,4CH,49H,2BH,19H,18H,0CBH,08H,09H
子程序功能索引:
TEST——扫描键盘
DDISP——显示
NEXTS——重新赋初值
DY1MS——延迟防抖1ms
END