搜档网
当前位置:搜档网 › LCD1602显示屏地驱动设置及例程

LCD1602显示屏地驱动设置及例程

LCD1602显示屏地驱动设置及例程
LCD1602显示屏地驱动设置及例程

LCD1602显示屏的驱动设置及例程

一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD1602的型号是HJ1602A,是绘晶科

技公司的产品,它有16条引脚。如图1所示:

图1

再来一张它的背面的,如图2所示:

引脚号符号引脚说明引脚号符号引脚说明

1 VSS 电源地9 D

2 数据端口

2 VDD 电源正极10 D

3 数据端口

3 VO 偏压信号11 D

4 数据端口

4 RS 命令/数据12 D

5 数据端口

5 RW 读/写13 D

6 数据端口

6 E 使能14 D

7 数据端口

7 D0 数据端口15 A 背光正极

图3

图4

二.基本操作

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=高脉冲。输出:无。

读操作时序图(如图5):

图5

写操作时序图(如图6):

图6

时序时间参数(如图7):

图7

三.DDRAM、CGROM和CGRAM

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

图8

DDRAM相当于计算机的显存,我们为了在屏幕上显示字符,就把字符代码送入显存,这样该字符就可以显示在屏幕上了。同样LCD1602共有80个字节的显存,即DDRAM。但L CD1602的显示屏幕只有16×2大小,因此,并不是所有写入DDRAM的字符代码都能在屏幕上显示出来,只有写在上图所示范围内的字符才可以显示出来,写在范围外的字符不

能显示出来。这样,我们在程序中可以利用下面的“光标或显示移动指令”使字符慢慢移动到可见的显示范围内,看到字符的移动效果。

前面说了,为了在液晶屏幕上显示字符,就把字符代码送入DDRAM。例如,如果想在屏幕左上角显示字符‘A’,那么就把字符‘A’的字符代码41H写入DDRAM的00H地址处即可。至于怎么写入,后面会有说明。那么为什么把字符代码写入DDRAM,就可以在相应位置显示这个代码的字符呢?我们知道,LCD1602是一种字符点阵显示器,为了显示一种字符的字形,必须要有这个字符的字模数据,什么叫字符的字模数据,看看下面的这个图就明白了(如图9)。

图9

上图的左边就是字符‘A’的字模数据,右边就是将左边数据用“○”代表0,用“■”代表1。从而显示出‘A’这个字形。从下面的图可以看出,字符‘A’的高4位是0100,低4位是0001,合在一起就是01000001b,即41H。它恰好与该字符的ASCII码一致,这样就给了我们很大的方便,我们可以在PC上使用P2=‘A’这样的语法。编译后,正好是这个字符的字符代码。

在LCD1602模块上固化了字模存储器,就是CGROM和CGRAM,HD44780内置了192个常用字符的字模,存于字符产生器CGROM(Character Generator ROM)中,另外还有8个允许用户自定义的字符产生RAM,称为CGRAM(Character Generator RAM)。下图(如图12)说明了CGROM和CGRAM与字符的对应关系。从ROM和RAM的名字我们也可以知道,ROM 是早已固化在LCD1602模块中的,只能读取;而RAM是可读写的。也就是说,如果只需要在屏幕上显示已存在于CGROM中的字符,那么只须在DDRAM中写入它的字符代码就可以了;但如果要显示CGROM中没有的字符,比如摄氏温标的符号,那么就只有先在CGR AM中定义,然后再在DDRAM中写入这个自定义字符的字符代码即可。和CGROM中固化的字符不同,CGRAM中本身没有字符,所以要在DDRAM中写入某个CGROM不存在的字符,必须在CGRAM中先定义后使用。程序退出后CGRAM中定义的字符也不复存在,下次使用时,必须重新定义。

图10

上面这个图(如图10)说明的是5×8点阵和5×10点阵字符的字形和光标的位置。先来说5×8点阵,它有8行5列。那么定义这样一个字符需要8个字节,每个字节的前3个位没有被使用。例如,定义摄氏温标的符号{0x10,0x06,0x09,0x08,0x08,0x09,0x06,

0x00}。

图11

上面这个图(如图11)说明的是设置CGRAM地址指令。从这个指令的格式中我们可以看出,它共有aaaaaa这6位,一共可以表示64个地址,即64个字节。一个5×8点阵字符共占用8个字节,那么这64个字节一共可以自定义8个字符。也就是说,上面这个图的6位地址中的DB5DB4DB3用来表示8个自定义的字符,DB2DB1DB0用来表示每个字符的8个字节。这DB5DB4DB3所表示的8个自定义字符(0--7)就是要写入DDRAM中的字符代码。我们知道,在CGRAM中只能定义8个自定义字符,也就是只有0—7这8个字符代码,但在下面的这个表(如图12)中一共有16个字符代码(××××0000b--××××1111b)。实际上,如图所示,它只能表示8个自定义字符 (××××0000b=××××1000b, ××××0001b=××××1001b……依次类推)。也就是说,写入DDRAM中的字符代码0和字符代码8是同一个自定义字符。 5×10点阵每个字符共占用16个字节的空间,所以CGRAM中只能定义4个这样的自定义字符。

那么如何在CGRAM中自定义字符呢?在上面的介绍中,我们知道有一个设置CGRAM地址指令,同写DDRAM指令相似,只须设置好某个自定义字符的字模数据,然后按照上面介绍的方法,设置好CGRAM地址,依次写入这个字模数据即可。我们在后面的例子中再进行说明。

