电子钟实现参考程序.docx

上传人:b****5 文档编号:8510966 上传时间:2023-01-31 格式:DOCX 页数:12 大小:18.38KB
下载 相关 举报
电子钟实现参考程序.docx_第1页
第1页 / 共12页
电子钟实现参考程序.docx_第2页
第2页 / 共12页
电子钟实现参考程序.docx_第3页
第3页 / 共12页
电子钟实现参考程序.docx_第4页
第4页 / 共12页
电子钟实现参考程序.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

电子钟实现参考程序.docx

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

电子钟实现参考程序.docx

电子钟实现参考程序

;-------------------------------------------------------------------

;本电子钟实现24小时制,8位数码管显示时分秒,可整点报时

;显示格式:

00-00-00(设置小时十位为0时,不显示)

;通过3只按键来调整时间

;调整选择键SET_KEY:

P1.0;通过选择键选择调整位,选中位闪烁

;增加键ADD_KEY:

P1.1;按一次使选中位加1

;减少键DEC_KEY:

P1.2;按一次使选中位减1

;如果长按ADD_KEY或DEC_KEY,可进行调时、调分快进快减,并停止闪烁

;如果选中位是秒,则按增加键或减少键可实现,但无调时快进和快减功能

;P0口输出数码管段选信号,P3口输出数码管位选信号;晶振11.0592M

;P2.1为蜂鸣器发声报时

;编程人:

郑振凡编写日期:

2009年12月2日修改日期(最终):

2009年12月6日

;-------------------------------------------------------------------

;-----------

;程序入口

;-----------

ORG0000H;程序入口地址

LJMPSTART

ORG000BH;定时器0中断入口地址

LJMPTIMET0

ORG1000H

;----------------------------------

;显P.程序

;功能:

可以在8个数码闪烁移位进行屏保

;----------------------------------

START:

MOVR6,#2;闪烁次数

MOVA,#01H;位选

TT:

MOVP3,A

MOVP0,#0CH;段码"P."

LCALLDELAY

MOVP3,#00H

DJNZR6,TT

LCALLDELAY

LCALLDELAY1

RRA

JBP1.0,TT;键是否按下,没按下则转移

LCALLDELAY;延时去抖

JNBP1.0,KAI;再次判断键是否按下

KAI:

SETBP1.0

CLRA;状态恢复

MOVP0,#0FFH

LCALLDELAY1

SETB48H;用于调时闪烁标志

SETB47H;用于产生脉冲用于调时快进的脉冲

MOVR1,#0;调整选择键功能标志:

0计时、1调时、2调分、3调秒

;-------------------------------

;清16位寄存器及初始化

;50H用于控制秒基准时钟源的产生

;51H清零秒寄存器

;52H清零分寄存器

;53H清零时寄存器

;5FH用于秒个位;5EH用于秒十位

;5DH用于分个位;5CH用于分十位

;5BH用于时个位;5AH用于时十位

;54H用于控制调时闪烁

;-------------------------------

MOVR0,#50H;初始化

MOVR6,#10H

CLEARJCQ:

MOV@R0,#00H;清寄存器

INCR0

DJNZR6,CLEARJCQ

MOVIP,#02H

SETBEA

SETBET0

MOVTMOD,#01H;设定定时器0工作方式1

MOVTH0,#3CH

MOVTL0,#0B0H;赋定时初值,定时50ms

SETBTR0;启动定时器0

MOVSP,#70H;堆栈

;--------

;主程序

;--------

MAIN:

LCALLDISPLAY

LCALLKEY_SCAN

JZMAIN

LCALLSET_KEY

JB46H,MAIN;如果已进行调时快进,则不再执行下面的调整

LCALLADD_KEY;调用增加键处理子程序,加一

LCALLDEC_KEY;调用减少键处理子程序,减一

LJMPMAIN;重新循环

;---------------

;显示处理程序

;---------------

DISPLAY:

MOVA,51H

ANLA,#0FH

MOV5FH,A;转换出秒个位,存入5FH

MOVA,51H

