|
;****************變量聲明部分******************* E1 EQU P3.1 E2 EQU P3.5 RES EQU P3.0 RW EQU P3.6 A0 EQU P3.7 DAT EQU P2 X EQU 30H Y EQU 31H FLAG EQU P1.7 ;關(guān)機(jī)中斷指示入口 ;***********************定義LCD顯示緩沖區(qū)地址****************** ;首地址50H HOU1 EQU 50H HOU0 EQU 51H MIN1 EQU 52H MIN0 EQU 53H SEC1 EQU 54H SEC0 EQU 55H NUM EQU 56H
;************************定義按鍵位********************* SW EQU P1.7 ;定義P1.7調(diào)整鍵 UP EQU P1.6 ;定義P1.6加一鍵 DOWN EQU P1.5 ;定義P1.5減一鍵 COUNT EQU 57H ;判別選擇鍵按的次數(shù) ;****************主程序開始***************************** ORG 0000H AJMP START ORG 000BH LJMP TIMER0 ORG 0030H ;************************設(shè)置起始時間******************** START: MOV SP,#60H MOV HOU1,#00H MOV HOU0,#01H MOV MIN1,#00H MOV MIN0,#00H MOV SEC1,#00H MOV SEC0,#00H MOV NUM, #00H mov count,#00H ;************************開定時中斷************** MAIN: MOV TMOD,#01H MOV TH0,#03CH MOV TL0,#0B0H SETB EA SETB ET0 SETB RES ;初始化LCD LCALL INITIAL ;**********************清屏******************* MOV 30H,#0 MOV 31H,#0 LCALL DISPLAY1 LCALL DELAY1S ;****************** 靜態(tài)顯示************* MOV DPTR, #TAB2 ;定 MOV X,#00 MOV Y,#00 MOV R3,#2 MOV A,#00H MOV B,#16 MUL AB MOV R2,A LCALL DISPLAY5 MOV DPTR, #TAB2 ;時 MOV X,#00 MOV Y,#16 MOV R3,#2 MOV A,#01H MOV B,#32 MUL AB MOV R2,A LCALL DISPLAY5 MOV DPTR, #TAB1 ;: MOV X,#02 MOV Y,#16 MOV R3,#2 MOV A,#10 MOV B,#16 MUL AB MOV R2,A LCALL DISPLAY4 MOV DPTR, #TAB1 ;: MOV X,#02 MOV Y,#56 MOV R3,#2 MOV A,#10 MOV B,#16 MUL AB MOV R2,A LCALL DISPLAY3 ;*******************按鍵輸入程序**************** KEY: CLR TR0 JB SW,KEY0 ;調(diào)整程序 LCALL DELAY250MS JB SW,KEY0 INC COUNT MOV A,COUNT CJNE A,#4,KEYOVER MOV COUNT,#00H KEYOVER: JB SW,KEY0 LJMP KEYOVER ;**********************秒鐘調(diào)整程序******** KEY0: MOV A,COUNT;秒鐘加1 CJNE A,#1,KEY1 JB UP,KEY00 LCALL DELAY250MS JB UP,KEY00 INC SEC0 MOV A,SEC0 CJNE A,#10,KEY0OVER MOV SEC0,#00H INC SEC1 MOV A,SEC1 CJNE A,#6,KEY0OVER MOV SEC1,#00H LJMP KEY0OVER KEY0OVER: JB UP,KEY00 LJMP KEY0OVER KEY00: JB DOWN,KEY1;秒鐘減1 LCALL DELAY250MS JB DOWN, KEY1 MOV A,SEC0 CJNE A,#0,CCC MOV SEC0,#9 MOV A,SEC1 CJNE A,#0,CCCC MOV SEC1,#5 LJMP KEY00OVER CCCC: DEC SEC1 LJMP KEY00OVER CCC: DEC SEC0 KEY00OVER: JB DOWN,KEY1 LJMP KEY00OVER
;*************分鐘調(diào)整程序********************* KEY1: MOV A,COUNT;分鐘加1 CJNE A,#2,KEY2 JB UP,KEY11 LCALL DELAY250MS JB UP,KEY11 INC MIN0 MOV A,MIN0 CJNE A,#10,KEY1OVER MOV MIN0,#00H INC MIN1 MOV A,MIN1 CJNE A,#6,KEY1OVER MOV MIN1,#00H LJMP KEY1OVER KEY1OVER:JB UP,KEY11 LJMP KEY1OVER
KEY11: JB DOWN,KEY2;分鐘減1 LCALL DELAY250MS JB DOWN, KEY2 MOV A,MIN0 CJNE A,#0,AAA MOV MIN0,#9 MOV A,MIN1 CJNE A,#0,AAAA MOV MIN1,#5 LJMP KEY11OVER AAAA: DEC MIN1 LJMP KEY11OVER AAA: DEC MIN0 KEY11OVER:JB DOWN,KEY2 LJMP KEY11OVER
;***********時調(diào)整程序****************** KEY2: MOV A,COUNT;時加1 CJNE A,#3,DISP JB UP,KEY22 LCALL DELAY250MS JB UP,KEY22 INC HOU0 MOV A,HOU1 CJNE A,#2,HOURS MOV A,HOU0 CJNE A,#4,KEY2OVER MOV HOU0,#00H MOV HOU1,#00H LJMP KEY2OVER HOURS: MOV A,HOU0 CJNE A,#10,KEY2OVER MOV HOU0,#00H INC HOU1 KEY2OVER:JB UP,KEY22 LJMP KEY2OVER KEY22: JB DOWN,DISP;時鐘減1 LCALL DELAY250MS JB DOWN, DISP MOV A,HOU0 CJNE A,#0,H4 MOV A,HOU1 CJNE A,#0,H5 MOV HOU0,#3 MOV HOU1,#2 LJMP KEY22OVER H5: MOV HOU0,#9 DEC HOU1 LJMP KEY22OVER H4: DEC HOU0 KEY22OVER:JB DOWN,DISP LJMP KEY22OVER ;********************調(diào)顯示程序******************
DISP: SETB TR0 ;秒 MOV DPTR, #TAB1 MOV X,#02 MOV Y,#32 MOV R3,#2 MOV A,SEC0 MOV B,#16 MUL AB MOV R2,A LCALL DISPLAY4 MOV DPTR, #TAB1 MOV X,#02 MOV Y,#24 MOV R3,#2 MOV A,SEC1 MOV B,#16 MUL AB MOV R2,A LCALL DISPLAY4 MOV DPTR, #TAB1 ;分 MOV X,#02 MOV Y,#08 MOV R3,#2 MOV A,MIN0 MOV B,#16 MUL AB MOV R2,A LCALL DISPLAY4 MOV DPTR, #TAB1 MOV X,#02 MOV Y,#00 MOV R3,#2 MOV A,MIN1 MOV B,#16 MUL AB MOV R2,A LCALL DISPLAY4 MOV DPTR, #TAB1 ;時 MOV X,#02 MOV Y,#48 MOV R3,#2 MOV A,HOU0 MOV B,#16 MUL AB MOV R2,A LCALL DISPLAY3 MOV DPTR, #TAB1 MOV X,#02 MOV Y,#40 MOV R3,#2 MOV A,HOU1 MOV B,#16 MUL AB MOV R2,A LCALL DISPLAY3 AJMP KEY ;*******************T0定時中斷*************** TIMER0: PUSH ACC;中斷程序 PUSH PSW MOV TH0,#03CH MOV TL0,#0B0H inc num mov a,num cjne a,#20,TIMER0END MOV NUM,#00H MOV A,SEC0 JZ S0 DEC SEC0 AJMP TIMER0END S0: MOV A,SEC1 JZ M0 DEC SEC1 MOV SEC0,#9 AJMP TIMER0END M0: MOV A,MIN0 JZ M1 DEC MIN0 MOV SEC1,#5 MOV SEC0,#9 AJMP TIMER0END M1: MOV A,MIN1 JZ H0 DEC MIN1 MOV MIN0,#9 MOV SEC1,#5 MOV SEC0,#9 AJMP TIMER0END H0: MOV A,HOU0 JZ H1 DEC HOU0 MOV MIN1,#5 MOV MIN0,#9 MOV SEC1,#5 MOV SEC0,#9 AJMP TIMER0END H1: MOV A, HOU1 JZ IN0 DEC HOU1 MOV HOU0,#9 MOV MIN1,#5 MOV MIN0,#9 MOV SEC1,#5 MOV SEC0,#9 AJMP TIMER0END IN0: SETB FLAG ;執(zhí)行中斷 TIMER0END: POP PSW POP ACC RETI ;****************SLAVE顯示字符子程序************************* ;入口:行地址X,列地址Y ; 字符初始化地址 DPTR,R2,R3 DISPLAY6: ;mov R3,#2 MOV A,#0B8H ADD A,X LCALL OUTSI MOV A,#00H ADD A,Y LCALL OUTSI MOV R1,#16 DISPLAY61: MOV A,R2 ;R2 MOVC A,@A+DPTR LCALL OUTSD INC DPTR DJNZ R1,DISPLAY61 INC X DJNZ R3,DISPLAY6 RET ;****************MASTER顯示字符子程序************************* ;入口:行地址X,列地址Y ; 字符初始化地址 DPTR,R2,R3 DISPLAY5: ;mov R3,#2 MOV A,#0B8H ADD A,X LCALL OUTMI MOV A,#00H ADD A,Y LCALL OUTMI MOV R1,#16 DISPLAY51: MOV A,R2 ;R2 MOVC A,@A+DPTR LCALL OUTMD INC DPTR DJNZ R1,DISPLAY51 INC X DJNZ R3,DISPLAY5 RET ;****************SLAVE顯示字符子程序************************* ;入口:行地址X,列地址Y ; 字符初始化地址 DPTR,R2,R3 DISPLAY4: ;mov R3,#2 MOV A,#0B8H ADD A,X LCALL OUTSI MOV A,#00H ADD A,Y LCALL OUTSI MOV R1,#8 DISPLAY41: MOV A,R2 ;R2 MOVC A,@A+DPTR LCALL OUTSD INC DPTR DJNZ R1,DISPLAY41 INC X DJNZ R3,DISPLAY4 RET ;****************MASTER顯示字符子程序************************* ;入口:行地址X,列地址Y ; 字符初始化地址 DPTR,R2,R3 DISPLAY3: ;mov R3,#2 MOV A,#0B8H ADD A,X LCALL OUTMI MOV A,#00H ADD A,Y LCALL OUTMI MOV R1,#8 DISPLAY31: MOV A,R2 ;R2 MOVC A,@A+DPTR LCALL OUTMD INC DPTR DJNZ R1,DISPLAY31 INC X DJNZ R3,DISPLAY3 RET ;******************清屏子程序********************* DISPLAY1: MOV R2, #0B8H DISPLAY11: MOV A, R2 LCALL OUTMI LCALL OUTSI MOV A, #00H LCALL OUTMI LCALL OUTSI MOV R1, #1EH DISPLAY12: MOV A, 30H LCALL OUTMD MOV A, 31H LCALL OUTMD DJNZ R1, DISPLAY12 MOV A, 30H LCALL OUTMD MOV R1, #1EH DISPLAY13: MOV A, 31H LCALL OUTSD MOV A, 30H LCALL OUTSD DJNZ R1, DISPLAY13 MOV A, 31H LCALL OUTSD INC R2 CJNE R2, #0BCH, DISPLAY11 RET ;****************顯示字符串子程序************************* DISPLAY2: MOV R2, #0B8H DISPLAY21: MOV A, R2 LCALL OUTMI LCALL OUTSI mov a,#00H LCALL OUTMI LCALL OUTSI MOV R1, #3DH DISPLAY22: MOV A, #00H MOVC A, @A+DPTR LCALL OUTMD INC DPTR DJNZ R1, DISPLAY22 MOV R1, #3DH DISPLAY23: MOV A, #00H MOVC A, @A+DPTR LCALL OUTSD INC DPTR DJNZ R1, DISPLAY23 INC R2 CJNE R2, #0BCH, DISPLAY21 RET ;***************MASTER寫指令子程序************** OUTMI: CLR A0 CLR RW SETB E1 MOV DAT, A CLR E1 RET ;***************SLAVE寫指令子程序************** OUTSI: CLR A0 CLR RW SETB E2 MOV DAT, A CLR E2 RET ;***************MASTER寫數(shù)據(jù)子程序************** OUTMD: SETB A0 CLR RW SETB E1 MOV DAT,A CLR E1 RET ;***************SLAVE寫數(shù)據(jù)子程序************** OUTSD: SETB A0 CLR RW SETB E2 MOV DAT,A CLR E2 RET ;***************LCD初始化********************** INITIAL: MOV A,#0E2H ;RESET LCALL OUTMI LCALL OUTSI MOV A,#0AEH ;OFF DISPLAY LCALL OUTMI LCALL OUTSI MOV A,#0A4H ;OFF STATIC DRIVCE LCALL OUTMI LCALL OUTSI MOV A,#0A9H ;SELECT 1/32 DUTY LCALL OUTMI LCALL OUTSI MOV A,#0A0H ;ADC SELCET RIGHTWARS OUTPUT LCALL OUTMI LCALL OUTSI MOV A,#0EEH ;READ MOCDIFY WRITE OFF LCALL OUTMI LCALL OUTSI MOV A,#00H ;COLUMN ADDRESS SET LCALL OUTMI LCALL OUTSI MOV A,#0C0H ;SET DISPLAY START LINE LCALL OUTMI LCALL OUTSI MOV A,#0AFH ;ON DISPLAY LCALL OUTMI LCALL OUTSI RET ;****************延時子程序***************** DELAY1S: MOV 40H, #07H DELAY2S1: MOV 41H, #0FFH DELAY2S2: MOV 42H, #0FFH DJNZ 42H, $ DJNZ 41H, DELAY2S2 DJNZ 40H, DELAY2S1 RET DELAY250MS: MOV 40H, #02H DELAY250MS2: MOV 41H, #040H DELAY250MS1: MOV 42H, #0FFH DJNZ 42H, $ DJNZ 41H, DELAY250MS1 DJNZ 40H, DELAY250MS2 RET
TAB1: ;-- 文字: 0 -- ;-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16 -- DB 000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,00FH,010H,020H,020H,010H,00FH,000H,
;-- 文字: 1 -- ;-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16 -- DB 000H,010H,010H,0F8H,000H,000H,000H,000H,000H,020H,020H,03FH,020H,020H,000H,000H, ;-- 文字: 2 -- ;-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16 -- DB 000H,070H,008H,008H,008H,088H,070H,000H,000H,030H,028H,024H,022H,021H,030H,000H, ;-- 文字: 3 -- ;-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16 -- DB 000H,030H,008H,088H,088H,048H,030H,000H,000H,018H,020H,020H,020H,011H,00EH,000H, ;-- 文字: 4 -- ;-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16 -- DB 000H,000H,0C0H,020H,010H,0F8H,000H,000H,000H,007H,004H,024H,024H,03FH,024H,000H, ;-- 文字: 5 -- ;-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16 -- DB 000H,0F8H,008H,088H,088H,008H,008H,000H,000H,019H,021H,020H,020H,011H,00EH,000H, ;-- 文字: 6 -- ;-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16 -- DB 000H,0E0H,010H,088H,088H,018H,000H,000H,000H,00FH,011H,020H,020H,011H,00EH,000H, ;-- 文字: 7 -- ;-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16 -- DB 000H,038H,008H,008H,0C8H,038H,008H,000H,000H,000H,000H,03FH,000H,000H,000H,000H, ;-- 文字: 8 -- ;-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16 -- DB 000H,070H,088H,008H,008H,088H,070H,000H,000H,01CH,022H,021H,021H,022H,01CH,000H, ;-- 文字: 9 -- ;-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16 -- DB 000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,000H,031H,022H,022H,011H,00FH,000H, ;-- : -- ;-- 寬度x高度=8x16 -- DB 000H,000H,000H,030H,030H,000H,000H,000H,000H,000H,000H,00CH,00CH,000H,000H,000H, TAB2: ;-- 文字: 定 -- ;-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=16x16 -- DB 000H,010H,00CH,0A4H,024H,024H,025H,0E6H,024H,024H,024H,024H,014H,00CH,004H,000H, DB 040H,020H,018H,007H,008H,010H,020H,07FH,042H,042H,042H,042H,040H,040H,000H,000H, ;-- 文字: 時 -- ;-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=16x16 -- DB 000H,0FCH,044H,044H,044H,0FCH,010H,090H,010H,010H,010H,0FFH,010H,010H,010H,000H, DB 000H,007H,004H,004H,004H,007H,000H,000H,003H,040H,080H,07FH,000H,000H,000H,000H, END
|