看看我的LCD咱跑不起來,正常情況是要顯示A的,結果什么也不顯示。
《非原創,是摘錄書的》
#include< at89x51.h> #include< intrins.h> #define uchar unsigned char #define uint unsigned int #define DATA_PORT P0 sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; /********************************************************************* funciton:delay *********************************************************************/ void DELAYms(uint i) { while(--i); } /********************************************************************* function:check busy *********************************************************************/ void CHECK_BUSY() { DATA_PORT=0xFF; RS=0; RW=1; _nop_(); EN=1; _nop_(); _nop_(); while(DATA_PORT&0x80); EN=0; } /*以下是向LCD寫入命令IR 功能:向LCD寫入命令字符CMD 若check=1,表示要進行忙狀態檢查*/ void WRITE_IR(uchar cmd,uchar check) { if(check) CHECK_BUSY(); RS=0; RW=0; _nop_(); DATA_PORT=cmd; _nop_(); EN=1; _nop_();_nop_(); EN=0; } /*以下是寫入DDR寄存器 功能:在當前光標處顯示一個字符*/ void WRITE_DDR(char c) { CHECK_BUSY(); RS=1; RW=0; _nop_(); DATA_PORT=c; _nop_(); EN=1; _nop_();_nop_(); EN=0; } /*以下是定位光標 功能:光標定位*/ void LCD_POSITION(uchar xpos,uchar ypos) { uchar temp; xpos=xpos&0x0f;//16**型液晶的范圍是0--15 ypos=ypos&0x01;//16**型液晶的范圍是0--1 temp=xpos; if(ypos==1) temp=temp|0xc0;//第二行 else temp=temp|0x80;//第一行 WRITE_IR(temp,0); } /*以下是初使化函數 功能:向LCD模塊寫入控制參數*/ void LCD_INITIAL() { WRITE_IR(0x38,0);//功能指令設置,8位接口,2行,5*7字符 WRITE_IR(0x38,1); WRITE_IR(0x08,1);//顯示開關控制指令,顯示關閉 WRITE_IR(0x01,1);//清屏指令,將DDRAM數據全部寫入空白 WRITE_IR(0x06,1);//輸入方式設置指令,字符不動,光標自動右移一格 WRITE_IR(0x0F,1);//顯示開關控制指令,顯示器開,光標開,光標閃爍 } //以下是在指定行,指定列顯示字符 void WRITE_CHAR(uchar xpos,uchar ypos,char c) { LCD_POSITION(xpos,ypos); WRITE_DDR(c); } //************************************************************************ //************************************************************************ void main() { LCD_INITIAL(); DELAYms(6000); while(1) { WRITE_CHAR(5,0,'A'); } }
再給你個1602的對比看看啥問題吧
下載信息 [文件大小:63.3 KB 下載次數:0] | |
![]() |
我測了,各信號連接都正常。背光一直是亮的
我把下面紅色改成1也不能正常顯示
void LCD_INITIAL()
{ WRITE_IR(0x38,0);//功能指令設置,8位接口,2行,5*7字符
WRITE_IR(0x38,1);
WRITE_IR(0x08,1);//顯示開關控制指令,顯示關閉
WRITE_IR(0x01,1);//清屏指令,將DDRAM數據全部寫入空白
WRITE_IR(0x06,1);//輸入方式設置指令,字符不動,光標自動右移一格
WRITE_IR(0x0F,1);//顯示開關控制指令,顯示器開,光標開,光標閃爍
}
把下面的改成5000也不行。
/*********************************************************************
funciton:delay
*********************************************************************/
void DELAYms(uint i)
{ while(--i);
}
顯示一個A要那么復雜的程序嗎?不要嚇我啊
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |