可预置倒计时时钟

上传人:桔**** 文档编号:490105815 上传时间:2023-08-29 格式:DOC 页数:7 大小:84KB
返回 下载 相关 举报
可预置倒计时时钟_第1页
第1页 / 共7页
可预置倒计时时钟_第2页
第2页 / 共7页
可预置倒计时时钟_第3页
第3页 / 共7页
可预置倒计时时钟_第4页
第4页 / 共7页
可预置倒计时时钟_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《可预置倒计时时钟》由会员分享,可在线阅读,更多相关《可预置倒计时时钟(7页珍藏版)》请在金锄头文库上搜索。

1、51单片机应用设计 可预置倒计时时钟【摘要】该时钟功能是:从一个设置值开始倒计时到0,然后回到该设置值重新开始倒计时,如此不断循环;该设置值可以用键盘来设定。【关键字】可预置 倒计时 时钟 AT89C51【引言】以前有人用51单片机设计过一个059s不断运行的秒表,每过1s,数码管显示的秒数加1,加到59s,再过1s,又回到0,从0开始加。这种秒表可以计时,可是不能人为控制计时时间。所以,在此之上做了相应的改进,设计了一个可以预置倒计时的时钟。【设计内容】一、电路原理图器件选用: 单片机:AT89C51R1R14:10K 八位数码管:7SEG-MPX6-CA PNP管:MPS3638二、程序设

2、计1、主程序流程图S4键处理S3键处理S2键处理S1键处理有键按下吗?取秒计数值转为十进制送显示缓冲区调用显示程序取得键值NY2、程序设计KEYOK BIT 00H ;有按键按下标志STARTRUN BIT 01H ;开始运行标志SCOUNT EQU 21H ;秒计数器SETVAL EQU 22H TCOUNT EQU 24H ;分计数器TCOUNTER EQU 250 ;软件计数器的计数值,该值乘以定时器的定时值(4ms),即得1s的定时值KEYVAL EQU 25H DISPBUF EQU 58H ;显示器缓冲区COUNTER EQU 57HHIDDEN EQU 10HTMRVAR EQU

3、 6119 ;65536-4000*12/11.0592定时器初值为5msORG 0000HJMP STARTORG 0*8+3 ;INT0中断入口RETIORG 1*8+3 ;TIMER0中断入口JMP INT_T0ORG 2*8+3 ;INT1中断入口RETIORG 3*8+3 ;TIMER1中断入口RETIORG 4*8+3 ;串行中断入口RETISTART: MOV SP,#5FH MOV SCOUNT,#0 MOV SETVAL,#59 ;启动程序默认值为59 MOV SCOUNT,SETVAL ;将预置值送到计数器单元 MOV DISPBUF,#HIDDEN MOV DISPBUF

4、+1,#HIDDEN MOV DISPBUF+2,#HIDDEN MOV DISPBUF+3,#HIDDEN CLR STARTRUN ;开机时不运行 CLR KEYOK ;清除有键按下标志位 CALL INIT_T0 ;初始化T0 SETB EALOOP: CALL KEY JB KEYOK,KEYPROCNEXT: MOV A,SCOUNT MOV B,#10 DIV AB ;二进制转化为十进制,十位和个位分别 ;送人显示缓冲区NEXT1: MOV DISPBUF+4,A MOV DISPBUF+5,B JMP LOOPKEYPROC: MOV A,KEYVAL JZ KEYRUN DEC

5、 A JZ KEYSTOP DEC A JZ KEYLEFT JMP KEYRIGHTKEYRUN: SETB STARTRUN JMP LOOPKEYSTOP: CLR STARTRUN JMP LOOPKEYLEFT: CLR STARTRUN INC DISPBUF+4 MOV A,DISPBUF+4 CJNE A,#6,LEFT0 ;判断是否等于6 MOV A,#0 ;若等于6,则让其等于0LEFT0: MOV B,#10 ;将数10送到B中,准备求出新的预置值 MUL AB ;将10与设置的十位数相乘 ADD A,DISPBUF+5 ;加上个位数,就是当前设置值 MOV SETVAL

6、,A MOV SCOUNT,SETVAL JMP LOOPKEYRIGHT: CLR STARTRUN INC DISPBUF+5 MOV A,DISPBUF+5 CJNE A,#10,REFT0 MOV DISPBUF+5,#0REFT0: MOV A,DISPBUF+4 MOV B,#10 MUL AB ADD A,DISPBUF+5 MOV SETVAL,A MOV SCOUNT,SETVAL JMP LOOP;键盘程序KEY: MOV P3,#0FFH CLR KEYOK MOV A,P3 ORL A,#11000011B CPL A JZ KEY_RET CALL DELAY MOV

7、 A,P3 ORL A,#11000011B CPL A JZ KEY_RET SETB KEYOK JNB ACC.2,KEY_1 MOV KEYVAL,#0 JMP KEY_RETKEY_1: JNB ACC.3,KEY_2 MOV KEYVAL,#1 JMP KEY_RETKEY_2: JNB ACC.4,KEY_3 MOV KEYVAL,#2 JMP KEY_RETKEY_3: MOV KEYVAL,#3KEY_RET: MOV A,P3 ORL A,#11000011B CPL A JNZ KEY_RET RETDELAY: PUSH PSW SETB RS0 MOV R7,#50D

8、1: MOV R6,#10D2: DJNZ R6,D2 DJNZ R7,D1 POP PSW RETINIT_T0: ;初始化T0为5ms的定时器 MOV TMOD,#01H MOV TH0,#HIGH(TMRVAR) MOV TL0,#LOW(TMRVAR) SETB ET0 SETB TR0 RETINT_T0: PUSH ACC PUSH PSW MOV TH0,#HIGH(TMRVAR) MOV TL0,#LOW(TMRVAR) INC TCOUNT MOV A,TCOUNT CJNE A,#TCOUNTER,INT_N2 MOV TCOUNT,#0INT_N1: JNB STARTR

9、UN,INT_N2 DEC SCOUNT MOV A,SCOUNT JNZ INT_N2 MOV SCOUNT,SETVALINT_N2: ORL P2,#11111100B ;将P2口的高6位全部置1,关闭所有显示单元 MOV A,Counter ;取计数器的值 MOV DPTR,#BitTab MOVC A,A+DPTR ANL P2,A MOV A,#DISPBUF ADD A,Counter MOV R0,A MOV A,R0 MOV DPTR,#DISPTAB MOVC A,A+DPTR MOV P0,A INC Counter MOV A,Counter CJNE A,#6,DISPEXIT MOV Counter,#0DISPEXIT: POP PSW POP ACC RETI DISPTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH BitTab: DB 7FH,0BFH,0DFH,0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号