LCD1602算是很簡單的人機(jī)交互,有了這家伙,從此學(xué)習(xí)不再寂寞了,至少有這家伙的陪伴。注釋很詳細(xì)的,看代碼。 原理圖:
本文引用地址:http://m.butianyuan.cn/article/201611/321315.htm
代碼:
#include
#define uint unsigned int
#define uchar unsigned char
//端口聲明
sbit duanxuan=P2^6;
sbit weixuan=P2^7;
sbit lcd1602_E=P3^4;
sbit lcd1602_RS=P3^5;
//顯示數(shù)據(jù)數(shù)組
uchar table1[]="^_^I LOVE MCU^_^"; //第一行顯示數(shù)據(jù)
uchar table2[]=" --WgChnLn--"; //第二行顯示數(shù)據(jù)
//變量定義
uint number; //用于依次顯示出所有數(shù)據(jù)
//相關(guān)函數(shù)聲明
void delay(uint); //延時(shí)函數(shù)聲明
void lcd1602_control(uchar); //輸入控制指令函數(shù)聲明
void lcd1602_init(); //lcd初始化函數(shù)聲明
void lcd1602_data(uchar); //輸入數(shù)據(jù)函數(shù)聲明
//主函數(shù)
void main()
{
lcd1602_init(); //初始化
//輸入第一行數(shù)據(jù)
lcd1602_control(0x80+0x10); //定位到第一行剛好不能顯示的區(qū)域
for(number=0;number<16;number++)
{
lcd1602_data(table1[number]); //顯示出第一行
delay(5);
}
//輸入第二行數(shù)據(jù)
lcd1602_control(0x80+0x50); //定位到第二行剛好不能顯示的區(qū)域
for(number=0;number<16;number++)
{
lcd1602_data(table2[number]); //顯示出第二行
delay(5);
}
//循環(huán)左移效果
while(1)
{
for(number=0;number<16;number++)
{
lcd1602_control(0x18); //左移
delay(500);
}
delay(1000);
delay(1000);
}
}
//延時(shí)函數(shù)主體
void delay(uint xs)
{
uint i,j;
for(i=xs;i>0;i--)
{
for(j=110;j>0;j--)
{
}
}
}
//lcd1602寫入控制指令函數(shù)主體
void lcd1602_control(uchar control_data)
{
lcd1602_RS=0; //RS=0,處于輸入控制指令狀態(tài)
P0=control_data;
delay(5);
lcd1602_E=1; //使能端高電平有效
delay(5);
lcd1602_E=0;
}
//lcd1602初始化函數(shù)主體
void lcd1602_init()
{
duanxuan=0;
weixuan=0;
lcd1602_E=0; //因?yàn)橐_默認(rèn)是高電平
lcd1602_control(0x0c);
lcd1602_control(0x06);
lcd1602_control(0x38);
lcd1602_control(0x01);
}
//lcd1602寫入數(shù)據(jù)指函數(shù)主體
void lcd1602_data(uchar data_data)
{
lcd1602_RS=1; //RS=1.處于輸入數(shù)據(jù)狀態(tài)
P0=data_data;
delay(5);
lcd1602_E=1; //使能端高電平脈沖有效
delay(5);
lcd1602_E=0;
}
以上,結(jié)束。
評論