单片机89c2051程序1!

到永远
;*********************************************************************
IN_KEY: ACALL IN_KEYCLS
JZ IN_KEY9
CLR SPK_OUT ; ON SPK
MOV CLK_RAM-1,#00 ; ON SPK TIME
MOV S_BUF,#00
MOV KEY_IN_BUF,P1
IN_KEY9: RET
IN_KEYCLS: MOV A,P1
ORL A,#87H
CPL A
RET
; CL_DEC_KEY
CL_DEC: JNB FLASH,CL_DECEND
MOV A,R3 ; - DEC 46H P1.6
MOV R5,#23H
JZ CL_DEC3
MOV R5,#59H
MOV R3,#01H
CL_DEC3: MOV A,#KEY_BUF
ADD A,R3
MOV R1,A
MOV A,@R1
JZ CL_DEC5 ;
ADD A,#99H ; DEC "1"
DA A
SJMP CL_DEC8
CL_DEC5: MOV A,R5
CL_DEC8: MOV @R1,A
CL_DECEND: AJMP CL_KEYEND
; __________________________________________________
CL_SET: JNB FLASH,CL_FCYY
SETB F_END
AJMP CL_SETEND
CL_FCYY: CLR T_DISP ; DISP SELECT
SETB FLASH
MOV KEY_BUF,CLK_RAM-5 ; H TO KEY_BUF
MOV KEY_BUF+1,CLK_RAM-4 ; M TO KEY_BUF-1
MOV R3,#00H ; R3 SELECT L/R
MOV R4,#00H ; ENTER NUMB=0
CL_SETEND: AJMP CL_KEYEND
; -------------------------------------------------------
; _______________________________________________________
CL_INC: JNB FLASH,CL_INCEND
MOV A,R3
MOV R5,#24H
JZ CL_INC5
MOV R5,#60H
MOV R3,#01H
CL_INC5: MOV A,#KEY_BUF
ADD A,R3 ;R3=0/1 0 IS H ,1 IS M
MOV R1,A
MOV A,@R1
ADD A,#01H
DA A
MOV @R1,A
CLR C
SUBB A,R5
JC CL_INCEND
MOV @R1,#00
CL_INCEND: AJMP CL_KEYEND
; -----------------------------------------------
CL_KEY: JNB RING,CL_KEY_R ; ON RING
JNB S_FLASH,CL_KEY5
CLR S_FLASH
ACALL CL_KEY_DD ; F_DISP
AJMP CL_KEND3
CL_KEY5: JNB 43H,CL_SET ; 28_BYTE
JNB 44H,CL_NEXT ; ->
JNB 45H,CL_INC ; + INC
JNB 46H,CL_DEC ; - DEC
CL_KEY_R: SETB RING ; OFF RING
AJMP CL_KEND6
CL_KEYEND: JNB FLASH,CL_KEND6
JNB F_END,CL_KEND3
SETB T_DISP
CLR FLASH
CLR F_END
CL_KEND3: ACALL CL_KEY_DD
CL_KEND6: CPL CS_W
ACALL IN_KEYCLS
JNZ CL_KEND6
RET
; _______________________________________________________
CL_NEXT: JNB FLASH,CL_NEXTENDB
INC R4 ; ENTEN -> NUMB
MOV A,R4
CLR C
SUBB A,#F_MAX ; F_MAX=(CLK)2+LAMP*4+RING*2
MOV A,R4
JC CL_NEXT0 ; < GOTO CONTIUE
SETB F_END ; GOTO END
AJMP CL_NEXT3
CL_NEXT0: JNB ACC.0,CL_NEXT1 ; IS M GOTO CONTIUE
MOV R3,#01H ; NO M GOTO END
CL_NEXTENDB: AJMP CL_NEXTENDC
CL_NEXT1: MOV R3,#00H
CJNE A,#02H,CL_NEXT3 ; ENTER NUMB(R4) =2 is time end
MOV CLK_RAM-5,KEY_BUF ; H TO CLK_RAM-5
MOV CLK_RAM-4,KEY_BUF+1 ; M TO CLK_RAM-4
MOV CLK_RAM-3,#00
MOV CLK_RAM-2,#00
; ACALL WRITE_8583
MOV KEY_BUF,#1BH
MOV KEY_BUF+1,#0A1H ; A='A'_KAI E_CLOSE "1-A1"
MOV LS_BYTE,#00H ;
AJMP CL_NEXTEND
CL_NEXT3: CLR C
SUBB A,#04H
MOV R5,A ; WRITE EEPROM ADDRS
INC A
INC A
MOV LS_BYTE,A ; READ EEPROM ADDRS
ACALL WRITE_E2PROM
JB F_END,CL_NEXTENDC
MOV A,R4
CJNE A,#F_2,CL_NEXT6 ; F_2=12H
MOV KEY_BUF,#2BH ; '2-01'
MOV KEY_BUF+1,#01H
SJMP CL_NEXTEND
CL_NEXT6: CLR C
SUBB A,#F_2
JNC CL_NEXT8 ; GOTO 2# FUCTION
MOV KEY_BUF,#1BH ; 1# FUNCTION CL
CLR C
MOV A,R4
SUBB A,#02H ; TIME NUMB
RR A ; DIV 2
JB ACC.0,CL_NEXT63 ; GOTO OFF
RR A ; GOTO ON
ORL A,#0A0H ;
INC A
SJMP CL_NEXT65
CL_NEXT63: RR A
ORL A,#0E0H ;OR "L"
INC A
CL_NEXT65: MOV KEY_BUF+1,A
SJMP CL_NEXTEND
CL_NEXT8: MOV KEY_BUF,#2BH ; 2# FUNCTION
MOV A,R4
SUBB A,#F_2 ; F_2=2+RING*2
RR A
INC A
MOV KEY_BUF+1,A
CL_NEXTEND:
SETB S_FLASH
ACALL CL_KEY_DD
ACALL CL_KEY_DD
MOV R5,LS_BYTE
ACALL SEQU_READ_2
CL_NEXT_LP: CPL CS_W
JNB P1.4,CL_NEXT_LP
CL_NEXTENDA: AJMP CL_KEND6
CL_NEXTENDC: AJMP CL_KEYEND
CL_KEY_DD: MOV R1,#KEY_BUF
ACALL F_DISP
CL_KEND5: CPL CS_W
MOV A,CLK_RAM-1
CJNE A,#100,CL_KEND5
RET
; ********************************************************************
; ********************************************************************
m_init:
MOV 0AH,#01 ; R2
MOV 0BH,#DISP_BUF ; R3
MOV PSW,#00H
MOV TL0,#0D8H
MOV TH0,#0F8H
mov tmod,#11h
SETB TR0
MOV IE,#10000010B
SETB T_DISP
SETB LAMP
SETB RING
RET
; ______________________________________________
F_DISP: MOV DPTR,#LIB
MOV R0,#DISP_BUF
MOV A,@R1
ANL A,#0FH
MOVC A,@A+DPTR
MOV @R0,A
INC R0
MOV A,@R1
ANL A,#0F0H
SWAP A
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC R0
INC R1
MOV A,@R1
ANL A,#0FH
MOVC A,@A+DPTR
MOV @R0,A
INC R0
MOV A,@R1
ANL A,#0F0H
SWAP A
MOVC A,@A+DPTR
MOV @R0,A
MOV DISP_BUF+5,DISP_BUF
MOV DISP_BUF+6,DISP_BUF+1
MOV DISP_BUF+8,DISP_BUF+3
MOV DISP_BUF+9,DISP_BUF+4
JB S_FLASH,F_DISP9
F_DISP3: JNB FLASH,F_DISP9
MOV A,R3
JNZ F_DISP5
MOV DISP_BUF+5,#00H ; R3=0 L_DISP_FLASH
MOV DISP_BUF+6,#00H
SJMP F_DISP9
F_DISP5:
MOV DISP_BUF+8,#00H ; R3=1 R_DISP_FLASH
MOV DISP_BUF+9,#00H
F_DISP9: RET
; ********************************************************************

今番良晤,豪兴非浅,他日网络相逢,再当把酒言欢.咱们就此别过!