1602LCD是指显示的内容16×2,即最多只能显示32个字符。
5X7点阵可以看做5行7列等间距分布的led灯,每一个灯相当于一个像素点,你要表达的字母或者数字都是由这些像素点组成的。要显示字母数字或者图形只需控制灯的亮灭就可以了。
一般1602一共有16位引脚。(引脚作用如下)
明白了引脚后,就可以将引脚链接到单片机用单片机I\O口来控制每一个引脚来让1602显示字符。编程用到的主要管脚不过三个,分别为:RS(数据命令选择端),R/W(读写选择端),E(使能信号);编程便主要围绕这三个管脚展开按照时序进行初始化,写命令,写数据。基本操作如下:
(1) 读状态:输入:RS=L, RW=H,E=H 输出:D0-D7=状态字。
(2) 写指令:输入:RS=L, RW=L,D0-D7=指令码,E=H,输出:无。
(3) 读数据:输入:RS=H, RW=H,E=H 输出:D0~D7=数据。
(4) 写数据:输入:RS=L,RW=H,D0-D7=数据,E=高脉冲,输出:无。
如我们要写第一行HELLO WORLD,第二行1234.就可以这样写:
主函数为:
#include<reg51.h>
#include<lcd1602.c>
void main(void)
{
lcd1602_init();
lcd1602_clear();
while(1)
{
goto_xy(1,0);
display_string("HELLO WORLD");
goto_xy(2,0);
display_num(12);
display_num(34);
}
}
LCD1602.C为:
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^4;//数据/命令 RS =0 命令,RS = 1 数据
sbit RW = P2^5;//读/写 read / write 读 = 1或者写 = 0
sbit E = P2^6;//使能 enable 使能 =0禁止, = 1 允许
uchar i;
void delay(unsigned int x)
{
while(x--);
}
void write_command(uchar command) //写命令
{
RW = 0;
RS = 0;
P0 = command;
E = 1;
delay(100);
E = 0;
RW = 1;
}
void write_data(uchar date) //写数据
{
RW = 0;
RS = 1;
E = 1;
P0 = date;
delay(100);
E = 0;
RW = 1;
}
void lcd1602_init(void)
{
write_command(0x38);//显示两行,5*7
write_command(0x0f);//开显示,有光标
write_command(0x0c);//开显示,无光标
write_command(0x06);//光标右移
}
void lcd1602_clear(void)
{
write_command(0x01);
write_command(0x02);//光标复位
}
void display_string(uchar *p) //显示字符串的
{
while(*p)
{
write_data(*p);
p++;
}
}
void display_num(uchar x) //显示数字的
{
//双数字
write_data((x / 10) + 0x30);
write_data((x % 10) + 0x30);
//单数字
// write_data(x + 0x30);
}
void goto_xy(uchar x,uchar y)
{
if(x == 1)
write_command(0x80 + y);
if(x == 2)
write_command(0x80 + 0x40 + y);
}
即如图所示:
仿真图如下:
仿真结果如图: