51單片機驅動1602液晶的C程序
/*****************************************
電路連接
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行,5x7
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);
}


評論