图12

四.LCD1602指令

1.工作方式设置指令(如图13)

图13

×:不关心,也就是说这个位是0或1都可以,一般取0。DL:设置数据接口位数。

DL=1:8位数据接口(D7—D0)。

DL=0:4位数据接口(D7—D4)。

N=0:一行显示。

N=1:两行显示。

F=0:5×8点阵字符。

F=1:5×10点阵字符。

说明:因为是写指令字,所以RS和RW都是0。LCD1602只能用并行方式驱动,不能用串行方式驱动。而并行方式又可以选择8位数据接口或4位数据接口。这里我们选择8位数据接口(D7—D0)。我们的设置是8位数据接口,两行显示,5×8点阵,即0b00111 000也就是0x38。(注意:NF是10或11的效果是一样的,都是两行5×8点阵。因为它不能以两行5×10点阵方式进行显示,换句话说,这里用0x38或0x3c是一样的)。

2.显示开关控制指令(如图14)

图14

D=1:显示开,D=0:显示关。

C=1:光标显示,C=0:光标不显示。

B=1:光标闪烁,B=0:光标不闪烁。

说明:这里的设置是显示开,不显示光标,光标不闪烁,设置字为0x0c。

3.进入模式设置指令(如图15、16)

图15

I/D=1:写入新数据后光标右移。

I/D=0:写入新数据后光标左移。

S=1:显示移动。

S=0:显示不移动。

图16

说明:这里的设置是0x06。

4.光标或显示移动指令(如图17、18)

图17

图18

说明:在需要进行整屏移动时,这个指令非常有用,可以实现屏幕的滚动显示效果。初始化时不使用这个指令。

5.清屏指令(如图19)

图19

说明:清除屏幕显示内容。光标返回屏幕左上角。执行这个指令时需要一定时间。

6.光标归位指令(如图20)

图20

说明:光标返回屏幕左上角,它不改变屏幕显示内容。

7.设置CGRAM地址指令(如图21)

图21

说明:这个指令在上面已经介绍过。用法在后面例子中说明。

8.设置DDRAM地址指令(如图22)

图22

说明:这个指令用于设置DDRAM地址。在对DDRAM进行读写之前,首先要设置DDRAM地址,然后才能进行读写。前面我们说过,DDRAM就是LCD1602的显示存储器。我们要在它上面进行显示,就要把要显示的字符写入DDRAM。同样,我们想知道DDRAM某个地址上有什么字符,也要先设置DDRAM地址,然后将它读出到单片机。

9.读忙信号和地址计数器AC(如图23)

图23

说明:这个指令用来读取LCD1602状态。对于单片机来说,LCD1602属于慢速设备。当单片机向其发送一个指令后,它将去执行这个指令。这时如果单片机再次发送下一条指令,由于LCD1602速度较慢,前一条指令还未执行完毕,它将不接受这新的指令,导致

新的指令丢失。因此这条读忙指令可以用来判断LCD1602是否忙,能否接收单片机发来的指令。当BF=1,表示LCD1602正忙,不能接受单片机的指令;当BF=0,表示LCD160 2空闲,可以接收单片机的指令。RS=0,表示是指令;RW=1,表示是读取。这条指令还有一个副产品:即可以得到地址记数器AC的值(address counter)。LCD1602维护了一个地址计数器AC,用来记录下一次读写CGRAM或DDRAM的位置。需要强调的是:这条指令我一次也没有执行成功。很多网友似乎也是这样。好在我们有另外的办法,也就是延时。通过查看每条指令的执行时间,再经过一些试验,可以确定指令的延时。这样就可以在上一条指令执行完毕后再执行下一条指令了。

10.写数据到CGRAM或DDRAM指令(如图24)

图24

说明:RS=1,数据;RW=0,写。指令执行时,要在DB7—DB0上先设置好要写入的数据,然后执行写命令。

11.从CGRAM或DDRAM读数据指令(如图25)

图25

说明:RS=1,数据;RW=1,读。先设置好CGRAM或DDRAM的地址,然后执行读取命令。数据就被读入后DB7—DB0。

五.实例

下面我们就以一个实例来结束这篇文章。先介绍一下背景:单片机最小系统(扩充了外部RAM 62256)。采用STC89C52RC,晶振22.1184MHZ。以5×8点阵,16×2行,8位数据端口。首先在第一行显示“I love MCU!”,第二行显示“LCD1602 Test!”。延时一段时间,清屏。然后在第一行显示自定义字符:摄氏温标标志。第二行显示圆周率(pai)标志。再延时一段时间,清屏。最后在第一行显示“Welcome to my blog!”,显示方式是从屏幕右面移入,左面移出。周而复始(如图26)。

图26例程:

1.#include

2.h>

2.#include"./delay/delay.h"

3.

4.sbit RS = P2^4;

5.sbit RW = P2^5;

6.sbit E = P2^6;

7.

8.#define LCDPORT P0

9.#define LCD_WRITE_DATA 1

10.#define LCD_WRITE_COM 0

11.void lcd_write(unsigned char byte,unsigned char flag)

12.{

13.if(flag)

14.{

15.RS = 1;//数据

16.}

17.else

18.{

19.RS = 0;//命令

20.}

21.RW = 0;//写

22. E = 1;//使能

23.LCDPORT = byte;

24.delay_us(10);

25. E = 0;

26.}

27.void lcd_init()

