麻烦大佬帮忙看一下是什么问题
#include "LCD1602.h"
#ifdef P25_DRIV_RW
//读操作,RS=1读数据;RS=0读指令
unsigned char Read_LCD1602(bit RS)
{
unsigned char temp;
LCD1602_RS = RS;//数据寄存器
LCD1602_RW = 1;//读操作
LCD1602_EN = 1;//上升沿,LCD准备数据
_nop_();
_nop_();
_nop_();
_nop_();
temp = LCD1602_DATA;//读取DB7~0
LCD1602_EN = 0;//下降沿,LCD锁存数据
return temp;
}
//读忙操作,高电平表示忙
bit LCD_Busy(void)
{
unsigned char temp;
temp = Read_LCD1602(COMMAND);//读指令
return (bit)(temp & 0x80);//返回BF(bit7)位
}
//写操作,RS=1写数据;RS=0写指令
void Write_LCD1602(unsigned char dat,bit RS)
{
while(LCD_Busy());
LCD1602_EN = 0; //使能清零
LCD1602_RS = 1; //选择输入数据
LCD1602_RW = 0; //选择写入
LCD1602_DATA = dat; //写入数据
Delay_ms(1);
LCD1602_EN= 1; //写入时序
Delay_ms(5); //保持时间
LCD1602_EN= 0;
}
#else
void Write_LCD1602(unsigned char dat,bit RS)
{
LCD1602_EN = 0; //使能清零
LCD1602_RS = 1; //选择写入数据
LCD1602_DATA= dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Delay_ms(1);
LCD1602_EN= 1; //写入时序
Delay_ms(5);;
LCD1602_EN = 0;
LCD1602_DATA = dat << 4; //写入低四位
Delay_ms(1);
LCD1602_EN = 1; //写入时序
Delay_ms(5);
LCD1602_EN=0;
}
#endif
void LCD_WrCmd(unsigned char dat)
{
Write_LCD1602(dat,COMMAND);
}
void LCD_WrDat(unsigned char dat)
{
Write_LCD1602(dat,DATA);
}
void St_LCD1602_Pos(unsigned char pos)
{
LCD_WrCmd(pos | 0x80);
}
void LCD1602_Init(void)
{
unsigned char empty = ' ';
LCD1602_EN = 0;
LCD_WrCmd(0x38);
LCD_WrCmd(0x0c);
LCD_WrCmd(0x06);
LCD_WrCmd(0x01);
LCD_WrCmd(0x80);
Wr_LCD1602_Num(0x00,0);
Wr_LCD1602_Str(0x00,"t");
Wr_LCD1602_Byt(0x00,'t');
St_LCD1602_Cur(0);
St_LCD1602_Clr();
}
void Wr_LCD1602_Str(unsigned char pos,unsigned char *Pwdata)
{
St_LCD1602_Pos(pos);
while(*Pwdata != '\0')
LCD_WrDat(*Pwdata++);
}
void Wr_LCD1602_Byt(unsigned char pos,unsigned char _data)
{
St_LCD1602_Pos(pos);
LCD_WrDat(_data);
}
void Wr_LCD1602_Num(unsigned char pos,unsigned char _data)
{
St_LCD1602_Pos(pos);
if((0<=_data)&&(_data<=9))
LCD_WrDat((_data+'0'));
else
LCD_WrDat('E');
}
void St_LCD1602_Clr(void)
{
LCD_WrCmd(0x01);//清显示
}
void St_LCD1602_Cur(bit OpnClose)
{
if(OpnClose)
LCD_WrCmd(0x0f);
else
LCD_WrCmd(0x0c);
}
|