本帖最后由 BSq 于 2020-4-1 12:32 编辑
最近在学习LCD模块,这个也是我用仿真软件edsim51做的仿真,这个是显示我写在CGRAM的字符,如果显示它的固有的符号(就是CGROM里面的字符怎么读出来)比如显示1,怎么改动? 源程序 ; 初始化显示 ; 详见指令集 CLR P1.3 ; 清零寄存器选择RS(1为数据,0为命令/状态)—表示指令正在发送到模块
; 功能设置 CLR P1.7 ; | CLR P1.6 ; | SETB P1.5 ; | CLR P1.4 ; | 高半字节P1.4-P1.7(DL=1,8位数据接口;DL=0,4位数据
SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿
CALL delay ; 等待忙标志BF清零 ; 首次发送的函数集-告诉模块进入4位模式 ; 为什么函数集为高半字节发送两次?见HD44780的4位操作 SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿 ; 第二次发送相同的函数集高半字节P1.4-P1.7
SETB P1.7 ; 低半字节(N=1,2行显示;N=0,1行显示)
SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿 ; 发送低半字节函数集
CALL delay ; 等待忙标志BF清零
; 设置输入方式(光标和显示模式) ; 设置为不移动的地址指针加1 CLR P1.7 ; | CLR P1.6 ; | CLR P1.5 ; | CLR P1.4 ; | 高半字节
SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿
SETB P1.6 ; | SETB P1.5 ; | 低半字节
SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿
CALL delay ; 等待忙标志BF清零
; 设置显示开/关及光标闪烁 ; 显示器打开,光标打开,闪烁关闭 CLR P1.7 ; | CLR P1.6 ; | CLR P1.5 ; | CLR P1.4 ; | 高半字节
SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿
SETB P1.7 ; | SETB P1.6 ; | SETB P1.5 ; | 低半字节
SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿
CALL delay ; 等待忙标志BF清零
; 将欧元符号放入RAM中 MOV 30H, #110B ; ** MOV 31H, #1001B ; * * MOV 32H, #11110B ; **** MOV 33H, #1000B ; * MOV 34H, #11110B ; **** MOV 35H, #1001B ; * * MOV 36H, #110B ; ** MOV 37H, #0 ; | 数据结束(在本例中,0可用于指示数据结束,因为没有行本身包含0)
; 设置CG RAM地址 ; 设置为字符4,行0(地址100000 B=20H) CLR P1.7 ; | SETB P1.6 ; | SETB P1.5 ; | CLR P1.4 ; | 高半字节
SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿
CLR P1.6 ; | CLR P1.5 ; | 低半字节
SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿
CALL delay ; 等待忙标志BF清零
; 将欧元符号发送到CGRAM SETB P1.3 ; 置位寄存器选择RS-表示数据正在发送到模块 MOV R1, #30H ; 指向第一行,在8051 RAM位置30H loop: MOV A, @R1 ; 将R1指向单元中的数据传送至A JZ endEuroEntry ; 如果A为0,则已到达数据结尾-跳出循环 CALL sendCharacter ; 将当前行发送到LCD模块 INC R1 ; 指向下一行 JMP loop ; 跳回loop
endEuroEntry:
; 设置DDRAM地址 ; 设置为0 CLR P1.3 ; 清零寄存器选择RS—表示指令正在发送到模块
SETB P1.7 ; | CLR P1.6 ; | CLR P1.5 ; | CLR P1.4 ; | 高半字节
SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿
CLR P1.7 ; | 低半字节
SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿
CALL delay ; 等待忙标志BF清零
; 显示欧元符号(通过发送4到DDRAM) SETB P1.3 ; 置位寄存器选择RS-表示数据正在发送到模块 MOV A, #4 ; | 现在A中是4,CGRAM中的数据 CALL sendCharacter ; | 将显示位置4(即:欧元符号)
JMP $ ; 程序结束-不执行任何操作
; 发送字符子程序
sendCharacter: MOV C, ACC.7 ; | MOV P1.7, C ; | MOV C, ACC.6 ; | MOV P1.6, C ; | MOV C, ACC.5 ; | MOV P1.5, C ; | MOV C, ACC.4 ; | MOV P1.4, C ; | 高半字节
SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿
MOV C, ACC.3 ; | MOV P1.7, C ; | MOV C, ACC.2 ; | MOV P1.6, C ; | MOV C, ACC.1 ; | MOV P1.5, C ; | MOV C, ACC.0 ; | MOV P1.4, C ; | 低半字节
SETB P1.2 ; | CLR P1.2 ; | 使能信号E的下降沿
CALL delay ; 等待忙标志BF清零
delay: MOV R0, #50 DJNZ R0, $ RET (小白一个,大佬莫怪@-@,前几次没看到有奖励,这次设置一下,谢谢各位了)
|