液晶1602显示字符代码
- 格式:doc
- 大小:19.50 KB
- 文档页数:1
LCD1602显示汉字研究与程序设计1602是一款最常用也是最便宜的液晶显示屏。
最多可以显示两行标准字符,每行最多可以显示16个字符。
1602可以显示内部常用字符(包括阿拉伯数字,英文字母大小写,常用符号和日文假名等),也可以显示自定义字符(单或多个字符组成的简单汉字,符号,图案等,最多可以产生8个自定义字符)。
一、显示常用字符。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是41H,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”十进制十六进制ASCII字符十进制十六进制ASCII字符十进制十六进制ASCII字符00 00 自定义字符1 56 38 8 96 60 `01 01 自定义字符2 57 39 9 97 61 a02 02 自定义字符3 58 3A : 98 62 b03 03 自定义字符4 59 3B ; 99 63 c04 04 自定义字符5 60 3C < 100 64 d05 05 自定义字符6 61 3D = 101 65 e06 06 自定义字符7 62 3E > 102 66 f07 07 自定义字符8 63 3F ? 103 67 g08 08 自定义字符1 64 40 @ 104 68 h09 09 自定义字符2 65 41 A 105 69 i10 0A 自定义字符3 66 42 B 106 6A j11 0B 自定义字符4 67 43 C 107 6B k12 0C 自定义字符5 68 44 D 108 6C l13 0D 自定义字符6 69 45 E 109 6D m14 0E 自定义字符7 70 46 F 110 6E n15 0F 自定义字符8 71 47 G 111 6F o32 20 空格72 48 H 112 70 p33 21 ! 73 49 I 113 71 q34 22 " 74 4A J 114 72 r35 23 # 75 4B K 115 73 s36 24 $ 76 4C L 116 74 t37 25 % 77 4D M 117 75 u38 26 & 78 4E N 118 76 v39 27 ' 79 4F O 119 77 w40 28 ( 80 50 P 120 78 x41 29 ) 81 51 Q 121 79 y42 2A * 82 52 R 122 7A z43 2B + 83 53 S 123 7B {44 2C , 84 54 T 124 7C |45 2D - 85 55 U 125 7D }46 2E . 86 56 V 126 7E ~47 2F / 87 57 W48 30 0 88 58 X49 31 1 89 59 Y50 32 2 90 5A Z51 33 3 91 5B [52 34 4 92 5C \53 35 5 93 5D ]54 36 6 94 5E ^55 37 7 95 5F _显示操作的过程:首先确认显示的位置,即在第几行,第几个字符开始显示。
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”字的代码就行了。
但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。
那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。
第二行也一样用前16个地址。
对应如下:DDRAM地址与显示位置的对应关系(事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码)并不能显示1出来。
这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H 地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H。
液晶LCD1602驱动代码液晶LCD1602简介LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。
它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。
不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。
为了降低成本,绝大多数制造商都直接将裸片做到板子上。
各引脚的功能介绍如下。
1、引脚1:VSS 为地电源。
2、引脚2:VDD 接5V 正电源。
3、引脚3:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”现象,使用时可以通过一个10kQ 的电位器调整其对比度。
4、引脚4:RS 为寄存器选择脚,高电平时选择数据寄存器、低电平时选择指令寄存器。
5、引脚5:R/W 为读/写信号线,高电平时进行读操作,低电平时进行写操作。
当RS 和R/W 共同为低电平时可以写入指令或显示地址;当RS 为低电平,R/W 为高电平时,可以读忙信号;当RS 为高电平,R/W 为低电平时,可以写入数据。
6、引脚6:E 端为使能端,当E 端由高电平跳变为低电平时,液晶模块执行命令。
7、引脚7~14:D0~D7为8位双向数据线。
8、引脚15:背光源正极。
9、引脚16:背光源负极。
液晶LCD1602驱动源代码/***********************LCD驱动基本代码************************ 单片机:51单片机* 开发环境:keil uVision3* 名称:1602驱动基本代码**************************************************************/#include<reg51.h> //包含头文件#include<intrins.h>#define LCD_Data P0#define Busy 0x80sbit LCD_RS = P1^0;sbit LCD_RW = P1^1;sbit LCD_E = P2^5;unsigned char code welcome[] = {"YOU ARE WELCOME"};unsigned char code mcu[] = {"SL-51A"};void Delay5Ms(void);void WriteDataLCD(unsigned char WDLCD);void WriteCommandLCD(unsigned char WCLCD,BuysC);unsigned char ReadDataLCD(void);unsigned char ReadStatusLCD(void);void LCDInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); void Info_display(void);/*************************5ms延时函数***************************/void Delay5Ms(void){unsigned int TempCyc = 3552;while(TempCyc--);}/**************************写数据函数***************************/void WriteDataLCD(unsigned char WDLCD){ReadStatusLCD(); //检测忙LCD_Data = WDLCD;LCD_E = 0; //若晶振速度太高可以在这后加小的延时 LCD_E = 0; //延时LCD_RS = 1;LCD_RW = 0;LCD_E = 1;LCD_E = 0;}/*************************写指令函数****************************/void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCD(); //根据需要检测忙LCD_Data = WCLCD;LCD_E = 0;LCD_E = 0;LCD_RS = 0;LCD_RW = 0;LCD_E = 1;LCD_E = 0;}/**************************读状态函数***************************/ unsigned char ReadStatusLCD(void){LCD_Data = 0xFF;LCD_RS = 0;LCD_RW = 1;LCD_E = 0;LCD_E = 0;LCD_E = 1;while (LCD_Data & Busy); //检测忙信号return(LCD_Data);}/***************************LCD初始化***************************/void LCDInit(void) //LCD初始化{LCD_Data = 0;WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,1); //显示模式设置, 开始要求每次检测忙信WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); //显示光标移动设置WriteCommandLCD(0x0C,1); //显示开及光标设置}/**********************按指定位置显示一个字符*********************/void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码WriteDataLCD(DData);}/***********************按指定位置显示一串字符********************/void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) {unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]>=0x20) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;X++;}}}void main(void){LCDInit();DisplayListChar(5,0,mcu);DisplayListChar(0,1,welcome); while(1){;}}。
在日常生活中,我们对液晶显示器并不陌生。
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。
在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。
发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。
因此,液晶显示器画质高且不会闪烁。
数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。
体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。
10.8.1 液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。
除了黑白显示外,液晶显示器还有多灰度有彩色显示等。
如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。
③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
1602液晶显示器代码int DI = 8;int RW = 9;int DB[] = {0, 1, 2, 3, 4, 5, 6, 7};//使用数组来定义总线需要的管脚int Enable = 10;void LcdCommandWrite(int value){// 定义所有引脚int i = 0;for(i=DB[0]; i <= DI; i++)//总线赋值{digitalWrite(i,value & 01);//因为1602液晶信号识别是D7-D0(不是D0-D7),这里是用来反转信号。
value >>= 1;}digitalWrite(Enable,LOW);delayMicroseconds(1);digitalWrite(Enable,HIGH);delayMicroseconds(1); // 延时1msdigitalWrite(Enable,LOW);delayMicroseconds(1); // 延时1ms}void LcdDataWrite(int value){// 定义所有引脚int i = 0;digitalWrite(DI, HIGH); digitalWrite(RW, LOW);for(i=DB[0]; i <= DB[7]; i++){ digitalWrite(i,value & 01); value >>= 1;}digitalWrite(Enable,LOW); delayMicroseconds(1);digitalWrite(Enable,HIGH); delayMicroseconds(1);digitalWrite(Enable,LOW); delayMicroseconds(1); // 延时1ms }void setup(void){int i = 0;for(i=Enable; i <= DI; i++){pinMode(i,OUTPUT);}delay(100);// 短暂的停顿后初始化LCD// 用于LCD控制需要LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小delay(64);LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小delay(50);LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小delay(20);LcdCommandWrite(0x06); // 输入方式设定// 自动增量,没有显示移位delay(20);LcdCommandWrite(0x0E); // 显示设置// 开启显示屏,光标显示,无闪烁delay(20);LcdCommandWrite(0x01); // 屏幕清空,光标位置归零delay(100);LcdCommandWrite(0x80); // 显示设置// 开启显示屏,光标显示,无闪烁delay(20);}void loop(void){LcdCommandWrite(0x01); // 屏幕清空,光标位置归零delay(10);LcdCommandWrite(0x80+3);delay(10);// 写入欢迎信息LcdDataWrite('W');LcdDataWrite('e');LcdDataWrite('l');LcdDataWrite('c');LcdDataWrite('o');LcdDataWrite('m');LcdDataWrite('e');LcdDataWrite(' ');LcdDataWrite('t');LcdDataWrite('o');delay(10);LcdCommandWrite(0xc0+1); // 定义光标位置为第二行第二个位置delay(10);LcdDataWrite('g');LcdDataWrite('e');LcdDataWrite('e');LcdDataWrite('k');LcdDataWrite('-');LcdDataWrite('w');LcdDataWrite('o');LcdDataWrite('r');LcdDataWrite('k');LcdDataWrite('s');LcdDataWrite('h');LcdDataWrite('o');LcdDataWrite('p');delay(5000);LcdCommandWrite(0x01); // 屏幕清空,光标位置归零delay(10);LcdDataWrite('I');LcdDataWrite(' ');LcdDataWrite('a');LcdDataWrite('m');LcdDataWrite(' ');LcdDataWrite('h');LcdDataWrite('o');LcdDataWrite('n');LcdDataWrite('g');LcdDataWrite('y');LcdDataWrite('i');delay(3000);LcdCommandWrite(0x02); //设置模式为新文字替换老文字,无新文字的地方显示不变。
⽤1602液晶显⽰⾃定义字符1602是⼀款最常⽤也是最便宜的液晶显⽰屏。
最多可以显⽰两⾏标准字符,每⾏最多可以显⽰16个字符。
1602可以显⽰内部常⽤字符(包括阿拉伯数字,英⽂字母⼤⼩写,常⽤符号和⽇⽂假名等),也可以显⽰⾃定义字符(单或多个字符组成的简单汉字,符号,图案等,最多可以产⽣8个⾃定义字符)。
⼀、显⽰常⽤字符。
1602液晶模块内部的字符发⽣存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所⽰,这些字符有:阿拉伯数字、英⽂字母的⼤⼩写、常⽤的符号、和⽇⽂假名等,每⼀个字符都有⼀个固定的代码,⽐如⼤写的英⽂字母“A”的代码是41H,显⽰时模块把地址41H中的点阵字符图形显⽰出来,我们就能看到字母“A”⼗进制⼗六进制 ASCII字符⼗进制⼗六进制 ASCII字符⼗进制⼗六进制 ASCII字符00 00 ⾃定义字符1 56 38 8 96 60 `01 01 ⾃定义字符2 57 39 9 97 61 a02 02 ⾃定义字符3 58 3A : 98 62 b03 03 ⾃定义字符4 59 3B ; 99 63 c04 04 ⾃定义字符5 60 3C < 100 64 d05 05 ⾃定义字符6 61 3D = 101 65 e06 06 ⾃定义字符7 62 3E > 102 66 f07 07 ⾃定义字符8 63 3F ? 103 67 g08 08 ⾃定义字符1 64 40 @ 104 68 h09 09 ⾃定义字符2 65 41 A 105 69 i10 0A ⾃定义字符3 66 42 B 106 6A j11 0B ⾃定义字符4 67 43 C 107 6B k12 0C ⾃定义字符5 68 44 D 108 6C l13 0D ⾃定义字符6 69 45 E 109 6D m14 0E ⾃定义字符7 70 46 F 110 6E n15 0F ⾃定义字符8 71 47 G 111 6F o32 20 空格 72 48 H 112 70 p33 21 ! 73 49 I 113 71 q34 22 " 74 4A J 114 72 r35 23 # 75 4B K 115 73 s36 24 $ 76 4C L 116 74 t37 25 % 77 4D M 117 75 u38 26 & 78 4E N 118 76 v39 27 ' 79 4F O 119 77 w40 28 ( 80 50 P 120 78 x41 29 ) 81 51 Q 121 79 y42 2A * 82 52 R 122 7A z43 2B + 83 53 S 123 7B {44 2C , 84 54 T 124 7C |45 2D - 85 55 U 125 7D }46 2E . 86 56 V 126 7E ~47 2F / 87 57 W48 30 0 88 58 X49 31 1 89 59 Y50 32 2 90 5A Z51 33 3 91 5B [52 34 4 92 5C \53 35 5 93 5D ]54 36 6 94 5E ^55 37 7 95 5F _显⽰操作的过程:⾸先确认显⽰的位置,即在第⼏⾏,第⼏个字符开始显⽰。