无法驱动原因:
昨天换51单片机,点亮LCD没问题。由于是开发板,硬件电路是固定的。所以问题可能出在单片机或程序上。
说起来比较诡异。之前无法点亮的原因是单片机存在故障PORTC没正常工作。
我利用PORTD=PORTC,PORTD.0能驱动LED灯。检验PORTC一直输出高电平。C端口不正常,A、B、D均正常。
确认了PORTC没正常工作。
然后编写小程序验证:
PORTC.0=~PORTC.0;
结果下进去后,LCD竟然显示了。。。无意中就显示了。(之前停断电多次,RST均无法显示。)
怀疑这种现象是由于单片机C端口出错?死机?没启动起来?
这种感觉,感觉人品好差。这种奇迹的事情竟然让我遇见了。
重新再次把原程序下载进去,一切正常,OK!
谢谢大家。程序正确。和我一样的新手菜鸟拿去学习。
程序通过Proteus仿真atmega16单片机能正常显示。下载到板子上,板子单片机为atmega16L结果不能显示。帮忙找找原因。
Proteus 仿真能点亮。
实际LCD无反应。
硬件电路错误的可能性不大。液晶无法确定好坏。(之前从没点亮过)
附上程序。程序很简单。
#include<mega16.h>
#include<delay.h>
#define uchar unsigned char
#define uint unsigned int
#define rs PORTC.0
#define rw PORTC.1
#define e PORTC.2
void write_com(uchar com)
{
rs=0;
rw=0;
PORTA=com;
delay_ms(5);
e=1;
delay_us(10);
e=0;
}
void write_data(uchar data)
{
rs=1;
rw=0;
PORTA=data;
delay_ms(5);
e=1;
delay_us(10);
e=0;
}
void init()
{
rw=0;
e=0;
write_com(0x36);
write_com(0x0f);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void main()
{ PORTC=0x00 ;
DDRC=0xff ;
PORTA=0x00;
DDRA=0xff;
init();
write_data('A');
while(1);
}