数字电子时钟程序.docx

上传人:b****7 文档编号:23353660 上传时间:2023-05-16 格式:DOCX 页数:20 大小:18.88KB
下载 相关 举报
数字电子时钟程序.docx_第1页
第1页 / 共20页
数字电子时钟程序.docx_第2页
第2页 / 共20页
数字电子时钟程序.docx_第3页
第3页 / 共20页
数字电子时钟程序.docx_第4页
第4页 / 共20页
数字电子时钟程序.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数字电子时钟程序.docx

《数字电子时钟程序.docx》由会员分享,可在线阅读,更多相关《数字电子时钟程序.docx(20页珍藏版)》请在冰豆网上搜索。

数字电子时钟程序.docx

数字电子时钟程序

附录:

程序

ORG0000H

AJMPMAIN

ORG0003H

RETI

ORG0013H

RETI

ORG000BH

AJMPINTT0

ORG001BH

AJMPINTT1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;主程序;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORG0030H

MAIN:

MOVSP,#50H

MOVR0,#60H;清60H-7AH共27个内存单元

MOVR7,#27

CLEARDISP:

MOV@R0,#00H

INCR0

DJNZR7,CLEARDISP

MOVR2,#100;定时1s用初值

MOV71H,#02H;小时初始显示12时

MOV70H,#01H

MOV20H,#00H;清20H(标志用)

MOVTMOD,#11H;设T0、T1为16位定时器

MOVTL0,#0F0H;10MS定时初值(T0计时用)

MOVTH0,#0D8H;10MS定时初值

MOVTL1,#0B0H;50MS定时初值(T1闪烁定时用)

MOVTH1,#3CH;50MS定时初值

SETBEA;总中断开放

SETBET0;允许T0中断

SETBTR0;开启T0定时器

START:

LCALLDISP;调用时间显示子程序

JNBP3.0,SETMM;位选键按下则跳到时间调整程序

JNBP3.2,SETMB;使用秒表功能则跳到秒表程序

AJMPSTART;返回start循环扫描

SETMM:

LJMPSETTIME

SETMB:

LJMPSETMBCX

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;T0中断服务程序时间秒加1/秒表加10MS;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

INTT0:

PUSHACC;保护现场

PUSHPSW

MOVTH0,#0E0H;重装定时初值

MOVTL0,#0AH;

DJNZR2,RETT0;20次中断(1秒)未到转到判断是否在使用秒表功能

MOVR2,#100;20次中断到(1秒)重赋初值

INC75H;秒个位加1

MOVA,75H

CJNEA,#10,RETT0;秒个位小于10转到判断是否在使用秒表功能

MOV75H,#00;等于10秒个位计时单元清0

INC74H;秒十位加1

MOVA,74H

CJNEA,#06,RETT0;秒十位小于6转到判断是否在使用秒表功能

MOV74H,#00;等于6秒十位计时单元清0

INC73H;分个位加1

MOVA,73H

CJNEA,#10,RETT0;分个位小于10转到判断是否在使用秒表功能

MOV73H,#00;等于10分个位计时单元清0

INC72H;分十位加1

MOVA,72H

CJNEA,#06,RETT0;分十位小于6转到判断是否在使用秒表功能

MOV72H,#00;等于6分十位计时单元清0

INC71H;时个位加1

MOVA,70H

MOVB,#10

MULAB

ADDA,71H

CJNEA,#24,PROG1;小时小于24转到判断时个位是否小于10

MOV71H,#00;等于24时个位计时单元清0

AJMPPROG2;转到时十位加1

PROG1:

MOVA,71H

CJNEA,#10,RETT0;时个位小于10转到判断是否在使用秒表功能

MOV71H,#00;等于10分十位计时单元清0

PROG2:

INC70H;时十位加1

MOVA,70H

CJNEA,#03,RETT0;时十位小于3转到判断是否在使用秒表功能

MOV70H,#00;等于3时十位计时单元清0

RETT0:

JNB07H,RETT01;没使用秒表功能转RETT01(保护现场退出中断)

INC76H;0.01秒位加1

MOVA,76H

CJNEA,#10,RETT01;0.01秒位小于10转到RETT01(保护现场退出中断)

MOV76H,#00;等于10则0.01秒位计时单元清0

INC77H;0.1秒位加1

MOVA,77H

CJNEA,#10,RETT01;0.1秒位小于10转到RETT01

MOV77H,#00;等于10则0.1秒位计时单元清0

INC78H;1秒位加1

MOVA,78H

CJNEA,#10,RETT01;1秒位小于10转到RETT01

MOV78H,#00;等于10则1秒位计时单元清0

INC79H;10秒位加1

MOVA,79H

CJNEA,#10,RETT01;10秒位小于10转到RETT01

MOV79H,#00;等于10则10秒位计时单元清0

