# include
/*****************************************
电路衔接
P1——DB0~DB7
P2.0——RS
P2.1——RW
P2.2——E
*****************************************/
# define LCD_DB P1
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_E=P2^2;
/******界说函数****************/
# define ucharunsigned char
# define uint unsigned int
void LCD_init(void);//声明初始化函数
void LCD_write_command(uchar command);//写指令函数
void LCD_write_data(uchar dat);//写数据函数
void LCD_disp_char(uchar x,uchar y,uchar dat);//在某个屏幕方位上显现一
个字符,X(0-16),y(1-2)
//void LCD_check_busy(void);//查看忙函数。我没用到此函数,由于通过率极
低。
void delay_n40us(uint n);//延时函数
//********************************
//*******初始化函数***************
void LCD_init(void)
{
LCD_write_command(0x38);//设置8位格局,2行,5×7
LCD_write_command(0x0c);//全体显现,关光标,不闪耀
//LCD_write_command(0x06);//设定输入方法,增量不移位
//LCD_write_command(0x01);//铲除屏幕显现
delay_n40us(100);//实践证明,我的LCD1602上,用for循环200次就能牢靠
完结清屏指令。
}
//********************************
//********写指令函数***********设置先向1602写入的数据为地址*
void LCD_write_command(uchar dat)
{
LCD_DB=dat;
LCD_RS=0;//指令
LCD_RW=0;//写入
LCD_E=1;//答应
LCD_E=0;//发生下降沿
delay_n40us(1);//实践证明,我的LCD1602上,用for循环1次就能完结一般
写指令。
}
//*******************************
//********再写数据函数*****向1602中写入数据********
void LCD_write_data(uchar dat)
{
LCD_DB=dat;
LCD_RS=1;//数据
LCD_RW=0;//写入
LCD_E=1;//答应
LCD_E=0;//发生下降沿
delay_n40us(1);
}