找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2151|回复: 3
打印 上一主题 下一主题
收起左侧

51单片机双机通信+LCD1602汇编语言程序

[复制链接]
跳转到指定楼层
楼主
在主机显示学号姓名,利用通信功能,在从机也显示同样的内容。
  1. ;发送端
  2. ;/通用寄存器R5用于录入lcd1602的8位指令和数据
  3. ORG 000H
  4. LCD_PORT EQU P1
  5. COUNT EQU 30H
  6. RS EQU P2.5
  7. RW EQU P2.6
  8. EN  EQU P2.7

  9. AJMP START

  10. ORG 00BH
  11. LJMP TIME0

  12. ORG 100H
  13. START:
  14. ;将自定义的八个字符写入CGRAM
  15. ACALL ENABLE
  16. MOV P1,#40H
  17.         ACALL ENABLE
  18.         MOV DPTR,#SELF1
  19.         CALL WSELF
  20.         MOV P1,#48H
  21.         ACALL ENABLE
  22.         MOV DPTR,#SELF2
  23.         CALL WSELF
  24.         MOV P1,#50H
  25.         ACALL ENABLE
  26.         MOV DPTR,#SELF3
  27.         CALL WSELF
  28.         MOV P1,#58H
  29.         ACALL ENABLE
  30.         MOV DPTR,#SELF4
  31.         CALL WSELF
  32.         MOV P1,#60H
  33.         ACALL ENABLE
  34.         MOV DPTR,#SELF5
  35.         CALL WSELF
  36.         MOV P1,#68H
  37.         ACALL ENABLE
  38.         MOV DPTR,#SELF6
  39.         CALL WSELF
  40.         MOV P1,#70H
  41.         ACALL ENABLE
  42.         MOV DPTR,#SELF7
  43.         CALL WSELF
  44.         MOV P1,#78H
  45.         ACALL ENABLE
  46.         MOV DPTR,#SELF8
  47.         CALL WSELF
  48. //定时器设置
  49.         MOV TMOD,#00100001B
  50.         SETB EA;总开关
  51.         MOV PCON,#80H
  52.         MOV TH1,#0FDH
  53. //初始化串口//方式1发送接收均初始化
  54.         MOV SCON,#01010000B
  55.         SETB TR1;定时器1开始运行

  56. ACALL LCD1602_init;初始化lcd1602

  57. ACALL PRINT0

  58. MAIN:
  59. MOV DPTR,#NUM_TAB
  60. MOV R0,#16

  61. ACALL DELAY5
  62. ACALL SEND_DATA
  63. NEXT:AJMP NEXT


  64. //发送数据,表地址放入dptr,发送数量放入R0
  65. SEND_DATA:
  66. INC R0
  67. MOV A,#00H;从首位开始
  68. SEND_DATA_0:
  69. DJNZ R0,SEND_DATA_1
  70. ret
  71. SEND_DATA_1:
  72. ACALL D5MS
  73. ACALL D5MS
  74. PUSH ACC
  75. MOVC A,@A+DPTR
  76. MOV SBUF,A
  77. ACALL D5MS
  78. POP ACC
  79. INC A
  80. WAIT:JBC TI,SEND_DATA_0//等待发送完成
  81. AJMP WAIT
  82. //写指令,指令放入R5
  83. WRITE_COM:
  84. CLR  RS                                                                 ;(130)RS,RW,EN均置0,写指令
  85. CLR  RW
  86. CLR  EN
  87. MOV LCD_PORT ,R5                                     ;(131)指令一律写入R5,在移入P2
  88. SETB  EN      
  89. ACALL D5MS
  90. ACALL D5MS
  91. CLR  EN                                                                 ;(132)EN跳变,允许数据交换
  92. RET                                                                         ;(134)返回原处

  93. //写数据,数据放入R5
  94. WRITE_DATA:
  95. SETB  RS                                                                 ;(130)RS置1,RW,EN均置0,写数据
  96. CLR  RW
  97. CLR  EN
  98. MOV LCD_PORT ,R5                                                         ;(131)数据一律写入R5,在移入P2
  99. //ACALL D5MS
  100. SETB  EN      
  101. ACALL D5MS
  102. ACALL D5MS
  103. CLR  EN                                                                 ;(132)EN跳变,允许数据交换
  104. RET                                                                         ;(134)返回原处

  105. //初始化LCD1602
  106. LCD1602_init:
  107. MOV R5,#06H                                                        ;(144)8位数据,5*7点阵,2行显示
  108. ACALL WRITE_COM                       
  109. MOV R5,#0CH                                                        ;(148)写一个数据后,光标右移,屏幕不移动
  110. ACALL WRITE_COM
  111. MOV R5,#38H                                                        ;(146)显示开,关光标,光标不闪烁
  112. ACALL WRITE_COM
  113. MOV R5,#01H                                                        ;(150)清屏
  114. ACALL WRITE_COM
  115. RET

  116. PRINT0:
  117. PUSH ACC;对A做保护
  118. PUSH 06
  119. PUSH 05
  120. MOV A,#00H
  121. MOV R3,#16
  122. MOV DPTR,#NUM_TAB

  123. PRINT0_0:
  124. PUSH ACC
  125. MOVC A,@A+DPTR
  126. MOV R5,#00H                ;(49)命令载入R5
  127. ACALL WRITE_COM                        ;(50)写命令
  128. MOV R5,A
  129. ACALL WRITE_DATA
  130. POP ACC
  131. INC A
  132. DJNZ R3,PRINT0_0
  133. POP 05
  134. POP 06
  135. POP ACC
  136. RET

  137. ENABLE:
  138.         CLR RS
  139.         CLR RW
  140.         CLR EN
  141.         ACALL D5MS
  142.         ACALL D5MS
  143.         SETB EN
  144.         RET
  145.       
  146. WSELF:
  147.         MOV R7,#00H
  148. W1:
  149.         MOV A,R7
  150.         MOVC A,@A+DPTR
  151.         CALL WRITE1
  152.         INC R7
  153.         CJNE R7,#08H,W1
  154.         RET
  155. WRITE1:
  156.         CLR EN
  157.         SETB RS
  158.         CLR RW
  159.         SETB EN
  160.         MOV P1,A
  161.         CLR EN
  162.         CALL D5MS
  163.     CALL D5MS
  164.         RET
  165. //计数器0中断服务函数
  166. TIME0:
  167. PUSH ACC
  168. INC 30H
  169. MOV A,30H
  170. CJNE A,#02,RETIME;5*O.1S
  171. INC R3
  172. MOV 30H,#0

  173. RETIME:
  174. MOV TH0,#27H
  175. MOV TL0,#11H;重置定时器
  176. POP ACC
  177. RETI
  178. //延时5ms左右,已进行现场保护
  179. D5MS:
  180. PUSH 07
  181. PUSH 06
  182. MOV  R7,#200      
  183. DEL1:MOV R6,#125
  184. DEL2:DJNZ R6,DEL2      
  185. DJNZ R7,DEL1
  186. POP 06
  187. POP 07
  188. RET
  189. //带保护现场的延时
  190. DELAY5:
  191.         PUSH 02
  192.         PUSH 03
  193.         PUSH 04
  194.     MOV R2,#5
  195. DLY1:
  196.     MOV R3,#200
  197. DLY2:
  198.     MOV R4,#250
  199.     DJNZ R4,$
  200.     DJNZ R3,DLY2
  201.     DJNZ R2,DLY1
  202.         POP 04
  203.         POP 03
  204.         POP 02
  205.     RET
  206. //学号
  207. NUM_TAB: DB "0123456789",20H,05H,20H,06H,20H,07H
  208. //姓名
  209. SELF1:DB  04H,1FH,15H,1FH,15H,1FH,04H,07H
  210. SELF2:DB  02H,0CH,04H,1FH,0EH,15H,15H,04H
  211. SELF3:DB  02H,0AH,06H,02H,1FH,02H,02H,02H
  212. SELF4:DB  0EH,04H,04H,04H,0EH,04H,04H,0EH
  213. SELF5:DB  0FH,0AH,0AH,1AH,1FH,0AH,0AH,0FH
  214. SELF6:DB  09H,01H,1DH,07H,15H,09H,15H,03H
  215. SELF7:DB  04H,1FH,04H,0AH,1FH,00H,1BH,0BH
  216. SELF8:DB  02H,1CH,10H,14H,1FH,04H,15H,0CH
  217.       
  218. END
