LCD1602液晶显示实验
LCD1602液晶显示器
实验11:1602液晶显示屏显示(字符型液晶显示器)字符型液晶显示器用于数字、字母、符号并可显示少量自定义符号。
这类液晶显示器通常有16根接口线,下表是这16根线的定义。
字符型液晶接口说明编号符号引脚说明编号符号引脚说明1 Vss 电源地 9 D2 数据线22 Vdd 电源正 10 D3 数据线33 VL 液晶显示偏压信号 11 D4 数据线44 RS 数据/命令选择端 12 D5 数据线55 R/W 读/ 写选择端 13 D6 数据线66 E 使能信号 14 D7 数据线77 D0 数据线0 15 BLA 背光源正极8 D1 数据线1 16 BLK 背光源负极(本学习板配的内部已经接地)下图是字符型液晶显示器与单片机的接线图。
这用了P0口的8根线作为液晶显示器的数据线,用P20、P21、P22做为3根控制线。
字符型液晶显示器与单片机的接线图字符型液晶显示器的使用,字符型液晶显示器一般采用HD44780芯片做为控制器的。
1.字符型液晶显示器的驱动程序这个驱动程序适用于1602型字符液晶显示器,1) 初始化液晶显示器命令(RSTLCD)设置控制器的工作模式,在程序开始时调用。
参数:无。
2) 清屏命令(CLRLCD)清除屏幕显示的所有内容参数:无3) 光标控制命令(SETCUR)用来控制光标是否显示及是否闪烁参数:1个,用于设定显示器的开关、光标的开关及是否闪烁。
4) 写字符命令(WRITECHAR)在指定位置(行和列)显示指定的字符。
参数:共有3个,即行值、列值及待显示字符,分别存放在XPOS、YPOS和A中。
其中行值与列值均从0开始计数,A中可直接写入字符的符号,编译程序自动转化为该字符的ASCII值。
5) 字符串命令(WRITESTRING)在指定位置显示指定的一串字符。
参数:共有3个,即行值、列值和R0指向待显示字符串的内存首地址,字符串须以0结尾。
如果字符串的长度超过了从该列开始可显示的最多字符数,则其后字符被截断,并不在下行显示出来。
LCD1602液晶显示实验报告
LCD1602液晶显示实验报告实验报告:LCD1602液晶显示实验实验目的:1.了解LCD1602液晶显示的工作原理和基本结构;2.掌握LCD1602液晶显示的驱动控制方法;3.能够通过Arduino控制LCD1602液晶显示。
实验材料:1.Arduino UNO开发板2.LCD1602液晶显示屏3.面包板4.杜邦线实验步骤:1.将Arduino UNO开发板与面包板连接,确保连接正确并牢固;2.将LCD1602液晶显示屏与面包板连接,连接时应注意引脚的对应关系,确保连接正确;3.将杜邦线的一端连接到Arduino UNO开发板的数字引脚上,另一端连接到对应的液晶显示屏引脚上;4.编写Arduino代码,实现液晶显示屏的控制功能;5.将编写好的代码上传到Arduino UNO开发板上,运行程序,观察LCD1602液晶显示屏上的显示结果。
实验结果:通过实验,我们成功实现了对LCD1602液晶显示屏的控制。
在液晶显示屏上可以显示出我们想要的文字、数字或符号。
通过控制液晶显示屏的引脚电平,可以控制液晶显示出不同的字符。
实验总结:通过本次实验,我们了解了LCD1602液晶显示的工作原理和基本结构。
液晶显示屏通过控制引脚电平来控制液晶分子的排列,从而实现文字、数字或符号的显示。
我们还掌握了LCD1602液晶显示的驱动控制方法,通过编写Arduino代码,我们能够实现对液晶显示屏的控制。
在实验中,我们还学习到了Arduino的使用,它是一款开放源代码的电子原型平台,由硬件和软件组成。
通过编写Arduino代码,我们可以控制与Arduino连接的各种外设,包括LCD1602液晶显示屏。
通过本次实验,我们不仅加深了对LCD1602液晶显示的理解,还学会了使用Arduino控制液晶显示屏。
这对我们的电子制作和嵌入式系统开发有重要意义。
LCD1602液晶显示屏
在日常生活中,我们对液晶显示器并不陌生。
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。
在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、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字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
单片机LCD显示实验报告
单片机LCD显示实验报告实验目的:本实验旨在通过使用单片机控制LCD进行显示,掌握单片机与外围设备的交互操作,学习并理解LCD显示原理。
实验器材:1. 单片机开发板2. LCD1602液晶显示屏3. 杜邦线若干4. 电阻若干实验原理:液晶显示原理是在液晶材料施加电场的作用下,通过改变传输光的偏振状态来实现图像显示。
本实验使用的LCD1602是一种16×2的字符型液晶显示模块,其中每个字符由5×8的点阵构成。
实验步骤:1. 连接电路:将LCD1602与单片机开发板通过杜邦线连接。
一般来说,液晶显示屏的引脚布局如下:- VSS: 接地- VDD: 供电(一般为5V)- V0:对比度控制端(通过电位器调节)- RS:数据/指令选择端(通常连接到单片机的I/O口)- RW:读写选择端(连接至地)- E:使能端(通常连接到单片机的I/O口)- D0-D7:数据线(连接到单片机的I/O口)- A:背光灯正极(连接5V)- K:背光灯负极(连接至地)2. 编写程序:根据实验要求,使用相应的单片机编程语言编写程序。
在程序中,需要调用相关的LCD1602命令来实现字符的显示。
3. 烧录程序:使用相应的烧录工具将编写好的程序下载到单片机开发板中。
4. 实验验证:将开发板上电,通过观察LCD1602的显示情况来验证程序的正确性。
实验结果与分析:在本次实验中,我使用单片机控制LCD1602成功实现了字符的显示。
实验结果表明,编写的程序能够正确地将字符显示在液晶屏上,并且显示效果良好。
实验中遇到的问题及解决方法:在实验过程中,我遇到了一些问题,例如LCD1602无显示、乱码或显示异常等情况。
针对这些问题,我采取了以下解决方法:1. 检查接线是否正确:确保LCD1602的引脚与单片机开发板之间的连接准确无误。
2. 检查电源供应:确认LCD1602的电源供应是否正常,电源电压是否稳定。
3. 调整对比度:通过旋转电位器调整LCD1602的对比度,以适应不同环境下的显示效果要求。
LCD1602液晶显示实验
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)mm2.引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表:表1-3引脚接口说明表编符号引脚说明编号符号引脚说明号1 VSS 电源地9 D2 数据2 VDD 电源正极10 D3 数据3 VL 液晶显示偏压11 D4 数据4 RS 数据/命令选择12 D5 数据5 R/W 读/写选择13 D6 数据6 E 使能信号14 D7 数据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 D01 清显示0 0 0 0 0 0 0 0 0 12 光标返回0 0 0 0 0 0 0 0 1 *3 置输入模式0 0 0 0 0 0 0 1 I/D S4 显示开/关控制0 0 0 0 0 0 1 D C B5 光标或字符移位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液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
功能完整的1602LCD时钟实验
功能完整的1602LCD时钟实验摘要本设计基于单⽚机技术原理,以单⽚机芯⽚STC89C52作为核⼼控制器,通过硬件电路的制作以及软件程序的编制,设计制作出⼀个多功能数字时钟系统。
单⽚机扩展的LCD显⽰器⽤来显⽰年、⽉、⽇、时、分、秒计数单元中的值。
整个设计包括两⼤部分: 硬件部分和软件部分,以单⽚机为核⼼, 配以⼀定的外围电路和软件。
硬件是整个系统的基础, 软件部分则要合理、充分地⽀持和使⽤系统的硬件, 从⽽完成系统所要完成的任务。
本设计采⽤LCD液晶显⽰,电路简单使⽤⼴泛。
该时钟系统主要由时钟模块、闹钟模块、液晶显⽰模块、键盘控制模块以及信号提⽰模块组成。
能够准确显⽰时间(显⽰格式为年:⽉:⽇:时时:分分:秒秒,24⼩时制),可随时进⾏时间调整,具有闹钟时间设置、闹钟开/关、⽌闹功能。
设计以硬件软件化为指导思想,充分发挥单⽚机功能,⼤部分功能通过软件编程来实现,电路简单明了,系统稳定性⾼。
单⽚机在这种情况下诞⽣了基于单⽚机电⼦时钟。
关键词:单⽚机 LCD1602 数字钟This design based on the single chip microcomputer principle, taking single-chip chip STC89C52 as core controller, through the hardware circuit and software production procedure formulation, designed and produced a multi-function digital clock system. SCM extended LCD display used to display date and time, minutes and seconds counting unit of values. The whole design includes two parts, hardware and software of, based on singlechip, match with certain peripheral circuit and software. Hardware is based in the whole system, the software part then be reasonable and fully support and use the system hardware, thus completing system to complete the task. This design USES the LCD, simple circuit is widely used. This clock system mainly by the clock module, alarm module, LCD module, keyboard control module and signal hint module. To accurately display the time (display format for years: month: day: always: component: seconds seconds, 24-hour system), available for time to adjust, with alarm time setting, alarm clock on/off, stop joking function. Design with hardware and software into guiding ideology, give full play to the SCM functions, most functions through software programming realize, circuit straightforward, stability of the system is high. SCM in this case was born based on single-chip electronic clock. Keywords: SCM LCD1602 digital clock前⾔数字钟是采⽤数字电路实现对时,分,秒数字显⽰的计时装置,⼴泛⽤于个⼈家庭,车站, 码头办公室等公共场所,成为⼈们⽇常⽣活中不可少的必需品,由于数字集成电路的发展和⽯英晶体振荡器的⼴泛应⽤,使得数字钟的精度,远远超过⽼式钟表, 钟表的数字化给⼈们⽣产⽣活带来了极⼤的⽅便,⽽且⼤⼤地扩展了钟表原先的报时功能。
LCD1602液晶显示完全资料
LCD1602液晶显示完全资料0x18 光标和显示一起向左移动4.显示地址:LCD1602内部RAM显示缓冲区地址的映射图,00~0F、40~4F分别对应LCD1602的上下两行的每一个字符,只要往对应的RAM地址写入要显示字符的ASCII代码,就可以显示出来。
5.读写时序:时序图1602手册中有,这里不引用了。
时序图很重要,编程就是根据时序图设置寄存器,让LCD工作。
二、LCD1602程序编写流程:LCD1602在了解完以上信息后便可以编写,这里我们把程序分为以下几步:1.定义LCD1602管脚,包括RS,R/W,E。
这里定义是指这些管脚分别接在单片机哪些I/O口上。
现举例如下:sbit EN=P3^4;sbit RS=P3^5;sbit RW=P3^6;2.显示初始化,在这一步进行初始化及设置显示模式等操作,包括以下步骤:设置显示方式延时清理显示缓存设置显示模式通常推荐的初始化过程如下:延时15ms写指令38H延时5ms写指令38H延时5ms写指令38H延时5ms注:以上写38H指令可以看情况省略1~2步(以上都不检测忙信号)(以下都要检测忙信号)写指令38H写指令08H 关闭显示写指令01H 显示清屏写指令06H 光标移动设置写指令0cH 显示开及光标设置3.设置显示地址(写显示字符的位置)。
4.写显示字符的数据。
三、LCD1602各子程序模块及主程序编写:现在按照上面编写程序的流程,给出各子程序模块及主程序的例子。
1.头文件,宏定义,定义管脚等:#include<reg52.h>#include <string.h>#define uchar unsigned char#define uint unsigned intsbit EN=P3^4;sbit RS=P3^5;sbit RW=P3^6;uchar code table0[]={"QQ:545699636"}; //此条语句为显示字符串时定义的字符串数组2.LCD1602基本初始化子程序:void LCD1602(){EN=0;RS=1;RW=1;P0=0xff; //这里P0为与LCD D0~D7相连的I/O口}3.读忙子程序:void read_busy(){P0=0xff;RS=0;RW=1;EN=1;while(P0&0x80); //P0和10000000相与,D7位若不为0,停在此处EN=0; //若为0跳出进入下一步;这条语句的作用就是检测D7位} //若忙在此等待,不忙跳出读忙子程序执行读写指令4.写指令写数据子程序:void write(uchar i,bit j){read_busy();P0=i; //其中i=0,写指令;i=1,写数据;RS=j;RW=0;EN=1;EN=0;}5.延时子程序:void delay(uint c) //功能为提供初始化等其他子程序中的延时1xc MS{uint a,b;for(a=0;a<c;a++)for(b=0;b<120;b++);}6.LCD1602初始化子程序:void init() //完全按照要求初始化流程来,中间省略了一步写指令38H{delay(15);write(0x38,0);delay(5);write(0x38,0);write(0x08,0);write(0x01,0);write(0x06,0);write(0x0c,0);}7.显示单个字符子程序:void display_lcd_byte(uchar y,uchar x,uchar z) //Y=0,1(起始行)X=0~15(起始列)Z=想写字符的ASCII码{if(y) //是否显示在第二行(若在第一行Y=0,不进入IF语句,若在第二行,进入IF语句{x+=0x40; //第二行起始地址加上列数为字符显示地址}x+=0x80; //设置数据指针位置write(x,0);write(z,1); //写入数据}8.显示字符串子程序:void display_lcd_text(uchar y,uchar x,uchartable[]) //Y,X同上字符显示,table[]字符串数组{uchar z=0;uchar t;t=strlen(table)+x; // 求得字符串长度加上起始列位置 while(x<t) //功能为LCD显示到字符串最后一个字符,防止字符串{ //没有16个字符,从而不够位产生乱码; display_lcd_byte(y,x,table[z]); //逐位显示数组内字符x++;z++;}}9.主程序:主程序里除了放入初始化程序外就是加入自己编写的显示子程序,根据你所要的不用功能可以编写各种类型的显示子程序,这里不做详细介绍,以下举例为显示一个字符和显示字符串的显示子程序。
51单片机实验报告
51单片机实验报告51单片机是一款非常流行的单片机芯片,被广泛应用于各种电子产品中。
在这篇文章中,我们来探讨一下51单片机的一些实验,以及对于这些实验的理解和体会。
第一部分:实验内容我们进行的51单片机实验主要包括以下几个方面:1. 闪烁LED灯实验:这个实验是入门级别的,主要是为了熟悉51单片机的基本操作和编程方法。
在这个实验中,我们使用了一块51单片机开发板和几个LED灯,通过控制单片机的IO口信号来实现LED灯的闪烁。
2. 按键控制LED实验:这个实验是在闪烁LED实验的基础上进一步延伸的,主要是为了了解如何通过外部按键来控制单片机的输出。
在这个实验中,我们运用了单片机的外部中断和定时器等功能,实现了按键控制LED灯的亮灭。
3. LCD1602显示屏实验:这个实验是为了让我们熟悉如何在51单片机中使用LCD1602液晶显示屏。
在这个实验中,我们使用了I2C总线来与LCD1602进行通信,通过向LCD1602发送命令和数据来实现字符的显示。
4. 电机驱动实验:这个实验是让我们了解如何使用51单片机来控制电机的运转。
在这个实验中,我们运用了单片机的PWM控制功能,通过改变PWM波的占空比来控制电机的转速和方向。
第二部分:实验体会通过这些实验,我对于51单片机有了更深刻的理解和体会。
在这里,我想分享一下我的一些体会。
首先,我认为51单片机具有非常强大的控制能力和灵活性。
通过编写程序,我们可以控制单片机的各种IO口、定时器、PWM输出等功能,从而实现各种复杂的控制任务。
同时,由于其能够直接操作硬件,所以可以快速响应各种外部事件,对实时性要求较高的应用场景有很好的适应性。
其次,我发现在51单片机开发中,良好的软硬件结合非常重要。
由于51单片机具有丰富的外部中断、定时器等功能,因此我们可以很好地利用这些硬件资源来实现各种功能。
同时,在编写程序时,我们也需要充分发挥51单片机的硬件优势,例如使用定时器来完成计时任务,使用外部中断来完成输入检测等等。
LCD1602液晶显示实验实验报告及程序
LCD1602液晶显示实验实验报告及程序一、实验目的本次实验的主要目的是熟悉并掌握 LCD1602 液晶显示屏的工作原理和编程方法,能够成功实现字符在液晶屏幕上的显示和控制。
二、实验原理LCD1602 是一种工业字符型液晶,能够显示 16x2 个字符,即每行16 个字符,共 2 行。
它的工作原理是通过控制液晶分子的偏转来实现字符的显示。
LCD1602 有 16 个引脚,主要引脚功能如下:1、 VSS:接地。
2、 VDD:接电源(通常为+5V)。
3、 V0:对比度调整引脚,通过外接电位器来调节屏幕显示的对比度。
4、 RS:寄存器选择引脚,高电平时选择数据寄存器,低电平时选择指令寄存器。
5、 RW:读写选择引脚,高电平时进行读操作,低电平时进行写操作。
6、 E:使能引脚,下降沿触发。
7、 D0 D7:数据引脚,用于传输数据和指令。
LCD1602 的指令集包括清屏、归位、输入方式设置、显示开关控制、光标或显示移位、功能设置、CGRAM 和 DDRAM 地址设置以及读忙标志和地址等。
三、实验设备与材料1、单片机开发板2、 LCD1602 液晶显示屏3、杜邦线若干4、电脑四、实验步骤1、硬件连接将 LCD1602 的 VSS 引脚接地。
将 VDD 引脚接+5V 电源。
将 V0 引脚通过一个 10K 的电位器接地,用于调节对比度。
将 RS、RW、E 引脚分别连接到单片机的三个 I/O 口。
将 D0 D7 引脚连接到单片机的 8 个 I/O 口。
2、软件编程包含必要的头文件。
定义与 LCD1602 连接的 I/O 口。
编写初始化函数,包括设置显示模式、清屏、输入方式等。
编写写指令函数和写数据函数,用于向LCD1602 发送指令和数据。
编写显示字符串函数,实现字符在屏幕上的显示。
3、编译下载程序使用编译软件对编写的程序进行编译,生成可执行文件。
将可执行文件下载到单片机开发板中。
4、观察实验结果给开发板上电,观察 LCD1602 液晶显示屏上是否正确显示预设的字符。
LCD1602液晶显示实验要点
LCD1602液晶显示实验要点一、液晶显示原理液晶显示屏是一种电场调制显示器件,通过激励电场使液晶分子的排列状态发生变化,从而控制光的透过程度,实现图像显示。
液晶显示器的基本结构是两块平行的玻璃基板夹层液晶,上面由导电涂层构成的液晶单元。
在液晶单元上方有一块透明电极玻璃,根据控制信号排列液晶分子,形成图像。
二、LCD1602液晶显示屏三、实验器材1. Arduino开发板2.LCD1602液晶显示屏3.面包板4.杜邦线等四、实验步骤1. 接线:将LCD1602液晶显示屏与Arduino开发板通过杜邦线连接。
将VCC接到5V电源、GND接到地、SCL接到A5口、SDA接到A4口。
2. 编写程序:打开Arduino开发环境,编写程序代码,实现液晶显示功能。
3. 初始化:使用LiquidCrystal库,编写代码进行液晶显示屏的初始化设置。
4. 显示字符:通过调用lcd.print(函数,将指定字符显示在液晶屏上。
5. 光标控制:调用lcd.setCursor(函数,设置光标所在位置。
6. 清屏:调用lcd.clear(函数,清除液晶屏上的字符。
7. 控制显示:通过调用lcd.noDisplay(和lcd.Display(函数,控制液晶屏的显示和关闭。
8. 自定义字符:通过调用lcd.createChar(函数,创建自定义字符并显示在液晶屏上。
五、实验注意事项1.液晶显示屏的类型应与编程语言库文件匹配。
2.接线时要确保正确连接,以免损坏LCD1602显示屏。
3.初始化液晶显示屏时,要设置液晶屏的列数和行数。
4.控制液晶显示屏时,要注意操作指令的执行顺序,以免出现误操作。
六、实验结果展示通过编写相应的程序,可以实现在液晶显示屏上显示指定字符、自定义字符,以及控制光标的移动和屏幕的清除等功能。
实验成功时,可以在液晶显示屏上看到所期望的字符和效果。
七、实验应用液晶显示屏广泛应用于各种电子设备和仪器仪表,如电子体温计、电子秤、数码相册、电视机等。
制作一个采用LCD1602显示的电子钟
计算机科学与工程系实验报告实验题目:制作一个采用LCD1602显示的电子钟班级:姓名:学号:日期:一、实验目的掌握单片机使用定时器/计数器控制字符型液晶显示器LCD1602的设计与软件编程二、实验要求在LCD上显示当前的时间。
显示格式为“时时:分分:秒秒”。
设有4个功能键k1~k4,功能如下:(1)k1——进入时间修改。
(2)k2——修改小时,按一下k2,当前小时增1。
(3)k3——修改分钟,按一下k3,当前分钟增1。
(4)k4——确认修改完成,电子钟按修改后的时间运行显示。
三、实验要求提交的实验报告中应包括:电路原理图、实验设计思路、C51源程序(含注释语句)、运行效果(含运行截图与说明)、实验小结三、硬件电路原理图的设计四、编程思路及C51源程序编程思路:1、实现当按下K1之后,使中断T0停止计数2、实现当按下K2之后,使小时加一3、实现当按下K3之后,使分钟加一4、实现当按下K4之后,使中断T0恢复计数源程序:#include<reg51.h>#ifndef LCD_CHAR_1602_2005_4_9#define LCD_CHAR_1602_2005_4_9#define uchar unsigned char#define uint unsigned intsbit lcdrs = P2^0;sbit lcdrw = P2^1;sbit lcden = P2^2;void delay(uint z)//延时函数,此处使用晶振为11.0592MHz {uint x,y;for(x=z;x>0;x--){for(y=110;y>0;y--){;}}}void write_com(uchar com) //写入指令数据到lcd{lcdrw=0;lcdrs=0;P3=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date) //写入字符显示数据到lcd{lcdrw=0;lcdrs=1;P3=date;delay(5);lcden=1;delay(5);lcden=0;}void init1602()//1602液晶初始化设定{lcdrw=0;lcden=0;write_com(0x3C);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);}/*void write_string(uchar *pp,uint n)//采用指针的方法输入字符,n为字符数目{int i;for(i=0;i<n;i++)write_data(pp[i]);}*/void write_sfm(uchar add,uchar date)//向指定地址写入数据{uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);}#endif#define uchar unsigned char#define uint unsigned intsbit Key1 = P1^0;sbit Key2 = P1^1;sbit Key3 = P1^2;sbit Key4 = P1^3;uchar int_time;//定义中断次数计数变量uchar second;//秒计数变量uchar minute;//分钟计数变量uchar hour;//小时计数变量uchar code date[]=" H.I.T. CHINA ";//LCD第1行显示的内容uchar code time[]=" TIME 23:59:55 ";//LCD第2行显示的内容uchar second=55,minute=59,hour=23;void clock_init(){uchar i,j;for(i=0;i<16;i++){write_data(date[i]);}write_com(0x80+0x40);for(j=0;j<16;j++){write_data(time[j]);}}void clock_write( uint s, uint m, uint h){write_sfm(0x47,h);write_sfm(0x4a,m);write_sfm(0x4d,s);}void Keyscan1(){if(Key1==0) {delay(10);if(Key1==0) while(!Key1); TR0=0;}if(Key4==0) {delay(10);if(Key4==0) while(!Key4); TR0=1;}if(Key3==0){delay(10);if(Key3==0)while(!Key3);minute++;if(minute==60)minute=0;} if(Key2==0){delay(10);if(Key2==0)while(!Key2);hour++;if(hour==24)hour=0;}}void main(){init1602();//LCD初始化clock_init();//时钟初始化TMOD=0x01;//设置定时器T0为方式1定时EA=1; // 总中断开ET0=1; // 允许T0中断TH0=(65536-46483)/256;//给T0装初值TL0=(65536-46483)%256;TR0=1;int_time=0;//中断次数、秒、分、时单元清0second=55;minute=59;hour=23;while(1){clock_write(second ,minute, hour);Keyscan1();}}void T0_interserve(void) interrupt 1 using 1 //T0中断服务子程序{int_time++;//中断次数加1if(int_time==20) //若中断次数计满20次{int_time=0; //中断次数变量清0second++;//秒计数变量加1}if(second==60)//若计满60s{second=0; //秒计数变量清0minute ++;//分计数变量加1}if(minute==60)//若计满60分{minute=0;//分计数变量清0hour ++;//小时计数变量加1}if(hour==24){hour=0;//小时计数计满24,将小时计数变量清0 }TH0=(65536-46083)/256;//定时器T0重新赋值TL0=(65536-46083)%256;}五、仿真运行效果展示仿真初始状态按下k1键,进入修改模式六、实验小结通过本次实验,我掌握了LCD1602编程的方法,将所学知识运用到实践中,这是一件慢慢的过程,首先要把理论知识理解透彻,然后就是例题看懂,弄懂举一反三。
lcd1602液晶显示模块原理
lcd1602液晶显示模块原理LCD1602液晶显示模块原理引言:LCD1602液晶显示模块是一种常见的显示设备,广泛应用于各种电子产品中。
它采用液晶技术,通过控制液晶分子的排列来实现显示功能。
本文将介绍LCD1602液晶显示模块的工作原理、构造和应用。
一、LCD液晶显示原理液晶显示是利用液晶分子的光学特性来实现显示的。
液晶分子具有双折射特性,即在电场的作用下,液晶分子的折射率发生改变,从而改变光的传播方向和偏振态,从而实现显示效果。
二、LCD1602液晶显示模块的构造LCD1602液晶显示模块由1602液晶屏、驱动芯片、背光源和控制电路组成。
1602液晶屏是由16列2行的字符组成,每个字符由5x8个像素点组成。
驱动芯片负责控制液晶分子的排列,实现显示功能。
背光源提供背光照明,使得显示内容清晰可见。
控制电路则负责将输入的数据和信号转化为液晶屏可以理解的信号。
三、LCD1602液晶显示模块的工作原理1. 数据和信号输入用户通过控制电路将需要显示的数据和命令输入到LCD1602液晶显示模块。
这些数据和命令通过数据总线和控制总线传输到驱动芯片。
2. 数据处理和驱动驱动芯片接收到输入的数据和命令后,根据不同的指令进行相应的处理。
驱动芯片内部有一个字符发生器和一个字符显示RAM,根据接收到的指令和数据来控制液晶分子的排列,从而显示出相应的字符。
3. 图形显示和刷新除了显示字符外,LCD1602液晶显示模块还可以显示简单的图形。
驱动芯片中的字符发生器可以根据用户的要求生成不同的图形,并通过驱动液晶分子的排列方式来显示这些图形。
为了保持显示内容的稳定,LCD1602液晶显示模块需要进行周期性刷新,即不断更新液晶屏上显示的内容。
4. 背光控制LCD1602液晶显示模块的背光源可以通过控制电路来控制其亮度。
用户可以通过调节背光源的电流或使用PWM调光方式来控制背光的亮度和显示效果。
四、LCD1602液晶显示模块的应用LCD1602液晶显示模块广泛应用于各种电子产品中,如电子秤、计时器、温度计、计数器等。
51单片机LCD1602液晶显示程序
LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/******************************************************************************
*
*函数名 * 函数功能
: 初始化 LCD 屏 :无 :无
*******************************************************************************
/
#ifndef
LCD1602_4PINS
void LcdInit()
//LCD 初始化子程序
{ LcdWriteCom(0x38); //开显示
//以下程序都是在 VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是 STC89C52RC,但是在所有的 51 52 单片机上都是通用的。51 只是一个学习的基础 平台,你懂得。 //程序在关键的位置添加了注释。 //用//11111111111111111 代表第一个程序。//2222222222222222222222222 代表第二个程序, 以此类推
for(a=1;a>0;a--); } }
//误差 0us
}
/******************************************************************************
*
*函数名 * 函数功能
: LcdWriteCom : 向 LCD 写入一个字节的命令
LCD1602_E = 0;
跟我学51单片机LCD1602液晶显示模块
1、LCD1602的P1.0-P1.4分别连接到51单片机的P0.0-P0.4; 2、LCD1602的P2.0-P2.7分别连接到51单片机的P2.0-P2.7;
3、LCD1602的VSS和VDD分别连接到51单片机的地线和电源; 4、LCD1602的VEE连接到51单片机的+5V;
5、LCD1602的PSB和REST分别直接接地和+5V。
二、LCD1602的应用
1、智能家居系统
智能家居系统是LCD1602的重要应用领域之一。在智能家居系统中,LCD1602 可以作为人机界面,显示各种信息,如温度、湿度、空气质量、电量等。同时, LCD1602还可以显示各种设备的状态,如灯光、空调、电视等,使用户能够更加 方便地控制各种设备。
2、工业控制系统
1、写入指令:通过单片机的I/O 口发送相应的指令码
2、写入数据:通过单片机的I/O 口发送相应的字符编码
显示控制在基础操作的基础上,我们可以进一步实现LCD1602液晶显示模块 的显示控制。下面通过几个实例来介绍如何利用LCD1602液晶显示模块实现文字 显示的控制。
1、静态显示:将一段文本的字符编码逐个写入LCD1602的控制器中,即可实 现文字的静态显示。例如,我们可以使用循环结构,依次将每个字符编码写入 LCD1602的控制器中。
参考内容二
基本内容
液晶显示模块LCD1602是一种常见的显示设备,广泛应用于各种嵌入式系统 和电子产品中。它具有低功耗、体积小、重量轻、高分辨率和长寿命等优点,因 此在许多领域中得到了广泛的应用。
一、LCD1602的概述
LCD1602是一种字符型液晶显示器,它由160个字符显示区域和8个字符显示 位组成。它支持多种字符集,包括英文字符集和数字字符集等。此外,LCD1602 还具有背光功能,可以在暗环境下清晰地显示字符。
1602字符液晶显示原理+实例详解新手必看
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出来。
LCD1602液晶显示
实验十一、LCD1602液晶显示一、实验目的1、熟悉Protuse仿真软件的使用;2、熟悉利用Keil软件编译程序的过程;3、了解LCD1602液晶显示器的工作原理及学会翻阅芯片的数据手册;4、掌握LCD1602液晶显示器的驱动流程和编程方法。
二、实验内容LCD1602液晶显示器的驱动流程:1、写操作(写指令(RS=0)和写数据(RS=1))1.1、写指令函数write_cmd(u8 cmd)1.2、写数据函数write_data(u8 dat)2、初始化液晶2.1、归位write_cmd(0x02);2.2、设置输入方式write_cmd(0x06);2.3、控制显示开关write_cmd(0x0c);2.4、功能设置write_cmd(0x38);2.5、清屏write_cmd(0x01);3、写显示的数据3.1、选择显示的行write_cmd(0x80);3.2、写显示的数据write_data(‘I’);Protuse 仿真环境的搭建:1、在Pick Devices中查找所需要的器件AT89C51、LM061L、RESPACK-8;同时搭建晶振电路和复位电路。
2、将其按照(图11.1)进行相连;3、将生成的.hex文件导入AT89C51芯片中进行仿真实验。
三、实验过程Keil软件程序:#include <reg52.h> //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned char u8; //对数据类型进行声明定义typedef unsigned int u16;#define DATA P0sbit rs = P2^1; //寄存器选择变量sbit rw = P1^5; //读写操作选择变量sbit en = P1^6; //工作使能变量void delay(u16 num) //延时函数{u16 x,y;for (x=num; x>0; x--)for(y=110; y>0; y--);}void write_cmd (u8 cmd) //写指令函数{rs = 0; //指令寄存器rw = 0; //写操作DATA = cmd;delay(5);en = 1;delay(5);en = 0;}void write_data (u8 dat) //写数据函数{rs = 1; //数据寄存器rw = 0; //写数据DATA = dat;delay(5);en = 1;delay(5);en = 0;}void lcd_init (void) //液晶初始化函数{write_cmd(0x02); //归位write_cmd(0x06); //输入方式,AC自动加1,画面不动write_cmd(0x0c); //显示开关开,光标开,闪烁关write_cmd(0x38); //功能设置,8位数据接口,两行显示,5*7点阵字符write_cmd(0x01); //清屏}int main (void){ u8 *string="I Love You";u8 n=0;u8 dp=0xc0; //第二行初位信息rw = 0;rs = 0;en = 0;lcd_init();write_cmd(0x80); //第一行初位信息write_data('I');write_data(' ');write_data('L');write_data('O');write_data('V');write_data('E');write_data(' ');write_data('D');write_data('P');write_data('J');write_cmd(dp); //第二行while(*string!='\0'){ write_cmd(dp);dp++;write_data(*string);string++;n++;}while(1);}Protuse 仿真:图11.1 LCD液晶显示实验四、实验现象在AT89C51芯片中下载程序后LCD液晶显示屏上显示”I lOVE DPJ”和”I Love You”两行字符。
LCD1602和12864液晶显示
把指令数据送至P0口(LCD数据线DB7~DB0)
LCD使能信号E至高电平后再过两个时钟周期至低电平,产 生一个下降沿信号,往LCD写入指令代码,LCD执行命令
调用延时子程序DELAY
子程序返回
图6.7 写入指令数据到LCD子程序流程图
(4) 字符显示子程序模块设计
表5-2 字符发生存储器字符代码与显示字符关系
4、LCD1602指令表 1602液晶模块内部的控制器共有11条控制指令,如表5-3所示。
表5-3 1602指令表
• 液晶显示模块是一个慢显示器件,所以在执行每条指令之 前一定要确认模块的忙标志为低电平,表示不忙,否则此 指令失效。要显示字符时要先输入显示字符地址,也就是 告诉模块在哪里显示字符,表5-4是DM-1602的内部显示 地址。 表5-4 1602地址表
【项目实践】
图6.8 字符显示子程序流程图
【项目实践】
(5) LCD初始化子程序模块设计 1602字符型LCD的初始化过程为: 延时15ms,写指令38H(不检测忙信号); 延时5ms,写指令38H(不检测忙信号); 延时5ms,写指令38H(不检测忙信号); 以后每次写指令、读/写数据操作均需要检测忙信号; 写指令38H:显示模式设置; 写指令08H:显示关闭; 写指令01H:显示清屏; 写指令06H:显示光标移动设置; 写指令0CH:显示开及光标设置。 根据它的初始化过程,LCD初始化子程序设计流程图如 图6.9所示。
【项目实践】
图6.9 LCD 初始化 子程序 流程图
开始 功能设置命令 调用写入指令到LCD子程序 设定工作方式 调用写入指令到LCD子程序 设置显示状态 调用写入指令到LCD子程序
LCD1602学习——Proteus仿真(显示操作)
LCD1602学习——Proteus仿真(显⽰操作)学习关键:先看懂液晶操作时序图(写操作:写命令、写数据)读状态输⼊RS=L,R/W=H,E=H输出D0—D7=状态字写指令输⼊RS=L,R/W=L,D0—D7=指令输出⽆码,E=⾼脉冲读数据输⼊RS=H,R/W=H,E=H输出D0—D7=数据写数据输⼊RS=H,R/W=L,D0—D7=数据,E=输出⽆⾼脉冲由时序图可知,写操作时(包括写指令、写数据),RS=0;RW=0;再进⾏I/O⼝写操作,然后使能端⼝完成⼀次⾼脉冲(——⾼——低),这是液晶就会执⾏写操作的内容;1602液晶模块内部的控制器共有11条控制指令,如表10-14所⽰:序号指令RS R/W D7D6D5D4D3D2D1D01清显⽰00000000012光标返回000000001*3置输⼊模式00000001I/D S4显⽰开/关控制0000001D C B5光标或字符移位000001S/C R/L**6置功能00001DL N F**7置字符发⽣存贮器地址0001字符发⽣存贮器地址8置数据存贮器地址001显⽰数据存贮器地址9读忙标志或地址01BF计数器地址10要写的数据内容10写数到CGRAM或DDRAM)11读出的数据内容11从CGRAM或DDRAM读数思路:1、控制液晶显⽰输出,需要对其进⾏写数据(写数据前,同样需要先告诉液晶你下⼀步要在哪⾥写,因此写数据前,要写命令先设定数据指针)程序设计⽅式:write_com();//写命令函数,write_date();//写数据函数2、由于要先进⾏初始化,(初始化实际就是对液晶写指令,告诉其⼯作⽅式等)因此初始化函数⾥⾯⾃然就需要调⽤写命令函数write_com();程序结构如下:int init(){ EN = 0; write_com(0X38);//设置16*2显⽰,5*7点阵,8位数据接⼝ write_com(0X0C);//设置开显⽰,不显⽰光标 write_com(0X06);//写⼀个字符时,整屏右移 write_com(0X01);//显⽰清零 return 0;} 主函数部分程序结构:int main(){ init();//调⽤初始化函数 write_com(0x80);//调⽤写指令函数,设置写数据开始指针(第⼀⾏) for(x=0;x<6;x++)//数据写⼊循环程序 { write_date(table[x]); delay(150); } write_com(0x80+0x40); ;//调⽤写指令函数,设置写数据开始指针(第⼆⾏) for(x=0;x<17;x++)//数据写⼊循环程序 { write_date(table1[x]); delay(150); } while(1);return 0;}完整程序如下:1 #include<reg52.h>2int init(); //声明初始化函数3int write_com(unsigned char);//声明写命令函数4int write_date(unsigned char);//声明写数据函数5int delay(unsigned char);//声明延迟函数6 unsigned char x;7 sbit RS = P1^0;8 sbit RW = P1^1;9 sbit EN = P1^2;10 unsigned char code table[]="HELLO!";11 unsigned char code table1[]="MY name is Terry!";1213int main(void)//主函数14 {15 init();16 write_com(0x80);17for(x=0;x<6;x++)18 {19 write_date(table[x]);20 delay(150);21 }22 write_com(0x80+0x40);23for(x=0;x<17;x++)24 {25 write_date(table1[x]);26 delay(150);27 }28while(1);29return0;30 }3132int init()//初始化函数体33 {34 EN = 0;35 write_com(0X38);//设置16*2显⽰,5*7点阵,8位数据接⼝36 write_com(0X0C);//设置开显⽰,不显⽰光标37 write_com(0X06);//写⼀个字符时,整屏右移38 write_com(0X01);//显⽰清零39return0;40 }4142int write_com(unsigned char com)//写命令的函数体43 {44 RS = 0;45 RW = 0;46 P0 = com;47 delay(5);48 EN = 1;49 delay(5);50 EN = 0;51return0;52 }5354int write_date(unsigned char date)//写数据的函数体55 {56 RS = 1;57 RW = 0;58 P0 = date;59 delay(5);60 EN = 1;61 delay(5);62 EN = 0;63return0;64 }6566int delay(unsigned char xms)67 {68 unsigned char x,y;69for(x=xms;x>0;x--)70for(y=110;y>0;y--);71return0;72 }显⽰输出如下:。
LCD液晶显示实验实验报告及程序
LCD液晶显⽰实验实验报告及程序实验三 LCD1602液晶显⽰实验姓名专业学号成绩⼀、实验⽬的1.掌握Keil C51软件与proteus软件联合仿真调试的⽅法;2.掌握LCD1602液晶模块显⽰西⽂的原理及使⽤⽅法;3.掌握⽤8位数据模式驱动LCM1602液晶的C语⾔编程⽅法;4.掌握⽤LCM1602液晶模块显⽰数字的C语⾔编程⽅法。
⼆、实验仪器与设备1.微机⼀台 C51集成开发环境仿真软件三、实验内容1.⽤Proteus设计⼀LCD1602液晶显⽰接⼝电路。
要求利⽤P0⼝接LCD1602液晶的数据端,~做LCD1602液晶的控制信号输⼊端。
~⼝扩展3个功能键K1~K3。
参考电路见后⾯。
2.编写程序,实现字符的静态和动态显⽰。
显⽰字符为第⼀⾏:“1.姓名全拼”,第⼆⾏:“2.专业全拼+学号”。
3.编写程序,利⽤功能键实现字符的垂直滚动和⽔平滚动等效果显⽰。
显⽰字符为:“1.姓名全拼 2.专业全拼+学号 EXP8 DISPLAY ”主程序静态显⽰“My information!”四、实验原理液晶显⽰的原理:采⽤的LCD显⽰屏都是由不同部分组成的分层结构,位于最后⾯的⼀层是由荧光物质组成的可以发射光线的背光层,背光层发出的光线在穿过第⼀层偏振过滤层之后进⼊包含成千上万⽔晶液滴的液晶层,液晶层中的⽔晶液滴都被包含在细⼩的单元格结构中,⼀个或多个单元格构成屏幕上的⼀个像素。
当LCD中的电极产⽣电场时,液晶分⼦就会产⽣扭曲,从⽽将穿越其中的光线进⾏有规则的折射,然后经过第⼆层过滤层的过滤在屏幕上显⽰出来。
1.LCD1602采⽤标准的14引脚(⽆背光)或16引脚(带背光)接⼝,各引脚接⼝说明如表:2.1602液晶模块内部的控制器共有11条控制指令,如表所⽰:3.芯⽚时序表:4.1602LCD的⼀般初始化(复位)过程(1) 延时15ms。
(2) 写指令38H(不检测忙信号)。
(3) 延时5ms。
(4) 写指令38H(不检测忙信号)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告信息与通信工程学院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)mm2.引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表:表1-3引脚接口说明表编符号引脚说明编号符号引脚说明号1 VSS 电源地9 D2 数据2 VDD 电源正极10 D3 数据3 VL 液晶显示偏压11 D4 数据4 RS 数据/命令选择12 D5 数据5 R/W 读/写选择13 D6 数据6 E 使能信号14 D7 数据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 D01 清显示0 0 0 0 0 0 0 0 0 12 光标返回0 0 0 0 0 0 0 0 1 *3 置输入模式0 0 0 0 0 0 0 1 I/D S4 显示开/关控制0 0 0 0 0 0 1 D C B5 光标或字符移位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 读操作时序图1-6 写操作时序1.1.4 1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以,在执行每条指令之前,一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时,要先输入显示字符地址,也就是告诉模块在哪里显示字符,图1-7是1602的内部显示地址。
图1-7 1602LCD内部显示地址例如,第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
在对液晶模块的初始化中,要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。
每次输入指令前都要判断液晶模块是否处于忙的状态。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,编程中还可以用字符型常量或变量赋值,如“A”。
1602通过D0~D7的8位数据端传输数据和指令。
1.1.5 1602LCD的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置1.2 任务1及其原理任务1:更改lcd上显示的字符。
通过更改wire [127:0] row1_val,wire [127:0] row2_val的赋值即可,注意保证“”内的字符数包括空格共16位。
1.3 任务2及其原理任务2:将“LCD1602驱动模块”文件与“LCD1602驱动测试模块”文件合并成为一个verilog文件。
首先,新建一个顶层VerilogHDL文件,将两个文件的输入,内容合并,调试新的模块,然后将管脚连接在一起,从而完成合并。
1.4 任务3及其原理任务3:实现液晶屏的某一位完成0~9的循环变换,并且设置复位键,在循环过程中按下复位键循环可从0重新开始。
完成本次的实验想法是将“LCD1602驱动测试模块”文件中wire [127:0] row1_val,wire [127:0] row2_val变量进行改动,将row1_val原本赋予的字符替换为一个变量,设定新的时钟,即循环变换的间隔时间,再通过条件语句控制循环。
使能键的控制原理是通过对循环变换的条件进行操作实现的,即当按键使能时循环开始,反之,则从0开始。
2.实验流程图0~9循环变换流程图3.实验程序3.1 任务1程序程序更改部分:wire [127:0] row1_val = " liu wupeng ";wire [127:0] row2_val = " 2009081206 ";3.2 任务2程序将测试模块中的驱动部分,两个文件的对应命名只留其一,合并两文件,即以下部分// 例化LCD1602驱动lcd1602_drive u0(.clk(CLOCK_50M),.rst_n(Q_KEY),.row1_val(row1_val),.row2_val(row2_val),.lcd_data(LCD1602_DATA),.lcd_e(LCD1602_E),.lcd_rs(LCD1602_RS),.lcd_rw(LCD1602_RW));完整程序请参见附件:13.3 任务3程序改动模块:LCD1602驱动测试模块,加重处为修改、添加部分module lcd1602_test(input CLOCK_50M, // 板载时钟25MHzinput Q_KEY, // 板载按键RSToutput [7:0] LCD1602_DATA, // LCD1602数据总线output LCD1602_E, // LCD1602使能output LCD1602_RS, // LCD1602指令数据选择output LCD1602_RW, // LCD1602读写选择output SEL0, // LCD1602读写选择output SEL1, // LCD1602读写选择output SEL2 // LCD1602读写选择input key, //使能控制键);reg [127:0] row1_val; //将原本的wire型改为reg型,保证其可变wire [127:0] row2_val = " ";//将第二行赋值都是空格,实验时显示为空reg [7:0] a; //a变化控制reg [127:0] row1_valreg [3:0] i;reg [25:0] cnt; //分频用reg en; //使能控制assign SEL0 = 1'b0;assign SEL1 = 1'b0;assign SEL2 = 1'b1;always @ (posedge CLOCK_50M,negedge Q_KEY)if (!Q_KEY) cnt <= 0;else cnt <= cnt + 1'b1;wire lcd_clk = cnt[25]; //分频模块always @(a)beginrow1_val[7:0]<=a;end //将a赋给 row1_val[7:0]的低8位always @(negedge key)beginif (en==0) en<=1;elseen<=0;end //使能控制模块,下降沿有效always @(posedge lcd_clk)if (en)if(i<=8)begina=a+1;i=i+1;endelsebegini=0;a=8'h30;endelsea=8'h30; //通过条件控制语句实现0~9的循环变换// 例化LCD1602驱动lcd1602_drive u0(.clk(CLOCK_50M),.rst_n(Q_KEY),// LCD1602 Input Value.row1_val(row1_val),.row2_val(row2_val),// LCD1602 Interface.lcd_data(LCD1602_DATA),.lcd_e(LCD1602_E),.lcd_rs(LCD1602_RS),.lcd_rw(LCD1602_RW));endmodule4.管脚分配4.1 任务2管教分配4.2 任务3管教分配5.实验结果5.1 任务1实验结果修改程序后,液晶屏第一行显示" liu wupeng ",第二行显示" 2009081206 "。
5.2 任务2实验结果文件合并后,显示内容仍与原始程序相同。
5.3 任务3实验结果液晶屏第一行最后一位可实现0~9的循环变换,拨动复位键,计数从0重新开始。
6.实验心得通过本次实验,我了解了LCD-1602的构成及使用方法,能够通过编程显示字符。
在完成课堂任务“实现某一位0~9循环变换”时,起初由于没有掌握LCD的工作原理,出现了问题,即0~9快速变化,无法控制其速度,经过对程序及实验原理的研究,最后完成了任务。
FPGA实验是锻炼编程能力、逻辑思维能力的一门很好的课程,我现在所欠缺的便是缜密的思维及查错的能力,还望在以后实验中提高。
通过这次实验,学到了很多东西,体会到了自己实现一个程序功能的小小喜悦,也认识到了自己只是FPGA道路上的新手,还有很多未知的知识需要学习。
真正学习的历程需要在课下多下功夫,希望通过这学期的学习自己能熟练掌握一些编程的技术,培养良好的思维模式。