?? lcdtimer.asm
字號(hào):
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INSERT0 ;INT0用于調(diào)節(jié)時(shí)間
ORG 0013H
LJMP INSERT1 ;INT1用于選擇調(diào)節(jié)定時(shí)或時(shí)間
ORG 001BH
LJMP INSERT_T1 ;T1定時(shí)
ORG 0050H
RS EQU P2.0
RW EQU P2.1
E EQU P2.2
MAIN: ANL TMOD,#0FH
ORL TMOD,#20H ;T1工作于方式2
MOV TH1,#38H ;定時(shí)250us
MOV TL1,#38H
SETB EA ;中斷控制初始化
SETB ET1
SETB EX0
SETB EX1
SETB IT0
SETB IT1
SETB PX0
SETB C ;所用標(biāo)志位初始化
MOV 00H,C
MOV 06H,C
CLR C
MOV 01H,C
MOV 02H,C
SETB E
MOV R2,#0 ;所用寄存器初始化
MOV R3,#0
MOV R4,#0
MOV R5,#12
MOV R6,#0
MOV 50H,#1
MOV 51H,#1
MOV P1,#01H ;LCD初始化
LCALL ENABLE ;調(diào)用命令生效子程序
LCALL DELAY ;調(diào)用保證控制字寫入的延時(shí)子程序
MOV P1,#06H
LCALL ENABLE
LCALL DELAY
MOV P1,#0CH
LCALL ENABLE
LCALL DELAY
MOV P1,#3CH
LCALL ENABLE
LCALL DELAY
MOV P1,#0C4H
LCALL ENABLE
LCALL DELAY
MOV DPTR,#TABLE
MOV R0,#8
MOV R1,#0
AGAIN: MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
LCALL EABLE1 ;調(diào)用寫入數(shù)據(jù)生效子程序
LCALL DELAY
INC R1
DJNZ R0,AGAIN
SETB TR1
RETURN: jb p2.7,return1 ;判斷電源是否斷掉
JNB 06H,RETURN
CLR C
MOV 06H,C ;電源標(biāo)志清零
mov p1,#08h ;關(guān)LCD
lcall enable
lcall delay
clr ex0 ;關(guān)外部中斷
clr ex1
ajmp return
return1:JNB P0.7,RETURN ;判斷是否允許報(bào)警
JNB 05H,RETURN ;判斷定時(shí)是否到達(dá)
CLR C
MOV 05H,C
CLR P2.5 ;點(diǎn)亮二極管
CLR P2.6 ;驅(qū)動(dòng)繼電器
AGAIN3: CPL P2.4 ;驅(qū)動(dòng)蜂鳴器
LCALL DELAY1
jb p2.7,pow
SETB P2.5 ;關(guān)掉二極管
SETB P2.6 ;關(guān)掉繼電器
SETB P2.4
ajmp return
pow: JB P0.7,AGAIN3
SETB P2.5 ;關(guān)掉二極管
SETB P2.6 ;關(guān)掉繼電器
SETB P2.4 ;關(guān)掉蜂鳴器
AJMP RETURN
;*************************
INSERT_T1: INC 50H ;T1中斷服務(wù)程序
MOV A,#250
CJNE A,50H,EXIT11
MOV 50H,#1
INC 51H
MOV A,#16
CJNE A,51H,EXIT11
MOV 51H,#1
INC R4 ;1s=16*250*250us
CJNE R4,#60,LP18
MOV 55H,#0
AJMP LP19
LP18: MOV 55H,R4
LP19: MOV P1,#0CAH ;秒鐘變化時(shí)顯示
LCALL ENABLE
LCALL DELAY
LCALL DISPLAY ;24#到12#的轉(zhuǎn)換
JB P0.6,H2411 ;判斷選擇的計(jì)數(shù)進(jìn)制
JNB 00H,LP131 ;判斷上一次是否是12#,是則不進(jìn)行轉(zhuǎn)換,否則轉(zhuǎn)換
CLR C
MOV 00H,C ;把進(jìn)制標(biāo)志改為12#
MOV A,#11 ;大于11,顯示pm,否則顯示am
SUBB A,R2
JC LP14
CLR C
MOV 02H,C
MOV 01H,C
MOV P1,#0CEH
LCALL ENABLE
LCALL DELAY
MOV P1,#41H
LCALL EABLE1
LCALL DELAY
MOV P1,#4DH
LCALL EABLE1
LCALL DELAY
MOV A,R2
JZ LP1C
LP131: AJMP LP13
H2411: AJMP H24
EXIT11: AJMP EXIT1
LP14: SETB C
MOV 02H,C
MOV P1,#0CEH
LCALL ENABLE
LCALL DELAY
MOV P1,#50H
LCALL EABLE1
LCALL DELAY
MOV P1,#4DH
LCALL EABLE1
LCALL DELAY
MOV A,#12
CLR C
SUBB A,R2
JC LP1B ;大于12,小時(shí)數(shù)值減12,否則不變
CLR C
MOV 01H,C
AJMP LP13
LP1C: MOV A,#12
ADD A,R2
MOV R2,A
AJMP LP1D
LP1B: SETB C
MOV 01H,C
CLR C
MOV A,R2
SUBB A,#12
MOV R2,A
LP1D: MOV P1,#0C4H ;顯示小時(shí)數(shù)值
LCALL ENABLE
LCALL DELAY
MOV A,R2 ;小時(shí)位上第一位0不顯示
MOV B,#10
DIV AB
JZ LP20
MOV 55H,R2
LCALL DISPLAY ;調(diào)用顯示2位十進(jìn)制數(shù)子程序
AJMP LP21
LP20: LCALL DISPLAY1 ;調(diào)用第1位為空,第2位為數(shù)值的顯示子程序
LP21: AJMP LP13 ;12#到24#的轉(zhuǎn)換
H24: JB 00H,LP13 ;判斷上一次是否為24#,是則不轉(zhuǎn)換,否則轉(zhuǎn)換
SETB C
MOV 00H,C ;把進(jìn)制標(biāo)志改為24#
MOV P1,#0CEH ;清掉顯示的am/pm
LCALL ENABLE
LCALL DELAY
MOV P1,#20H
LCALL EABLE1
LCALL DELAY
MOV P1,#20H
LCALL EABLE1
LCALL DELAY
JNB 01H,LP30 ;pm計(jì)算標(biāo)志為1時(shí),小時(shí)數(shù)值加12
MOV A,#12
ADD A,R2
MOV R2,A
MOV A,#23
CLR C
SUBB A,R2 ;小時(shí)數(shù)值大于23時(shí)變?yōu)?
JNC LP15
MOV R2,#0
LP15: MOV P1,#0C4H ;顯示小時(shí)數(shù)值
LCALL ENABLE
LCALL DELAY
MOV A,R2 ;小時(shí)位第一位0不顯示
MOV B,#10
DIV AB
JZ LP1E
MOV 55H,R2
LCALL DISPLAY
AJMP LP30
LP1E: LCALL DISPLAY1
lp30: jb 02h,lp13 ;12#的上午12點(diǎn)轉(zhuǎn)換為24#的0點(diǎn)
cjne r2,#12,lp13
mov r2,#0
MOV P1,#0C4H
LCALL ENABLE
LCALL DELAY
MOV A,R2
MOV B,#10
DIV AB
JZ LP31
MOV 55H,R2
LCALL DISPLAY
AJMP LP13
LP31: LCALL DISPLAY1
LP13: CJNE R4,#60,EXIT12 ;秒鐘到60時(shí)向分鐘進(jìn)1
MOV R4,#0
INC R3
CJNE R3,#60,LP16
MOV R3,#0
MOV 55H,R3 ;顯示調(diào)整后的分鐘值
MOV P1,#0C7H
LCALL ENABLE
LCALL DELAY
LCALL DISPLAY
INC R2 ;分鐘位向小時(shí)位進(jìn)位
AJMP LP17
EXIT12: AJMP EXIT1
LP16: MOV 55H,R3 ;顯示變化后的分鐘值
MOV P1,#0C7H
LCALL ENABLE
LCALL DELAY
LCALL DISPLAY
AJMP EXIT1
LP17: JB P0.6,H241 ;判斷當(dāng)前選擇的計(jì)數(shù)進(jìn)制
CLR C ;12#時(shí)調(diào)整小時(shí)值以及am/pm顯示和計(jì)算的標(biāo)志位
MOV A,#11
SUBB A,R2
JNC DIS11
CLR C
MOV A,#12
SUBB A,R2
JNC LP1A
MOV R2,#1
MOV C,01H
CPL C
MOV 01H,C
ajmp DIS11
LP1A: MOV C,02H
CPL C
MOV 02H,C
JB 02H,LP11
MOV 55H,#41H
AJMP LP12
LP11: MOV 55H,#50H
LP12: MOV P1,#0CEH
LCALL ENABLE
LCALL DELAY
MOV P1,55H
LCALL EABLE1
LCALL DELAY
AJMP DIS11
H241: MOV A,#23 ;24#時(shí)調(diào)整小時(shí)值
CLR C
SUBB A,R2
JNC DIS11
MOV R2,#0
DIS11: MOV P1,#0C4H ;顯示變化后的小時(shí)值
LCALL ENABLE
LCALL DELAY
MOV A,R2
MOV B,#10
DIV AB
JZ LP1F
MOV 55H,R2
LCALL DISPLAY
AJMP EXIT1
LP1F: LCALL DISPLAY1
EXIT1: MOV A,#0 ;判斷定時(shí)是否到達(dá)
JB 00H,NEXITT1 ;在24#下判斷,若當(dāng)前為12#則轉(zhuǎn)換為24#
JNB 01H,NEXITT1
MOV A,#12
NEXITT1: ADD A,R2
MOV 30H,R5
CJNE A,30H,EXIT2
MOV A,R3
MOV 30H,R6
CJNE A,30H,EXIT2
CJNE R4,#0,EXIT2
SETB C
MOV 05H,C ;定時(shí)到達(dá)時(shí)置報(bào)警標(biāo)志位為1
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -