【求助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;
}
希望大家可以给点建议,我真的找不到问题,谢谢! 展开
但在扩充指令下(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;
}
希望大家可以给点建议,我真的找不到问题,谢谢! 展开
1个回答
展开全部
一直到没有读过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;
}
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 广告
2023-06-12 广告
STM32是一种由意法半导体(STMicroelectronics)公司设计和生产的单片机系列,广泛用于嵌入式系统、物联网(IoT)设备、汽车电子、工业自动化等领域。STM32具有以下优点:1. 低功耗:STM32单片机通常具有较低的功耗,...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询