最新修订版日历时钟单片机程序汇编语言.docx
- 文档编号:5930746
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:14
- 大小:17.97KB
最新修订版日历时钟单片机程序汇编语言.docx
《最新修订版日历时钟单片机程序汇编语言.docx》由会员分享,可在线阅读,更多相关《最新修订版日历时钟单片机程序汇编语言.docx(14页珍藏版)》请在冰豆网上搜索。
最新修订版日历时钟单片机程序汇编语言
SECEQU50H;设置变量缓冲区
MINEQU51H
HOUREQU52H
DAYEQU53H
YUEEQU54H
YEAREQU55H
ORG0000H
LJMPMAIN
ORG000BH
LJMPT0_INT
ORG0030H
MAIN:
MOVSEC,#56;秒时间初始化
MOVMIN,#59;分
MOVHOUR,#23;时
MOVDAY,#01H;日
MOVYUE,#01H;月
MOVYEAR,#13;年
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVR7,#20;定时器循环次数
MOVIE,#82H不懂不懂
SETBTR0;开启定时器T0
MOVSP,#90H
CLRPSW.1;初始化标调整志位
SETBP1.2;闹铃标志
MOV35H,#0;显示日期和时间的标志
MOV36H,#0;日历闹钟0和1的标志
LOOOP:
LCALLKINP;扫描键盘
JBPSW.5,DOWN4
LCALLKINP1
DOWN4:
LCALLLOOP6
MOVR0,#65H
LCALLDISP
DOWN11:
LJMPLOOOP
SJMP$
KINP1:
CJNEA,#05H,DS0;判断键值是否为5号键;若是,则实现调整LCALLSJTZ
LCALLSJTZ
LJMPDOWN11
DS2:
LCALLKINP
JBPSW.5,DOWN
LCALLKINP1
DS0:
CJNEA,#06H,QH1;判断键值是否为6号键,闹钟;若是,则实现调整
JNBP1.2,DOWN6
INC36H
MOVA,36H
CJNEA,#1,DS01
LJMPDS00
DS01:
CJNEA,#2,DS00
MOVA,#0
MOV36H,A;36H=1闹钟器0
LCALLNAOZ1;36H=0闹钟器1
LCALLLOOP6
MOVR0,#65H
LCALLDISP
LJMPDS2
DOWN6:
SETBP1.2
LJMPDOWN11
DS00:
LCALLNAOZ0
LCALLLOOP6
MOVR0,#65H
LCALLDISP
LJMPDS2
QH:
LCALLKINP
JBPSW.5,DOWN
LCALLKINP1
QH1:
CJNEA,#07H,DOWN;判断键值是否为7号键,切换
MOVA,35H
CPLA;若是,则切换显示,年月日与时分秒切换
MOV35H,A
DOWN:
MOVA,35H
JZSHIJIAN
LCALLLOOP6
MOVR0,#6BH
LCALLDISP
LJMPQH
SHIJIAN:
LCALLLOOP6
MOVR0,#65H
LCALLDISP
BEGIN2:
RET
;判断是否到闹钟时间子程序
PD:
PUSHACC;判断是否到第一个闹钟时间
MOVA,MIN
CJNEA,42H,DOWN1
MOVA,HOUR
CJNEA,43H,DOWN1
CLRP1.2;若到第一个闹钟时间,则亮灯
DOWN1:
MOVA,MIN;判断是否到第二个闹钟时间
CJNEA,44H,DOWN3
MOVA,HOUR
CJNEA,45H,DOWN3
CLRP1.2;若到第二个闹钟时间,则亮灯
DOWN3:
POPACC
RET
;调整子程序
SJTZ:
PUSHPSW
PUSHACC
SJTZ1:
CPLPSW.1;取反标志位
SJTZ2:
JBPSW.1,TS;标志位为1,调时
LCALLTSCX1;标志位为0,调整日期
MOVR0,#6BH
LCALLDISP
LJMPSJTZ2
TS:
CLRTR0
LCALLTSCX0
MOVR0,#65H
LCALLDISP
M8:
POPACC
POPPSW
RET
TSCX0:
LCALLLOOP6;调整时间
MOVR0,#65H
LCALLDISP
LCALLKINP
CJNEA,#03H,M;判断是否为3号键
MOVR0,#SEC;键值为01,即1号键调整秒
MOVA,@R0;进制
CJNEA,#59,M0;判断秒是否为59
MOVSEC,#00;若是,秒清零
LJMPTSCX0
M0:
INCA
MOV@R0,A
LJMPTSCX0
M:
CJNEA,#02H,M1;判断是否为2键
MOVR0,#MIN;若是则调整分钟
MOVA,@R0
CJNEA,#59,N0;判断分是否为59
MOVMIN,#00;若是,分钟清零
LJMPTSCX0
N0:
INCA
MOV@R0,A
LJMPTSCX0
M1:
CJNEA,#01H,M2;判断是否为1号键
MOVR0,#HOUR;键值为3调整小时
MOVA,@R0
CJNEA,#23,N1;判断小时是否为23
MOVHOUR,#00
LJMPTSCX0
N1:
INCA
MOV@R0,A
LJMPTSCX0
M2:
CJNEA,#05,M7
CPLPSW.1
LJMPSJTZ2
LJMPM9
M7:
CJNEA,#06,TSCX0
M9:
RET
TSCX1:
LCALLLOOP6;调整日期
MOVR0,#6BH
LCALLDISP
LCALLKINP
CJNEA,#03H,N2;判断是否为3#键
MOVR0,#DAY;键值为01,调整日期
MOVA,@R0
CJNEA,#31,M3;判断30
MOVDAY,#00
LJMPTSCX1
M3:
INCA
MOV@R0,A
LJMPTSCX1
N2:
CJNEA,#02H,N;判断是否为2键
MOVR0,#YUE
MOVA,@R0
CJNEA,#12,M4;判断月是否12
MOVYUE,#00
LJMPTSCX1
M4:
INCA
MOV@R0,A
LJMPTSCX1
N:
CJNEA,#01H,K1;判断是否为1号键
MOVR0,#YEAR;键值为3调整年
MOVA,@R0
CJNEA,#99,M5
MOVYEAR,#0
LJMPTSCX1
M5:
INCA
MOV@R0,A
LJMPTSCX1
K1:
CJNEA,#05H,TSCX1
SETBTR0
LJMPM8
RET
T0_INT:
CLRTF0
DJNZR7,ONE111
LJMPONE22
ONE111:
LJMPONE
ONE22:
MOVR7,#20
INC50H;秒加一
MOVA,50H
CJNEA,#60,ONE111
MOV50H,#00H
INC51H;分加一
MOVA,51H
CJNEA,#60,ONE
MOV51H,#00H
INC52H;时加一
MOVA,52H
CJNEA,#24,ONE
MOV52H,#00H
MOVA,53H
PUSHACC
ONE8:
MOVA,54H
CJNEA,#2,ONE1
YUE2:
MOVA,55H;2月:
是闰年29天,是平年28天
MOVB,#4
DIVAB
MOVA,B
JZRYUE
PYUE:
POPACC
INC53H
MOVA,53H
CJNEA,#29,ONE
MOV53H,#1
INC54H
LJMPONE10
RYUE:
POPACC
INC53H
MOVA,53H
CJNEA,#30,ONE
MOV53H,#1
INC54H
LJMPONE10
ONE1:
CJNEA,#4,ONE2
SJMPONE7
ONE2:
CJNEA,#6,ONE3
SJMPONE7
ONE3:
CJNEA,#9,ONE4
SJMPONE7
ONE4:
CJNEA,#11,ONE5
ONE7:
POPACC
INC53H
MOVA,53H
CJNEA,#31,ONE
MOV53H,#01H
INC54H;月加一,以上是2,4,6,9,11月
SJMPONE10
ONE5:
POPACC
INC53H
MOVA,53H
CJNEA,#32,ONE
MOV53H,#01H
INC54H;月加一,是31天的月份
ONE10:
MOVA,54H
CJNEA,#13,ONE
MOV54H,#01H
INC55H;年加一
ONE:
LCALLPD
MOVTH0,#3CH
MOVTL0,#0B0H
RETI
LOOP6:
MOVR3,#6
MOVR0,#50H
MOVR1,#60H
LOOP1:
MOVA,@R0
MOVB,#10
DIVAB
MOV@R1,B
INCR1
MOV@R1,A
INCR0
INCR1
DJNZR3,LOOP1
RET
DISP:
MOVR5,#01H;位控初始码(先亮最低位)
LOOP5:
MOVA,#0FFH;共阳灭码
MOVP0,A
MOVA,R5;送位控信号
MOVP2,A
MOVA,@R0;从显示缓冲中取数
MOVDPTR,#TAB
MOVCA,@A+DPTR;查出字形代码
MOVP0,A;送显示字符段代码
ACALLDL1MS;稳定显示信息
DECR0;取下一个数
MOVA,R5
JBACC.5,EXIT;判断是否送到最高位?
RLA
MOVR5,A;得到下一个位控信号
AJMPLOOP5
EXIT:
RET
DL1MS:
MOVR6,#0EFH
DJNZR6,$
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
KINP:
LCALLKAP;扫描键子程序
JNZKP1
SETBPSW.5;置无键标志
RET
KP1:
LCALLDELY;去抖
LCALLKAP;再次扫描键盘
JNZKP2;转识键码程序
SETBPSW.5;置无键标志
RET
KP2:
CLRPSW.5;置有键操作标志
MOVR2,#0FEH;逐列扫描初始值
MOVR4,#00H;0列加数
SETBP1.0
KP4:
MOVA,R2
MOVP2,A;送列扫描信号
MOVA,P1;回读行信号
JBACC.0,NEXT;不是第一行,转第二行
MOVA,#00H;是第一行,行吗=0
AJMPKP5
KP5:
ADDA,R4;对应的行码+对应的列码=键码
PUSHACC;保护已经得到的键码
KP3:
LCALLDELY
LCALLKAP;继续扫描
JNZKP3;A值不等于0,表示手未松开!
POPACC;A值等于0,手已经松开,弹回键码!
RET
NEXT:
INCR4;下一列列码加1
MOVA,R2
JNBACC.7,KINP;列到最后列了吗?
RLA
MOVR2,A;下一列
AJMPKP4;扫描下一列
KAP:
MOVA,#00H;全扫描字(列)
MOVP2,A;送全扫描字
MOVP1,#0FFH
MOVA,P1;回读行信息
CPLA
ANLA,#03H;得到A值,=0,无键;≠0,有键
RET
DELY:
MOVR6,#14H;去抖!
DL:
MOVR5,#0FFH
DJNZR5,$
DJNZR6,DL
RET
;闹钟0程序
NAOZ0:
MOV40H,MIN;保存原值
MOV41H,HOUR
LCALLTSCX2;调用调整子程序;闹钟0储
MOV42H,MIN
MOV43H,HOUR
LCALLNAOZ00
RET
;闹钟1程序
NAOZ1:
MOV40H,MIN
MOV41H,HOUR
LCALLTSCX2;闹钟1存储
MOV44H,MIN
MOV45H,HOUR
LCALLNAOZ00
RET
NAOZ00:
;恢复原值
MOVMIN,40H
MOVHOUR,41H
RET
TSCX2:
LCALLLOOP6;调整时间
MOVR0,#65H
LCALLDISP
LCALLKINP
CJNEA,#03H,MM;判断是否为3号键
MOVR0,#SEC;键值为01,即1号键调整秒
MOVA,@R0;进制
CJNEA,#59,M00;判断秒是否为59
MOVSEC,#00;若是,秒清零
LJMPTSCX2
M00:
INCA
MOV@R0,A
LJMPTSCX2
MM:
CJNEA,#02H,M11;判断是否为2键
MOVR0,#MIN;若是则调整分钟
MOVA,@R0
CJNEA,#59,N00;判断分是否为59
MOVMIN,#00;若是,分钟清零
LJMPTSCX2
N00:
INCA
MOV@R0,A
LJMPTSCX2
M11:
CJNEA,#01H,M22;判断是否为1号键
MOVR0,#HOUR;键值为3调整小时
MOVA,@R0
CJNEA,#23,N11;判断小时是否为23
MOVHOUR,#00
LJMPTSCX2
N11:
INCA
MOV@R0,A
LJMPTSCX2
M22:
CJNEA,#05,M77
CPLPSW.1
LJMPSJTZ2
LJMPM99
M77:
CJNEA,#06,TSCX2
M99:
RET
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 修订版 日历 时钟 单片机 程序 汇编语言
![提示](https://static.bdocx.com/images/bang_tan.gif)