请教1622驱动问题,一直点不亮,查了好几天没查出原因
/*************************************************************
* 液晶显示命令字定义
************************************************************
*/
const u8 TAB_REST =
{
0b00000001,/*打开系统振荡器命令*/
0b00000011,/*打开LCD 偏压发生器命令*/
0b00000101,/*WDT 溢出标志输出失效命令*/
0b00000110,/*时基输出使能命令*/
0b00011000,/*系统时钟源片内RC振荡器命令*/
//0b00101001,/*LCD1/3偏压选项4个公共口命令*/
0b01000000,/*声音频率4KHz命令*/
0b00001000,/*关闭声音输出命令*/
0b10100000,/*时基/WDT 时钟输出1Hz命令*/
0b10000000/*禁止/IRQ 输出有效命令*/
};
/*
************************************************************
* Start
*
* 功能描述:启动1622
* 参数:无
* 返回值:无
************************************************************
*/
void Start(void)
{
CS = HIGH;
WR = HIGH;
DATA = HIGH;
Delay1622();
Delay1622();
CS = LOW;
Delay1622();
}
/*
************************************************************
* Stop
*
* 功能描述:停止信号
* 参数:无
* 返回值:无
************************************************************
*/
void Stop(void)
{
WR = HIGH;
CS = HIGH;
DATA = HIGH;
Delay1622();
}
/*
************************************************************
* Write1622
*
* 功能描述:写数据到1622
* 参数:无
* 返回值:无
************************************************************
*/
void Write1622(void)
{
u8 i,j,data;
Start();
Send(0xA0,3);
Send(0x00,6);
for(i = 0;i < 26;i++){
data = LcdBuffer;
for(j = 0;j < 8;j++){
if(data & 0x01)
DATA = HIGH;
else
DATA = LOW;
WR = LOW;
Delay1622();
WR = HIGH;
Delay1622();
data >>= 0x01;
}
}
Stop();
}
/*
************************************************************
* Command1622
*
* 功能描述:1622初始化
* 参数:无
* 返回值:无
************************************************************
*/
void Command1622(void)
{
u8 i;
Start();
Send(0x80,3);
for(i = 0;i < 9;i++){
Send(TAB_REST,8);
Send(0x00,1);
}
Stop();
}
/*
************************************************************
* Delay1622
*
* 功能描述:延时一段时间
* 参数:无
* 返回值:无
************************************************************
*/
void Delay1622(void)
{
u8 i;
for(i = 0;i < 5;i++);
return;
}
/*
************************************************************
* Send
*
* 功能描述:写一个字节的数据
* 参数:Writebuffer(待写入数据),BitLength(写入数据长度)
* 返回值:无
************************************************************
*/
void Send(u8 Writebuffer,u8 BitLength)
{
u8 i;
for(i = 0;i < BitLength;i++)
{
if(Writebuffer & 0x80)
DATA = HIGH;
else
DATA = LOW;
WR = LOW;
Delay1622();
WR = HIGH;
Delay1622();
Writebuffer <<= 1;
}
}
大家帮忙看一下程序上是否有问题,通过示波器看波形没问题的,但是一直显示不了(或者说是很淡,基本看不清),硬件上VLCD通过一个1K电阻都VDD(5V),除了三根信号线(CS,WR,DATA)外其他没有接.先谢过大家! 硬件图呢? 上图。。。。。。。。。。。。 顶上来,大家都来看一下。。。 在线等。。。 看不清硬件,能不能上个大图? 图片点击一下,就可以看大图了 本帖最后由 dianzichina 于 2012-4-22 22:11 编辑
还是不大,看不清硬件,看了程序,没见入口主程序啊。改start为MAIN如何? 既然看波形没问题,太模糊的话是不是能出字符了?那就加个偏压吧。 哪里加偏压?VLCD吗?加多少合适? 多少合适应该看液晶的说明,你应该把液晶的说明也上传的。如果你的液晶上面能看到字符,只是有点不清楚的话,可能这个有效果了。如果不是这样,那原因另查。 不经意间把两个COM口给短路了,结果有显示,但是是乱码,正常的话就没有显示了。。。 有显示但是乱码那说明程序有问题了。看软件吧。 回楼上,显示乱码是因为两个COM口短路了,正常情况下显示正常,只是很暗而已,而且我看过波形都是对的
页:
[1]