ANLA,#0F0H

SWAPA

MOV5EH,A;转换出秒十位,存入5EH

JB46H,MIN;如果调时快进,则跳过闪烁处理程序

CJNER1,#3,MIN;如果R1为3,闪烁秒位待调整

JB48H,MIN

MOV5FH,#0AH;使该位为10,查表得到使该位不显示

MOV5EH,#0AH

MIN:

MOVA,52H

ANLA,#0FH

MOV5DH,A;转换出分个位,存入5DH

MOVA,52H

ANLA,#0F0H

SWAPA

MOV5CH,A;转换出分十位,存入5CH

JB46H,HOUR

CJNER1,#2,HOUR;如果R1为2,闪烁分位待调整

JB48H,HOUR

MOV5DH,#0AH

MOV5CH,#0AH

HOUR:

MOVA,53H

ANLA,#0FH

MOV5BH,A;转换出时个位,存入5BH

MOVA,53H

ANLA,#0F0H

SWAPA

MOV5AH,A;转换出时十位,存入5AH

JB46H,DISP

CJNER1,#1,DISP;如果R1为1,闪烁时位待调整

JB48H,DISP

MOV5BH,#0AH;使该位为10,查表得到使该位不显示

MOV5AH,#0AH

;-------------------

;数码管动态扫描显示

;-------------------

DISP:

MOVDPTR,#TABLE

MOVA,5FH

MOVCA,@A+DPTR

MOVP0,A

SETBP3.7

LCALLDELAY

CLRP3.7;显示秒个位

MOVA,5EH

MOVCA,@A+DPTR

MOVP0,A

SETBP3.6

LCALLDELAY

CLRP3.6;显示秒十位

MOVA,#0BFH

MOVP0,A

SETBP3.5

LCALLDELAY

CLRP3.5;显示“-”

MOVA,5DH

MOVCA,@A+DPTR

MOVP0,A

SETBP3.4

LCALLDELAY

CLRP3.4;显示分个位

MOVA,5CH

MOVCA,@A+DPTR

MOVP0,A

SETBP3.3

LCALLDELAY

CLRP3.3;显示分十位

MOVA,#0BFH

MOVP0,A

SETBP3.2

LCALLDELAY

CLRP3.2;显示“-”

MOVA,5BH

MOVCA,@A+DPTR

MOVP0,A

SETBP3.1

LCALLDELAY

CLRP3.1;显示时个位

MOVDPTR,#TABLE1;该位使用TABLE1以消除时的十位置0

MOVA,5AH

MOVCA,@A+DPTR

MOVP0,A

SETBP3.0

LCALLDELAY

CLRP3.0;显示时十位

RET

;-----------------

;定时器中断1s程序

;-----------------

TIMET0:

PUSHACC;保护现场

PUSHPSW

MOVTH0,#3CH

MOVTL0,#0B0H

CPL47H;产生脉冲用于调时快进

INC54H

MOVA,54H

CJNEA,#10,ADD_TIME;产生0.5秒,用于调时闪烁

CPL48H;取反调时闪烁标志位

MOV54H,#00H

ADD_TIME:

INC50H

MOVA,50H

CJNEA,#10,ZDBACD;整点报时时蜂鸣器响延迟时间

SETBP2.1;关蜂鸣器

ZDBACD:

CJNEA,#20,RETI1;产生1秒时钟

MOV50H,#00H;一秒钟时间到,清零50H

MOVA,51H

ADDA,#01H

DAA;十进制调整

MOV51H,A

CJNEA,#60H,RETI1

MOV51H,#00H;一分钟到

MOVA,52H

ADDA,#01H

DAA

MOV52H,A

CJNEA,#60H,RETI1

CLRP2.1

MOV52H,#00H;一小时到,开蜂鸣器,清分显示

MOVA,53H

ADDA,#01H

DAA

MOV53H,A

CJNEA,#24H,RETI1

MOV53H,#00H;到24点,清零小时

RETI1:

POPPSW

POPACC;恢复现场

RETI;中断返回

;-------------

