找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2373|回复: 6
收起左侧

单片机+LCD12864 7线屏汇编程序可用 另有疑问需要解答

[复制链接]
ID:261025 发表于 2022-1-13 15:26 | 显示全部楼层 |阅读模式
源程序C语言  http://www.51hei.com/bbs/dpj-186645-1.html
汇编程序是反编译修改后得到的   
图中圈起来的部分不明白    R5是如何被写进屏幕的  在写入的部分没找到和R5相关的程序  还有R4直接修改成04H去掉DEC R4 显示就不正常 这是什么原因  
111111.jpg IMG_20220113_145309.jpg IMG_20220113_145402.jpg
下面是和R4 R5相关的单片机汇编程序
                                   COM          EQU      31H;  命令
                                   DAT          EQU      32H;  数据
                                   DIP_Y        EQU      33H;  页   
                                   DIP_L            EQU      34H;  列



                                    MOV   DIP_Y,#01H;     页                                                                           MOV   DIP_L,#01H;     列

//显示32x32点阵图像
disp_blink_32x32:     MOV   R2,DIP_Y;      页
                      MOV   R5,DIP_L;      列                                                        
                      LCALL lcd_address;   设定页列位置
                      MOV   R4,#32;        32像素
                                      MOV   R3,#4;         4页                                                        
W1_3232:                   CLR A
                                      MOVC A,@A+DPTR;
                                      INC DPTR
                      MOV   DAT,A                        
                      LCALL transfer_data; 写入数据                                             
                      DJNZ R4,W1_3232  
                                      DJNZ R3,W2_3232
                                      LJMP W3_3232
W2_3232:                      MOV   R5,DIP_L;      列                 
                      INC R2;                       页加一
                                      INC R2;              页加一  
                      LCALL lcd_address;   设定页列位置  
                                      MOV   R4,#32;        32像素                                          
                      LJMP W1_3232                                                                                 
W3_3232:              RET   
;==========================================================================
// 页 列
lcd_address:          MOV   R4,05H                        
                      DEC   R4                           
                      DEC   R2                // 页减一         
                      MOV   A,R2                        
                      ADD   A,#0B0H;                     
                      MOV   COM,A                        
                      LCALL transfer_command; //设置页地址。                     
                      MOV   A,R4                        
                      SWAP  A;                //高低位互换         
                      ANL   A,#0FH                       
                      ADD   A,#10H                       
                      MOV   COM,A                        
                      LCALL transfer_command; //设置列地址的高4位                       
                      MOV   A,R4                          
                      ANL   A,#0FH                       
                      MOV   COM,A                        
                      LCALL transfer_command; //设置列地址的低4位   
                                      RET;
         
;==========================================================================
/*写指令到LCD模块*/
transfer_command:  CLR   CS                          
                   CLR   CD                        
                   MOV   R5,#8                        
Q00B7:             CLR   SCL                        
                   MOV   A,COM                        
                   JNB   ACC.7,Q00C1                  
                   SETB  SDA                          
                   SJMP  Q00C3                        
Q00C1:             CLR   SDA                        
Q00C3:             SETB  SCL                        
                   MOV   A,COM                        
                   ADD   A,ACC                        
                   MOV   COM,A                        
                   DJNZ R5,Q00B7               
                   SETB  CS                          
                   RET      

无字库12864 - 汇编.rar

33.67 KB, 下载次数: 4

回复

使用道具 举报

ID:126422 发表于 2022-10-23 22:17 | 显示全部楼层
请教楼主,C用什么软件反编译成汇编,看你改的挺好,想学习,谢谢!
回复

使用道具 举报

ID:884147 发表于 2022-10-23 22:51 | 显示全部楼层
05H就是R5,但R5不一定是05H
回复

使用道具 举报

ID:884147 发表于 2022-10-23 22:52 | 显示全部楼层
05H就是R5,是一个寄存器
回复

使用道具 举报

ID:384109 发表于 2022-10-23 23:20 | 显示全部楼层
直接找汇编的例程不就好了,这个源代码就是汇编写的,不是C写的,反汇编估计不会成功,05H是内存地址05H,跟R5两码事
回复

使用道具 举报

ID:884147 发表于 2022-10-24 08:36 | 显示全部楼层
51把每个通用和特殊寄存器都分配了一个地址,也可以说把这些地址起了一个名字,所以指向地址或使用名字是一样的,你可以把累加器A换为0E0H试试,就像你的学号和名字都是一个人,换个马甲而已
回复

使用道具 举报

ID:1012017 发表于 2022-10-24 21:56 | 显示全部楼层
05H就是R5
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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