LCD12864读取GDRAM数据异常
- 环境
- 程序流程
- 流程粗述
- 读取数据函数流程细述
- 异常情况描述
- 可疑点
- 最后
环境
arduino IDEarduino unolcd4位通讯接法
程序流程
流程粗述
1.写GDRAM地址,选择第10行第7列的字(每字2字节)
2.向GDRAM写入数据0x0A0C(执行完后显示器正确显示像素)
3.写GDRAM地址,选择第10行第7列的字
4.读取GDRAM数据,并在arduino串口监视器打印读取到的数据
代码:
#include "TwkLiquidCrystalDisplay.h"
lcd disp;
uc8 dPin[] = {11,10,9,8};
void setup() {Serial.begin(9600);lcd12864Config(&disp, 5,6,7, dPin,FOURBIT, 0);lcdCurOff(&disp);lcd12864GpOn(&disp);lcd12864Clr(&disp);lcd12864WriteWordAdr(&disp,7,10);//设置地址,从0开始数(编址),7表示第7列,10表示第十行lcd12864WriteWord(&disp,0x0A0C);//写入0x0A0Clcd12864WriteWordAdr(&disp,7,10); //设置地址Serial.println(lcd12864ReadWord(&disp));//读取数据并打印
}void loop() {
//nothing
}
LCD显示:
读取数据函数流程细述
这里对lcd12864ReadWord函数做详细流程说明
-
更改LCD的数据引脚d7d6d5d4与arduino相连的IO口模式为INPUT,并且拉高。对每个数据引脚执行:
pinMode(dPin,INPUT);
digitalWrite(dPin,HIGH); -
从LCD读取高4位数据,从LCD读取低4位数据,此步骤为假读(dummy)
-
从LCD读取高4位数据,然后从LCD读取低4位数据,此步骤为读取GDRAM指定字的高8位,将读取的数据存至一个unsigned int变量的高8位
-
从LCD读取高4位数据,然后从LCD读取低4位数据,此步骤为读取GDRAM指定字的低8位,将读取的数据存至同一个unsigned int变量的低8位
-
恢复数据引脚模式为OUTPUT,返回unsigned int变量
异常情况描述
读取的数据在0x0A0C和0x0C0A这两种结果之间跳变,比如某次读取到0x0A0C,第二次就是0xA0C0,第三次又变成0x0A0C,第四次又是0xA0C0
可疑点
- 是否我对假读的理解是错误的?在4位通讯下,是读取1字节还是只要读取高4位,才算作一次假读。
最后
指望CSDN的大佬能给我点指导,这个bug我整了好几天了都不成,浪费我许多时间