
没能直接找出你程序的明显问题,但有几点可以考虑下:
void LCD_Status()中,仔细对照12864的说明书,看你口线的 *** 作逻辑,是否完全符合说明书。你写开关屏命令正确,但也并不能保证逻辑就是正确的,Y 因为你锁出去的数据是不同的,不仔细看你程序,理论上讲,对后续的程序的影响是不一样的。不同厂家的LCD *** 作,大同小异,但确实各有不同之处。
在AVR中,asm("nop");是可以用NOP();来代替的,后者比前者看起来舒服些。
你没说你的CPU连接LCD的排线的长度,此长度小于5cm时,考虑可以很少;>10cm时,需要考虑电容效应,信号会被延迟,你程序中NOP()的个数可能会不够,因为AVR的机器周期其实是可以小于us级的(看你的晶振速度了),一个NOP可能起不到作用,需要N个。
个人观点供参考,我用LCD时,根本就不去查询LCD是否繁忙,因为现在的LCD接收端口都是硬件锁存的,速度非常快,根本不会出现繁忙拥堵的情况。下面是我使用320240LCD的写命令和数据的函数,没查询,大量使用从来也不出问题:
void LcmWriteADataByte(uchar mydata) //写数据
{
pinLcmA00();
LCM=mydata;
NOP();
pinLcmCS0();
pinLcmWR0();
NOP();
pinLcmWR1();
pinLcmCS1();
}
void LcmWriteAControlByte(uchar mycommand) //写指令
{
pinLcmA01();
LCM=mycommand;
pinLcmCS0();
pinLcmWR0();
NOP();
pinLcmWR1();
pinLcmCS1();
pinLcmA01();
}
总结,不正常工作最可能的两个原因(不是全部原因):A逻辑不完全符合说明书;B延时不够,或某些地点漏做延时了。希望有所帮助。
asf只是一个系统构架,在这个构架下,可以自主的添加atmel 提供的API库函数,达到快速熟悉mcu, *** 作的效果。asf的使用视频在atmel 官网挂由视频,简单的应用看了之后应该就会了,进一步熟悉后就可以了。
atmel
studio
61
只是个集成环境,
不包含编译器的用不同的编译器,
就要使用各个编译器规定的
asm
内嵌编写规则
查看原帖>>
以上就是关于AVR写LCD12864,在写页地址后读状态,一直为忙,那为懂AVR的帮我解决一下呢,用的是atmel studio 6.0全部的内容,包括:AVR写LCD12864,在写页地址后读状态,一直为忙,那为懂AVR的帮我解决一下呢,用的是atmel studio 6.0、atmel studio 中的asf如何使用里面的函数、定义等如何使用、AVR 在atmel studio 6.1中,C语言如何插入asm等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)