INC7AH;100秒位加1

MOVA,7AH

CJNEA,#10,RETT01;100秒位小于10转到RETT01

MOV7AH,#00;等于10则100秒位计时单元清0

RETT01:

POPPSW;恢复现场

POPACC

RETI;退出中断

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;T1中断服务程序闪动调时程序;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

INTT1:

PUSHACC;中断现场保护

PUSHPSW;

MOVTL1,#0B0H;装T1定时初值

MOVTH1,#3CH;

DJNZR4,INTT1OUT;0.3秒未到退出中断(50MS中断6次)

MOVR4,#06H;重装0.3秒定时用初值

CPL06H;0.3秒定时到对闪烁标志取反

JB06H,FLASH1;06H位为1时显示单元"熄灭"

MOV70H,60H;06H位为0时正常显示

MOV71H,61H

MOV72H,62H

MOV73H,63H

MOV74H,64H

MOV75H,65H

INTT1OUT:

POPPSW;恢复现场

POPACC

RETI;中断退出

FLASH1:

JB00H,FLASH2;00H位为1时,转时十位熄灭控制

JB01H,FLASH3;01H位为1时,转时个位熄灭控制

JB02H,FLASH4;02H位为1时,转分十位熄灭控制

JB03H,FLASH5;03H位为1时,转分个位熄灭控制

JB04H,FLASH6;04H位为1时,转秒十位熄灭控制

JB05H,FLASH7;05H位为1时,转秒个位熄灭控制

AJMPINTT1OUT;转中断退出

FLASH2:

MOV70H,#10;00H位为1时,"熄灭符"数据放入时十位

MOV71H,61H

MOV72H,62H

MOV73H,63H

MOV74H,64H

MOV75H,65H

AJMPINTT1OUT;转中断退出

FLASH3:

MOV70H,60H

MOV71H,#10;01H位为1时,"熄灭符"数据放入时个位

MOV72H,62H

MOV73H,63H

MOV74H,64H

MOV75H,65H

AJMPINTT1OUT;转中断退出

FLASH4:

MOV70H,60H

MOV71H,61H

MOV72H,#10;02H位为1时,"熄灭符"数据放入分十位

MOV73H,63H

MOV74H,64H

MOV75H,65H

AJMPINTT1OUT;转中断退出

FLASH5:

MOV70H,60H

MOV71H,71H

MOV72H,62H

MOV73H,#10;03H位为1时,"熄灭符"数据放入分个位

MOV74H,64H

MOV75H,65H

AJMPINTT1OUT;转中断退出

FLASH6:

MOV70H,60H

MOV71H,61H

MOV72H,62H

MOV73H,63H

MOV74H,#10;04H位为1时,"熄灭符"数据放入秒十位

MOV75H,65H

AJMPINTT1OUT;转中断退出

FLASH7:

MOV70H,60H

MOV71H,71H

MOV72H,62H

MOV73H,63H

MOV74H,64H

MOV75H,#10;05H位为1时,"熄灭符"数据放入秒十位

AJMPINTT1OUT;转中断退出

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;时间显示程序;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;显示数据在70H-75H单元内,用两个4位LED共阳数码管显示,P0口输出段码数据,

;P2口作扫描控制,每个LED数码管亮1MS时间再逐位循环。

DISP:

MOVDPTR,#TABLE;数据表格起始地址送DPTR

MOVA,75H;取显示数据到A

MOVCA,@A+DPTR;查显示数据对应段码

MOVP0,A;段码放入P0口

SETBP2.7;显示秒个位

LCALLDELAY;显示1MS

CLRP2.7

MOVA,74H;取显示数据到A

MOVCA,@A+DPTR;查显示数据对应段码

MOVP0,A;段码放入P0口

SETBP2.6;显示秒十位

LCALLDELAY;显示1MS

CLRP2.6

MOVA,73H;取显示数据到A

MOVCA,@A+DPTR;查显示数据对应段码

MOVP0,A;段码放入P0口

SETBP2.4;显示分个位

LCALLDELAY;显示1MS

CLRP2.4

MOVA,72H;取显示数据到A

MOVCA,@A+DPTR;查显示数据对应段码

MOVP0,A;段码放入P0口

SETBP2.3;显示分十位

LCALLDELAY;显示1MS

CLRP2.3

MOVA,71H;取显示数据到A

MOVCA,@A+DPTR;查显示数据对应段码

MOVP0,A;段码放入P0口

SETBP2.1;显示时个位

LCALLDELAY;显示1MS

CLRP2.1

MOVA,70H;取显示数据到A

MOVCA,@A+DPTR;查显示数据对应段码

MOVP0,A;段码放入P0口

SETBP2.0;显示时十位

LCALLDELAY;显示1MS

CLRP2.0

MOVP0,#0BFH