28.{

29. delay_ms(15);

30.lcd_write(0x38,LCD_WRITE_COM);//设置工作方式,8位数据接口,两行显示,5*

8点阵字符

31.delay_ms(5);

32.lcd_write(0x38,LCD_WRITE_COM);

33.delay_ms(5);

34.lcd_write(0x38,LCD_WRITE_COM);

35.delay_ms(5);

36.lcd_write(0x38,LCD_WRITE_COM);

37.delay_ms(5);

38.lcd_write(0x38,LCD_WRITE_COM);

39.delay_ms(5);

40.lcd_write(0x08,LCD_WRITE_COM);//关闭显示

41.delay_ms(5);

42.lcd_write(0x01,LCD_WRITE_COM);//清屏

43.delay_ms(5);

44.lcd_write(0x06,LCD_WRITE_COM);//写入新数据之后光标后移,显示移动

45.delay_ms(5);

46.lcd_write(0x0c,LCD_WRITE_COM);//显示开,光标不显示,光标不闪烁

47.delay_ms(5);

48.}

49.void dis_lcd_write(unsigned char x,unsigned char y,unsigned char byte)

50.{

51.unsigned char i = 0;

52./*byte*/

53.if(y == 0)

54.{

55.lcd_write(0x80+x,LCD_WRITE_COM);

56.lcd_write(byte,LCD_WRITE_DATA);

57.}

58.if(y == 1)

59.{

60.lcd_write(0x80+0x40+x,LCD_WRITE_COM);

61.lcd_write(byte,LCD_WRITE_DATA);

62.}

63.}

64.void dis_lcd_src(unsigned char x,unsigned char y,unsigned char *src)

65.{

66.if(y == 0)

67.{

68.lcd_write(0x80+x,LCD_WRITE_COM);

69.}

70.if(y == 1)

71.{

72.lcd_write(0x80+0x40+x,LCD_WRITE_COM);

73.}

74.

75.while(*src != '\0')

76.{

77.lcd_write(*src,LCD_WRITE_DATA);

78.src++;

79.}

80.}

自定义字符缓冲区:

CGRAM 1602能存储8个自定义字符,这8个自定义字符存储空间的首地址分别是:

0X40,0X48,0X50,0X58,0X60,0X68,0X70,0X78。在

以0x40来说,它的存储空间如图所示

不过字符的像素通常是5X7。如果需要更大像素的字符,就只能用多个5X7的字符拼合。每个自定义字符的字节有8个,最后一个是0x00;每个字节的高3位为0,即000? ????。

