看看我的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.51hei.com/bbs/) | Powered by Discuz! X3.1 |