源程序C语言 http://www.51hei.com/bbs/dpj-186645-1.html
汇编程序是反编译修改后得到的
图中圈起来的部分不明白 R5是如何被写进屏幕的 在写入的部分没找到和R5相关的程序 还有R4直接修改成04H去掉DEC R4 显示就不正常 这是什么原因
下面是和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
|