【求助51单片机】LCD12864无法读取指定地址数据?

详细问题:12864在基础指令(0x30)操作时,先写入数据的地址,可以成功读取指定地址的数据但在扩充指令下(0x34),分别先写入地址Y,X,却无法读取数据,读取时数据... 详细问题:12864在基础指令(0x30)操作时,先写入数据的地址,可以成功读取指定地址的数据
但在扩充指令下(0x34),分别先写入地址Y,X,却无法读取数据,读取时数据一直为0x80

代码(51单片机):
void main()
{
char tmp=0;

LCD_initial();

write_com(0x34);//扩充指令,关闭绘图
write_com(0x80);//Y
write_com(0x80);//X
write_dat(0x54);//写入数据01010100

write_com(0x80);//重新写入地址
write_com(0x80);
read_dat();//读取该地址的数据,第一次空读取
tmp=read_dat();//再次读取(网上说的,必须要先空读一次数据,第二次数据才是准确的,但我表示两次数据都不行,都是0x80,也就是只有一个点)
write_com(0x81);//写入地址Y
write_com(0x80);//X
write_dat(tmp);//输出读取的数据
write_com(0x36);//打开绘图

===========================
//write_com(0x82);
//write_dat('H');
//write_com(0x82);
//read_dat();//这个是不打开扩充指令时的,并成功读取数据,(第一次不需要空读也可以读取,表示不知道空读到底有什么用)
//tmp=read_dat();
//write_com(0x90);
//write_dat(tmp);
while(1)
{

}
}

=============================
读取数据的函数
char read_dat()
{

wait_busy();//忙碌检测,然感觉用处不大

LCD_DATA=0xff;

LCD_RS=1;//数据操作
LCD_RW=1;//读操作

LCD_E=0;//读数据
delay(1);//大约2.5ms延时
LCD_E=1;
delay(1);
return LCD_DATA;
}
希望大家可以给点建议,我真的找不到问题,谢谢!
展开
 我来答
zhxiufan
2016-06-21 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38384
国家科技进步奖

向TA提问 私信TA
展开全部
一直到没有读过12864的数据,但是,我觉得这个读子程序似乎可以去掉延时,
wait_busy();//忙碌检测,然感觉用处不大
char tmp;
LCD_DATA=0xff;

LCD_RS=1;//数据操作
LCD_RW=1;//读操作

LCD_E=0;//读数据
tmp=LCD_DATA;
LCD_E=1;

return tmp;
}
追问
谢谢你的回答..我已经解决这个问题了..延迟的确可以去掉...
问题主要出现在时序图上(看错了)...
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32是一种由意法半导体(STMicroelectronics)公司设计和生产的单片机系列,广泛用于嵌入式系统、物联网(IoT)设备、汽车电子、工业自动化等领域。STM32具有以下优点:1. 低功耗:STM32单片机通常具有较低的功耗,... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式