使用的是学校的一个实验仪器,其中需要使用89C52芯片控制LCD1602显示一定内容
在接线没有问题(单片机对应IO口与LCD1602对应的针脚之间电阻值均为个位数欧姆,肯定是没有接线错误和问题的)。
根据网上的说法是初始化问题,但是网上找到的所有的方法都没有解决问题。
1602的DB接的是52单片机的P1口,不是P0口,也没有拉电阻
sbit RS = P2^0; //RS为寄存器选择:高电平时选择数据寄存器、低电平时选择指令寄存器。
sbit RW = P2^1; //RW读写信号线:高电平时进行读操作,低电平时进行写操作
sbit EN = P2^2; //E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令
#define RS_CLR RS=0 //写指令
#define RS_SET RS=1 //写数据
#define RW_CLR RW=0 //写操作
#define RW_SET RW=1 //读操作
#define EN_CLR EN=0 //下降沿指令命令
#define EN_SET EN=1
#define DataPort P0 //数据端口
void LCD_Write_Com(unsigned char com)
{
while(LCD_Check_Busy()); //忙则等待
EN_CLR;
RS_CLR; //写指令
RW_CLR; //写操作
// EN_SET;
DataPort= com; //命令数据
EN_SET;
_nop_();
EN_CLR;
DelayMs(1);
}
/*------------------------------------------------
初始化函数
------------------------------------------------*/
void LCD_Init(void)
{
LCD_Write_Com(0x38); //开显示
DelayMs(100);
LCD_Write_Com(0x0C); //开显示不显示光标
DelayMs(100);
// LcdWriteCom(0x0F); //显示光标并闪烁
LCD_Write_Com(0x06); //写入后指针右移
DelayMs(100);
LCD_Write_Com(0x01); //清屏
DelayMs(100);
LCD_Write_Com(0x80); //设置数据指针起点
DelayMs(100);
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main(void)
{
unsigned int i;
unsigned char *p;
LCD_Init();
i = 0;
while (1)
{
DelayMs(100);
LCD_Write_String(8,1,'0');
DelayMs(100);
}
}
请问如何解决问题?