比如说:uchar code table1[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//字符℃

1.void lcd_dis_self()

2.{

3.unsigned char i = 6;

4.while((i < 7) && (i > 1))

5.{

6. lcd_write(0x40+i,LCD_WRITE_COM);//自定义字符的第几行

7.lcd_write(0x1f,LCD_WRITE_DATA);//设置自定义字符第几行的内容

8.lcd_write(0x40+0x80,LCD_WRITE_COM);//显示在显示屏上的第二行的

第一个

9.lcd_write(0x0,LCD_WRITE_DATA);//显示的是自定义字符的第1个

10.

11.delay_ms(500);

12.i --;

13.

14.}

15.}

16.void my_self()

17.{

18.lcd_write(0x40,LCD_WRITE_COM);//表示设置的是第一个自定义字符

19.lcd_write(0x06,LCD_WRITE_DATA);//显示的是一个电池的样子

20.lcd_write(0x1f,LCD_WRITE_DATA);

21.lcd_write(0x11,LCD_WRITE_DATA);

22.lcd_write(0x11,LCD_WRITE_DATA);

23.lcd_write(0x11,LCD_WRITE_DATA);

24.lcd_write(0x11,LCD_WRITE_DATA);

25.lcd_write(0x1f,LCD_WRITE_DATA);

26.lcd_write(0x00,LCD_WRITE_DATA);

27.

28.lcd_write(0x40+0x80,LCD_WRITE_COM);

29.lcd_write(0x0,LCD_WRITE_DATA);

30.delay_ms(500);

31.lcd_dis_self();

LCD1602驱动编程(一)——LCD1602简介

LCD1602驱动编程(一)——LCD1602简介 (一)基本概念 1.液晶显示基本原理: (1)线段显示 点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=FFH,……(00EH)=FFH,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。 (2)字符显示 用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但对内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。 (3)汉字显示 汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码

(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字。 2.LCD1602,顾名思义,能显示16*2=32个字符。 3.驱动:单片机通过GPIO口向LCD1602的引脚给指令和数据,使LCD 按照单片机的要求进行显示。单片机也可以从LCD1602的引脚读取反馈数据到GPIO。 (二)引脚介绍 LCD1602为标准16脚接口,包括8根数据线,三根控制线(RS,RW,EN),电源VCC,电源地VSS以及液晶驱动电压引脚。

lcd1602四线驱动

LCD1602 4 位数据线连接方式驱动程序(转载) 2008-10-14 11:00 LCD1602 4 位数据线连接方式驱动程序(转载) /* 单片机 I/O口使单片机资源的重要组成部分,也是用来扩展外围设备的必选资源, 尽可能以更少的 I/O口实现更多的功能是单片机工程师追求的目标,现在的一些串 行器件也为这一目标的实现添加了更多的可能性,比如 I2C总线,MAXIM 力推 的 1-WIRE 等等,都可以以很少的I/O 口实现更多的功能,当然这是以降低一定的速度 为代价的。 显示器件多见的是 LED数码管,LCD 液晶屏等。一般的数码管成本低廉,在显示内 容要求不多的时候适用;LCD 液晶屏以更多的显示空间得到了许多人的爱好,不过 成本上要高的多(市场价在 20元左右),本文以 LCD1602为例说明如何驱动液晶屏。 LCD1602 外接的控制接口有RS,R/W,E;数据接口为 DB7--DB0。总共有11 跟 线与单 片机的 I/O口连接,若使用标准的 51单片机,至少占用了一个端口再加上另一个端 口的部分 I/O 口。这再很多应用场合是不大可取的。所以很有必要减少连接数。从 其数据手册上介绍的 4线连接方式可以达到只使用 7个 I/O口即可满足要求,其中为 3 个控制口 RS , R/W , E 和数据口的 DB7--DB 4 ;写入数据或指令的顺序是先写高半个 字节,再写低半个字节。 其中 P2 口的高四位接到 LCD1602 的 DB7-DB4,P2.2-P2.3 分别接 RS,E; RW 接地

下面给出驱动源程序*/ /* -------------------------------------------------------- 液晶 LCD1602C 使用4 条数据线(D4~D7) ---------------------------------------------------------- */ /* ------------------------------------------------------------ LCD 引脚定义 1---GND 2---VCC 3---VO 4---RS 5---RW 6---EN 7 到 14--D0-D7 15--背景灯+ 16--背景灯- ---------------------------------------------------------------- */ #include #include #define LCD_DATA P2 sbit LCD1602_RS=P2^2; sbit LCD1602_EN=P2^3; //1602_RW 接地 int p=0; /* 函数说明 ----------------------------- */ void LCD_init(void);

LCD1602汇编显示程序

;1602显示ABC LCD_RS EQU P2.5 LCD_RW EQU P2.6 LCD_EN EQU P2.7 LCD_DATA EQU P3 ;----------------- ORG0000H JMP START ORG0030H ;----------------- LCD: CALL LCD_INIT MOV A, #80H CALL LCD_WCMD MOV A, #'A' CALL LCD_WDATA MOV A, #'B' CALL LCD_WDATA MOV A, #'C' CALL LCD_WDATA AJMP$ ;---------------- DELAY5MS: MOV R6, #10 DL1:DJNZ R7, $ DJNZ R6, DL1 RET ;---------------- LCD_INIT: CALL DELAY5MS MOV A, #38H CALL LCD_WCMD CALL DELAY5MS

CALL DELAY5MS MOV A, #06H CALL LCD_WCMD MOV A, #01H CALL LCD_WCMD MOV A, #0CH CALL LCD_WCMD RET ;===================================== LCD_WCMD: CALL CHECKBUSY CLR LCD_RS JMP W_LCD ;---------------- LCD_WDATA: CALL CHECKBUSY SETB LCD_RS W_LCD: CLR LCD_RW MOV LCD_DATA, A SETB LCD_EN NOP CLR LCD_EN RET ;---------------- CHECKBUSY: PUSH ACC MOV LCD_DATA, #255 CLR LCD_RS SETB LCD_RW BUSYLOOP: SETB LCD_EN NOP MOV A, LCD_DATA CLR LCD_EN JB ACC.7, BUSYLOOP POP ACC RET

51单片机驱动1602液晶显示器c程序

51单片机驱动1602液晶显示器c程序 /*程序效果:单片机控制液晶显示器1602 显示字母数字,用户自行更改io 程序原创安全:51hei*/#includereg52.h //头文件#define uchar unsigned char //宏定义#define uint unsigned intuchar code table[]=“51HEI XING XING “ ; //显示的字母uchar code table1[]=“51HEI MCUXUE YUAU” ;sbit lcdrs=P1; //寄存器选择引脚sbit lcdwr=P1;//读写引脚sbit lcde=P1 ; //片选引脚void delay(uchar x) //延时子函数{uchar i,j;for(i=x;i0;i--) for(j=110;j0;j--);}void write_com(uchar com) //写指令子函数{ //根据1602 液晶 显示器协议编写P2=com; lcdrs=0;lcdwr=0;delay(5);lcde=0; delay(5);lcde=1; }void write_dat(uchar dat) //写数据子函数{P2=dat; lcdrs=1;lcdwr=0;delay(5);lcde=0;delay(5);lcde=1;}void init() //初始化子函数{write_com(0x01); //清屏write_com(0x3f); //功能设置write_com(0x0d); //显示控制write_com(0x06); //输入方式设置}void main(){ uchar i; //定义局部变量init();write_com(0x80+0x02+0x10); //指针的位置for(i=0;i15;i++) //显示{ write_dat(table[i]); delay(50); // 延时,用于调节速度不匹配}write_com(0x80+0x40+0x10); for(i=0;i16;i++){ write_dat(table1[i]); delay(50);} for(i=0;i16;i++){ write_com(0x18); delay(50);} while(1);}tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

LCD1602驱动详解

一.接口 LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容芯片。刚开始接触它的大多是单片机的初学者。由于对它的不了解,不能随心所欲地对它进行驱动。经过一段时间的学习,我对它的驱动有了一点点心得,今天把它记录在这里,以备以后查阅。与此相仿的是LCD12864液晶显示器,它是一种图形点阵显示器,能显示的内容比LCD1602要丰富得多,除了普通字符外,还可以显示点阵图案,带有汉字库的还可以显示汉字,它的并行驱动方式与LCD1602相差无几,所以,在这里花点时间是值得的。 一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD16 02的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚。如图1所示:

图1 再来一张它的背面的,如图2所示:

图2它的16条引脚定义如下:

3. VO是液晶显示的偏压信号,可接10K的3296精密电位器。或同样阻值的RM065/RM063蓝白可调电阻。见图3。 图3 4. RS是命令/数据选择引脚,接单片机的一个I/O,当RS为低电 平时,选择命令;当RS为高电平时,选择数据。 5. RW是读/写选择引脚,接单片机的一个I/O,当RW为低电平时,向LCD1602写入命令或数据;当RW为高电平时,从LCD1602读取状态 或数据。如果不需要进行读取操作,可以直接将其接VSS。 6. E,执行命令的使能引脚,接单片机的一个I/O。 7. D0—D7,并行数据输入/输出引脚,可接单片机的P0—P3任意 的8个I/O口。如果接P0口,P0口应该接4.7K—10K的上拉电阻。如果是4线并行驱动,只须接4个I/O口。 8. A背光正极,可接一个10—47欧的限流电阻到VDD。 9. K背光负极,接VSS。见图4所示。

51单片机任意2个IO口驱动LCD1602

51单片机任意2个IO口驱动LCD1602 相信大家对1602显示屏已经十分熟悉,驱动方式有8线制(需要11根线)和4线制(需要7根线),这里为大家推荐一种只需要2根线就能驱动1602的方法。 之前在网上见到Arduino通过IIC驱动1602的实例,本人完全不懂Arduino程序,看了一下驱动电路,发现PCF8574这个关键芯片,它就相当于一个桥梁,将IIC总线转换为8位准双向口。 思路 1、单片机通过IIC与PCF8574进行通信。 首先写好IIC通信程序,网上到处都是IIC通信程序,很容易找。PCF8574 的器件地址为40h,由于硬件地址引脚A0-A2可寻址8 个器件,所以器件地址并不唯一,具体说明大家去查查PCF8574芯片手册。 2、单片机4线制驱动1602 网上也有很多相关程序,我就不再多说。4线制驱动方式需要7个IO口(RS、RW、E 和4条数据线),而PCF8574提供了8位准双向口,所以管脚还有剩余。 3、IIC通信程序和1602的4线制驱动程序相结合 4、51单片机任意2个IO口驱动1602成功!!!。 (我只是个业余爱好者,要是各位觉得太低端那就见谅了) 驱动电路图 效果图

实物图

Proteus仿真

程序 #include #include sbit SCL = P3^0; sbit SDA = P3^1; bit ack; unsigned char LCD_data; unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字//*****************延时************************ void delay_nus(unsigned int n) //N us延时函数 { unsigned int i=0; for (i=0;i

lcd1602显示程序

lcd1602显示程序 液晶显示简介①液晶显示原理 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。 ②液晶显示器的分类 液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(StaTIc)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(AcTIve Matrix)三种。 ③液晶显示器各种图形的显示原理: 线段的显示 点阵图形式液晶由MN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。 字符的显示 用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为1,其它的为0,为1的点亮,为0的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显

LCD1602资料及单片机对其驱动

技术支持:https://www.sodocs.net/doc/3b16663793.html,/bbs 主 讲:wang1jin Wang1jin 带您从零学单片机 配套开发板:WJ-V4.0 AVR+51开发板 第三章:LCD 部分

技术支持:https://www.sodocs.net/doc/3b16663793.html,/bbs 主 讲:wang1jin 单片机驱动LED ?LCD1602简介 ?LCD1602硬件原理图?LCD1602工作方式?LCD1602时序及应用?LCD1602显示应用流程 ?实例操作:在LCD1602上显示一个字符?实例操作:在LCD1602上显示一串字符?实例操作:在LCD1602上显示自定义图形

这里介绍的字符型液晶模块是一种用 5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里我们使用常用的2行16个字的LCD1602液晶模块来介绍它的编程方法。 技术支持:https://www.sodocs.net/doc/3b16663793.html,/bbs 主讲:wang1jin

LCD1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,其代码与标准的ASCII字符代码一致。因此,我们只要写入显示字符的ASCII码即可,这种标准化的设计给使用带来很大的方便。 比如大写的英文字母“A”的ASCII代码是01000001B (41H),显示时单片机往液晶模块写入显示指令,模块就把地址41H中的点阵字符图形显示出来,我们就能在相应位置上看到字母“A”。 技术支持:https://www.sodocs.net/doc/3b16663793.html,/bbs 主讲:wang1jin

LCD1602液晶显示实验要点

实验报告 实验名称: [LCD1602液晶显示实验]姓名: 学号: 指导教师: 实验时间: [2013年6月15日] 信息与通信工程学院

LCD1602液晶显示实验 1.实验原理 1.1 基本原理 1.1.1 1602字符型LCD简介 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。 1.1.2 1602LCD的基本参数及引脚功能 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图1-2所示: 图1-2 1602LCD尺寸图 1.1602LCD主要技术参数: 显示容量: 16×2个字符 芯片工作电压: 4.5~5.5V 工作电流: 2.0mA(5.0V) 模块最佳工作电压: 5.0V 字符尺寸: 2.95×4.35(W×H)mm 2.引脚功能说明: 1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表: 表1-3引脚接口说明表 编 符号引脚说明编号符号引脚说明 号 1 VSS 电源地9 D 2 数据 2 VDD 电源正极10 D 3 数据 3 VL 液晶显示偏压11 D 4 数据 4 RS 数据/命令选择12 D 5 数据 5 R/W 读/写选择13 D 6 数据 6 E 使能信号14 D 7 数据 7 D0 数据15 BLA 背光源正极 8 D1 数据16 BLK 背光源负极

1.1.3 1602LCD的指令说明及时序 1602液晶模块内部的控制器共有11条控制指令,如表1-4所示: 表1-4 控制命令表 序号指令RS R/W D7 D6 D5 D4 D3 D2 D1 D0 1 清显示0 0 0 0 0 0 0 0 0 1 2 光标返回0 0 0 0 0 0 0 0 1 * 3 置输入模式0 0 0 0 0 0 0 1 I/D S 4 显示开/关控制0 0 0 0 0 0 1 D C B 5 光标或字符移位0 0 0 0 0 1 S/C R/L * * 6 置功能0 0 0 0 1 DL N F * * 7 置字符发生存贮器 地址 0 0 0 1 字符发生存贮器地址 8 置数据存贮器地址0 0 1 显示数据存贮器地址 9 读忙标志或地址 0 1 BF 计数器地址 10 写数到CGRAM或 DDRAM) 1 0 要写的数据内容 11 从CGRAM或 DDRAM读数 1 1 读出的数据内容 1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)读写操作时序如图1-5和1-6所示: 图1-5 读操作时序

已经采用过-LCD1602显示字符和(RAM)数字的汇编程序

单片机LCD1602显示字符和数字的汇编程序(无聊原创) 1,单片机和LCD1602的连线,和程序结果显示如下图: 2,LCD第一行显示字符XIAORENGUANG第二行显示RAM中40H到46H中的数字。程序如下: ORG 0000H AJMP MAIN RS EQU P2.4 RW EQU P2.5 E EQU P2.6 MAIN: MOV SP,#60H MOV 40H,#01H MOV 41H,#02H MOV 42H,#03H MOV 43H,#04H MOV 44H,#05H MOV 45H,#06H MOV 46H,#07H ACALL DD1 ;DD1是LCD初始化

MOV DPTR,#TABLE1 ACALL DD2;DD2是LCD第一行显示TABLE1 ACALL PPP ;PPP是LCD第二行显示RAM中40H到46H中的数据 SJMP $ DD1: MOV p0,#01H ;清屏 CALL ENABLE MOV p0,#38H ;显示功能 CALL ENABLE MOV p0,#0FH ;显示开关控制 CALL ENABLE MOV p0,#06H ;+1 CALL ENABLE RET DD2: MOV p0,#80H;第一行的开始位置 cALL ENABLE CALL WRITE1;到TABLE1取码? RET DD3: MOV p0,#0C0H;第二行的位置 CALL ENABLE CALL WRITE1;到TABLE2 取码 RET ENABLE: CLR RS ;送命令 CLR RW CLR E CALL DELAY SETB E RET WRITE1: MOV R1,#00H ;显示table中的值 A1: MOV A,R1;到table取码 MOVC A,@A+DPTR call wRITE2 ;显示到lcd INC R1 CJNE A,#00H,A1 ;是否到00h RET WRITE2:MOV p0,A ;显示 SETB RS CLR RW CLR E CALL DELAY SETB E RET

LCD1602显示屏地驱动设置及例程

LCD1602显示屏的驱动设置及例程 一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD1602的型号是HJ1602A,是绘晶科 技公司的产品,它有16条引脚。如图1所示: 图1 再来一张它的背面的,如图2所示: 引脚号符号引脚说明引脚号符号引脚说明 1 VSS 电源地9 D 2 数据端口 2 VDD 电源正极10 D 3 数据端口 3 VO 偏压信号11 D 4 数据端口 4 RS 命令/数据12 D 5 数据端口 5 RW 读/写13 D 6 数据端口 6 E 使能14 D 7 数据端口 7 D0 数据端口15 A 背光正极

图3

图4 二.基本操作 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=高脉冲。输出:无。 读操作时序图(如图5): 图5 写操作时序图(如图6):

图6 时序时间参数(如图7): 图7 三.DDRAM、CGROM和CGRAM DDRAM(Display Data RAM)就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下(如图8): 图8 DDRAM相当于计算机的显存,我们为了在屏幕上显示字符,就把字符代码送入显存,这样该字符就可以显示在屏幕上了。同样LCD1602共有80个字节的显存,即DDRAM。但L CD1602的显示屏幕只有16×2大小,因此,并不是所有写入DDRAM的字符代码都能在屏幕上显示出来,只有写在上图所示范围内的字符才可以显示出来,写在范围外的字符不

[VHDL代码]LCD1602驱动

[VHDL代码]LCD1602驱动 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity LCD1602 is Port ( Clk : in std_logic; --状态机时钟信号,同时也是液晶时钟信号,其周期应该满足液晶数据的建立时间Sec_low,Sec_high,Min_low,Min_high,Hour_low,Hour_high: in std_logic_vector(3 downto 0); LCD_RS : out std_logic; --寄存器选择信号 LCD_RW : out std_logic; --液晶读写信号 LCD_EN : out std_logic; --液晶时钟信号 LCD_Data : out std_logic_vector(7 downto 0)); --液晶数据信号 end LCD1602; architecture Behavioral of LCD1602 is type STATE_TYPE is (START,write_C,write_D,WRITE_BYTE_C,WRITE_BYTE_D,wait_3m1,wait_3m2,wait_5m1,wait_5m2,w ait_100m); type MY_ARRAY1 is array(0 to 4) of std_logic_vector(7 downto 0); type MY_ARRAY2 is array(0 to 7) of std_logic_vector(7 downto 0);--长度为14的8位/字数组 constant c_d: MY_ARRAY1:=(x"38",x"0c",x"06",x"01",x"84"); signal d_d: MY_ARRAY2:=(x"20",x"20",x"3A",x"20",x"20",x"3A",x"20",x"20"); signal STATE: STATE_TYPE:=START; signal w_c_flag : integer range 0 to 2:=0; signal w_d_flag : integer range 0 to 2:=0; signal write_c_cnt : integer range 0 to 5:=0; signal write_d_cnt : integer range 0 to 8:=0; signal cnt : integer range 0 to 10000:=0; signal count : integer range 0 to 10000:=0; begin LCD_RW <= '0' ; --写数据 d_d(0)<="0000"&Hour_high+x"30"; d_d(1)<="0000"&Hour_low+x"30"; d_d(3)<="0000"&Min_high+x"30"; d_d(4)<="0000"&Min_low+x"30"; d_d(6)<="0000"&Sec_high+x"30"; d_d(7)<="0000"&Sec_low+x"30";

LCD1602液晶显示实验实验报告及程序

实验三 LCD1602液晶显示实验 姓名专业学号成绩 实验目的 掌握Keil C51软件与proteus软件联合仿真调试的方法; 掌握LCD1602液晶模块显示西文的原理及使用方法; 掌握用8位数据模式驱动LCM1602液晶的C语言编程方法; 掌握用LCM1602液晶模块显示数字的C语言编程方法。 实验仪器与设备 1.微机一台C51集成开发环境仿真软件 实验内容 用Proteus设计一LCD1602液晶显示接口电路。要求利用P0口接LCD1602液晶的数据端,~做LCD1602液晶的控制信号输入端。~口扩展3个功能键K1~K3。参考电路见后面。 编写程序,实现字符的静态和动态显示。显示字符为 第一行:“1.姓名全拼”,第二行:“2.专业全拼+学号”。 编写程序,利用功能键实现字符的垂直滚动和水平滚动等效果显示。显示字符为: “1.姓名全拼 2.专业全拼+学号EXP8 DISPLAY ” 主程序静态显示“My information!” 实验原理 液晶显示的原理:采用的LCD显示屏都是由不同部分组成的分层结构,位于最后面的一层是由荧光物质组成的可以发射光线的背光层,背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。当LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。 LCD1602采用标准的14引脚(无背光)或16引脚(带背光)接口,各引脚接口说明如表:

编号符号引脚说明编号符号引脚说明 1VSS电源地9D2数据 2VDD电源正极10D3数据 3VL液晶显示偏压11D4数据 4RS数据/命令选择12D5数据 5R/W读/写选择13D6数据 6E使能信号14D7数据 7D0数据15BLA背光源正极 8D1数据16BLK背光源负极1602液晶模块内部的控制器共有11条控制指令,如表所示: 芯片时序表: 4.1602LCD的一般初始化(复位)过程

1602液晶显示计算器电路图及程序

#include #include #include #include unsigned char code Error[]={"error"}; unsigned char code Systemerror[]={"system error"}; unsigned char code Lcd[]={"lcd calculate"}; char str[16]; sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit BF=P0^7; /*********************** 函数功能:延时1ms ***********************/ void delay1ms() { unsigned char i,j; for (i=0;i<10;i++) for (j=0;j<33;j++) ; } /************************ 函数功能:延时n毫秒 入口参数:n ************************/ void delaynms(unsigned char n) { unsigned char i; for (i=0;i

常见液晶驱动芯片详解

本文主要是介绍一些常用的LCD驱动控制IC的型号,方便学习或正在使用的LCD的朋友能够更好地编写LCD的驱动程序。 因此各位朋友在选择LCD液晶模块的时候,在考虑到串行,还是并行的方式时,可根据其驱动控制IC的型号来判别,当然你还需要看你选择的LCD 模块引脚定义是固定支持并行,还是可选择并行或串行的方式。 一、字符型LCD驱动控制IC 市场上通用的8×1、8×2、16×1、16×2、16×4、20×2、20×4、40×4等字符型LCD,基本上都采用的KS0066作为LCD的驱动控制器 二、图形点阵型LCD驱动控制IC 1、点阵数122×32--SED1520 2、点阵数128×64 (1)ST7920/ST7921,支持串行或并行数据操作方式,内置中文汉字库(2)KS0108,只支持并行数据操作方式,这个也是最通用的12864点阵液晶的驱动控制IC (3)ST7565P,支持串行或并行数据操作方式 (4)S6B0724,支持串行或并行数据操作方式 (5)T6963C,只支持并行数据操作方式 3、其他点阵数如192×6 4、240×64、320×64、240×128的一般都是采用T6963c驱动控制芯片

4、点阵数320×240,通用的采用RA8835驱动控制IC 这里列举的只是一些常用的,当然还有其他LCD驱动控制IC,在写LCD驱动时要清楚是哪个型号的IC,再到网上去寻找对应的IC数据手册吧。后面我将慢慢补上其它一些常见的. 三 12864液晶的奥秘 CD1601/1602和LCD12864都是通常使用的液晶,有人以为12864是一个统一的编号,主要是12864的液晶驱动都是一样的,其实12864只是表示液晶的点阵是128*64点阵,而实际的12864有带字库的,也有不带字库的;有5V电压的,也有~5V(内置升压电路);归根到底的区别在于驱动控制芯片,常用的控制芯片有ST7920、KS0108、T6963C等等。 下面介绍比较常用的四种 (1)ST7920类这种控制器带中文字库,为用户免除了编制字库的麻烦,该控制器的液晶还支持画图方式。该类液晶支持68时序8位和4位并口以及串口。 (2)KS0108类这种控制器指令简单,不带字库。支持68时序8位并口。 (3)T6963C类这种控制器功能强大,带西文字库。有文本和图形两种显示方式。有文本和图形两个图层,并且支持两个图层的叠加显示。支持80时序8位并口。

LM1602液晶显示程序

#include #define uchar unsigned char #define uint unsigned int unsigned char code tab1[16]=" Now time is: "; unsigned char tab2[16]=" 00:00:00 "; uchar second = 30; uchar minite = 11; uchar hour = 15; sbit RS = P2^5; sbit RW = P2^6; sbit E = P2^7; void delay() { int i,j; for(i=0; i<=100; i++) for(j=0; j<=20; j++); } void Write_Command(uchar command) { P0 = command; RS = 0; RW = 0; E = 1; delay(); E = 0; } void Write_Data(uchar Data) { P0 = Data; RS = 1; RW = 0; E = 1; delay(); E = 0; } void LCD_Init(void)//初始化 { Write_Command(0x01); Write_Command(0x38);

Write_Command(0x0c); Write_Command(0x06); } void LCD_Printfc(uchar hang,uchar lie,uchar sign) { uchar a; if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie; Write_Command(a); Write_Data(sign); } void LCD_Display(uchar *tab1) { uchar i; Write_Command(0x80); for(i=0; i<16; i++) { Write_Data(tab1[i]); delay(); } /* Write_Command(0xc0); for(i=0; i<16; i++) { Write_Data(tab2[i]); delay(); }*/ } void time_view(void) { if(second == 60) { minite ++; second = 0; } if(minite == 60) { hour++; minite = 0; } if(hour == 24)

1602字符液晶显示原理+实例详解新手必看

1602详细资料和实例(看了必会) 1602字符液晶在实际的产品中运用的也比较多了,前几天留意了一下,发现宿舍门前的自动售水机就是采用的1602液晶进行显示的。而且对于单片机的学习而言,掌握1602的用法是每一个学习者必然要经历的过程。在此,我将使用1602过程中遇到的问题以及感受记录下来,希望能够给初学者带来一点指导,少走一点弯路。 所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。 1602液晶的正面(绿色背光,黑色字体) 1602液晶背面(绿色背光,黑色字体) 另一种1602液晶模块,显示屏是蓝色背光白色字体

字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示: HD44780内置了DDRAM、CGROM和CGRAM。 DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:

也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码(指A的字模代码,0x20~0x7F为标准的ASCII码,通过这个代码,在CGROM中查找到相应的字符显示)就行了。但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。第二行也一样用前16个地址。对应如下:DDRAM地址与显示位置的对应关系 (事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码,见字模关系对照表)并不能显示1出来。这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H。依次类推。大家看一下控制指令的的8条:DDRAM地址的设定,即可以明白是怎么样的一回事了),1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形(无汉字),如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H 中的点阵字符图形显示出来,我们就能看到字母“A”

