关于1602液晶显示器的一些经验

今天开始复习了液晶显示!我的天啊!感觉像是重新学一样,好多东西都忘了,看来以后还要练习的非常熟练才行,*一时的努力在短时间内学的东西是记不太久的!更不要说熟练应用了!

说说今天的总结!虽然开始有些吃力,但是也不至于想以前那样看着视频一步一步来!今天写液晶程序是找了两个例子,自己看着1602的PDF资料。开始时看了看程序然后自己看着时序图写,但是却怎么出不来结果,对比着例子一点点的尝试着修改,终于发现原来是一个小小的延时问题,也就是在往数据端口输进指令或数据后要有个小小的延时。但是看时序图上却是EN端电平已经降下去了,数据口还在赋值,而实际上却是赋值后差不多要个5毫秒的延时,具体原因不明白!

关于液晶字符定位的问题,我看的一个例程是用坐标定位的,我看着头晕,老是转不过来。其实在我看来1602液晶就能显示那几个字符而已,自己就算掰着手指查也不会出错吧!所以好不如直接控制来的爽快!特别注意的是,只要你让那个位置的字符显示,就一定要给你赋值,那怕是一个空格,那也算是一个字符,否则会出现乱码!

再说一下控制液晶的驱动程序(暂且称其为驱动程序吧,反正是控制液晶的)!其实控制这种小液晶很简单!给它的初始化函数(也就是告诉它:小弟,你要开始工作了),给它做做准备,具体函数按照配套PDF资料写就行!再有个就是发送指令的函数。首先给RS赋值,RS=0,当MPU进行写模块操作,指向指令寄存器,当MPU进行读模块操作,指向地址计数器。RS=1,无论MPU读操作还是写操作,均指向数据寄存器。再给RW赋值,赋值为1是写操作,为0是读操作。然后就是EN端了,其实因为数据是在EN下降沿才会把命令或数据读进,所以就先拉高它,然后往数据口送指令,现在是最关键的,你一定要让它稍微有个延时,例如5 毫秒!然后令EN=0!好了,这就完成了指令输入!至于数据输入函数,格式同指令输入函数一样,只是RS赋值不一样而已!至于什么指令控制什么功能,自己查查配套资料就行了!另外还有一个检查繁忙问题,只是.....暂时不会用,我把繁忙检查写进程序中,它竟然罢工!现在自己的水平就是写个小程序实现个小功能,检查繁忙暂时用不到,以后再说吧!

附一自己写的液晶驱动函数!其中dat为液晶数据进口!

void del(uint i)
{
 char j;
 for(;i>0;i--)
  for(j=125;j>0;j--);
}

void writecom(uchar com)
{
 rs=0;
 rw=0;
  en=1;
 dat=com;
 del(5);
 en=0;
 
}
void writedat(uchar da)
{
 rs=1;
 rw=0;
 en=1;
 dat=da;
 del(5);
 en=0;
}

void init()

 del(15);
 writecom(0x38);
 del(5);
 writecom(0x38);
 del(5);
 writecom(0x38);
 del(10);
 writecom(0x08);
 writecom(0x0e);
 writecom(0x06);
 writecom(0x0c);
 writecom(0x80); 

}

永不止步步 发表于11-24 09:58 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363741个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号