51單片機(jī)驅(qū)動LCD1602的電路圖+程序
如網(wǎng)頁上出現(xiàn)格式錯亂可從此處本例的完整源碼:http://www.51hei.com/f/1602430.rar上圖是仿真效果 顯示2行字符.
#include
#define uchar unsigned char
/*****************************************
電路連接
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;
uchar code ttt[]="ShanXi Dianzi Kejixueyuan";//25
uchar code kkk[]="Dianzi GonGcheng Xueyun";//23
/******定義函數(shù)****************/
#define uchar unsigned char
#define uint unsigned int
void LCD_init(void);//聲明初始化函數(shù)
void LCD_write_command(uchar command);//寫指令函數(shù)
void LCD_write_data(uchar dat);//寫數(shù)據(jù)函數(shù)
void LCD_disp_char(uchar x,uchar y,uchar dat);//在某個屏幕位置上顯示一
//個字符,X(0-16),y(1-2)
//void LCD_check_busy(void);//檢查忙函數(shù)。我沒用到此函數(shù),因?yàn)橥ㄟ^率極低。
void delay_n40us(uint n);//延時函數(shù)
//********************************
//*******初始化函數(shù)***************
void LCD_init(void)
{
LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位--------------
LCD_write_command(0x01);//清除屏幕顯示----------------
delay_n40us(100);//實(shí)踐證明,我的LCD1602上,用for 循環(huán)200 次就能可靠完成清屏指令。
}
//********************************
//********寫指令函數(shù)***********設(shè)置先向1602寫入的數(shù)據(jù)為地址*
void LCD_write_command(uchar dat)
{
LCD_DB=dat;
LCD_RS=0;//指令
LCD_RW=0;//寫入
LCD_E=1;//允許
LCD_E=0;//產(chǎn)生下降沿
delay_n40us(1);//實(shí)踐證明,我的LCD1602 上,用for 循環(huán)1 次就能完成普通寫指令。
}
評論