最近搞比赛经常用到LCD1602,但每次都用的不是很顺利,现在就特地写一篇博客来复习一下LCD1602,顺便也希望能给大家一些小小的启发。
既然是硬件,那就先上接线图:
VL:对比度,正常接一个1K的电阻就好了,如果电阻过大会出现一个个黑方块,而你要显示的就看不清楚了,反之如果电阻过小,就会根本显示不出东西,亮亮的一片。也可以接1K的电位器实现改对比度的功能。
RS、RW、EN:这些都是控制端口,要留心注意他们的接线
D0-D7:这些是数据端口,用来传递数据的。
Bl- 、 Bl+ :这些是背光电源,如果你上电连LCD都不亮就要检查一下这里。
好了基础的硬件知识说完了,来讲讲软件吧,废话不多说,直接贴代码:
#ifndef __lcd1602_H__
#define __lcd1602_H__
#include <other.h>
#include <string.h>
sbit RS=P2^5;
sbit RW=P2^6;
sbit EN=P2^7;
#define DATA P0
void lcd1602_display_str(unsigned char x,bit y,unsigned char dat[]);
void lcd1602_display_byte(unsigned char x,bit y,unsigned char ascll);
void lcd1602_init();
void lcd1602_write(bit sign, unsigned char dat) //sign=0 :写入命令 sign=1:写入数据
{
delay_1ms(10);
RS=sign;
RW=0;
EN=0;
DATA=dat;
EN=1;
delay_1ms(10);
EN=0;
if(sign)
RS=0;
delay_1ms(10);
}
void lcd1602_init()
{
delay_1ms(10);
lcd1602_write(0,0x38);
lcd1602_write(0,0x38);
lcd1602_write(0,0x38);
lcd1602_write(0,0x0c);
lcd1602_write(0,0x01);
}
void lcd1602_display_str(unsigned char x,bit y,unsigned char dat[])
{
unsigned char point=0x80+x;
unsigned char len=16;
unsigned char j=0;
if(y)
{point+=0x40;}
lcd1602_write(0,point);
len=strlen(dat);
for(j=0;j<len;j++)
{
lcd1602_write(1,dat[j]);
}
}
void lcd1602_display_byte(unsigned char x,bit y,unsigned char ascll)
{
unsigned char point=0x80+x;
if(y)
{point+=0x40;}
lcd1602_write(0,point);
lcd1602_write(1,ascll);
}
#endif
这上面就是LCD1602的基础代码(布局不变)
PS: LCD1602只能显示英文字符,一行16个,一共两行
该程序是STC12的程序,相关的延时函数请根据实际的芯片修改。
要在LCD上第二行显示“HELLO,WORLD”怎么写呢?
unsigned char table[]="HELLO,WORLD";
lcd1602_display_str(0,1,table);
第一个参数表示列:示例是从第0列开始显示(0-15);
第二个参数表示行:第2行是1,第一行是0;
第三个参数表示字符数组(数组名也可以理解为数组的地址)
lcd1602_display_byte(unsigned char x,bit y,unsigned char ascll)
这个也是相同的用法,只不过他是专门在特地区域显示字符的。