![]() |
發布時間: 2020-7-9 21:07
正文摘要:大神幫我看看哪兒的問題 #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit rs=P2^0; sbit wr=P2^1; sbit en=P2^2; uint i,j; delay(uint x) { ... |
欣語寶貝 發表于 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; } |