LCD12864的图像直写
LCD12864结构


由于我们的目的是将LCD12864以无字库的方式使用,因此只需要着重考虑GDRAM即可
| 指令 | RS | RW | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | 说明 | 执行时间(540KHZ) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 功能设定 | 0 | 0 | 0 | 0 | 1 | DL | X | RE | X | X | DL=1(必须设为 1)RE=1:扩充指令集动作RE=0:基本指令集动作 | - |
| 设定绘图 RAM 地址 | 0 | 0 | 1 | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 设定 CGRAM 地址到地址计数器(AC) | 72us |
| 扩充功能设定 | 0 | 0 | 0 | 0 | 1 | 1 | X | RE | G | 0 | RE=1:扩充指令集动作RE=0:基本指令集动作G=1:绘图显示 ONG=0:绘图显示 OFF | 72us |
上面则是主要用到的相关cmd
任务流程
绘图显示RAM提供64×32个位元组的记忆空间,最多可以控制256×64点的二维也纳绘图缓冲空间, 在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个8位元的资料到绘图RAM,而地址计 数器(AC)会自动加一;在写入绘图RAM的期间,绘图显示必须关闭,整个写入绘图RAM的步骤如下:
1、关闭绘图显示功能。
2、先将水平的位元组坐标(X)写入绘图RAM地址;
3、再将垂直的坐标(Y)写入绘图RAM地址;
4、将D15——D8写入到RAM中;
5、将D7——D0写入到RAM中;
6、打开绘图显示功能。
那么从上面的GDRAM可以到,此处的X其实只有0-15,也就是直接控制无法精确控制x的位置。同时y的实际范围是0-31,那么在y>31的情况就需要考虑x的额外控制了。上面的都是些麻烦活,目前已经完成了对x的不连续处理。
TODO y的不连续越界处理
注意事项
速率问题,尤其是
RE扩展指令集的切换,该命令明显需要更长的时间执行在进入绘图模式后,
cmd:0x01无法完成清屏操作,需要手动全部写0x00
效果展示

那么也可以看到,“G”在越界后无法正常显示
代码
警告,代码未对任何越界进行判断处理。请自行处理越界问题
LCD12864.h
1 |
|
LCD12864.c
其实代码的主要篇幅用在了x的不连续处理上
1 |
|
main.c
注意,字模提取采用 行列式,且固定为16点的全角
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 南华!


![[RK3588]初识随笔](https://www.rock-chips.com/uploads/allimg/220926/1-2209261629510.png)
![[Vitis Unified Ide]入门](https://www.amd.com/content/dam/amd/en/images/covers/2772134-vitis-software-box.png)