找回密码
 立即注册
查看: 637|回复: 7

LCD1602驱动-89C52RC-汇编

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:239
  • 最近打卡:2025-05-02 03:42:37

22

主题

283

回帖

905

积分

高级会员

积分
905
发表于 2024-9-21 21:26:48 | 显示全部楼层 |阅读模式
  1. $INCLUDE(STC89.INC)
  2.     ORG                0000H
  3.     LJMP        F_MAIN
  4.     T_TestString: DB "STC89C52RC",0        
  5.         
  6. F_MAIN:
  7.         MOV                SP,#7FH
  8.     LCALL F_LCD1602_Init
  9.         
  10.     MOV   R7,#0
  11.     MOV   R6,#0
  12.         LCALL F_LCD1602_SetShowAddr
  13.     MOV   A,#'A'
  14.         LCALL F_LCD1602_ShowChar
  15.     MOV   A,#'B'
  16.         LCALL F_LCD1602_ShowChar
  17.     MOV   A,#'C'
  18.         LCALL F_LCD1602_ShowChar
  19.         
  20.     MOV   R7,#13
  21.     MOV   R6,#0
  22.         LCALL F_LCD1602_SetShowAddr
  23.     MOV   A,#'E'
  24.         LCALL F_LCD1602_ShowChar
  25.     MOV   A,#'F'
  26.         LCALL F_LCD1602_ShowChar
  27.     MOV   A,#'G'
  28.         LCALL F_LCD1602_ShowChar
  29.         
  30.         
  31.     MOV   R7,#13
  32.     MOV   R6,#1
  33.         LCALL F_LCD1602_SetShowAddr
  34.     MOV   A,#'H'
  35.         LCALL F_LCD1602_ShowChar
  36.     MOV   A,#'I'
  37.         LCALL F_LCD1602_ShowChar
  38.     MOV   A,#'J'
  39.         LCALL F_LCD1602_ShowChar
  40.         
  41.     MOV   R7,#0
  42.     MOV   R6,#1
  43.         LCALL F_LCD1602_SetShowAddr
  44.         MOV   DPTR,#T_TestString
  45.         LCALL F_LCD1602_ShowString
  46.         
  47. L_LOOP:        
  48.         SJMP        L_LOOP
  49.         
  50. DELAY100MS:                        ;@11.0592MHz
  51.         PUSH        30H
  52.         PUSH        31H
  53.         MOV                30H,#180
  54.         MOV                31H,#68
  55. NEXT:
  56.         DJNZ        31H,NEXT
  57.         DJNZ        30H,NEXT
  58.         POP                31H
  59.         POP                30H
  60.         RET
  61. ;引脚定义
  62. LCD1602_RS    EQU P3.5
  63. LCD1602_RW    EQU P3.6
  64. LCD1602_EN    EQU P3.4
  65. LCD1602_DATA  EQU P0        
  66. ; 功能描述: LCD1602 读取状态
  67. ; 入口参数:
  68. ; 出口参数: A: 状态
  69. ; 影响资源:
  70. ; 堆栈需求:
  71. ; 示   例1:
  72. F_LCD1602_ReadState:
  73.     MOV   LCD1602_DATA,#0FFH ;释放数据总线
  74.     CLR   LCD1602_RS
  75.     SETB  LCD1602_RW
  76.     ;>30nS
  77.     SETB  LCD1602_EN         ;TA
  78.     ;>100nS
  79.     MOV   A,LCD1602_DATA
  80.     CLR   LCD1602_EN         ;TB
  81.     ;TA + TB = >400nS
  82.         RET
  83. ; 功能描述: LCD1602 写入命令
  84. ; 入口参数: A: 命令
  85. ; 出口参数:  
  86. ; 影响资源:
  87. ; 堆栈需求:
  88. ; 示   例1:
  89. F_LCD1602_WriteCmd:
  90.         PUSH  ACC
  91.     L_LCD1602_WriteCmd_CheckBusy:
  92.         LCALL F_LCD1602_ReadState        
  93.         ANL   A,#80H
  94.         JNZ   L_LCD1602_WriteCmd_CheckBusy ;检测 1602 液晶如果忙,等待
  95.         POP   ACC
  96.         
  97.         CLR   LCD1602_RS
  98.         CLR   LCD1602_RW
  99.         MOV   LCD1602_DATA,A
  100.         ;>40nS
  101.         SETB  LCD1602_EN     
  102.         ;>150nS
  103.         CLR   LCD1602_EN     
  104.         ;1->0->1: >400nS
  105.         RET        
  106.         
  107. ; 功能描述: LCD1602 写入数据
  108. ; 入口参数: A: 数据
  109. ; 出口参数:  
  110. ; 影响资源:
  111. ; 堆栈需求:
  112. ; 示   例1:
  113. F_LCD1602_WriteData:
  114.         PUSH  ACC
  115.     L_LCD1602_WriteData_CheckBusy:
  116.         LCALL F_LCD1602_ReadState        
  117.         ANL   A,#80H
  118.         JNZ   L_LCD1602_WriteData_CheckBusy ;检测 1602 液晶如果忙,等待
  119.         POP   ACC
  120.         
  121.         SETB  LCD1602_RS
  122.         CLR   LCD1602_RW
  123.         MOV   LCD1602_DATA,A
  124.         ;>40nS
  125.         SETB  LCD1602_EN     
  126.         ;>150nS
  127.         CLR   LCD1602_EN     
  128.         ;1->0->1: >400nS
  129.         RET        
  130. ; 功能描述: LCD1602 初始化
  131. ; 入口参数:
  132. ; 出口参数:  
  133. ; 影响资源:
  134. ; 堆栈需求:
  135. ; 示   例1:
  136. F_LCD1602_Init:
  137.         CLR   LCD1602_EN
  138.         LCALL DELAY100MS
  139.         MOV   A,#38H             ;设置16*2显示,5*7点阵,8位数据接口
  140.         LCALL F_LCD1602_WriteCmd
  141.         MOV   A,#0CH             ;开显示
  142.         LCALL F_LCD1602_WriteCmd
  143.         MOV   A,#06H             ;读写一字节后地址指针加1
  144.         LCALL F_LCD1602_WriteCmd        
  145.         MOV   A,#01H             ;清除显示
  146.         LCALL F_LCD1602_WriteCmd
  147.         RET
  148. ; 功能描述: LCD1602 设置显示地址
  149. ; 入口参数: R7: X 显示横坐标(向右为正方向) 0...16
  150. ;           R6: Y 显示纵坐标(向下为正方向) 0..1
  151. ; 出口参数:  
  152. ; 影响资源:
  153. ; 堆栈需求:
  154. ; 示   例1:  
  155. F_LCD1602_SetShowAddr:
  156.         PUSH  ACC
  157.     MOV   A,#80H
  158.         CJNE  R6,#1,L_LCD1602_SetShowAddr_Y0
  159.         ADD   A,#40H
  160.     L_LCD1602_SetShowAddr_Y0:
  161.         ADD   A,R7
  162.         LCALL F_LCD1602_WriteCmd
  163.         POP   ACC
  164.         RET
  165. ; 功能描述: LCD1602 显示字符
  166. ; 入口参数: A: 字符
  167. ; 出口参数:  
  168. ; 影响资源:
  169. ; 堆栈需求:
  170. ; 示   例1:
  171. F_LCD1602_ShowChar:
  172.     LCALL F_LCD1602_WriteData
  173.         RET
  174.         
  175. ; 功能描述: LCD1602 显示字符串
  176. ; 入口参数: DPTR: 字符串地址
  177. ; 出口参数:  
  178. ; 影响资源:
  179. ; 堆栈需求:
  180. ; 示   例1:
  181. F_LCD1602_ShowString:
  182.         PUSH  ACC
  183.         L_LCD1602_ShowString_Check:
  184.     CLR   A
  185.     MOVC  A,@A+DPTR                  ;获取当前字符
  186.     JZ    L_LCD1602_ShowString_Exit  ;检查字符串的末尾
  187.     INC   DPTR                       ;递增字符串指针
  188.     LCALL F_LCD1602_WriteData        ;发送当前字符
  189.     SJMP  L_LCD1602_ShowString_Check ;检查下一步
  190.     L_LCD1602_ShowString_Exit:
  191.         POP   ACC
  192.         RET
  193. END
