电子说
秋叶通商的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
全部0条评论
快来发表一下你的评论吧 !