仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机汇编语言源程序如下:
- ;====================================================================
- ; Main.asm file generated by New Project wizard
- ;
- ; Created: 周三 5月 30 2018
- ; Processor: AT89C51
- ; Compiler: ASEM-51 (Proteus)
- ;====================================================================
- ORG 0000H
- ;====================================================================
-
- AJMP MAIN
- ORG 0100H
- ;=========================================================================================选择
- MAIN: MOV P2,#0FFH
- MOV A,P2
- CJNE A,#0FEH,CONGJI2
- LJMP ZHUJI
- CONGJI2: MOV P2,#0FFH
- MOV A,P2
- CJNE A,#0FDH,MAIN
- LJMP CONGJI
- ;=========================================================================================主机
-
- ZHUJI: CLR A
- MOV SP,#60H
- MOV TMOD, #20H
- MOV TL1, #0F4H
- MOV TH1, #0F4H
- MOV PCON,#80H
- MOV SCON,#50H
- SETB TR1
-
- BEGAIN: ACALL KEY
- MOV R1,A
- ACALL HUJIAO
- AJMP BEGAIN
- KEY: ACALL KS1
- JNZ LK1
- AJMP KEY
- LK1: ACALL DELAY
- ACALL KS1
- JNZ CKEY
- AJMP KEY
- CKEY: MOV R2,#7FH
- MOV R4,#00H
- CKEY1: MOV P1,R2
- JB P1.0,LONE
- MOV A,#00H
- AJMP LPK
- LONE: JB P1.1,LTWO
- MOV A,#04H
- AJMP LPK
- LTWO: JB P1.2,LTHR
- MOV A,#08H
- AJMP LPK
- LTHR: JB P1.3,NEXT0
- MOV A,#0CH
- LPK: ADD A,R4
- PUSH ACC
- LK3: ACALL KS1
- JNZ LK3
- ACALL DELAY
- POP ACC
- RET
- NEXT0: INC R4
- MOV A,R2
- JNB P1.3,KEND
- RR A
- MOV R2,A
- AJMP CKEY1
- KEND: AJMP KEY
- KS1: MOV P1,#0FH
- MOV A,P1
- CPL A
- ANL A,#0FH
- RET
- HUJIAO: CALL DELAY
- MOV A,#0EH
- CPL P3.4
- MOV SBUF,A
- WAIT1: JBC TI,TXYES
- SJMP WAIT1
- TXYES: JBC RI,NEXT1
- SJMP TXYES
- NEXT1: MOV A,SBUF
- CJNE A,#01H,HUJIAO
-
- XSHU:
- MOV A,R1
- MOV C,P
- MOV ACC.7,C
- MOV SBUF,A
- WAIT3: JNB TI,WAIT3
- CLR TI
- WAITC: JNB RI,WAITC
- CLR RI
- MOV A,SBUF
- CJNE A,#0FH,XSHU
- CLR P3.7
- DELAY:
- MOV R6,#0FFH
- LOOP1: DJNZ R6,LOOP1
- RET
- ;=======================================================================================从机
-
- CONGJI: CLR A
- MOV SP,#60H
-
- ;=======================================================================================从机初始化LCD
-
- initlcd: mov A,#38H ; 2行5*7
- acall COMMAND ; 命令子程序
- acall DELAYS ; 延迟子程序
- mov A,#0EH ; 显示开光标开
- acall COMMAND
- acall DELAYS
- mov A,#01H ; 清屏LCD
- acall COMMAND
- acall DELAYS
- mov A,#06H ; 光标右移
- acall COMMAND
- acall DELAYS
- cursor: MOV A,#80H ; 光标定位于第一行第一个位置
- acall COMMAND
- acall DELAYS
- ;=======================================================================================R4储存第一次按键数据,R5计按键次数,R7计显示的字符数
- mov R5,#02h
- mov R4,#00h
- mov R7,#10h
- ;========================================================================================
-
- ;=========================================================================================
-
- RSTRT9: MOV TMOD, #20H
- MOV TL1, #0F4H
- MOV TH1, #0F4H
- MOV PCON,#80H
- MOV SCON,#50H
- SETB TR1
- JIESHOU9:
-
- CLR TI
- JNB RI,JIESHOU9
- CLR RI
- MOV A,SBUF
- CJNE A,#0EH,FA29
- FA19: MOV A,#01H
- MOV SBUF,A
- CPL P3.7
- WAIT19: JBC TI,RX9
- SJMP WAIT19
- FA29: MOV A,#02H
- MOV SBUF,A
- WAIT29: JBC TI,JIESHOU9
- SJMP WAIT29
- RX9: CLR TI
- JNB RI,RX9
- CLR RI
- MOV A,SBUF
- MOV C,P
- MOV R1,A
- JC FAF09
- FA0F9: MOV A,#0FH
- MOV SBUF,A
- WAIT39: JNB TI,WAIT39
- CLR TI
- SJMP CHULI9
- FAF09: MOV A,#0F0H
- MOV SBUF,A
- WAIT49: JNB TI,WAIT49
- CLR TI
- LJMP RX9
- CHULI9: MOV A,R1
- XIANS9:
- ANL A,#0FH
- LCALL DISPLAY9
- LJMP JS9
- DELAY9:
- MOV R6,#03FH
- LOOP19: DJNZ R6,LOOP19
- RET
-
- DISPLAY9: ;按键顺序是乱的
- CJNE A,#00H,LT19
- MOV A,#03H ;3
- sjmp LAST9
- LT19: CJNE A,#01H,LT29
- MOV A,#07H ;7
- SJMP LAST9
- LT29: CJNE A,#02H,LT39
- MOV A,#0bH ;b
- SJMP LAST9
- LT39: CJNE A,#03H,LT49
- MOV A,#0fH ;f
- SJMP LAST9
- LT49: CJNE A,#04H,LT59
- MOV A,#02H ;2
- SJMP LAST9
- LT59: CJNE A,#05H,LT69
- MOV A,#06H ;6
- SJMP LAST9
- LT69: CJNE A,#06H,LT79
- MOV A,#0aH ;a
- SJMP LAST9
- LT79: CJNE A,#07H,LT89
- MOV A,#0eH ;e
- SJMP LAST9
- LT89: CJNE A,#08H,LT99
- MOV A,#01H ;1
- SJMP LAST9
- LT99: CJNE A,#09H,LT109
- MOV A,#05H ;5
- SJMP LAST9
- LT109: CJNE A,#0AH,LT119
- MOV A,#09H ;9
- SJMP LAST9
- LT119: CJNE A,#0BH,LT129
- MOV A,#0dH ;d
- SJMP LAST9
- LT129: CJNE A,#0CH,LT139
- MOV A,#00H ;0
- SJMP LAST9
- LT139: CJNE A,#0DH,LT149
- MOV A,#04H ;4
- SJMP LAST9
- LT149: CJNE A,#0EH,LT159
- MOV A,#08H ;8
- SJMP LAST9
- LT159: CJNE A,#0FH,LAST9
- MOV A,#0cH ;c
- ;=====================================================================================计算对应的字符码如A是41H
-
- LAST9: cjne R5,#01h,multi
- aftermul: djnz R5,before
- add A,R4
- acall DATA1
- acall DELAYS
- mov R5,#02h
- mov R4,#00h
- ajmp ifcursor
- before: RET
-
- JS9:
- LJMP JIESHOU9
-
- ;======================================================================================
- ifcursor: djnz R7,before ;如果显示完一行,那么光标切换到第二行
- mov A,#0c0h
- acall COMMAND
- acall DELAYS
- mov R7,#10h
- ajmp before
-
- multi: mov B,#10h
- mul AB
- mov R4,A
- clr A
- ajmp aftermul
-
- ;=======================================================================RS3.4 RW3.5 E3.3
- COMMAND: mov P0,A ;命令子程序
- clr P3.4
- clr P3.5
- setb P3.3
- clr P3.3
- ret
- DATA1: mov P0,A ;数据子程序
- setb P3.4
- clr P3.5
- setb P3.3
- clr P3.3
- ret
- DELAYS: mov R2,#50
- D1: mov R3,#0FFH
- D2: djnz R3,D2
- djnz R2,D1
- ret
- END
复制代码
所有资料51hei提供下载:
communication X.rar
(184.59 KB, 下载次数: 21)
通信LCD程序.docx
(17.34 KB, 下载次数: 13)
communication.pdf
(105.44 KB, 下载次数: 11)
|