lcd1602C语言驱动

/*LCD1602 驱动程序 */ display (行号,数据指针) displayUser (行号,列号,字符/字符串) Ddisplay (行号、列号、字符/字符串) Fldisplay (行号、列号、字符/字符串) /* 声明代码(放工程中需要包含的自定义头文件中) void delay(unsigned char n); void init(); void display(unsigned char a,unsigned char table[]); void write_date(uchar); void write_command(uchar); void displayUser(unsigned char hang,unsigned lie,unsigned char table[]); void Ddisplay(unsigned char hang,unsigned lie,unsigned char table[]); void Fldisplay(unsigned char hang,unsigned lie,unsigned char table[]); */ #include #define uchar unsigned char sbit rs=P2A 4; sbit rw=P2A5; sbit e=P2A6; uchar busyc,line; void delay(uchar n) { uchar x,y; for(x=n;x>0;x--) for(y=110;y>0;y--); } void busy(uchar busyc) { rs=0; rw=1;e=1; delay(1); busyc=P0; e=0; } void write_command(uchar command) { /* 程序用法: 1、按行显示: 2、定位显示 3、动态显示 4、闪烁显示 */

1602字符液晶显示原理+实例详解

1602详细资料和实例 1602字符液晶在实际的产品中运用的也比较多了,前几天留意了一下,发现宿舍门前的自动售水机就是采用的1602液晶进行显示的。而且对于单片机的学习而言,掌握1602的用法是每一个学习者必然要经历的过程。在此,我将使用1602过程中遇到的问题以及感受记录下来,希望能够给初学者带来一点指导,少走一点弯路。 所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。 1602液晶的正面(绿色背光,黑色字体) 1602液晶背面(绿色背光,黑色字体)

另一种1602液晶模块,显示屏是蓝色背光白色字体 字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:

HD44780内置了DDRAM、CGROM和CGRAM。 DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表: 也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码(指A的字模代码,0x20~0x7F为标准的ASCII码,通过这个代码,在CGROM中查找到相应的字符显示)就行了。但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。第二行也一样用前16个地址。对应如下: DDRAM地址与显示位置的对应关系。 (事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码,见字模关系对照表)并不能显示1出来。这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H。依次类推。大家看一下控制指令的的8条:DDRAM地址的设定,即可以明白是怎么样的一回事了),1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形(无汉字),如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H)(其实是1个地址),显示时模块把地址41H 中的点阵字符图形显示出来,我们就能看到字母“A”。

相关主题