Carbon1 发表于 2020-3-6 12:45 楼主的程序没有什么明显毛病,出现这种现象应该是LCD初始化失败。要仔细检查硬件! VCC是电压否正常、纹波是否过大、晶振频率是否合适、振荡电容大小是否合适、复位电路是否正常。特别是要检查面包板接触不良。 初始化程序稍微调整一下: void init() { lcden=0; delay_ms(20); write_com(0x38); write_com(0x38); write_com(0x38); delay_ms(20); write_com(0x01); delay_ms(20); write_com(0x0C); delay_ms(20); write_com(0x06); delay_ms(20); } |
下载一个没有问题的程序进去就可以判断是不是液晶屏的问题了 |
你可以看看是不是接口接错了 LCD接线都很重要 |
应该是程序有问题, |
屏里导电层接触不良,拆下重装一下 |
东宁 发表于 2020-3-5 16:56 应该不是程序问题,换了好几个程序都不行 |
秋易老 发表于 2020-3-5 10:18 感谢回复,接线检查过很多次了,也试过其他程序,没有解决 |
之一知足 发表于 2020-3-5 10:15 谢谢回答,我试过别人的代码,也有改接线,区别在于右边黑的多少 |
这是程序 #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit lcdrs=P2^2; sbit lcdrw=P2^1; sbit lcden=P2^0; uchar table1[]="AT89C51"; uchar table2[]="STC89C52RC"; void delay_ms(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void write_com(uchar com) //写指令 { lcdrw=0; lcdrs=0; P0=com; //将指令赋给P0 lcden=1; //高脉冲 delay_ms(5); lcden=0; } void write_dat(uchar dat) //写数据 { lcdrs=1; lcdrw=0; P0=dat; //数据赋给P0 lcden=1; //高脉冲 delay_ms(5); lcden=0; } void init() { lcden=0; write_com(0x01); delay_ms(20); write_com(0x06); delay_ms(20); write_com(0x0C); delay_ms(20); write_com(0x38); delay_ms(20); } void main() { uchar i; init(); write_com(0x80); for(i=0;i<7;i++) write_dat(table1[i]); delay_ms(10000); write_com(0x80); for(i=0;i<10;i++) write_dat(table2[i]); while(1); } |
看起来没问题能亮,像素也点亮了 |
应该是程序有问题,以前也遇到过这样的情况,如果屏幕是亮的,就没有坏 |
程序贴上来看看才知道是不是程序问题。如果程序没问题接线也没问题那就是坏了。 |
放到好的开发板和正确的例程上去试 |
感觉应该是线接错了,要么就是程序定义的口和你实际接的口不一样 |
最简单快捷的方法就是,随便下载个历程,照着别人的代码接下线,如果不能正常的执行,就是LCD坏了,反之检查你的代码。 |