小弟第一次用HT1621驱动段码LCD,遇到了问题:1、液晶初始化时,使用 SendCmd(LCDON); SendCmd(LCDOFF); 能够正确地开、关LCD。
2、Write_1621(0xff,0xff); 不能使整个屏幕字段都点亮,一小部分不亮。
3、Write_1621(0xff,0x00); 屏幕大部分字段还是能亮,不能灭
4、测试时发现,无论Write_1621(),什么数据,部分字段一直是亮的,小部分字段才正确地受控。
5、示波器的接地夹子,碰HT1621引脚时,LCD显示会变。
单片机新唐、HT1621、LCD电压都是3.3V。
请大神们指点。
Write_1621(0xff,0x00)命令的波形如下,分别是HT1621的cs、wr、data三个引脚的波形
HT1621驱动部分的源码如下,稍改动了合泰的源码,数据的频率在300K:
void SendBit_1621(uchar sdata,uchar cnt)
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((sdata&0x80)==0)
{
dat=0;
}
else
{
dat=1;
}
wr=0;
_nop_();
_nop_();
_nop_();
_nop_();
wr=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
sdata<<=1;
}
}
void SendDataBit_1621(uchar sdata,uchar cnt)
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((sdata&0x01)==0)
{
dat=0;
}
else
{
dat=1;
}
wr=0;
_nop_();
_nop_();
_nop_();
wr=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
sdata>>=1;
}
}
void SendCmd(uchar command)
{
cs=0;
SendBit_1621(0x80,4);
SendBit_1621(command,8);
cs=1;
}
void Write_1621(uchar addr,uchar sdata)
{
cs=0;
SendBit_1621(0xa0,3);
SendBit_1621(addr,6);
SendDataBit_1621(sdata,4);
cs=1;
}
|