无法驱动1602LCD,帮忙找找原因;原因已查明,谢谢大家支持。
[复制链接]
无法驱动原因:
昨天换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); }
[ 本帖最后由 wyz9876 于 2012-3-24 00:27 编辑 ]
|