- ;接收端
- //通用寄存器R5用于錄入lcd1602的8位指令和數(shù)據(jù)
- 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:
- //定時(shí)器1設(shè)置,即設(shè)置波特率
- MOV TMOD,#20H
- MOV PCON,#80H
- MOV TH1,#0FDH
- //
- //初始化串口//方式1發(fā)送接收均初始化
- MOV SCON,#01010000B
- SETB REN
- SETB TR1
- //
- //初始化中斷
- SETB EA;總開(kāi)關(guān)
- SETB ES;串口中斷
- ACALL WCGRAM
- ACALL LCD1602_init;初始化lcd1602
- MAIN:;循環(huán)
- AJMP MAIN
- //串口中斷服務(wù)函數(shù)(僅用于接受數(shù)據(jù))
- 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
- //寫(xiě)指令,指令放入R5
- WRITE_COM:
- ACALL D5MS
- CLR RS ;(130)RS,RW,EN均置0,寫(xiě)指令
- CLR RW
- CLR EN
- MOV LCD_PORT ,R5 ;(131)指令一律寫(xiě)入R5,在移入P2
- //ACALL D5MS
- SETB EN
- CLR EN ;(132)EN跳變,允許數(shù)據(jù)交換
- RET ;(134)返回原處
- //寫(xiě)數(shù)據(jù),數(shù)據(jù)放入R5
- WRITE_DATA:
- ACALL D5MS
- SETB RS ;(130)RS置1,RW,EN均置0,寫(xiě)數(shù)據(jù)
- CLR RW
- CLR EN
- MOV LCD_PORT ,R5 ;(131)數(shù)據(jù)一律寫(xiě)入R5,在移入P2
- SETB EN
- CLR EN ;(132)EN跳變,允許數(shù)據(jù)交換
- RET ;(134)返回原處
- //初始化LCD1602
- LCD1602_init:
- MOV R5,#06H ;(144)8位數(shù)據(jù),5*7點(diǎn)陣,2行顯示
- ACALL WRITE_COM
- MOV R5,#0CH ;(148)寫(xiě)一個(gè)數(shù)據(jù)后,光標(biāo)右移,屏幕不移動(dòng)
- ACALL WRITE_COM
- MOV R5,#38H ;(146)顯示開(kāi),關(guān)光標(biāo),光標(biāo)不閃爍
- 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
- //延時(shí)5ms左右,已進(jìn)行現(xiàn)場(chǎng)保護(hù)
- 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
復(fù)制代碼 |