LCD1602液晶显示器简介

合集下载

LCD1602中文资料

LCD1602中文资料

液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。

这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的1602液晶模块来介绍它的编程方法。

1602采用标准的16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。

第15~16脚:空脚1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”1602液晶模块内部的控制器共有11条控制指令,如表2所示,它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。

(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置指令2:光标复位,光标返回到地址00H指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。

lcd1602液晶屏显示原理

lcd1602液晶屏显示原理

lcd1602液晶屏显示原理
LCD1602液晶屏是一种常见的二线多功能液晶显示模块,其
显示原理基于液晶的光电效应。

液晶是一种具有特殊物理性质的有机分子,它可以通过电场的作用改变其自身的光透过性。

LCD1602液晶屏中的液晶材料
被填充在由两片玻璃构成的一个夹层之间,夹层中含有电极。

在液晶屏正常工作时,通过控制外部电源,液晶屏上的液晶分子会根据电场的变化而排列。

液晶分子排列的不同状态会导致光线的折射和透过性发生变化,从而实现显示。

液晶屏通过在电极上加电或去电来创建电场变化,从而控制液晶分子的排列状态。

在液晶屏上,液晶分子的排列状态会导致出现两个主要的极化方向——平行和垂直。

当电场变化时,液晶分子会根据电场的方向来重新排列。

当液晶分子排列平行时,光线不会被液晶分子折射,而垂直排列时,光线会被液晶分子折射。

液晶屏上设有偏振片,其方向与液晶分子排列的状态有关,可通过改变偏振片方向来改变光线的透过性。

为了实现更复杂的显示效果,LCD1602液晶屏采用了多行多
列的方式排列液晶分子,形成像素点的矩阵。

通过控制每个像素点处电极的电场,可以控制液晶分子在不同位置的排列状态,从而实现对每个像素点的控制。

液晶屏上通过电压控制器和驱动芯片控制电场的变化,进而控制液晶分子排列状态的变化。

总之,LCD1602液晶屏通过控制电场的变化来改变液晶分子的排列状态,从而控制光线的折射和透过性,实现图像和文字的显示效果。

通过控制每个像素点处的电场,可以实现复杂的显示效果。

lcd1602中文资料

lcd1602中文资料

LCD1602中文资料1. 简介LCD1602是一种常见的液晶显示模块,它具有两行,每行可以显示16个中文字符或32个英文字母字符。

它广泛应用于数字仪表、电子产品、家电控制、智能家居等领域。

2. 主要特点•显示容量:LCD1602可以同时显示两行,每行可以显示16个中文字符或32个英文字母字符。

•分辨率:每个字符由5 x 8个像素点组成。

•背光控制:可通过控制背光开关来控制显示背光。

•低功耗:LCD1602使用低功耗驱动电路,非常适合电池供电的应用。

•接口简单:LCD1602使用标准的I2C接口进行通信,方便与各种微控制器连接。

3. 硬件连接LCD1602的硬件连接非常简单,只需要将其的VCC引脚连接到3.3V或5V电源,GND引脚连接到地,SDA引脚连接到I2C总线的数据线,SCL引脚连接到I2C总线的时钟线。

以下是连接示意图:SDA ———————————> I2C总线数据线SCL ———————————> I2C总线时钟线VCC ———————————> 3.3V或5V电源GND ———————————> 地4. 软件驱动使用LCD1602显示中文需要相应的软件驱动。

以下是使用Python编写的一个简单的LCD1602驱动代码示例:import smbus2import time# LCD1602的I2C地址ADDRESS =0x27# LCD1602的控制命令LCD_COMMAND =0x80LCD_DATA =0x40def lcd_init():# 初始化LCD1602bus = smbus2.SMBus(1)bus.write_byte(ADDRESS, 0x38) # 设置显示模式为2行,5 x 8个像素点bus.write_byte(ADDRESS, 0x0c) # 打开显示,关闭光标bus.write_byte(ADDRESS, 0x06) # 设置光标移动方向为从左到右bus.write_byte(ADDRESS, 0x01) # 清屏def lcd_write(ch):# 向LCD1602写入字符bus = smbus2.SMBus(1)bus.write_byte(ADDRESS, LCD_DATA)bus.write_byte(ADDRESS, ord(ch))def lcd_display(text):# 在LCD1602上显示文本bus = smbus2.SMBus(1)bus.write_byte(ADDRESS, LCD_COMMAND) for ch in text:bus.write_byte(ADDRESS, ord(ch))# 使用示例lcd_init() # 初始化LCD1602lcd_display('Hello, World!') # 在LCD1602上显示文本5. 示例应用使用LCD1602显示中文可以应用于各种场景,以下是一个使用LCD1602显示温湿度的示例应用:import smbus2import Adafruit_DHT# LCD1602的I2C地址ADDRESS =0x27# LCD1602的控制命令LCD_COMMAND =0x80LCD_DATA =0x40def lcd_init():# 初始化LCD1602bus = smbus2.SMBus(1)bus.write_byte(ADDRESS, 0x38) # 设置显示模式为2行,5 x 8个像素点bus.write_byte(ADDRESS, 0x0c) # 打开显示,关闭光标bus.write_byte(ADDRESS, 0x06) # 设置光标移动方向为从左到右bus.write_byte(ADDRESS, 0x01) # 清屏def lcd_write(ch):# 向LCD1602写入字符bus = smbus2.SMBus(1)bus.write_byte(ADDRESS, LCD_DATA)bus.write_byte(ADDRESS, ord(ch))def lcd_display(text):# 在LCD1602上显示文本bus = smbus2.SMBus(1)bus.write_byte(ADDRESS, LCD_COMMAND)for ch in text:bus.write_byte(ADDRESS, ord(ch))# 使用示例lcd_init() # 初始化LCD1602while True:# 读取温湿度数据humidity, temperature = Adafruit_DHT.read_ret ry(Adafruit_DHT.DHT11, 4)# 在LCD1602上显示温湿度数据lcd_display(f'温度:{temperature}℃湿度:{hu midity}%')time.sleep(2)6. 总结LCD1602是一种常见的液晶显示模块,可以显示中文和英文字符。

lcd1602简介

lcd1602简介

LCD1602简介1. 什么是LCD1602?LCD1602是一种基于液晶显示技术的字符型显示模块,它可以显示16x2个字符。

它广泛应用于嵌入式系统、自动化设备和电子产品等领域,是一款非常常见的显示模块。

2. LCD1602的特性•显示能力强:LCD1602能够显示16列2行共32个字符,每个字符由5x8个像素点组成。

•低功耗:LCD1602的功耗非常低,适合长时间运行的场景。

•用户友好:LCD1602的显示效果清晰,易于阅读,界面简洁直观。

•简易控制:LCD1602的控制方式简单,只需要几条数据线和几个控制信号即可进行基本的显示操作。

3. LCD1602的工作原理LCD1602由一个液晶显示器和一个控制电路板组成。

液晶显示器由16个字符和每个字符5x8的像素点组成,通过液晶分子的电场调整能够控制像素点的亮度。

控制电路板则负责根据用户的指令控制液晶显示器的显示内容。

LCD1602的控制电路采用了并行通信的方式,需要通过几个控制信号和一个数据总线来进行通信。

控制信号包括使能信号(E),读写信号(RW)和数据/命令选择信号(RS)。

数据总线则用于传输数据和命令。

控制LCD1602的步骤大致如下: 1. 发送初始化命令:初始化LCD1602的内部寄存器。

2. 发送显示命令:控制LCD1602显示内容的相关参数,如显示模式、光标设置等。

3. 发送数据:将需要显示的字符数据发送给LCD1602。

4. LCD1602的应用领域由于LCD1602具有简单易用的特点,它被广泛应用于各种嵌入式系统、自动化设备和电子产品中。

一些常见的应用领域包括:•工业自动化:LCD1602可以作为工业设备的人机界面,用于显示设备的状态、参数等信息。

•家电控制:LCD1602可以作为家电设备的显示屏,用于显示时间、温度、湿度等信息。

•智能家居:LCD1602可以作为智能家居系统的控制界面,用于显示和操作系统的各种功能。

•教育培训:LCD1602可以作为教学实验平台的显示模块,用于展示实验结果和相关信息。

LCD1602最详细资料

LCD1602最详细资料

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。

依次类推。

大家看一下控制指令的的8条:DDRAM地址的设定,即可以明白是怎么样的一回事了)1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B (41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”上表中的字符代码与我们PC中的字符代码是基本一致的。

lcd1602

lcd1602

LCD1602简介LCD1602也称为1602液晶模块,是一种常用的液晶显示模块,可以用于显示文字和图形。

它使用1602液晶显示屏和HD44780控制器芯片,具有16列2行的显示,每行可以显示16个字符,每个字符由5x8的点阵组成。

LCD1602可以通过I2C接口与Arduino、树莓派等单片机进行通信,非常方便实用。

LCD1602LCD1602功能•显示文字•显示图形•控制光标位置•控制光标闪烁引脚定义•VSS: 接地•VDD: 5V电源•V0:液晶偏置电压•RS:命令/数据选择•R/W:读/写选择•E:使能•D0-D7:数据线•A: 正面背光供电(可选)•K: 负面背光供电(可选)控制器芯片LCD1602采用HD44780控制器芯片,该芯片包含了液晶屏的显示和控制功能,通过与单片机的通信,可以控制液晶屏的各种显示效果。

常用的控制指令如下:•光标/显示模式设置•清除显示屏•光标归位•光标移动指令•光标显示/隐藏设置•显示开/关控制示例代码以下使用Arduino作为示例,通过I2C接口控制LCD1602显示文字。

```cpp #include <Wire.h> #include <LiquidCrystal_I2C.h>// 设置I2C地址和屏幕尺寸 LiquidCrystal_I2C lcd(0x27, 16, 2);void setup() { // 初始化液晶屏 lcd.begin(); // 打开背光lcd.backlight(); // 显示欢迎消息 lcd.print(。

液晶LCD1602驱动代码

液晶LCD1602驱动代码

液晶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){;}}。

lcd1602液晶显示器功能的基本简述

lcd1602液晶显示器功能的基本简述

lcd1602液晶显示器功能的基本简述摘要:1.液晶显示器简介2.液晶显示器的主要功能3.液晶显示器的应用领域4.液晶显示器的发展趋势5.选购与使用液晶显示器的注意事项正文:一、液晶显示器简介液晶显示器(Liquid Crystal Display,简称LCD)是一种利用液晶材料在电场作用下发生折射率变化来实现图像显示的设备。

它具有薄薄的结构,重量轻,能耗低,分辨率高,显示效果清晰等特点,因此在现代生活中占据着重要地位。

二、液晶显示器的主要功能1.显示功能:液晶显示器可以将图像、文字等信息直观地展示给用户,满足各种场景下的显示需求。

2.触摸功能:部分液晶显示器具备触摸功能,可以实现人与设备的交互,提高操作便利性。

3.通信功能:液晶显示器可通过各种接口与外部设备连接,实现数据传输和信息共享。

4.控制功能:液晶显示器可以对连接的外部设备进行控制,实现设备间的协同工作。

三、液晶显示器的应用领域1.电子产品:如手机、平板、电脑等,液晶显示器是其关键部件,负责显示相关信息。

2.家电产品:如电视、冰箱、洗衣机等,液晶显示器用于显示设备状态和操作界面。

3.工业控制:如PLC(可编程逻辑控制器)、HMI(人机界面)等,液晶显示器用于显示设备参数和运行状态。

4.商业广告:如广告牌、公告栏等,液晶显示器可以用于播放动态广告和宣传信息。

四、液晶显示器的发展趋势1.高分辨率:随着技术的发展,液晶显示器的分辨率不断提高,可以显示更为细腻的图像和文字。

2.低功耗:节能环保是当今社会关注的热点,低功耗液晶显示器将在未来市场上具有更多竞争力。

3.轻薄化:液晶显示器将继续朝着轻薄、便携的方向发展,以满足消费者对移动设备的需求。

4.新型材料应用:如OLED(有机发光二极管)显示技术等,将为液晶显示器带来更多创新可能。

五、选购与使用液晶显示器的注意事项1.选购时要注意分辨率、屏幕尺寸、刷新率等参数,以满足个人需求。

2.使用时要保持显示器清洁,避免长时间暴露在阳光下,以免影响显示效果和使用寿命。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LCD1602液晶显示器简介一概述液晶(Liquid Crystal)是一种高分子材料,因其特殊的物理、化学、光学特性,广泛应用轻薄显示器上。

液晶显示器(Liquid Crystal Display,LCD)的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。

各种型号的液晶通常是按照显示字符的行数或液晶点阵的行、列数来命名。

例如,1602表示每行显示16个字符,一共可以显示两行。

这类液晶通常称为字符型液晶,只能显示ASCII码字符。

12232表示液晶显示画面由122列、32行组成,共有122*32个点来显示各种图形。

用户可以通过程序控制这些点中任何一个点显示或不显示,从而构成各种图形画面。

因此,12232称为图形型液晶。

液晶体积小,功耗低,显示操作简单。

但其有致命的弱点,即使用温度范围很窄。

通用型液晶工作温度为0到+55摄氏度,存储温度为-20到+60摄氏度。

二 LCD16021 1602的外形尺寸(毫米)2 主要技术参数3接口信号说明4 基本操作时序4RAM地址映射图控制器内部带有80B的RAM缓冲区。

对应关系如下图所示。

向图中的00~0F、40~4F地址中的任意处写入显示数据时,液晶可立即显示出来;当写入到10~27或50~67地址时,必须通过移屏指令将他们一移入可显示区域方可正常显示。

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示。

这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。

6状态字说明说明:原则上每次对控制器进行读写操作前,都必须进行读写检测,确保STA7为0。

实际上,由于单片机的操作速度慢于液晶控制器的反应速度,因此可以不进行检测,或只进行简短的延时即可。

7 指令说明1602液晶模块内部的控制器共有11条控制指令。

(1)显示模式设置(2)显示开/关及光标设置(3)数据指针设置(4)其它设置8 控制接口时序说明时序参数读操作时序写操作时序9 初始化过程1)延时15ms2)写指令38H(不检测忙信号)3)延时5ms4)写指令38H(不检测忙信号)5)延时5ms6)写指令38H(不检测忙信号)7)(以后每次写指令、读/写数据操作之前均需检测忙信号) 8)写指令38H:显示模式设置9)写指令08H:显示关闭10)写指令01H:显示清屏11)写指令06H:显示光标移动设置12)写指令0CH:显示开及光标设置三驱动程序举例1 I/O方式驱动程序程序如下:/*========================================================= SMC1602A(16*2)I/O口线接线方式连接线图:---------------------------------------------------|LCM-----51 | LCM-----51 | LCM------51 |---------------------------------------------||DB0-----P1.0 | DB4-----P1.4 | RW-------P2.0 ||DB1-----P1.1 | DB5-----P1.5 | RS-------P2.1 ||DB2-----P1.2 | DB6-----P1.6 | E--------P2.2 ||DB3-----P1.3 | DB7-----P1.7 | VLCD 接1K 电阻到GND|---------------------------------------------------[注:AT89S51 使用12M 晶体震荡器]=========================================================*/ #include <reg51.h>sbit LCM_RW=P2^0; //定义引脚sbit LCM_RS =P2^1;sbit LCM_E =P2^2;#define LCM_Data P1#define Busy 0x80 //用于检测LCM 状态字中的Busy 标识void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char ReadStatusLCM(void); void LCMInit(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 Delayms(unsigned int n);void dellay(unsigned int h);unsigned char code blog_adr[] = {"EDNchina"};unsignedcharcodeemail[]={"*******************"};void main(void){//Delay400Ms(); //启动等待,等LCM 讲入工作状态LCMInit(); //LCM 初始化DisplayListChar(6, 0, blog_adr);DisplayListChar(0, 0, email);while(1);}//写数据RS="H",RW=L,D0~D7=数据,E=高脉冲void WriteDataLCM(unsigned char WDLCM){dellay(100);LCM_E = 0;LCM_RS = 1;LCM_RW = 0;LCM_Data = WDLCM;//dellay(100); //短暂延时,代替检测忙状态//ReadStatusLCM(); //检测忙LCM_E = 1;LCM_E = 0;//写指令RS="L",RW=L,D0~D7=指令码,E=高脉冲void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC 为0 时忽略忙检测{//if (BuysC) ReadStatusLCM(); //根据需要检测忙dellay(100); //短暂延时,代替检测忙状态LCM_E = 0;LCM_RS = 0;LCM_RW = 0;LCM_Data = WCLCM;LCM_E = 1;LCM_E = 0;}//读数据RS="H",RW=H,E=Hunsigned char ReadDataLCM(void){LCM_RS = 1;LCM_RW = 1;LCM_E = 1;return(LCM_Data);}//读状态RS="L",RW=H,E=Hunsigned char ReadStatusLCM(void){LCM_Data = 0xFF;LCM_RS = 0;LCM_RW = 1;LCM_E = 1;//while (LCM_Data & Busy); //检测忙信号return(LCM_Data);}void LCMInit(void) //LCM 初始化{LCM_Data = 0;Delayms(15);WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号Delayms(5);WriteCommandLCM(0x38,0);Delayms(5);WriteCommandLCM(0x38,0);WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); //关闭显示WriteCommandLCM(0x01,1); //显示清屏WriteCommandLCM(0x06,1); // 显示光标移动设置WriteCommandLCM(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; //算出指令码WriteCommandLCM(X, 1); //这里不检测忙信号,发送地址码WriteDataLCM(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]>0x1f) //若到达字串尾则退出{if (X <= 0xF) //X 坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++; X++;}}}//延时程序void Delayms(unsigned int n){unsigned int i,j;for(j=n;j>0;j--)for(i=112;i>0;i--);}/**************************************************** 函数名称: dellay** 入口参数:h(unsigned int型)** 出口参数:无** 功能描述: 短暂延时,使用12MHz晶体,约0.01MS****************************************************/void dellay(unsigned int h){while(h--); //0.01MS}要注意的是在读写程序中,没有用“检测忙”,其实对于1602来说,没有检测忙信号对于实际来说还好,因为常常因为检测忙,而使1602没显示(一直处于忙检测中)。

相关文档
最新文档