智能定時插座程序
;**************************************************************
;電院 單片機設計
:智能定時插座
;**************************************************************
;功能描述:帶鍵盤設置的時間計數(shù)器
;功能:實現(xiàn)1分鐘到99小時99分鐘內的定時。可定時關機或定時開機。
;各個鍵的功能:
;S1:小時十位調整
;S2:小時個位調整
;S3;分鐘十位調整
;S4:分鐘各位調整
;可擴展功能:時間顯示
;硬件描述:
;P0口顯示字段。P2.0-2.3共陽數(shù)碼管控制端。P1.0-P1.3按鍵
;P3.4繼電器控制端
;**************************************************************
STARTRUN BIT 01H;開始運行標志
KEYOK BIT 00H;有鍵按下標志
SCOUNT EQU 21H;分計數(shù)器
SETVAL EQU 22H;預置分值儲存單元
SCOUNT2 EQU 26H;小時計數(shù)器
SETVAL2 EQU 27H;預置小時儲存單元
TCOUNT EQU 24H;;秒計數(shù)器
TCOUNTER EQU 250;軟件計數(shù)器的計數(shù)值,X定時器4MS等于1S
KEYVAL EQU 25H;鍵值儲存單元
DISPBUF EQU 58H;顯示緩沖區(qū)
COUNTER EQU 57H;計數(shù)器,顯示程序通過它得知現(xiàn)在正在顯示的數(shù)碼管
TMRVAR EQU 61536;設定4MS。65536-4000定時器初值
ORG 0000H
JMP START
ORG 0*8+3;INTO中斷入口
RETI
ORG 1*8+3;定時器0中斷入口
LJMP INT_T0
ORG 2*8+3
RETI
ORG 3*8+3
RETI
ORG 4*8+3
RETI
;*******************主程序設定************************************
START:
MOV R7,#60
MOV R4,#60
MOV SP,#5FH
MOV SCOUNT,#0
MOV SCOUNT2,#0
MOV SETVAL,#00;啟動程序默認值為0
MOV SETVAL2,#00
MOV SCOUNT,SETVAL
MOV SCOUNT2,SETVAL2
CLR KEYOK
CLR STARTRUN
CALL INIT_T0
SETB EA
;********************主程序開始***************************************
LOOP:
CALL KEY;調用鍵盤程序
JB KEYOK,KEYPROC;如果有鍵按下,轉鍵盤處理程序
NEXT:
MOV A,SCOUNT;獲取分的數(shù)值
MOV B,#10
DIV AB
NEXT1:
MOV DISPBUF+2,A;送顯示緩沖區(qū)
MOV DISPBUF+3,B
NEXT2:
MOV A,SCOUNT2;獲取小時的數(shù)值
MOV B,#10
DIV AB
NEXT3:
MOV DISPBUF,A
MOV DISPBUF+1,B
JMP LOOP
;*******************鍵值處理程序****************************************
KEYPROC:
MOV A,KEYVAL;取得鍵值
JZ KEY1;如果鍵值是0,轉
DEC A
JZ KEY2;如果鍵值是1,轉
DEC A
JZ KEY3;如果鍵值是2,轉
JMP KEY4;如果鍵值是3,轉
KEY1:;對小時十位進行操作
INC DISPBUF;將顯示緩沖區(qū)的數(shù)加1
MOV A,DISPBUF
CJNE A,#9,EFT01
MOV DISPBUF,#0
SETB STARTRUN
EFT01:;鍵值處理
MOV B,#10
MUL AB
ADD A,DISPBUF+1
MOV SETVAL2,A
MOV SCOUNT2,SETVAL2
SETB STARTRUN
JMP LOOP
KEY2:
INC DISPBUF+1
MOV A,DISPBUF+1
CJNE A,#10,EFT02
MOV DISPBUF+1,#0
SETB STARTRUN
EFT02:
MOV A,DISPBUF
MOV B,#10
MUL AB
ADD A,DISPBUF+1
MOV SETVAL2,A
MOV SCOUNT2,SETVAL2
SETB STARTRUN
JMP LOOP
KEY3:
INC DISPBUF+2
MOV A,DISPBUF+2
CJNE A,#6,LEFT0
MOV A,#0
SETB STARTRUN
LEFT0:
MOV B,#10
MUL AB
ADD A,DISPBUF+3
MOV SETVAL,A
MOV SCOUNT,SETVAL
SETB STARTRUN
JMP LOOP
KEY4:
INC DISPBUF+3
MOV A,DISPBUF+3
CJNE A,#10,REFT0
MOV DISPBUF+3,#0
SETB STARTRUN
REFT0:
MOV A,DISPBUF+2
MOV B,#10
MUL AB
ADD A,DISPBUF+3
MOV SETVAL,A
MOV SCOUNT,SETVAL
SETB STARTRUN
JMP LOOP
;**************鍵盤程序********************************************************
KEY:
MOV P1,#0FFH
CLR KEYOK
MOV A,P1
ORL A,#11110000B
CPL A
JZ KEY_RET
CALL DELAY
MOV A,P1
ORL A,#11110000B
CPL A
JZ KEY_RET
SETB KEYOK
JNB ACC.0,KEY_1
MOV KEYVAL,#0
JMP KEY_RET
KEY_1:
JNB ACC.1,KEY_2
MOV KEYVAL,#1
JMP KEY_RET
KEY_2:
JNB ACC.2,KEY_3
MOV KEYVAL,#2
JMP KEY_RET
KEY_3:
MOV KEYVAL,#3
評論