51单片机做数字电子钟Word格式.docx
《51单片机做数字电子钟Word格式.docx》由会员分享,可在线阅读,更多相关《51单片机做数字电子钟Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
LJMPSTART
ORG0003H;
外中断0中断程序入口
RETI
ORG000BH;
定时器T0中断程序入口
LJMPINTT0;
跳至INTTO执行
ORG0013H;
外中断1中断程序入口
ORG001BH;
定时器T1中断程序入口
LJMPINTT1
ORG0023H;
串行中断程序入口地址
;
---------------主程序----------------------;
START:
MOVR0,#70H;
70给R0,清70-7FH显示内存
MOVR7,#0FH
CLEARDISP:
MOVR0,#00H;
0给R0中的数为地址的内存中存放(70H)
INCR0
DJNZR7,CLEARDISP
MOV78H,#2;
默认时间为12:
00,闹钟5:
00
MOV79H,#1
MOV74H,#2;
防止上电时数码管显示00小时
MOV75H,#1
MOV66H,#1;
中断退出时66H为1时,分、时计时单元数据移入显存标志
MOV68H,#1;
上电默认闹钟开状态
MOV7DH,#6;
闹钟时十位
MOV7CH,#3
MOV69H,#0
MOV7AH,#0AH;
放入"
熄灭符"
数据
MOVTMOD,#11H;
设T0、T1为16位定时器
MOVTL0,#0B0H;
50MS定时初值(T0计时用)
MOVTH0,#3CH
SETBEA;
总中断开放
SETBET0;
允许T0中断
SETBTR0;
T0定时器开始计时
MOVR4,#14H;
1秒定时用初值(50MS×
20)
START1:
LCALLDISPLAY;
显示子程序
LCALLBEEP;
闹钟查询
JNBP1.7,SETTIME;
P1.7口为0时转时间调整程序
JMPSTART1;
P1.7口为1时跳回START1
-----------------------时间闹钟调整系统--------------------------;
NFLAG:
MOVA,68H;
设置闹钟开关状态
CJNEA,#1,BEE68
MOV68H,#0
JMPE6
BEE68:
MOV68H,#1
E6:
MOV66H,#8;
中断退出66H不为1时分、时计时单元数据移入显存标志
MOV72H,7BH
MOV73H,7CH
MOV74H,7DH
MOV75H,7EH
LCALLDDL
MOV72H,68H
MOV73H,69H
MOV74H,7AH
MOV75H,7AH
MOV66H,#1
LJMPSTART1
SETTIME:
LCALLDDL
P1.7,NFLAG;
键按下时间小于1秒,设置闹钟开关状态并查看闹钟时间,不关走时,确保准确,大于1秒调时
MOVTL1,#0B0H;
T1闪烁定时初值
MOVTH1,#3CH
MOVR2,#06H;
进入调时状态,赋闪烁定时初值
MOV66H,#8;
调闹钟时保持走时,关闭时钟显示数据
SETBET1;
允许T1中断
SETBTR1;
开启定时器T1
SET1:
调用显示,防止键按下无显示
JNBP1.7,SET1;
P1.7口为0等待键释放
MOVR5,#00H;
清设置类型闪烁标志
SETN1:
INCR5;
闹钟分调整
SET5:
LCALLDISPLAY
P1.7,SET5
SEETN1:
LCALLDDL;
有键按下大于1秒分时间连续加(0.5秒加1),小于1秒转调时状态
P1.7,SET6;
键释放查询,键释放自动转调时
MOVR0,#7CH
LCALLADD1
MOVA,R3
CLRC
CJNEA,#60H,HHN1
HHN1:
JCSEETN1
LCALLCLR0
JMPSEETN1
SET6:
闹钟时调整
SEET6:
P1.7,SEET6
SEETNH1:
P1.7,SETF
MOVR0,#7EH
CJNEA,#24H,HOUU1
HOUU1:
JCSEETNH1
JMPSEETNH1
SETF:
JNBP1.7,SETOUT;
短按调时,长按退出
CLRET0
CLRTR0
MOV70H,#00H;
设定后的时间从00秒开始走时
MOV71H,#00H
INCR5
SET3:
P1.7,SET3
SETMM:
P1.7,SET4
MOVR0,#77H
CJNEA,#60H,MMH
MMH:
JCSETMM
AJMPSETMM
SET4:
INCR5
SEET4:
P1.7,SEET4
SETHH:
P1.7,SETOUT1
MOVR0,#79H
CJNEA,#24H,HOUU
HOUU:
JCSETHH
AJMPSETHH
SETOUT1:
SETBET0
计时开始
SETOUT:
MOVR5,#00H;
CLRTR1;
关闭T1
CLRET1;
关T1中断
SETOUT2:
JNBP1.7,SETOUT2
--------------------------延时1秒钟-----------------------;
DDL:
MOV18H,#36
DDL0:
MOV17H,#239
DDL1:
DJNZ17H,DDL1
DJNZ18H,DDL0
RET
----------------------------T0中断程序------------------------;
INTT0:
PUSHACC;
打包
PUSHPSW
MOVA,#0B7H
ADDA,TL0
MOVTL0,A
MOVA,#3CH
ADDCA,TH0
MOVTH0,A
SETBTR0
DJNZR4,OUTT0;
20次中断未到中断退出
ADDSS:
20次中断到(1秒)重赋初值
MOVR0,#71H;
指向秒计时单元(70-71H)
ACALLADD1;
调用加1程序(加1秒操作)
MOVA,R3;
秒数据放入A(R3为2位十进制数组合)
CLRC;
清进位标志
CJNEA,#60H,ADDMM
ADDMM:
JCOUTT01;
小于60秒退出
ACALLCLR0;
等于或大于60秒清0
MOVR0,#77H;
指向分计时单元(76H-77H)
ACALLADD1
CJNEA,#60H,ADDHH
ADDHH:
JCOUTT0
ACALLCLR0
MOVR0,#79H;
指向小时计时单元(78H-79H)
CJNEA,#24H,HOUR
HOUR:
OUTT0:
MOVA,66H;
查询标志
CJNEA,#1,OUTT01
MOV72H,76H;
中断退出时将分、时计时单元数据移入对应显示单元
MOV73H,77H
MOV74H,78H
MOV75H,79H
OUTT01:
POPPSW;
出栈
POPACC
开放T0
RETI;
中断返回
---------------------------加1程序--------------------------;
ADD1:
MOVA,R0;
取当前计时单元数据到A
DECR0;
指向前一地址
SWAPA;
A中数据高四位与低四位交换
ORLA,R0;
前一地址中数据放入A中低四位
ADDA,#01H;
A加1操作
DAA;
十进制调整
MOVR3,A;
移入R3寄存器
ANLA,#0FH;
高四位变0
MOVR0,A;
放回前一地址单元
取回R3中暂存数据
INCR0;
指向当前地址单元
数据放入当削地址单元中
CLR0:
CLRA;
清累加器
清当前地址单元
前一地址单元清0
RET;
子程序返回
-------------------------调时闪烁程序----------------------;
INTT1:
PUSHACC
MOVTL1,#0B0H
DJNZR2,INTT1OUT;
0.3秒未到退出中断(50MS中断6次)
重装0.3秒定时用初值
CPL02H;
0.3秒定时到对闪烁标志取反
02H,FLASH1;
02H位为1时显示单元"
熄灭"
MOVA,R5
CJNEA,#01H,NL
JMPNNN1
NL:
CJNEA,#02H,NL1
LJMPNNN1
NL1:
CJNEA,#03H,NL2
LJMPNLL
NL2:
CJNEA,#04H,INTT1OUT
NLL:
MOV72H,76H
AJMPINTT1OUT
NNN1:
MOV72H,7BH
INTT1OUT:
恢复现场
中断退出
FLASH1:
MOVA,R5
CJNEA,#01H,ML
LJMPMNN1
ML:
CJNEA,#02H,ML1
LJMPMNN2
ML1:
CJNEA,#03H,MN
LJMPMLL
MN:
LJMPMHL
MLL:
MOV72H,7AH
MOV73H,7AH;
显示单元(72-73H),将不显示分数据
MHL:
MOV74H,7AH;
显示单元(74-75H),小时数据将不显示
MNN1:
显示单元(72-73H),将不显示闹钟分数据
MNN2:
MOV75H,7AH;
显示单元(74-75H),闹钟小时数据将不显示
-------------------------显示-------------------------------;
DISPLAY:
MOVDPTR,#DISDATA
MOVA,70H
MOVCA,A+DPTR
MOVP3,A
CLRP1.0
NOP
SETBP1.0
MOVA,71H
CLRP1.1
SETBP1.1
MOVA,72H
CLRP1.2
SETBP1.2
MOVA,73H
CLRP1.3
SETBP1.3
MOVA,74H
CLRP1.4
SETBP1.4
MOVA,75H
CLRP1.5
SETBP1.5
BEEP:
CJNEA,#1,BEERE
MOVA,78H;
查询闹钟时个位
CJNEA,7DH,BEERE
MOVA,79H;
查询闹钟时十位
CJNEA,7EH,BEERE
MOVA,76H;
查询闹钟分个位
CJNEA,7BH,BEERE
MOVA,77H;
查询闹钟分十位
CJNEA,7CH,BEERE
BB:
CLRP1.6
SETBP1.6
JNBP1.7,BEERR
BEERE:
RET
BEERR:
SETBP1.6
LCALLDISPLAY
JMPBEERE
DISDATA:
DB0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H,50H,0FFH;
0123456789空白