汇编数字钟 8位数码管显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编数字钟(8位数码管显示)

这款数字钟是笔者亲自试验过的作品,电路图和程序都经过优化,供爱好者制作参考。

显示格式依然是23-59-59(同样是小时十位如果为0则不显示),调整时间增加了一只按钮,通过调整选择键SET_KEY选择调整位,选中位开始闪烁,此时再按增加键ADD_KEY或减少键DEC_KEY调整选中位,如果长按ADD_KEY或DEC_KEY,系统识别后则进行调时快进,此时停止闪烁,方便人眼观察。同时还增加了调秒功能:如果选中位是秒,则按增加键或减少键都是将秒清零。

汇编程序设计:

/**************************************************************

程序名称:51单片机8位数码管数字钟汇编程序

简要说明:实现24小时制电子钟,8位数码管显示,显示时分秒

显示格式:23-59-59(小时十位如果为0则不显示)

通过3只按键来调整时间

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

增加键ADD_KEY:P1.1;按一次使选中位加1

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

如果长按ADD_KEY或DEC_KEY,识别后则进行调时快进,此时停止闪烁如果选中位是秒,则按增加键或减少键都是将秒清零

P0口输出数码管段选信号,P2口输出数码管位选信号。晶振12M

编写:

最后更新:08/12/31晚

**************************************************************/

ORG 0000H ;程序入口地址

LJMP START

ORG 000BH ;定时器0中断入口地址

LJMP TIMER_0

ORG 0300H

/*****程序开始,初始化*****/

START:

SETB 48H ;使用一个bit位用于调时闪烁标志

SETB 47H ;使用一个bit位用于产生脉冲用于调时快进时基

MOV R1,#0 ;调整选择键功能标志:0正常走时、1调时、2调分、3调秒

MOV 20H,#00H ;用于控制秒基准时钟源的产生

MOV 21H,#00H ;清零秒寄存器

MOV 22H,#00H ;清零分寄存器

MOV 23H,#00H ;清零时寄存器

MOV 24H,#00H ;用于控制调时闪烁的基准时钟的产生

MOV IP,#02H ;IP,IE初始化

MOV IE,#82H

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

MOV TH0,#3CH

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

SETB TR0 ;启动定时器0

MOV SP,#40H ;重设堆栈指针

/*****主程序*****/

MAIN:

LCALL DISPLAY ;调用显示子程序

LCALL KEY_SCAN ;调用按键检测子程序

JZ MAIN ;无键按下则返回重新循环

LCALL SET_KEY ;调用选择键处理子程序

JB 46H,MAIN ;如果已进行长按调整(调时快进),则不再执行下面的单步调整 LCALL ADD_KEY ;调用增加键处理子程序,加一

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

LJMP MAIN ;重新循环

/*****定时器中断服务程序*****/

TIMER_0:

PUSH ACC

PUSH PSW ;保护现场

MOV TH0,#3CH

MOV TL0,#0B0H ;重新赋定时初值

CPL 47H ;产生脉冲用于调时快进时基

INC 24H

MOV A,24H

CJNE A,#10,ADD_TIME ;产生0.5秒基准时钟,用于调时闪烁

CPL 48H ;取反调时闪烁标志位

MOV 24H,#00H

ADD_TIME: ;走时

INC 20H

MOV A,20H

CJNE A,#20,RETI1 ;产生1秒基准时钟

MOV 20H,#00H ;一秒钟时间到,清零20H

MOV A,21H

ADD A,#01H

DA A ;作十进制调整

MOV 21H,A

CJNE A,#60H,RETI1

MOV 21H,#00H ;一分钟到

MOV A,22H

ADD A,#01H

DA A

MOV 22H,A

CJNE A,#60H,RETI1

MOV 22H,#00H ;一小时到

MOV A,23H

ADD A,#01H

DA A

MOV 23H,A

CJNE A,#24H,RETI1

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

RETI1:

POP PSW

POP ACC ;恢复现场

RETI ;中断返回

/*****显示处理*****/

DISPLAY:

MOV A,21H ;秒

ANL A,#0FH

MOV 2FH,A ;转换出秒个位,存入2FH

MOV A,21H

ANL A,#0F0H

SWAP A

MOV 2EH,A ;转换出秒十位,存入2EH

JB 46H,MIN ;如果长按按键(调时快进),则跳过闪烁处理程序 CJNE R1,#3,MIN ;如果R1为3,闪烁秒位待调整

JB 48H,MIN

MOV 2FH,#0AH ;使该位为10,查表得到使该位不显示的输出

MOV 2EH,#0AH

MIN:

MOV A,22H ;分

ANL A,#0FH

MOV 2DH,A ;转换出分个位,存入2DH

MOV A,22H

ANL A,#0F0H

SWAP A

MOV 2CH,A ;转换出分十位,存入2CH

JB 46H,HOUR ;如果长按按键(调时快进),则跳过闪烁处理程序 CJNE R1,#2,HOUR ;如果R1为2,闪烁分位待调整

JB 48H,HOUR

MOV 2DH,#0AH ;使该位为10,查表得到使该位不显示的输出

MOV 2CH,#0AH

HOUR:

MOV A,23H ;时

ANL A,#0FH

相关文档
最新文档