欣语宝贝 发表于 2020-7-10 21:13 请问你是怎么让lcd初始化成功的,我现在也遇到了相同的问题,解决不了 |
wulin 发表于 2020-7-10 06:32 加延时貌似不太管用,我也是碰到了这个问题,按照您的方法,在程序里添加了延时,但是问题依旧 |
wulin 发表于 2020-7-10 06:32 根据你修改的代码 不能初始化 ![]() |
只能帮你这么多了 #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit rs=P2^0; sbit rw=P2^1; sbit en=P2^2; void delay(uint n) { uint x,y; for(x=n;x>0;x--) for(y=110;y>0;y--); } void lcd_wcom(uchar com) { rs=0; rw=0; P0=com; delay(5); en=1; en=0; } void lcd_wdat(uchar dat) { rs=1; rw=0; P0=dat; delay(5); en=1; en=0; } void lcd_init() { lcd_wcom(0x38); lcd_wcom(0x0c); lcd_wcom(0x06); lcd_wcom(0x01); } void main() { lcd_init(); lcd_wcom(0x80); lcd_wdat('a'); delay(200); while(1); } |
wulin 发表于 2020-7-10 06:32 好的 等下试一下 谢谢 |
static 发表于 2020-7-10 07:59 等下去实验下 谢谢了 |
杨雪飞 发表于 2020-7-10 09:15 等下回去试试谢谢啦 |
错误太多,我的水平有限,还是没有全部解决。 |
1、主程序中使用了延时函数,但是这个延时函数之前没有声明; 2、延时函数写的有误,仅5个周期; 3、主函数中没有设定指针,也就是字符显示的初始位置。 你按照下边的改一下试试吧。改动的地方我用了红色 #include<reg52.h> #define uchar unsigned char #define uint unsigned int void Delay() ; sbit rs=P2^0; sbit wr=P2^1; sbit en=P2^2; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=19;y>0;y--); } void write_com(uchar com) { rs=0; wr=0; en=0; P1=com; en=1; delay(5); en=0; } void write_data(uchar bat) { rs=1; wr=0; en=0; P1=bat; en=1; delay(5); en=0; } void init() { write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0f); } void main() { init(); write_com(0x80); write_data('A'); while(1); } |
void main() { init(); 在这里加一句 write_com(0x80); 这个写命令是设置你写的数据的起始位置,0x80是第一行第一位 write_data("A"); while(1); } |
仿真玩的时候可以不判忙,不接晶振与电源,实际操作是少不了的! |
由于对LCD读写数据之前没有判忙,所以延时函数时间就嫌短,导致初始化失败,建议延时1ms左右。 void write_com(uchar com) { rs=0; wr=0; en=0; P1=com; delay(100); en=1; delay(100); en=0; } void write_data(uchar bat) { rs=1; wr=0; en=0; P1=bat; delay(100); en=1; delay(100); en=0; } |