RS BIT P3.5 RW BIT P2.7 EN BIT P3.4 LCD EQU P0 TEMP EQU 40H TEMP1 EQU 41H TEMP2 EQU 42H SEC EQU 43H MIN EQU 44H HOUR EQU 45H SECGE EQU 46H SECSHI EQU 47H MINGE EQU 48H MINSHI EQU 49H HOURGE EQU 4AH HOURSHI EQU 4BH FLAG BIT 20H.0 BUSYFLAG BIT P0.7 ORG 0000H AJMP MAIN ORG 000BH AJMP TIMER0 ORG 0030H MAIN: MOV R5,#200 DJNZ R5,$ MOV SP,#50H MOV TEMP,#00 CLR FLAG SETB P2.6 MOV P0,#00H CLR P2.6 SETB P2.7 MOV P0,#0FFH CLR P2.7 CLR P2.4 MOV DPTR,#TAB MOV TMOD,#00000001B MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB TR0 SETB EA ACALL LCD_INIT LOOP6: JNB FLAG,LOOP5 CLR FLAG INC SEC MOV A,SEC CJNE A,#60,LOOP2 MOV A,#00 MOV SEC,A INC MIN MOV A,MIN CJNE A,#60,LOOP3 MOV A,#00 MOV MIN,A INC HOUR MOV A,HOUR CJNE A,#24,LOOP4 MOV A,#00 MOV HOUR,A LOOP4: MOV B,#10 DIV AB MOV HOURGE,B MOV HOURSHI,ACC LOOP3: MOV B,#10 DIV AB MOV MINGE,B MOV MINSHI,ACC LOOP2: MOV B,#10 DIV AB MOV SECGE,B MOV SECSHI,ACC LOOP5: ACALL TEST_BUSY MOV TEMP1,#80H ACALL WR_COM MOV R7,#5 ACALL DELAY_1MS ACALL TEST_BUSY MOV A,HOURSHI MOVC A,@A+DPTR MOV TEMP2,A ACALL WR_DAT MOV R7,#5 ACALL DELAY_1MS ACALL TEST_BUSY MOV A,HOURGE MOVC A,@A+DPTR MOV TEMP2,A ACALL WR_DAT MOV R7,#5 ACALL DELAY_1MS ACALL TEST_BUSY MOV A,#10 MOVC A,@A+DPTR MOV TEMP2,A ACALL WR_DAT MOV R7,#5 ACALL DELAY_1MS ACALL TEST_BUSY MOV A,MINSHI MOVC A,@A+DPTR MOV TEMP2,A ACALL WR_DAT MOV R7,#5 ACALL DELAY_1MS ACALL TEST_BUSY MOV A,MINGE MOVC A,@A+DPTR MOV TEMP2,A ACALL WR_DAT MOV R7,#5 ACALL DELAY_1MS ACALL TEST_BUSY MOV A,#10 MOVC A,@A+DPTR MOV TEMP2,A ACALL WR_DAT MOV R7,#5 ACALL DELAY_1MS ACALL TEST_BUSY MOV A,SECSHI MOVC A,@A+DPTR MOV TEMP2,A ACALL WR_DAT MOV R7,#5 ACALL DELAY_1MS ACALL TEST_BUSY MOV A,SECGE MOVC A,@A+DPTR MOV TEMP2,A ACALL WR_DAT MOV R7,#5 ACALL DELAY_1MS ACALL LOOP6 /////////////////////////////////////////////// LCD_INIT: MOV R7,#15 ACALL DELAY_1MS MOV TEMP1,#38H ACALL WR_COM MOV R7,#5 ACALL DELAY_1MS MOV TEMP1,#38H ACALL WR_COM MOV R7,#5 ACALL DELAY_1MS MOV TEMP1,#38H ACALL WR_COM ACALL TEST_BUSY MOV TEMP1,#38H ACALL WR_COM ACALL TEST_BUSY MOV TEMP1,#08H ACALL WR_COM ACALL TEST_BUSY MOV TEMP1,#01H ACALL WR_COM ACALL TEST_BUSY MOV TEMP1,#06H ACALL WR_COM ACALL TEST_BUSY MOV TEMP1,#0CH ACALL WR_COM RET WR_COM: CLR EN SETB RS SETB RW NOP CLR RS CLR RW NOP MOV LCD,TEMP1 NOP NOP SETB EN NOP NOP NOP CLR EN RET WR_DAT: CLR EN SETB RS SETB RW NOP CLR RW MOV LCD,TEMP2 NOP NOP SETB EN NOP NOP NOP CLR EN RET TEST_BUSY: SETB BUSYFLAG SETB RS SETB RW CLR EN NOP CLR RS NOP SETB EN NOP NOP JB BUSYFLAG,$ RET TIMER0: MOV TH0,#3CH MOV TL0,#0B0H CLR EA PUSH ACC SETB EA MOV A,TEMP INC A CJNE A,#20,N3 SETB FLAG MOV A,#00 N3:MOV TEMP,A CLR EA POP ACC SETB EA RETI DELAY_1MS: N2:MOV R5,#100 N1:MOV R6,#5 DJNZ R6,$ DJNZ R5,N1 DJNZ R7,N2 RET ORG 0B00H TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,3AH END
[此貼子已經被作者于2012-9-22 9:08:32編輯過]
|