SETBP2.2;时与分之间显示"-"

LCALLDELAY

CLRP2.2

MOVP0,#0BFH

SETBP2.5;分与秒之间显示"-"

LCALLDELAY

CLRP2.5

RET

TABLE:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH

;共阳段码表"0""1""2""3""4""5""6""7""8""9""不亮"

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;时间调整程序;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SETTIME:

LCALLDL1S;调用1秒延时程序

JBP3.0,LOP1;位选键按下时间小于1S则无效

AJMPLOP2

LOP1:

LJMPLOP3

LOP2:

MOV60H,70H;当前时间送60H-65H

MOV61H,71H

MOV62H,72H

MOV63H,73H

MOV64H,74H

MOV65H,75H

CLRET0;关定时器T0中断

CLRTR0;关定时器T0计数

MOVR4,#06H;进入调时状态,赋闪烁定时初值

SETBET1;允许T1中断

SETBTR1;开启定时器T1计数

SET2:

JNBP3.0,SET1;P3.0口为0(位选键未释放),等待

SETB00H;位选键释放,时十位调整闪烁标志置1

SET4:

JBP3.1,SET3;减一键按下执行减一否则跳判断位选键是否按下

DEC60H;时十位减一

MOVA,60H

CLRC;清进位标志

CJNEA,#0FFH,PROG3;时十位小于零则置2否则转PROG3

MOV60H,#02

PROG3:

MOVA,60H;小时数与24比较

MOVB,#10

MULAB

ADDA,61H

CLRC

CJNEA,#24,PROG4;小时与24进行比较

PROG4:

JCHHS;小时小于24转HHS

MOV60H,#01;大于24时十位计时单元置1

HHS:

JBP3.1,SET4;等待减一键放开

LCALLDISP

AJMPHHS

SET1:

LCALLDISP;等待位选键放开P3.0口为0(键未释放)

AJMPSET2

SET3:

LCALLDISP

JNBP3.0,SET22;判断位选键是否按下是则调时个位,否则继续等待

AJMPSET4

SET22:

JNBP3.0,SET21;P3.0口为0(键未释放),等待

CLR00H;位选键释放,时十位调整闪烁标志置0

SETB01H;位选键释放,时个位调整闪烁标志置1

SET24:

JBP3.1,SET23;减一键按下执行减一否则跳到判断位选键键是否按下

DEC61H;时个位减一

MOVA,61H

CLRC;清进位标志

CJNEA,#0FFH,PROG5;时个位小于零则置9否则转PROG4

MOV61H,#09

PROG5:

MOVA,60H;小时数与24比较

MOVB,#10

MULAB

ADDA,61H

CLRC

CJNEA,#24,PROG6;小时与24进行比较

PROG6:

JCHHG;小时小于24转HHG

MOV61H,#03;大于24时时个位计时单元置3

HHG:

JBP3.1,SET24;等待减一键放开

LCALLDISP

AJMPHHG

SET21:

LCALLDISP;等待位选键放开P3.0口为0(键未释放)

AJMPSET22

SET23:

LCALLDISP

JNBP3.0,SET6;判断位选键是否按下是则调分个位,否则继续等待

AJMPSET24

SET6:

JNBP3.0,SET5;P3.0口为0(键未释放),等待

CLR01H;位选键释放,时个位调整闪烁标志置0

SETB02H;位选键释放,分十位调整闪烁标志置1

SET8:

JBP3.1,SET7;减一键按下执行减一否则跳到判断位选键键是否按下

DEC62H;分十位减一

MOVA,62H

CLRC;清进位标志

CJNEA,#0FFH,MMS;分十位小于零则置5否则转MMS

MOV62H,#05

MMS:

JBP3.1,SET8;等待减一键放开

LCALLDISP

AJMPMMS

SET5:

LCALLDISP;等待位选键放开P3.0口为0(键未释放)

AJMPSET6

SET7:

LCALLDISP

JNBP3.0,SET10;判断位选键是否按下是则调分个位,否则继续等待

AJMPSET8

SET10:

JNBP3.0,SET9;P3.0口为0(键未释放),等待

CLR02H;位选键释放,分十位调整闪烁标志置0

SETB03H;位选键释放,分个位调整闪烁标志置1

SET12:

JBP3.1,SET11;减一键按下执行减一否则跳到判断位选键键是否按下

DEC63H;分个位减一

MOVA,63H

CLRC;清进位标志

CJNEA,#0FFH,MMG;分个位小于零则置9否则转MMG

MOV63H,#09

MMG:

JBP3.1,SET12;等待减一键放开

LCALLDISP

AJMPMMG

SET9:

LCALLDISP;等待位选键放开P3.0口为0(键未释放)

AJMPSET10

SET11:

LCALLDISP;判断位选键是否按下是则调秒十位,否则继续等待

