一款基于AKI-H8的LCD驱动电路设计方案

电子说

1.3w人已加入

描述

秋叶通商的H8板搭载的LCD是M1632和SC1602BS,因其为字符式单色显示器所以操作非常简单。在电路设计上,其允许尽可能的节约端口而设计为4Bit和8Bit两种模式,也就说只需要连接4个I\O口就可以给这个LCD输出数据。

显示器

上图中的In0,In1,In2,In3,In4,In7对应PB端口的0,1,2,3,4,7号端口。而从芯片的1-14号编码可以从硬件式样中找到对应的逻辑功能号

PB0 PB1 PB2 PB3 PB4 PB7

DB4 DB5 DB6 DB7 RS E

DB4-DB7为数据/命令输入端口,RS为数据/命令控制位,E为电平控制位。

显示器

由电路图可以看出,5号口德R/W端口被硬性的链接到了GND端,始终输入为0,所以始终为写入模式,LCD的状态信息无法获取。

显示器

(1):初始化

本片从硬件上要求在达到4.5V电压时三次执行数据长度为8的申请(原因不明),在之后再根据本开发板把位宽调整为4.有个要注意的地方,硬件在8位宽模式的时候,它是不知道这时板子上的情况是另外四个没有链接芯片的事实的,它只管按照8位来接受,那么第四位永远都是0.只有上表的DB4-DB7有效。

在调整位宽为4后就可以让LCD在极端的时间里分两次接收输入,一次为低4位一次为高四位,就可以开始详细的设置LCD的工作模式。

  for(i=0;i《3;i++)

  {

  LCDOut8(0,0x3); /* 三次申请8位宽模式 */

  }

  LCDOut8(0,0x2); /* 申请4位宽模式 */

  LCDOut4(0,0x28); /* 4Bit模式,shift模式 */

  LCDOut4(0,0x0e); /* 标示开,光标开,ブリンク关*/

  LCDOut4(0,0x06); /* 以增量方式使用内存 */

  LCDOut4(0,0x01); /* 清除LCD显示 */

  LCDOut4(0,0x02); /* 移动光标到起始位 */

根据厂家的源码得到的结论仍然有很不明确的地方,为什么在8位模式的时候仍然要使用0x3,0x2的数字,他们应该不被8位模式下的LCD接收才对。

(2)写入LCD

到目前为止都没有谈到E的重要之处,而它几乎存在在LCD的每一个地方,因为不管什么修改都要在E控制的电平从1到0的变化时被修改,也就是说不管是什么设置都要调用对E修改的函数代码才可以实现。

另外,在四位的模式下,是分两次将高地位传递给LCD的。

  static void LCDOut4(int rs,int code)

  2 {

  3 int stat;

  int pb;

  char lb,hb;

  pb = PB.DR;

  if( rs ) stat = (pb & LCDMASK) | LCD_RS;

  else stat = (pb & LCDMASK);

  hb = ((code》》4)&0xf) | stat;

  lb = (code&0xf) | stat;

  PB.DR = hb | LCD_E;

  PB.DR = hb;

  PB.DR = lb | LCD_E;

  PB.DR = lb;

  PB.DR = pb;

  wait(4);

  }

编辑:hfy

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分