程序及操作指南:程序写入上电后 , 将在四个数码管
上显示 0000 ,然后每隔一分钟,数码管将从低位跳变,该
程序模拟的就是时钟。用按键数显键可将时间调至正确时
间。按按键数键一下,数码管将在低位闪烁,然后依次按
一下,数码管的闪烁位置就向前移一个数码管,按到第五
下时,退出。将对应的数码管按闪烁以后,长按按键数显
键,数码管将会显示从 1 至 9 ,显示到所需时间,松开按键
数显键,数码管显示对应所设时间,程序也会记下这个值。
例设置成 2334,
即晚上 11 点 34 分。设置步骤如下:按键一下长按至
数码管分低显示到 4 时松开按键一下长按至
数码管分高位显示到 3 时松开按键一下长按
至数码管时低位显示到 3 时松开按键一下长
按至数码管时高位显示到 2 时松开。
注意:如果小时设置超过 23 ,数码管将显示 ERR (错
误),再按一下键恢恢复。
程序实例( cLOCk.asm ) :
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INT ; 外中断 0 入口
ORG 000BH
AJMP DIN0 ; 定时器 0 入口
MAIN :
92
DISML EQU 30H
DISMH EQU 31H
DISHL EQU 32H
DISHH EQU 33H ; 显示分,时的个时位
TFLAG EQU 34H ; 时间秒标志,判是否到 50
个 0.2 秒,即 50*0.2=1 秒
SETFLAG EQU 35H ; 设置标志,依次从个位到
十位到百位到千位
ADDFLAG EQU 36H
MFLAG EQU 37H ; 时间分标志,判是否到 60
个一秒,即一分
MOV DISML,#00H
MOV DISMH,#00H
MOV DISHL,#00H
MOV DISHH,#00H ; 显示分,时的个时位初值
MOV TFLAG,#00H ; 时间秒标志初值
MOV SETFLAG,#00H ; 设置标志初值
MOV ADDFLAG,#00H ; 设数加标志
MOV MFLAG,#00H ; 时间分标志
MOV SCON,#00H ; 串行口工作于方式 0 (同
步移位)
MOV TMOD,#00000001B; 定时器 0 工作于方式 1
MOV TL0,#0EEH
MOV TH0,#31H ; 设定时时间为 0.05 秒,定
时 20 次则一秒
SETB EA ; 开总中断
SETB ET0 ; 开定时器 0 中断允许
SETB EX0 ; 开外中断 0 允许
93
SETB TR0 ; 开定时 0 运行
SETB IT0 ; 外中断 0 下降沿触发
DIS:
ACALL DISPLAY ; 调用显示时钟程序
AJMP CRITERION ; 调判断程序,按键是否按
了。
; ACALL DELAY
; AJMP DIS
DIN0:
PUSH ACC
; 设置时是否出错,比如小时设到超过了 23//////////
MOV A,DISHH
CJNE A,#02H,INCC
MOV A,DISHL
CLR C
SUBB A,#04H
JC INCC
MOV SETFLAG,#06H
AJMP RE
;/////////////////////////////////////////////
; 是否到一秒 ///////////////////////////////////
INCC: INC TFLAG
MOV A,TFLAG
CJNE A,#19,RE
MOV TFLAG,#00H
;/////////////////////////////////////////////
; 是否到一分 ///////////////////////////////////
INC MFLAG
94
MOV A,MFLAG
CJNE A,#60,RE
MOV MFLAG,#00H
;/////////////////////////////////////////////
; 计分 /////////////////////////////////////////
INC DISML
MOV A,DISML
CJNE A,#0AH,RE
MOV DISML,#00H
INC DISMH
MOV A,DISMH
CJNE A,#06H,RE
MOV DISMH,#00H
;/////////////////////////////////////////////
; 计时 /////////////////////////////////////////
; 计时分两种情况,分为小时的高位到 2 和没到 2 ,没到 2 时时
低位是逢 10 进位,到 2 后,时低位到 4 则全归 0
MOV A,DISHH
CJNE A,#02H,HJ
;/////////////////////////////////////////////
; 第一种情况 ///////////////////////////////////
INC DISHL
MOV A,DISHL
CJNE A,#04H,RE
MOV DISHL,#00H
MOV DISHH,#00H
AJMP RE
;/////////////////////////////////////////////
95
; 第二种情况 ///////////////////////////////////
HJ: INC DISHL
MOV A,DISHL
CJNE A,#0AH,RE
MOV DISHL,#00H
INC DISHH
;/////////////////////////////////////////////
RE:
MOV TL0,#0EEH
MOV TH0,#31H ; 设定时时间为 0.02 秒,定
时 50 次则一秒
POP ACC
RETI ; 退出中断
INT:
PUSH ACC
JB P3.2,EXIT
MOV R3,#0FFH
DJNZ R3,$
JB P3.2,EXIT ; 判键抖
MOV A,SETFLAG
CJNE A,#00H,ADD2
AJMP SETKEY
ADD2: CJNE A,#06H,B0 ; 是错误了吗,是的,去恢
复
MOV SETFLAG,#00H
本文关键字:电子钟 51单片机,单片机-工控设备 - 51单片机
上一篇:MCS 51 指令速查表