JNBP3.0,SET14

AJMPSET12

SET14:

JNBP3.0,SET13;P3.0口为0(键未释放),等待

CLR03H;位选键释放,分个位调整闪烁标志置0

SETB04H;位选键释放,秒十位调整闪烁标志置1

SET16:

JBP3.1,SET15;减一键按下执行减一否则跳到判断位选键键是否按下

DEC64H;秒十位减一

MOVA,64H

CLRC;清进位标志

CJNEA,#0FFH,SSS;秒十位小于零则置5否则转SSS

MOV64H,#05

SSS:

JBP3.1,SET16;等待减一键放开

LCALLDISP

AJMPSSS

SET13:

LCALLDISP;等待位选键放开P3.0口为0(键未释放)

AJMPSET14

SET15:

LCALLDISP

JNBP3.0,SET18;判断位选键是否按下是则调秒个位,否则继续等待

AJMPSET16

SET18:

JNBP3.0,SET17;P3.0口为0(键未释放),等待

CLR04H;位选键释放,秒十位调整闪烁标志置0

SETB05H;位选键释放,秒个位调整闪烁标志置1

SET20:

JBP3.1,SET19;减一键按下执行减一否则跳到判断位选键键是否按下

DEC65H;秒个位减一

MOVA,65H

CLRC;清进位标志

CJNEA,#0FFH,SSG;秒个位小于零则置9否则转MMG

MOV65H,#09

SSG:

JBP3.1,SET20;等待减一键放开

LCALLDISP

AJMPSSG

SET17:

LCALLDISP;等待位选键放开P3.0口为0(键未释放)

AJMPSET18

SET19:

LCALLDISP

JNBP3.0,SETOUT;判断位选键是否按下是则准备退出调时状态,否则继续等待

AJMPSET20

SETOUT:

JNBP3.0,SETOUT1;调时退出程序。

等待键释放

MOV75H,65H

CLR00H;清调时十位闪烁标志

CLR01H;清调时个位闪烁标志

CLR02H;清调分十位闪烁标志

CLR03H;清调分个位闪烁标志

CLR04H;清调秒十位闪烁标志

CLR05H;清调秒个位闪烁标志

CLR06H;清闪烁标志

CLRTR1;关闭定时器T1

CLRET1;关定时器T1中断

SETBTR0;开启定时器T0

SETBET0;开定时器T0中断(计时开始)

LOP3:

LJMPSTART;跳回主程序

SETOUT1:

LCALLDISP;退出时钟调整时键释放等待

AJMPSETOUT;防止键按下时无时钟显示

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;秒表程序;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SETMBCX:

LCALLDL1S;调用按键时间延时程序

JBP3.2,LOOP1;键按下时间小于1秒则跳回主程序

AJMPLOOP2

LOOP1:

LJMPLOOP4

LOOP2:

JNBP3.2,LOOP5;P3.2口为0(键未释放),等待

LOOP7:

JBP3.2,LOOP6;等待键按下

SETB07H;秒表开始计时

LOOP8:

JNBP3.2,LOOP11;秒表计时中

CLR07H;秒表停止计时

LOOP20:

JBP3.2,LOOP21;等待键按下

MOV76H,#00H;秒表显示清零

MOV77H,#00H

MOV78H,#00H

MOV79H,#00H

MOV7AH,#00H

LOOP22:

JNBP3.2,LOOP23;P3.0口为0(键未释放),等待

LOOP9:

JBP3.2,LOOP12;等待键按下

LJMPLOOP13

LOOP5:

LCALLLOOP3

AJMPLOOP2

LOOP6:

LCALLLOOP3

AJMPLOOP7

LOOP11:

LCALLLOOP3

AJMPLOOP8

LOOP12:

LCALLLOOP3

AJMPLOOP9

LOOP21:

LCALLLOOP3

AJMPLOOP20

LOOP23:

LCALLLOOP3

AJMPLOOP22

LOOP3:

MOVDPTR,#TABLE1;数据表格起始地址送DPTR

MOVA,76H;取显示数据到A

MOVCA,@A+DPTR;查显示数据对应段码

MOVP0,A;段码放入P1口

SETBP2.7;显示0.01S位

LCALLDELAY;显示1MS

CLRP2.7

MOVA,77H;取显示数据到A

MOVCA,@A+DPTR;查显示数据对应段码

MOVP0,A;段码放入P1口

SETBP2.6;显示0.1S位

LCALLDELAY;显示1MS

CLRP2.6

MOVA,78H;取显示数据到A

MOVCA,@A+DPTR;查显示数据对应段码

MOVP0,A;段码放入P1口

SETBP2.4;显示1S位

LCALLDELAY;显示1MS

CLRP2.4

MOVA,79H;取显示数据到A

MOVCA,@A+DPTR;查显示数据对应段码

M

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1