发 帖  
原厂入驻New
[讨论] LCD1602汇编编写显示程序显示问题
2019-5-20 16:41:29  559 LCD1602 单片机 LCD
分享
刚入门菜鸟请教下大佬们 我这程序现在写完一直是重新第一行开始刷写怎么改才能让他一直显示呢
  1. ;1602液晶屏显示程序
  2. ;====定义控制线端口=======
  3. ;P2.0-P2.7为数据 D0-D7接口
  4. ;RS数据/命令选择端     H/L
  5. ;RW读/写选择端         H/L
  6. ;EN使能控制端          H/L 开/关
  7.      RS EQU P0.0       ;等值指令(起外号)
  8.      RW EQU P0.1       ;等值指令(起外号)
  9.      EN EQU P0.2       ;等值指令(起外号)
  10.      ORG 00H           ;定义起始地址位置
  11.      JMP MAIN          ;跳转主程序
  12.      ORG 30H           ;开始主程序地址位置
  13. /*主程序*/;==========================
  14. MAIN:  MOV SP,60H      ;设置堆栈指针地址位置
  15.        CALL CHUSHIHUA  ;调用1602初始化
  16. WW:    MOV A,#80H      ;设置1602显示的地址位置行(第一行80H--90H 第二行0C0H--0D0H)
  17.        LCALL XIE        ;调用指令子程序写入显示地址的数据
  18. /*     MOV A,#"A"      ;需要显示的东西
  19.        CALL XIE1       ;调用显示子程序*/
  20.        CALL SHU1       ;调用数据表
  21.       
  22.        MOV A,#0C0H    ;把第二行地址写入A中
  23.          LCALL XIE       ;调用第二行进行显示
  24.         CALL SHU2       ;调用数据表1
  25.         JMP [        DISCUZ_CODE_1        ]nbsp;      
  26. /*调用数据表显示程序*/;===============
  27. SHU1:      MOV R0,#00H      ;00送给R0
  28. AAA:       MOV A,R0         ;A中数为00
  29.            MOV DPTR,#TAB    ;数据表地址装入DPTR中
  30.            MOVC A,@A+DPTR   ;数据表数据装入A中
  31.            CALL XIE1        ;调用数据进行写入
  32.            INC R0           ;R0+1吧下一个数据调入
  33.            CJNE R0,#16D,AAA ;显示16个数据
  34.            RET              ;返回主程序
  35. /*调数据表1显示程序*/;===============
  36. SHU2:      MOV R1,#00H      ;00送给R0
  37. AAB:       MOV A,R1         ;A中数为00
  38.            MOV DPTR,#TAB1   ;数据表1地址装入DPTR中
  39.            MOVC A,@A+DPTR   ;数据表数据装入A中
  40.            CALL XIE1        ;调用数据进行写入
  41.            INC R1           ;R0+1吧下一个数据调入
  42.            CJNE R1,#16D,AAB ;显示16个数据
  43.            RET              ;返回主程序
  44. /*1602初始化程序*/;===================
  45. CHUSHIHUA: CALL YANSHI ;调用延时
  46.            MOV A,#38H  ;写显示模式设置 16X2显示,5X7点阵,8位数据接口
  47.            CALL XIE    ;调用写指令子程序
  48.            MOV A,#01H  ;显示清屏(数据指针地址和所有显示清0)
  49.            CALL XIE    ;调用写指令子程序
  50.            MOV A,#06H  ;显示光标移动设置为当写一个字符后地址指针加1且光标加1
  51.            CALL XIE    ;调用写指令子程序
  52.            MOV A,#0CH  ;显示开及光标设置为开显示 不显示光标 光标不显示
  53.            CALL XIE    ;调用写子程序
  54.            RET         ;返回主程序
  55. /*写数据程序*/;=======================
  56. XIE1: SETB RS    ;置1
  57.        CLR RW    ;置0
  58.        CLR EN    ;置0
  59.        MOV P2,A  ;写数据到P2口
  60.       CALL YANSHI;调用延时
  61.       SETB EN    ;置1开启使能     
  62.       CALL YANSHI;调用延时
  63.       CLR EN     ;关使能
  64.       CALL YANSHI;调用延时
  65.       RET        ;返回主程序
  66. /*写指令命令程序*/;=======================
  67. XIE: CLR RS   ;置0
  68.      CLR RW   ;置0
  69.      CLR EN   ;置0
  70.      MOV P2,A ;写指令数据到P2口
  71.     CALL YANSHI;调用延时
  72.     SETB EN    ;开启使能     
  73.     CALL YANSHI;调用延时
  74.      CLR EN    ;关闭使能
  75.     CALL YANSHI;调用延时
  76.      RET       ;返回主程序
  77. /*延时程序*/;========================
  78. YANSHI: MOV R7,#0FFH
  79. AA:     MOV R6,#0F9H
  80.        DJNZ R6,$
  81.        DJNZ R7,AA
  82.         RET
  83. /*数据表第一行*/;====================
  84. TAB:  DB "welcome-to-1602-"
  85. /*数据表第二行*/;====================
  86. TAB1: DB "www.dfhw123.com "
  87. END
复制代码
QQ图片20190520163139.jpg QQ图片20190520163132.jpg
0
2019-5-20 16:41:29   评论 分享淘帖

相关讨论

2 个讨论
现在用汇编的不多了,能每行都写注释的就更少了,不错
CALL SHU2       ;调用数据表1
        JMP [        DISCUZ_CODE_1        ]nbsp;     
这里的JMP后面看不到,不知道是什么,试试把这里改为
JMP $
2019-5-21 10:37:29 1 评论

举报

1 条评论
  • 457660630 2019-5-21 14:11

    可能出来有问题,我写的就是JMP $老哥我的思路是让他第1部初始化完之后
    第2部从左边第一行第一位开始调表显示16位数据,显示完之后再把左边第二行第一位数据地址写入开始调表显示第二个数据表数据.然后就让程序一直原地转
    实验结果就是现在只写入80H地址调一个数据表然后JMP $ 1602就可以显示第一个数据表数据 了,写第二个数据表就不行一直刷新。在网上也找了半天找不到有汇编的1602教学视频,C语言现在没接触看不懂,这个程序就是跟着他们的思路写出来的,我慢慢再研究研究看看是不是程序结构哪里不对导致了一直刷新,
    我开始学单片机就是学的汇编现在也习惯了,用着感觉很有指向性不错的

用的是什么单片机,会不会是单片机自带的看门狗启动了,但是没清除,所以不停的复位了
2019-5-21 16:16:50 评论

举报

撰写讨论

你正在撰写讨论

如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

发讨论
课程
    关闭

    站长推荐 上一条 /10 下一条

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