Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >跨站数据

LCD12864读取GDRAM数据异常

环境

	arduino IDE
	arduino uno
	lcd4位通讯接法

程序流程

流程粗述

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);//写入0x0A0C
  lcd12864WriteWordAdr(&disp,7,10);  //设置地址
  Serial.println(lcd12864ReadWord(&disp));//读取数据并打印
}

void loop() {
//nothing
}

LCD显示:
在这里插入图片描述

读取数据函数流程细述

这里对上图的

  1. 更改LCD的数据引脚d7d6d5d4与arduino相连的IO口模式为INPUT,并且拉高。对每个数据引脚执行:
    pinMode(dPin,INPUT);
    digitalWrite(dPin,HIGH);

  2. 从LCD读取高4位数据,从LCD读取低4位数据,此步骤为假读(dummy)

  3. 从LCD读取高4位数据,然后从LCD读取低4位数据,此步骤为读取GDRAM指定字的高8位,将读取的数据存至一个unsigned int变量的高8位

  4. 从LCD读取高4位数据,然后从LCD读取低4位数据,此步骤为读取GDRAM指定字的低8位,将读取的数据存至同一个unsigned int变量的低8位

  5. 恢复数据引脚模式为OUTPUT,返回unsigned int变量

异常情况描述

读取的数据在0x0A0C和0x0C0A这两种结果之间跳变,比如某次读取到0x0A0C,第二次就是0xA0C0,第三次又变成0x0A0C,第四次又是0xA0C0。

可疑点

  1. 是否我对假读的理解是错误的?在4位通讯下,是读取1字节还是只要读取高4位,才算作一次假读。

最后

指望CSDN的大佬能给我点指导,这个bug我整了好几天了都不成,浪费我许多时间

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: 二叉搜索树

下一篇: VMware创建新的虚拟机,弹出“您已输入用户名,客户机操作将保留此用户名”错误提示,已解决

精华推荐