LCD1602液晶显示器

LCD1602引脚

引脚号 符号 引脚说明 引脚号 符号 引脚说明
1 VSS 电源地 9 D2 数据端口
2 VDD 电源正极 10 D3 数据端口
3 VO 偏压信号 11 D4 数据端口
4 RS 命令/数据 12 D5 数据端口
5 RW 读/写 13 D6 数据端口
6 E 使能,下降沿执行指令 14 D7 数据端口
7 D0 数据端口 15 A 背光正极
8 D1 数据端口 16 K 背光负极

基本操作

LCD1602的基本操作分为四种:

1.    读状态:输入RS=0,RW=1,E=高脉冲。输出:D0—D7为状态字。

2.    读数据:输入RS=1,RW=1,E=高脉冲。输出:D0—D7为数据。

3.    写命令:输入RS=0,RW=0,E=高脉冲。输出:无。

4.    写数据:输入RS=1,RW=0,E=高脉冲。输出:无。

读时序


写时序



DDRAM(Display Data RAM)就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下:


电路原理图

源代码

#include<reg51.h>
#include<string.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P3^5;
sbit EN = P3^4;
sbit RW = P3^6;
uchar code table1[] = {“hello world!”};
uchar code table2[] = {“1991/02/03”};
void delay1ms(uint time);//延时N毫秒
void init_1602(void);     //初始化1602
void writecmd_1602(uint cmd);    //写指令函数
void writedata_1602(uchar dat);    //写数据函数
void display(uchar num,uchar * table);    //显示函数
int main()
{
init_1602();            //初始化1602
delay1ms(5);
writecmd_1602(0x80);    //设置显示的起始位置
delay1ms(5);
display(strlen(table1),table1);
writecmd_1602(0xC0);    //设置显示的起始位置
delay1ms(5);
display(strlen(table2),table2);
while(1);
return 0;
}    
void delay1ms(uint time)     

{

unsigned char a,b,i;

    for(i = time; i != 0;i–)

        for(b=199;b>0;b–)

            for(a=1;a>0;a–);

}

void init_1602(void)

{

    writecmd_1602(0x38);    //模式设置,8位数据,2行显示,5*8点阵字符

    writecmd_1602(0x0F);    //显示设置,显示开,光标显示,光标闪烁    

    writecmd_1602(0x06);    //显示模式,写入新数据后光标右移    

    writecmd_1602(0x01);    //清屏

}

void writecmd_1602(uint cmd)

{

    RS = 0;

    RW = 0;

    P1 = cmd;

    EN = 1;

    delay1ms(1);

    EN = 0;

}

void writedata_1602(uchar dat)

{

    RS = 1;

    RW = 0;

    P1 = dat;

    EN = 1;

    delay1ms(1);

    EN = 0;

}

void display(uchar num,uchar * table)

{

    uchar i;

    for(i = 0; i < num; i++)

    {

        writedata_1602(table[i]);

    }

    delay1ms(5);

}


自定义显示字符

写入CGRAM存储器的指令

共有64个存储区,每个8个存储区对应一个字符,所以可以自定义8个字符。如下图所示每个存储区的高3位不用。

显示自定义字符时,向DDRAM写入0x00至0x07即可,另外0x08至0x0F也能实现同样的功能。

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
// 自定义字符 一共可写入16个自字义字符,写入后可用其CGRAM代码直接提取显示。
uchar code Xword[]={
0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00, //℃,代码 0x00
0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00, //一,代码 0x01

0x00,0x00,0x00,0x0e,0x00,0xff,0x00,0x00, //二,代码 0x02

0x00,0x00,0xff,0x00,0x0e,0x00,0xff,0x00, //三,代码 0x03

0x00,0x00,0xff,0xf5,0xfb,0xf1,0xff,0x00, //四,代码 0x04

0x00,0xfe,0x08,0xfe,0x0a,0x0a,0xff,0x00, //五,代码 0x05

0x00,0x04,0x00,0xff,0x00,0x0a,0x11,0x00, //六,代码 0x06

0x00,0x1f,0x11,0x1f,0x11,0x11,0x1f,0xFF, //日,代码 0x07

};

sbit RS = P3^5;

sbit EN = P3^4;

sbit RW = P3^6;

void delay1ms(uint time);//延时N毫秒

void init_1602(void);     //初始化1602

void writecmd_1602(uint cmd);    //写指令函数

void writedata_1602(uchar dat);    //写数据函数

void CgramWrite(void) { // 装入CGRAM //

uchar i;

writecmd_1602(0x40); // CGRAM地址设为00处

for(i=0;i<64;i++)

    {

    writedata_1602(Xword[i]);// 按数组写入数据

}

}

int main()

{

    init_1602();            //初始化1602

    writecmd_1602(0xC0);    //设置显示的起始位置

    writedata_1602(0x00);

    writedata_1602(0x01);

    writedata_1602(0x02);

    writedata_1602(0x03);

    writedata_1602(0x04);

    writedata_1602(0x05);

    writedata_1602(0x06);

    writedata_1602(0x07);

    writedata_1602(0x20);

    while(1);

    return 0;

}    

void delay1ms(uint time)     

{

unsigned char a,b,i;

    for(i = time; i != 0;i–)

        for(b=199;b>0;b–)

            for(a=1;a>0;a–);

}

void init_1602(void)

{

    writecmd_1602(0x38);    //模式设置,8位数据,2行显示,5*8点阵字符

    writecmd_1602(0x0F);    //显示设置,显示开,光标显示,光标闪烁    

    writecmd_1602(0x06);    //显示模式,写入新数据后光标右移    

    writecmd_1602(0x01);    //清屏

    delay1ms(5);

    CgramWrite();

}

void writecmd_1602(uint cmd)

{

    RS = 0;

    RW = 0;

    P1 = cmd;

    EN = 1;

    delay1ms(1);

    EN = 0;

}

void writedata_1602(uchar dat)

{

    RS = 1;

    RW = 0;

    P1 = dat;

    EN = 1;

    delay1ms(1);

    EN = 0;

}

运行结果如下


附件:国内厂家的一个说明书
smc1602c

2021年8月24日

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注