;********WAVE-E6000/T**************************
;*MCU: AT89C51 *
;*MCU-crystal: 6M *
;*Version: 00 *
;*Last Updata: *
;*Author: *
;*Description: *
;**********************************************
KEY_BUF EQU 22H ;定义为标志寄存器
C_HOUR EQU 23H
C_MINUTE EQU 24H
C_SECOND EQU 25H
;-----------------------------------------------
ORG 0000H ;
AJMP MAIN ;到主程序
ORG 000BH ;
AJMP QI ;到定时器中断0
ORG 0030H ;
;**********************************************
MAIN: MOV 21H,#00H ;清通用寄存器
MOV 22H,#00H ;
MOV 23H,#00H ;
MOV 24H,#00H ;
MOV 25H,#00H ;
MOV 26H,#00H ;
CLR 00H ;清位标志
CLR 01H ;
CLR 02H ;
CLR 03H ;
MOV TL0,#00H ;
MOV TH0,#00H ;
MOV TMOD,#01H ;设置定时器为方式1
MOV SP,#60H ;
SETB EA ;开总中断
SETB ET0 ;开定时器中断0
SETB TR0 ;定时器启动开始计数
;*********************************************
LOOP:
CALL KEY ;
CALL DISP ;
AJMP LOOP ;
;********************************************
QI: PUSH ACC ;入栈保护现场
PUSH PSW ;
CLR EA ;
CLR TR0 ;
MOV TH0,R1 ;
MOV TL0,R0 ;
CPL P1.0 '
TORETI:
SETB EA ;
SETB TR0 ;
POP PSW ;出栈
POP ACC ;
RETI ;
;*******************************************
;*******************************************
KEY:
MOV P1,#0FFH ;置P1口为1
MOV A,P1 ;
MOV KEY_BUF,A ;
CJNE A,#0FF,KEY1 ;
JB P3.0,K1 ;
AJMP KEY1 ;
K1: JB P3.1,K2 ;
AJMP KEY1 ;
K2: JB P3.2,KEY_OUT ;
AJMP KEY1 ;
KEY1:
CALL DELAY10MS ;
MOV P1,#0FFH ;置P1口为1
MOV A,P1 ;
MOV KEY_BUF,A ;
CJNE A,#0FF,KEY3 ;
KEY2: JB P3.0,K1 ;
AJMP KEY3 ;
K1: JB P3.1,K2 ;
AJMP KEY3 ;
K2: JB P3.2,K3 ;
AJMP KEY3 ;
KEY_OUT: RET ;
;------------------------------------------
KEY3:
JB P2.0,S1 ;
S1_1:
CALL DISP ;
JNB P2.0,S1_1 ;
CLR EA ;
MOV R1,#3CH ;
MOV R0,#0B0H ;
MOV C_HOUR,#00H ;10Hz
MOV C_MINUTE,#10H ;0010HZ来表示
SETB TR0 ;
SETB EA ;
AJMP KEY_OUT ;
;-----------------------------------------
S1:
JB P2.1,S2 ;
S2_2:
CALL DISP ;
JNB P2.1,S2_2 ;
CLR EA ;
MOV R1, #0D6H ;
MOV R0, #78H ;
MOV C_HOUR,#01H ;100Hz
MOV C_MINUTE,#00H ;0100HZ来表示
SETB TR0 ;
SETB EA ;
AJMP KEY_OUT ;
;----------------------------------------
S3:
JB P2.2,S4 ;
S2_3:
CALL DISP ;
JNB P2.1,S2_3 ;
CLR EA ;
MOV R1, #0F6H ;
MOV R0, #3CH ;
MOV C_HOUR,#02H ;200Hz
MOV C_MINUTE,#00H ;0200HZ来表示
SETB TR0 ;
SETB EA ;
AJMP KEY_OUT ;
;----------------------------------------
S4:
;****************************************
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
;****************************************
DISP: MOV R6,C_HOUR
MOV DPTR,#TAB
MOV A,R6
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
CLR P3.3
ACALL DL ;SEND DISPPLAY HOUR HIGHT BIT
SETB P3.3
MOV A,R6
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
CLR P3.5
ACALL DL
SETB P3.5 ;SEND DISPPLAY HOUR LOW BIT
MOV R7,C_MINUTE
MOV A,R7
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
CLR P3.6
ACALL DL
SETB P3.6 ;SEND DISPPLAY MINUTE HIGHT BIT
MOV A,R7
ANL A,#0FH
MOVC A,@A+DPTR
MOV P1,A
CLR P3.7
ACALL DL
SETB P3.7 ;SEND DISPLAY MINUTE LOW BIT
RET
;**************************************
DL1MS: MOV 30H,#02H ;延时1MS
DL1: MOV 31H,#0FFH
DL2: DJNZ 31H,DL2
DJNZ 30H,DL1
RET
;****************************************
DELAY10MS:
MOV R5,#3 ;延时10MS
DL1: MOV R6,#200
DL2: MOV R7,#125
DL3: DJNZ R7,DL3
DJNZ R6,DL2
DJNZ R5,DL1
RET
END