ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIME
;×××××主程式部分:×××××
ORG 0100H
MAIN:MOV SP,#50H
MOV 20H,#00H ;秒鐘 BIN
MOV 21H,#00H ;分鐘 BIN
MOV 22H,#00H ;小時 BIN
MOV 23H,#01H
MOV 24H,#01H
MOV 25H,#00H
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#00H
MOV 35H,#00H
MOV 36H,#01H
MOV 37H,#00H
MOV 38H,#01H
MOV 39H,#00H
MOV TMOD,#01H ;16位計數器
MOV TH0,#03CH ;賦計數初值
MOV TL0,#0B0H
MOV IE,#10000111B
SETB TR0 ;T0啟動計數
MOV R2,#14H
LOOP: LCALL TIMEPRO
LCALL DISPLAY1
JB P1.1,M1
LCALL SETTIME ;呼叫設定時間程式
LJMP LOOP
M1:JB P1.2,M2
LCALL SETATIME
LJMP LOOP
M2:JB P1.4,M4
LCALL LOOKATIME ;呼叫設定鬧鐘時間程式
M4:LJMP LOOP
DELAY:MOV R4,#030H ;延時時間
DL00:MOV R5,#0FFH
DL11:MOV R6,#9H
DL12:DJNZ R6,DL12
DJNZ R5,DL11
DJNZ R4,DL00
RET
SETTIME:
L0:LCALL DISPLAY1
MM1: JB P1.2,L1
MOV C,P1.2
JC MM1
LCALL DELAY1 ;呼叫延時
JC MM1
MSTOP1: MOV C,P1.2
JNC MSTOP1 ;判斷P1.2是否釋放?釋放則繼續
LCALL DELAY1 ;呼叫延時
MOV C,P1.2
JNC MSTOP1
INC 22H ;小時增加1
MOV A,22H
CJNE A,#18H,GO12 ;判斷小時是否到24時?未到繼續回圈
MOV 22H,#00H ;小時復位
MOV 34H,#00H
MOV 35H,#00H
LJMP L0
L1:JB P1.3,L2
MOV C,P1.3
JC L1
LCALL DELAY1 ;延時
JC L1
MSTOP2: MOV C,P1.3
JNC MSTOP2 ;判斷P1.3是否釋放?釋放則繼續
LCALL DELAY1 ;呼叫延時
MOV C,P1.3
JNC MSTOP2
INC 21H ;分鐘增加一
MOV A,21H
CJNE A,#3CH,GO11
MOV 21H,#00H ;分鐘復位
MOV 32H,#00H
MOV 33H,#00H
LJMP L0
GO11:MOV B,#0AH ;將A中的內容分成高低兩部分
DIV AB
MOV 32H,B
MOV 33H,A
LJMP L0
GO12: MOV B,#0AH
DIV AB
MOV 34H,B
MOV 35H,A
LJMP L0
L2:JB P1.4,L0
MOV C,P1.4
JC L2
LCALL DELAY1 ;呼叫延時
MOV C,P1.4
JC L2
STOP1:
MOV C,P1.4 ;判斷按鍵P1.4是否釋放?
JNC STOP1
LCALL DELAY1 ;呼叫延時
MOV C,P1.4
JNC STOP1
LJMP LOOP
;×××××設定鬧鐘時間×××××
SETATIME:LCALL DISPLAY2 ;呼叫時間運行
N0:LCALL DISPLAY2
MM2: JB P1.3,N1 ;判斷P1.3是否按下?
MOV C,P1.3
JC MM2
LCALL DELAY1
JC MM2
MSTOP3: MOV C,P1.3 ;判斷P1.3是否釋放?
JNC MSTOP3
LCALL DELAY1
MOV C,P1.3
JNC MSTOP3
INC 24H ;設定小時增加1
MOV A,24H
CJNE A,#24,GO22
MOV 24H,#00H
MOV 38H,#00H
MOV 39H,#00H
LJMP N0
N1:JB P1.1,N2 ;判斷P1.1是否按下?
MOV C,P1.1
JC N1
LCALL DELAY1
JC N1
MSTOP4: MOV C,P1.1 ;判斷P1.1是否釋放?
JNC MSTOP4
LCALL DELAY1
MOV C,P1.1
JNC MSTOP4
INC 23H ;設定鬧鐘分鐘增加1
MOV A,23H
CJNE A,#60,GO21 ;判斷A是否到60分?
MOV 23H,#00H ;分鐘復位
MOV 36H,#00H
MOV 37H,#00H
LJMP N0
GO21:MOV B,#0AH ;將A中的內容分成高低兩部分
DIV AB
MOV 36H,B
MOV 37H,A
LJMP N0
GO22: MOV B,#0AH
DIV AB
MOV 38H,B
MOV 39H,A
LJMP N0
N2:JB P1.4 ,N0 ;判斷P1.4是否按下?
MOV C,P1.4
JC N2
LCALL DELAY1
MOV C,P1.4
JC N2
STOP2: MOV C,P1.4 ;判斷P1.4是否釋放?
JNC STOP2
LCALL DELAY1
MOV C,P1.4
JNC STOP2
LJMP LOOP
TIMEPRO:MOV A,21H
MOV B,23H
CJNE A,B,BK ;判斷分鐘是否運行到設定的鬧鐘的分鐘?
MOV A,22H
MOV B,24H
CJNE A,B,BK ;判斷時鐘是否運行到設定的鬧鐘的時鐘?
SETB 25H.0
MOV C,25H.0
JC XX
XX: LCALL TIMEOUT ;呼叫時間鬧鐘回應程式
BK:RET
TIMEOUT:
X1:LCALL BZ ;呼叫喇叭回應程式
LCALL DISPLAY2
CLR 25H.0
JB P1.4, X1 ;判斷P1.4是否按下?
LCALL DELAY
CLR 25H.0
LJMP DISPLAY1
BZ: CLR P3.7 ;喇叭回應程式
MOV R7,#10 ;回應延時時間
T2: MOV R6,#10
T3: DJNZ R6,T3
DJNZ R7,T2
SETB P3.7
RET
LOOKATIME:LCALL DISPLAY2 ;呼叫時間運行程式
MM: JB P1.4,LOOKATIME ;判斷按鍵P1.4是否按下
MOV C,P1.4
JC MM
LCALL DELAY1
MOV C,P1.4
JC MM
STOP3: MOV C,P1.4
JNC STOP3
LCALL DELAY1
MOV C,P1.4
JNC STOP3
LJMP LOOP
DELAY1: MOV R4,#14H ;時間延時
DL001: MOV R5,#0FFH
DL111: DJNZ R5,DL111
DJNZ R4,DL001
RET
;×××××時間運行程式×××××
TIME: PUSH ACC ;現場保護
PUSH PSW
MOV TH0,#03CH ;賦初值
MOV TL0,#0B0H
DJNZ R2,RET0
MOV R2,#14H
MOV A,20H
CLR C
INC A ;秒鐘自加1
CJNE A,#3CH,GO1 ;判斷秒鐘是否到60秒?
MOV 20H,#0 ;到60秒復位
MOV 30H,#0
MOV 31H,#0
MOV A,21H
INC A ;分鐘自加1
CJNE A,#3CH,GO2 ;判斷分鐘是否到60分?
MOV 21H,#0H ;到60分復位
MOV 32H,#0
MOV 33H,#0
MOV A,22H
INC A ;時鐘自加1
CJNE A,#18H,GO3 ;判斷時鐘是否到24時?
MOV 22H,#00H ;到24時復位
MOV 34H,#0
MOV 35H,#0
AJMP RET0
GO1: MOV 20H,A
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
AJMP RET0
GO2: MOV 21H,A
MOV B,#0AH
DIV AB
MOV 33H,A
MOV 32H,B
AJMP RET0
GO3: MOV 22H,A
MOV B,#0AH
DIV AB
MOV 35H,A
MOV 34H,B
AJMP RET0
RET0: POP PSW ;恢復現場
POP ACC
RETI
;×××××運行部分×××××
DISPLAY1: MOV R0,#30H
MOV R3,#0FEH
MOV A,R3
PLAY1: MOV P2,A
MOV A,@R0
MOV DPTR,#DSEG1 ;表首地址送DPTR
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1
MOV P2,#0FFH ;送高電平到P2
MOV A,R3
RL A ;
JNB ACC.6,LD1
INC R0
MOV R3,A
LJMP PLAY1 ;呼叫查表程式
LD1: RET
DISPLAY2: PUSH ACC ;現場保護
PUSH PSW
MOV R0,#36H
MOV R3,#0FBH
MOV A,R3
PLAY2: MOV P2,A
MOV A,@R0
MOV DPTR,#DSEG1 ;表首地址送DPTR
MOVC A,@A+DPTR ;查ASCII特碼
MOV P0,A ;查表結果送A
LCALL DL1
MOV P2,#0FFH ;送高電平到P2
MOV A,R3
RL A
JNB ACC.6,LD2
INC R0
MOV R3,A
LJMP PLAY2
LD2: POP PSW ;恢復現場
POP ACC
RET
;×××××延時時間×××××
DL1: MOV R7,#02H ;延時時間
DL: MOV R6,#0200H
DL6: DJNZ R6,$
DJNZ R7,DL
RET
DSEG1:DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END
uj5u.com熱心網友回復:
好長啊。。。有幾個基本的陳述句,你看著改吧
void OutPort_b(unsigned short int port, unsigned char value)
{
// mov edx, *(&port);
__emit__(0x8b, 0x95, &port);
// mov al, *(&value);
__emit__(0x8a, 0x85, &value);
// out dx, al;
__emit__(0x66, 0xee);
}
//---------------------------------------------------------------------------
void OutPort_w(unsigned short int port, unsigned short int value)
{
// mov edx, *(&port);
__emit__(0x8b, 0x95, &port);
// mov ax, *(&value);
__emit__(0x66, 0x8b, 0x85, &value);
// out dx, ax; __emit__(0xef);
}
//---------------------------------------------------------------------------
unsigned char InPort_b(unsigned short int port)
{
unsigned char value;
// mov edx, *(&port);
__emit__(0x8b, 0x95, &port);
// in al, dx;
__emit__(0x66, 0xec);
// mov *(&value), al;
__emit__(0x88, 0x85, &value);
return value;
}
//---------------------------------------------------------------------------
unsigned short int InPort_w(unsigned short int port)
{
unsigned short int value;
// mov edx, *(&port);
__emit__(0x8b, 0x95, &port);
// in ax, dx
__emit__(0xed);
// mov *(&value), ax
__emit__(0x66, 0x89, 0x85, &value);
return value;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/75900.html
標籤:基礎類
上一篇:QT 下ble設備相關
