电子时钟程序设计

程序设计如下:
KM1 BIT P1.0
KM2 BIT P1.1
KM3 BIT P1.2
RS EQU P2.0
RW EQU P2.1
E EQU P2.2
IN_0 EQU P0
SECL EQU 40H ;秒低位
SECH EQU 41H ;秒高位
MH1 EQU 42H ;冒号
MINL EQU 43H ;分低位
MINH EQU 44H ;分高位
MH2 EQU 45H ;冒号
HOURL EQU 46H ;时低位
HOURH EQU 47H ;时高位
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP INTT_0
MAIN: MOV R2,*20
ACALL INIT_LCD ;初始化液晶
MOV R5,*00H
MOV IN_0,*84H ;写入显示起始地址〔第一行第五个位置)
ACALL ENABLE
MOV TH0,*3CH ;50MS
MOV TL0,*0B0H
MOV TMOD,*01H
ACALL SJCZ
SETB EA
SETB ET0
SETB TR0
LCALL A1
START1: LCALL WDATA1
LCALL WDATA2
AJMP START1
;*******控制键*******
A1: LCALL WDATA2
LCALL WDATA1
JNB KM1,S1
JNB KM2,S2
JNB KM3,S3
AJMP A1
;*****调整小时*****
S1: LCALL DELAYL
KM1,A1
MOV A,HOURH
CJNE A,*02H,ST1
MOV A,HOURL
CJNE A,*03H,ST2
MOV HOURH,*00H
MOV HOURL,*00H
AJMP J1
ST1: MOV A,HOURL
CJNE A,*09H,ST2
INC HOURH
MOV HOURL,*00H
AJMP J1
ST2: INC HOURL
AJMP J1
J1: KM1,S1
LCALL WDATA1
AJMP J1
;*****调整分钟*****
S2: LCALL DELAYL
KM2,A1
MOV A,MINH
CJNE A,*05H,ST3
MOV A,MINL
CJNE A,*09H,ST4
MOV MINH,*00H
MOV MINL,*00H
AJMP J2
ST3: MOV A,MINL
CJNE A,*09H,ST4
INC MINH

MOV MINL,*00H
AJMP J2
ST4: INC MINL
AJMP J2
J2: KM2,S2
LCALL WDATA1
AJMP J2
;*****调整秒*****
S3: LCALL DELAYL
KM3,A1
MOV A,SECH
CJNE A,*05H,ST5
MOV A,SECL
CJNE A,*09H,ST6
MOV SECH,*00H
MOV SECL,*00H
AJMP J3
ST5: MOV A,SECL
CJNE A,*09H,ST6
INC SECH
MOV SECL,*00H
AJMP J3
ST6: INC SECL
AJMP J3
J3: KM3,S3
LCALL WDATA1
AJMP J3
;****设定显示初值***
SJCZ: MOV 40H,*0
MOV 41H,*0
MOV 42H,*10
MOV 43H,*9
MOV 44H,*5
MOV 45H,*10
MOV 46H,*3
MOV 47H,*2
RET
INTT_0: PUSH PSW
PUSH ACC
MOV TL0,*0B0H
MOV TH0,*3CH
DJNZ R2,TT
MOV R2,*20
INC SECL
-
;显示初值是 23:59:00
;T0 定时器中断
;送定时初值
;秒记数,到 60S 就清 0
. z.
-
MOV A,SECL
CJNE A,*0AH,TT
INC SECH
MOV SECL,*00H
MOV A,SECH
CJNE A,*06H,TT
MOV SECH,*00H
INC MINL ;分记数,到 60 分请 0
MOV A,MINL
CJNE A,*0AH,TT
MOV MINL,*00H
INC MINH
MOV A,MINH
CJNE A,*06H,TT
MOV MINH,*00H
INC HOURL
MOV A,HOURL
CJNE A,*04H,TT2
MOV A,HOURH
CJNE A,*02H,TT1
MOV HOURL,*00H
MOV HOURH,*00H
AJMP TT
TT2: CJNE A,*0AH,TT
MOV HOURL ,*00H
INC HOURH
AJMP TT
TT1: CJNE A,*02H,TT
MOV HOURL,*00H
MOV HOURH,*00H
AJMP TT
TT: POP ACC
POP PSW
RETI
;****液晶初始化****
INIT_LCD:ACALL DELAYL
MOV IN_0,*01H
ACALL ENABLE
MOV IN_0,*38H
ACALL ENABLE
MOV IN_0,*0CH
ACALL ENABLE
MOV IN_0,*06H
ACALL ENABLE
;时记数,到 24 时清 0
;延时,等待 LCD 完成电源的启动
;清屏并光标复位
;设置显示模式:8 位 2 行 5*7 点阵
;显示器开、光标关、光标不闪烁
;文字不动,光标自动右移

MOV IN_0,*0C0H ;写入显示起始地址〔第二行第一个位置〕
ACALL ENABLE
RET
;****写数据程序****
WDATA1: MOV IN_0,*84H ;写入显示起始地址〔第一行第五个位置)
ACALL ENABLE
MOV R1,*08H
MOV R0,*47H
WDATA_1: MOV A,R0
MOV DPTR,*TABLE
MOVC A,A+DPTR
MOV IN_0,A ;写入数据
SETB RS
CLR RW
CLR E
ACALL CHECKBUSY
SETB E ; 忙检测
DEC R0
DJNZ R1,WDATA_1
MOV R1,*08H
RET
WDATA2: MOV IN_0,*0C0H ;写入显示起始地址〔第二行第一个位置〕
ACALL ENABLE
MOV R1,*10H
MOV R0,*00H
MOV DPTR,*TAB
WDATA_2: MOV A,R0
MOV DPTR,*TAB
MOVC A,A+DPTR
MOV IN_0,A ;写入数据
SETB RS
CLR RW
CLR E
ACALL CHECKBUSY
SETB E ;忙检测
INC R0
DJNZ R1,WDATA_2
MOV R1,*08H
RET
;****显示符号表****
TABLE: DB 30H,31H,32H,33H,34H,35H ;0 1 2 3 4 5
DB 36H,37H,38H,39H,3AH,80H,2EH ;6 7 8 9 : 空格 .
TAB: DB " MADE IN CHINA"
;******写指令****

ENABLE: CLR RS ;写入控制命令的子程序
CLR RW
CLR E
ACALL CHECKBUSY
SETB E
RET
CHECKBUSY:MOV IN_0,*0FFH ;判断液晶显示器是否忙的子程序
CLR RS
SETB RW
CLR E
NOP
SETB E
P0.7,CHECKBUSY
RET
DELAYL: MOV R7,*100
D1: MOV R6,*200
DJNZ R6,$
DJNZ R7,D1
RET
END
.
;如果 P0.7 为高电平表示忙就循环等待
;延时程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

精品资料学习库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值