复制代码


REMOVEUNUSED
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:239
  • 最近打卡:2025-05-02 03:42:37

22

主题

283

回帖

905

积分

高级会员

积分
905
发表于 2024-9-21 21:30:14 来自手机 | 显示全部楼层
IMG_20240921_212835.jpg
REMOVEUNUSED
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:414
  • 最近打卡:2025-05-02 09:17:58

5

主题

296

回帖

2034

积分

金牌会员

积分
2034
发表于 2024-9-21 23:19:26 | 显示全部楼层
用汇编有点费脑子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-03 00:02:01
已绑定手机

19

主题

3191

回帖

4876

积分

论坛元老

积分
4876
发表于 2024-9-22 08:26:58 来自手机 | 显示全部楼层
感觉引脚定义和放在前面会好点。放程序中间还有点不好找。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:239
  • 最近打卡:2025-05-02 03:42:37

22

主题

283

回帖

905

积分

高级会员

积分
905
发表于 2024-9-22 10:56:44 来自手机 | 显示全部楼层
soma 发表于 2024-9-22 08:26
感觉引脚定义和放在前面会好点。放程序中间还有点不好找。

想模块化的,汇编不知道怎么写

点评

定义一些寄存器,参数赋值给寄存器,然后LCALL,一般都这么搞的  详情 回复 发表于 2024-9-23 09:23
REMOVEUNUSED
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2024-9-22 12:29:33 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:176
  • 最近打卡:2025-02-19 17:24:49

15

主题

265

回帖

1387

积分

金牌会员

积分
1387
发表于 2024-9-23 08:57:24 | 显示全部楼层
自从用了c,再也不愿意用汇编了,2004年我用汇编写过12K长的程序。写了45天。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-9-23 09:23:26 | 显示全部楼层
邮*** 发表于 2024-9-22 10:56
想模块化的,汇编不知道怎么写

定义一些寄存器,参数赋值给寄存器,然后LCALL,一般都这么搞的
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 00:52 , Processed in 0.146208 second(s), 98 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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