LCD1602算是很简单的人机交互,有了这家伙,从此学习不再寂寞了,至少有这家伙的陪伴。注释很详细的,看代码。
原理图:
代码:
#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;
//显示数据数组
uchar table1[]="^_^I LOVE MCU^_^"; //第一行显示数据
uchar table2[]=" --WgChnLn--"; //第二行显示数据
//变量定义
uint number; //用于依次显示出所有数据
//相关函数声明
void delay(uint); //延时函数声明
void lcd1602_control(uchar); //输入控制指令函数声明
void lcd1602_init(); //lcd初始化函数声明
void lcd1602_data(uchar); //输入数据函数声明
//主函数
void main()
{
lcd1602_init(); //初始化
//输入第一行数据
lcd1602_control(0x80+0x10); //定位到第一行刚好不能显示的区域
for(number=0;number<16;number++)
{
lcd1602_data(table1[number]); //显示出第一行
delay(5);
}
//输入第二行数据
lcd1602_control(0x80+0x50); //定位到第二行刚好不能显示的区域
for(number=0;number<16;number++)
{
lcd1602_data(table2[number]); //显示出第二行
delay(5);
}
//循环左移效果
while(1)
{
for(number=0;number<16;number++)
{
lcd1602_control(0x18); //左移
delay(500);
}
delay(1000);
delay(1000);
}
}
//延时函数主体
void delay(uint xs)
{
uint i,j;
for(i=xs;i>0;i--)
{
for(j=110;j>0;j--)
{
}
}
}
//lcd1602写入控制指令函数主体
void lcd1602_control(uchar control_data)
{
lcd1602_RS=0; //RS=0,处于输入控制指令状态
P0=control_data;
delay(5);
lcd1602_E=1; //使能端高电平有效
delay(5);
lcd1602_E=0;
}
//lcd1602初始化函数主体
void lcd1602_init()
{
duanxuan=0;
weixuan=0;
lcd1602_E=0; //因为引脚默认是高电平
lcd1602_control(0x0c);
lcd1602_control(0x06);
lcd1602_control(0x38);
lcd1602_control(0x01);
}
//lcd1602写入数据指函数主体
void lcd1602_data(uchar data_data)
{
lcd1602_RS=1; //RS=1.处于输入数据状态
P0=data_data;
delay(5);
lcd1602_E=1; //使能端高电平脉冲有效
delay(5);
lcd1602_E=0;
}
以上,结束。