复制代码

屏幕截图 2022-06-07 130928.png (82.06 KB, 下载次数: 88)

屏幕截图 2022-06-07 130928.png

评分

参与人数 1黑币 +30 收起 理由
admin + 30 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1026000 发表于 2022-6-7 13:16 | 只看该作者
  1. ;接收端
  2. //通用寄存器R5用于录入lcd1602的8位指令和数据
  3. ORG 000H
  4. LCD_PORT EQU P1
  5. RS EQU P2.5
  6. RW EQU P2.6
  7. EN  EQU P2.7

  8. AJMP START

  9. ORG 023H
  10. LJMP REC

  11. ORG 100H
  12. START:
  13. //定时器1设置,即设置波特率

  14. MOV TMOD,#20H
  15. MOV PCON,#80H
  16. MOV TH1,#0FDH
  17. //

  18. //初始化串口//方式1发送接收均初始化
  19. MOV SCON,#01010000B
  20. SETB REN
  21. SETB TR1
  22. //

  23. //初始化中断
  24. SETB EA;总开关
  25. SETB ES;串口中断
  26. ACALL WCGRAM
  27. ACALL LCD1602_init;初始化lcd1602
  28. MAIN:;循环
  29. AJMP MAIN

  30. //串口中断服务函数(仅用于接受数据)
  31. REC:
  32. PUSH ACC
  33. PUSH 05
  34. MOV A,SBUF
  35. CLR RI
  36. MOV R5,#00H
  37. ACALL WRITE_COM
  38. MOV R5,A
  39. ACALL WRITE_DATA
  40. POP 05
  41. POP ACC
  42. RETI

  43. //写指令,指令放入R5
  44. WRITE_COM:
  45. ACALL D5MS
  46. CLR  RS                                                                 ;(130)RS,RW,EN均置0,写指令
  47. CLR  RW
  48. CLR  EN
  49. MOV LCD_PORT ,R5                                                         ;(131)指令一律写入R5,在移入P2
  50. //ACALL D5MS
  51. SETB  EN        
  52. CLR  EN                                                                 ;(132)EN跳变,允许数据交换
  53. RET                                                                         ;(134)返回原处


  54. //写数据,数据放入R5
  55. WRITE_DATA:
  56. ACALL D5MS
  57. SETB  RS                                                                 ;(130)RS置1,RW,EN均置0,写数据
  58. CLR  RW
  59. CLR  EN
  60. MOV LCD_PORT ,R5                                                         ;(131)数据一律写入R5,在移入P2
  61. SETB  EN        
  62. CLR  EN                                                                 ;(132)EN跳变,允许数据交换
  63. RET                                                                         ;(134)返回原处


  64. //初始化LCD1602
  65. LCD1602_init:
  66. MOV R5,#06H                                                        ;(144)8位数据,5*7点阵,2行显示
  67. ACALL WRITE_COM                        
  68. MOV R5,#0CH                                                        ;(148)写一个数据后,光标右移,屏幕不移动
  69. ACALL WRITE_COM
  70. MOV R5,#38H                                                        ;(146)显示开,关光标,光标不闪烁
  71. ACALL WRITE_COM
  72. MOV R5,#01H                                                        ;(150)清屏
  73. ACALL WRITE_COM
  74. RET

  75. WCGRAM:
  76. MOV P1,#40H
  77.         ACALL ENABLE
  78.         MOV DPTR,#SELF1
  79.         CALL WSELF
  80.         MOV P1,#48H
  81.         ACALL ENABLE
  82.         MOV DPTR,#SELF2
  83.         CALL WSELF
  84.         MOV P1,#50H
  85.         ACALL ENABLE
  86.         MOV DPTR,#SELF3
  87.         CALL WSELF
  88.         MOV P1,#58H
  89.         ACALL ENABLE
  90.         MOV DPTR,#SELF4
  91.         CALL WSELF
  92.         MOV P1,#60H
  93.         ACALL ENABLE
  94.         MOV DPTR,#SELF5
  95.         CALL WSELF
  96.         MOV P1,#68H
  97.         ACALL ENABLE
  98.         MOV DPTR,#SELF6
  99.         CALL WSELF
  100.         MOV P1,#70H
  101.         ACALL ENABLE
  102.         MOV DPTR,#SELF7
  103.         CALL WSELF
  104.         MOV P1,#78H
  105.         ACALL ENABLE
  106.         MOV DPTR,#SELF8
  107.         CALL WSELF
  108.         RET
  109. ENABLE:
  110.         CLR RS
  111.         CLR RW
  112.         CLR EN
  113.         ACALL D5MS
  114.         ACALL D5MS
  115.         SETB EN
  116.         RET
  117.         WSELF:
  118.         MOV R7,#00H
  119. W1:
  120.         MOV A,R7
  121.         MOVC A,@A+DPTR
  122.         CALL WRITE1
  123.         INC R7
  124.         CJNE R7,#08H,W1
  125.         RET
  126. WRITE1:
  127.         CLR EN
  128.         SETB RS
  129.         CLR RW
  130.         SETB EN
  131.         MOV P1,A
  132.         
  133.         CLR EN
  134.     ACALL D5MS
  135.         ACALL D5MS
  136.         RET


  137. //延时5ms左右,已进行现场保护
  138. D5MS:
  139. PUSH 07
  140. PUSH 06
  141. MOV  R7,#200      
  142. DEL1:MOV R6,#125
  143. DEL2:DJNZ R6,DEL2      
  144. DJNZ R7,DEL1
  145. POP 06
  146. POP 07
  147. RET
  148. //
  149. SELF1:DB  04H,1FH,15H,1FH,15H,1FH,04H,07H
  150. SELF2:DB  02H,0CH,04H,1FH,0EH,15H,15H,04H
  151. SELF3:DB  02H,0AH,06H,02H,1FH,02H,02H,02H
  152. SELF4:DB  0EH,04H,04H,04H,0EH,04H,04H,0EH
  153. SELF5:DB  0FH,0AH,0AH,1AH,1FH,0AH,0AH,0FH
  154. SELF6:DB  09H,01H,1DH,07H,15H,09H,15H,03H
  155. SELF7:DB  04H,1FH,04H,0AH,1FH,00H,1BH,0BH
  156. SELF8:DB  02H,1CH,10H,14H,1FH,04H,15H,0CH



  157. END
复制代码
回复

使用道具 举报

板凳
ID:1078514 发表于 2023-5-21 16:13 | 只看该作者
大佬,能直接给一下原理图吗?我自己画的仿真不出来
回复

使用道具 举报

地板
ID:1067163 发表于 2023-5-22 14:26 | 只看该作者
李了里 发表于 2023-5-21 16:13
大佬,能直接给一下原理图吗?我自己画的仿真不出来

CSU?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表