(即是否有硬件问题)
二、void
WriteData(uchar
Data)
{
EN=0/*使能端*/
RS=1/*根据时序图拉低,选择写指令*/
RW=0/*根据时序图拉低,选择写模式*/
P0=Data/*命令数据准备*/
delay(0)
此处延时(省略判忙)
EN=1/*使能端跳变*/
EN=0/*使能端再次跳变*/
}
三、确认你的初始化没有问题
四、你的模块是否带字库
五、
我推测你这个程序最可能出现的问题v
void
display(uchar
show[])
{
delay(1)
WriteData()
}
此处未写任何数据
如有不明白Q
451526010
if(a&(1<<(i-1))) RW_SID=1表示1左移i-1位再于a进行与运算,i=8的情况下i-1=7,1左移7位就是0x80。再跟a与运算(全1出1有0出0)即可获得a的最高位。以此类推可以取出a的所有位。
if(RW_SID==1) dat|=(1<<(i-1))
当RW_SID端口为1时把1左移i-1位跟dat或运算。i=8的情况下1左移i-1位正好是0x80,再经过与运算保存最高位,循环移位再或运算就能读取到全部位保存在dat里面
可以写成
//写部分
if(a&0x80)//取出a的最高位
RW_SID=1//如果是1则输出1
else
RW_SID=0//否则输出0
a<<=1//a整体左移,让第7位补到最高位的位置,循环取出
E_CLK=1
delay(100)
E_CLK=0
delay(100)
//读部分
E_CLK=1
delay(100)
dat<<=1//接收1次数据后左移。第一次为0的情况影响数据
if(RW_SID)//当端口为高的时候
dat++//dat+1相当于dat|=1 当端口为0的时候默认左移最低位是补零的,所以不用管
E_CLK=0//循环8次后第一次接受到的数据就在最高位了
delay(100)
效果是一样的相对来说比较好理解
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)