发布时间 : 星期日 文章单片机电子时钟汇编语言程序更新完毕开始阅读1a81486a7e21af45b307a8cc
DEC R0
MOV @R0, A RET
; ; 个位数缓冲单元清\返回
;键盘扫描子程序*************************************************** KEY: LCALL KEYCHULI ; 调键值处理子程序 JZ EXIT LCALL DIR LCALL DIR JZ EXIT
; ; ;
没有键按下转到返回 ;
调显示去抖动
LCALL KEYCHULI MOV B, 20H KEYSF: LCALL KEYCHULI JZ KEY1 LCALL DIR
调键值处理子程序 没有键按下转到返回
; 保存键值
; 调键值处理子程序 ; ; ; ;
键释放,转到恢复键值 ; 调显示子程序延时 等到键释放
键值送20H单元保存 返回 ; ;
保护现场
改变寄存器组号
AJMP KEYSF KEY1: MOV 20H, B EXIT: RET KEYCHULI: PUSH PSW CLR RS1
SETB RS0
MOV P1, #0FFH ; MOV A, P1 ; CPL A ;
先向P1口写1
P1口值送累加器A A值取反
保存P1口的低4位 A值送20H保存 ; ; ;
改变寄存器组号 恢复现场
ANL A, #0FH ; MOV 20H, A ; CLR RS1 CLR RS0 POP PSW
RET
;显示子程序******************************************************** DIR: PUSH PSW ; 恢复现场 SETB RS1
;
改变寄存器组号
CLR RS0
MOV R0, #79H ; MOV R3, #0FBH ; LD0: MOV P2, R3 ; MOV A, @R0 DISP1: ADD A, #1BH MOVC A, @A+PC DISP2: MOV P0, A ; MOV R2, #09H ;
建立显示缓冲区首地址 设置位控码 送位控码
; 缓冲区值送累加器A ; 取段控码并送A中 送段控码
设置延时循环次数
ACALL DEY ; 延时点亮
INC R0 ; MOV A, R3 ; JNB ACC.1, HERE ; JB
ACC.5, LD2
;
RL A RL A
缓冲区地址加1 位控码送A
是否到最高位,是转到返回
不到向显示器高位移位
LD2:RL A
MOV R3, A AJMP LD0 HERE: CLR RS0 CLR RS1 POP PSW RET DBB: DB 0C0H DB 0F9H DB 0A4H DB 0B0H DB 99H DB 92H DB 82H
DB DB DB DB
0F8H 80H 90H 0CH
; 位控值保存到R4中
;
继续扫描 改变寄存器组号
;
; 恢复现场 ; 返回
DB 0FFH
;整点报时********************************************************** BEEP_BL: MOV R6,#100 BL1:CALL BL2 CPL BEEP DJNZ R6,BL1 MOV R5,#25 CALL DEY RET ;返回计时 BL2:MOV R7,#180 BL3:NOP
DJNZ R7,BL3
RET
;延时子程序******************************************************** DEY: PUSH 12H DEY0: PUSH 12H
DEY1: PUSH 12H
DEY2: DJNZ R2, DEY2 POP 12H
DJNZ R2, DEY1
POP 12H
DJNZ R2, DEY0 POP 12H
DJNZ R2, DEY
RET END