;键盘扫描程序

;R4设置为00H是为了在进入长按处理前加长延时,以区分长按与短按键

;-------------

KEY_SCAN:

CLR46H;关闭调时快进标志

MOVP1,#0FFH;将P1口设置成输入状态

MOVA,P1

CPLA

ANLA,#07H;1口低3位连接3个按键,只判断该3位

JZEXIT_KEY

LCALLDELAY;延时去抖动

MOVA,P1;重新判断

CPLA

ANLA,#07H

JZEXIT_KEY

MOVR5,A

MOVR4,#00H;用于控制调时快进速度

LOOP:

LCALLDISPLAY;进入长按处理

MOVA,P1

CPLA

ANLA,#07H

JB47H,LOOP1

INCR4;调时快进间隔时间基准加1

LOOP1:

CJNER1,#03H,LOOP2;如果调秒时长按,则不处理

LJMPLOOP3

LOOP2:

CJNER4,#99H,LOOP3

MOVR4,#70H;确认长按后,加快调时快进速度

SETB46H

LCALLADD_KEY

LCALLDEC_KEY

LOOP3:

JNZLOOP;等待键释放

MOVA,R5;输出键值

RET

EXIT_KEY:

RET

;------------

;延时子程序

;------------

DELAY:

MOVR7,#200

DJNZR7,$

RET

DELAY1:

MOVR3,#50

MOVTMOD,#00H

MOVTH1,#63H

MOVTL1,#18H

SETBTR1

LP1:

JBCTF1,LP2

SJMPLP1

LP2:

MOVTH1,#63H

MOVTL1,#18H

DJNZR3,LP1

RET

;-----------------

;选择键处理子程序

;-----------------

SET_KEY:

CJNER5,#01H,EXIT;选择键键值

INCR1;调整选择功能标志加一

CJNER1,#4,EXIT

MOVR1,#0

MOV54H,#00H;调时闪烁清零

RET

;----------

;加1子程序

;----------

ADD_KEY:

CJNER5,#02H,EXIT;加1键值

CJNER1,#01H,NEXT1;选择键功能标志为1调时,否则跳出

MOVA,53H

ADDA,#01H

DAA

MOV53H,A

CJNEA,#24H,EXIT

MOV53H,#00H

NEXT1:

CJNER1,#02H,NEXT2;选择键功能标志为2调分,否则跳出

MOVA,52H

ADDA,#01H

DAA

MOV52H,A

CJNEA,#60H,EXIT

MOV52H,#00H

NEXT2:

CJNER1,#03H,EXIT;选择键功能标志为3调秒,否则跳出

MOVA,51H

ADDA,#01H

DAA

MOV51H,A

CJNEA,#60H,EXIT

MOV51H,#00H;如加1键按下直接清零秒

RET

;----------

;减1子程序

;----------

DEC_KEY:

CJNER5,#04H,EXIT;减1键键值

CJNER1,#01H,NEXT3;选择键功能标志为1调时,否则跳出

MOVA,53H

ADDA,#99H

DAA

MOV53H,A

CJNEA,#99H,EXIT

MOV53H,#23H

NEXT3:

CJNER1,#02H,NEXT4;选择键功能标志为2调分,否则跳出

MOVA,52H

ADDA,#99H

DAA

MOV52H,A

CJNEA,#99H,EXIT

MOV52H,#59H

NEXT4:

CJNER1,#03H,EXIT;选择键功能标志为3调秒,否则跳出

MOVA,51H

ADDA,#99H

DAA

MOV51H,A

CJNEA,#99H,EXIT

MOV51H,#59H

RET

;-----------

;返回子程序

;-----------

EXIT:

RET

;-----------------

;数码管字形编码表

;-----------------

TABLE:

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

;"0","1","2","3","4","5","6","7","8"",9","不显示"

TABLE1:

DB0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH;小时位的十位数编码

;"不显示","1","2","3","4","5","6","7","8","9","不显示"

;--------

;程序结束

;--------

END

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

当前位置:首页 > 初中教育 > 科学

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

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