`
hzy3774
  • 浏览: 984894 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

51单片机驱动LCD1602液晶

 
阅读更多

1602液晶通常情况下作字符显示,操作很方便。

首先来看1602的引脚;由于是8位并行数据传递,所以占用IO较多:



 

 输入指令表:



 对1602的操作包括读数据和写数据;

在大多数情况下我们要用LCD显示简单的字符,所以最基本的操作就是写操作;写操作又包括写指令和写数据:写指令是告诉LCD做一些特殊的操作;写数据是告诉LCD要显示什么数据;

通过R/W区分读和写,通过RS区分指令还是数据,通过E说明什么时候做操作:



 写指令又分为特殊指令(如清屏,指定显示方式等)和显示地址指令(告诉LCD要在什么位置显示);

我们通常使用两行显示模式,他们的显示地址如下:

 

然而实际上这个地址还要加上0x80才是真正的显示地址:

例如0行0列的地址是0x80 + 0 + 0 = 0x80;

例如1行3列的地址是0x80 + 0x40 + 3 = 0xc3;

也就是说1行?列的地址是0x8?;

2行?列的地址是0xc?。

至于写数据操作,就是只要写入某个字符的ASCII码值,LCD就知道要显示什么字符了。

一个最简单的显示程序:

#include <reg51.h>

#define uchar unsigned char
#define uint unsigned int

#define writeCmd(cmd)	write((cmd),0)
#define writeDat(dat)	write((dat),1)

#define LCD P0

sbit RS = P2^0;
sbit RW = P2^1;
sbit E = P2^2;

void delay(unsigned char n)
{
    unsigned char x,y;
    for(x=n; x>0; x--)
        for(y=110; y>0; y--);
}

void write(uchar dat, bit rs) {
    RS = rs;
    LCD = dat;
    delay(5);
    E = 1;
    E = 0;
}

void lcdInit() {
    RW = 0;
    writeCmd(0x38);	//0x38 是把1602设置为 8位数据,双列,5*7字形 的显示模式
    writeCmd(0x0c);	//设置为关闭光标功能
    writeCmd(0x06);	//设定lcd自动把显示地址递增
    writeCmd(0x01);	//清屏
    writeCmd(0x80);	//显示地址指向头
}

void main() {
    lcdInit();
    writeCmd(0xc3);	//要在第2行3列显示一个S
    writeDat('S');
    while(1);
}

  仿真显示效果:



 

  • 大小: 243.6 KB
  • 大小: 199.9 KB
  • 大小: 139.7 KB
  • 大小: 64 KB
  • 大小: 53.1 KB
  • 大小: 33.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics