- ;接收端
- //通用寄存器R5用于錄入lcd1602的8位指令和數據
- ORG 000H
- LCD_PORT EQU P1
- RS EQU P2.5
- RW EQU P2.6
- EN EQU P2.7
- AJMP START
- ORG 023H
- LJMP REC
- ORG 100H
- START:
- //定時器1設置,即設置波特率
- MOV TMOD,#20H
- MOV PCON,#80H
- MOV TH1,#0FDH
- //
- //初始化串口//方式1發送接收均初始化
- MOV SCON,#01010000B
- SETB REN
- SETB TR1
- //
- //初始化中斷
- SETB EA;總開關
- SETB ES;串口中斷
- ACALL WCGRAM
- ACALL LCD1602_init;初始化lcd1602
- MAIN:;循環
- AJMP MAIN
- //串口中斷服務函數(僅用于接受數據)
- REC:
- PUSH ACC
- PUSH 05
- MOV A,SBUF
- CLR RI
- MOV R5,#00H
- ACALL WRITE_COM
- MOV R5,A
- ACALL WRITE_DATA
- POP 05
- POP ACC
- RETI
- //寫指令,指令放入R5
- WRITE_COM:
- ACALL D5MS
- CLR RS ;(130)RS,RW,EN均置0,寫指令
- CLR RW
- CLR EN
- MOV LCD_PORT ,R5 ;(131)指令一律寫入R5,在移入P2
- //ACALL D5MS
- SETB EN
- CLR EN ;(132)EN跳變,允許數據交換
- RET ;(134)返回原處
- //寫數據,數據放入R5
- WRITE_DATA:
- ACALL D5MS
- SETB RS ;(130)RS置1,RW,EN均置0,寫數據
- CLR RW
- CLR EN
- MOV LCD_PORT ,R5 ;(131)數據一律寫入R5,在移入P2
- SETB EN
- CLR EN ;(132)EN跳變,允許數據交換
- RET ;(134)返回原處
- //初始化LCD1602
- LCD1602_init:
- MOV R5,#06H ;(144)8位數據,5*7點陣,2行顯示
- ACALL WRITE_COM
- MOV R5,#0CH ;(148)寫一個數據后,光標右移,屏幕不移動
- ACALL WRITE_COM
- MOV R5,#38H ;(146)顯示開,關光標,光標不閃爍
- ACALL WRITE_COM
- MOV R5,#01H ;(150)清屏
- ACALL WRITE_COM
- RET
- WCGRAM:
- MOV P1,#40H
- ACALL ENABLE
- MOV DPTR,#SELF1
- CALL WSELF
- MOV P1,#48H
- ACALL ENABLE
- MOV DPTR,#SELF2
- CALL WSELF
- MOV P1,#50H
- ACALL ENABLE
- MOV DPTR,#SELF3
- CALL WSELF
- MOV P1,#58H
- ACALL ENABLE
- MOV DPTR,#SELF4
- CALL WSELF
- MOV P1,#60H
- ACALL ENABLE
- MOV DPTR,#SELF5
- CALL WSELF
- MOV P1,#68H
- ACALL ENABLE
- MOV DPTR,#SELF6
- CALL WSELF
- MOV P1,#70H
- ACALL ENABLE
- MOV DPTR,#SELF7
- CALL WSELF
- MOV P1,#78H
- ACALL ENABLE
- MOV DPTR,#SELF8
- CALL WSELF
- RET
- ENABLE:
- CLR RS
- CLR RW
- CLR EN
- ACALL D5MS
- ACALL D5MS
- SETB EN
- RET
- WSELF:
- MOV R7,#00H
- W1:
- MOV A,R7
- MOVC A,@A+DPTR
- CALL WRITE1
- INC R7
- CJNE R7,#08H,W1
- RET
- WRITE1:
- CLR EN
- SETB RS
- CLR RW
- SETB EN
- MOV P1,A
-
- CLR EN
- ACALL D5MS
- ACALL D5MS
- RET
- //延時5ms左右,已進行現場保護
- D5MS:
- PUSH 07
- PUSH 06
- MOV R7,#200
- DEL1:MOV R6,#125
- DEL2:DJNZ R6,DEL2
- DJNZ R7,DEL1
- POP 06
- POP 07
- RET
- //
- SELF1:DB 04H,1FH,15H,1FH,15H,1FH,04H,07H
- SELF2:DB 02H,0CH,04H,1FH,0EH,15H,15H,04H
- SELF3:DB 02H,0AH,06H,02H,1FH,02H,02H,02H
- SELF4:DB 0EH,04H,04H,04H,0EH,04H,04H,0EH
- SELF5:DB 0FH,0AH,0AH,1AH,1FH,0AH,0AH,0FH
- SELF6:DB 09H,01H,1DH,07H,15H,09H,15H,03H
- SELF7:DB 04H,1FH,04H,0AH,1FH,00H,1BH,0BH
- SELF8:DB 02H,1CH,10H,14H,1FH,04H,15H,0CH
- END
復制代碼 |