LCD1602液晶显示实验要点
- 格式:doc
- 大小:520.05 KB
- 文档页数:15
实验报告实验名称: [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)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液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
LCD1602液晶显示实验报告一、实验目的(1)了解LCD1602的基本原理,掌握其基本的工作流程。
(2)学习用Verilog HDL语言编写LCD1602的控制指令程序,能够在液晶屏上显示出正确的符号。
(3)能够自行改写程序,并实现符号的动态显示。
二、实验设备与器件Quartus II 软件、EP2C8Q208C8实验箱三、实验方案设计1.实验可实现的功能可以实现在LCD1602液晶屏第一行左侧第一位的位置循环显示0~9,并且可以用一个拨码开关BM8实现显示的复位功能。
2.LCD1602基本知识LCD1602液晶能够同时显示16x02即32个字符,模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如“A”。
1602通过D0~D7的8位数据端传输数据和指令。
3.系统工作原理系统的状态转换流程图如图3.1.1所示。
通过状态流程图可以看到,LCD1602液晶屏的状态是不断更新的,依次完成液晶的初始化和0~9的动态显示过程,并且过程可由开关控制。
if (!rst_n)cnt <= 0;elsecnt <= cnt + 1'b1;wire lcd_clk = cnt[23]; // (2^23 / 50M)=0.168s always@(posedge lcd_clk)if(cnt1>=24'd2)beginreg lcd_clk1;lcd_clk1=1;cnt1=0;endelsebegincnt1=cnt1+1; //cnt1对lcd_clk二分频lcd_clk1=0;endalways@(posedge lcd_clk1)beginrow1_val<=8'h30;//设初值case(row1_val) //数字0~9循环显示8'h30: row1_val<=8'h31;8'h31: row1_val<=8'h32;8'h32: row1_val<=8'h33;8'h33: row1_val<=8'h34;8'h34: row1_val<=8'h35;8'h35: row1_val<=8'h36;8'h36: row1_val<=8'h37;8'h37: row1_val<=8'h38;8'h38: row1_val<=8'h39;8'h39: row1_val<=8'h30;default: row1_val<=8'h30;endcaseendparameter IDLE = 8'h00;parameter DISP_SET = 8'h01; // 显示模式设置parameter DISP_OFF = 8'h03; // 显示关闭parameter CLR_SCR = 8'h02; // 显示清屏parameter CURSOR_SET1 = 8'h06; // 显示光标移动设置parameter CURSOR_SET2 = 8'h07; // 显示开及光标设置parameter ROW1_ADDR = 8'h05; // 写第1行起始地址parameter ROW1_0 = 8'h04;reg [5:0] current_state, next_state; // 现态、次态always @ (posedge lcd_clk, negedge rst_n)if(!rst_n) current_state <= IDLE;else current_state <= next_state;//在时钟信号作用期间,次态重复的赋给现态alwaysbegincase(current_state)IDLE : next_state = DISP_SET;DISP_SET : next_state = DISP_OFF;DISP_OFF : next_state = CLR_SCR;CLR_SCR : next_state = CURSOR_SET1;CURSOR_SET1 : next_state = CURSOR_SET2;CURSOR_SET2 : next_state = ROW1_ADDR;ROW1_ADDR : next_state = ROW1_0;ROW1_0 : next_state = ROW1_ADDR;default : next_state = IDLE ;endcaseendalways @ (posedge lcd_clk, negedge rst_n)beginif(!rst_n)beginlcd_rs <= 0;lcd_data <= 8'hxx;endelsebegincase(next_state)IDLE : lcd_rs <= 0;DISP_SET : lcd_rs <= 0;DISP_OFF : lcd_rs <= 0;CLR_SCR : lcd_rs <= 0;CURSOR_SET1 : lcd_rs <= 0;CURSOR_SET2 : lcd_rs <= 0;ROW1_ADDR : lcd_rs <= 0;ROW1_0 : lcd_rs <= 1;endcasecase(next_state)IDLE : lcd_data <= 8'hxx;DISP_SET : lcd_data <= 8'h38;DISP_OFF : lcd_data <= 8'h08;CLR_SCR : lcd_data <= 8'h01;CURSOR_SET1 : lcd_data <= 8'h04;CURSOR_SET2 : lcd_data <= 8'h0C;ROW1_ADDR : lcd_data <= 8'h80;ROW1_0 : lcd_data <= row1_val[127:120];endcaseendendassign lcd_e = lcd_clk; // 数据在时钟高电平被锁存assign lcd_rw = 1'b0; // 只写endmodule5.下载电路及引脚分配设计设计中用实验箱自带的50MHz时钟信号作为输入端,用sel0、sel1、sel2三个使能端选通LCD1602液晶屏,EP2C8Q208C8就会工作在给液晶下命令的状态,使得点阵正常工作,如图3.5.1所示。
实验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液晶显示实验实验目的: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控制液晶显示屏。
这对我们的电子制作和嵌入式系统开发有重要意义。
单片机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的对比度,以适应不同环境下的显示效果要求。
实验八 LCM1602液晶显示实验一、实验目的1.学习单片机C语言和汇编语言的编程方法。
2.了解LCM1602液晶显示模块的功能和使用方法。
3.掌握LCM1602液晶显示程序的编写方法。
二、实验原理1.LCM1602液晶显示模块:LCD(Liquid Crystal Display)是液晶屏,LCM(Liquid Crystal Module)则是液晶模块,它包括有LCD液晶屏、PCB线路板、驱动电路和背光灯等。
LCM1602的主要特性有:1)5V电源供电,低功耗、长寿命、高可靠性;2)内置192种字符;3)具有64个字节的自定义字符RAM;4)背光方式:底部LED。
5)可以显示2行,每行16个英文字符。
LCM1602实物图如右图所示,其采用标准的16脚接口。
第1脚:VSS为电源地,接GND;第2脚:VDD接5V正电源;第3脚:VL为液晶显示器对比度调整端,接10K电位器;第4脚:RS为寄存器选择引脚,高电平时选择数据寄存器,低电平时选择指令寄存器;第5脚:RW为读写信号线引脚,高电平时进行读操作,低电平时进行写操作;第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令;第7~14脚:D0~D7为8位双向数据线;第15脚:BLA背光电源正极(+5V)输入引脚;第16脚:BLK背光电源负极,接GND。
2.硬件模块连线:LCM1602的使能引脚E、读写信号线引脚RW和寄存器选择引脚RS分别通过跳帽开关与单片机P1口低3位(P1.2~P1.0)连接。
单片机P0口8位(P0.7~P0.0)分别与LCM1602 的8个数据输入输出引脚相连,用于传输显示数据。
三、实验内容1.使用LCM1602芯片手册,学习并理解LCM1602液晶显示模块的原理、功能以及使用方法。
2.用C语言或汇编语言编写LCM1602液晶显示程序。
3.调节电位器,观察液晶显示的对比度。
四、实验步骤1.连接本实验用到的硬件模块:单片机系统模块、LCM1602液晶显示模块。
LCD1602液晶显示屏幕时序图分析
这段时间里回头看看所学的单片机知识,发现一个很严重的问题看不懂时序图!研究了一上午说说自己的结果,欢迎各位拍砖和指点!
图7.2.2是1602液晶写的时序,时序图从上到下看、从左到右看。
先说说时序图的规则:
高低电平上面的线是高电平,下面的线是低电平,如果高低交叉可能会产生高电平或低电平。
电平的走向看到低电平和高电平交叉产生电平的变化,
看到红圈花的部分,竖线那里有条横线,代表着这个选用的是高电平。
还有一种情况这种情况是高低电平一起变化,看图中横线标出了电平的变化。
现在我们了解完了规则,现在分析时序图
原图我进行了标号。
时序图从上往下看,从左往右看
1 rs 为高电平 rw 为低电平
2 载入数据db
3 始能e由低电平变为高电平
4和5 始能e由高电平转化为低电平最后数据写完。
这个就是我的理解,如果有错误或不对的地方欢迎指正。
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 液晶显示屏上是否正确显示预设的字符。
1 LCD1602显示总结使用LCD 1602显示内容时首先要初始化LCD1602的显示模式,然后实现对LCD 1602稳定读/写的函数,包括读状态和写内容,对LCD 1602写内容又包括写指令和写数据。
1.1 LCD1602的初始化可编写专门的初始化函数来实现,函数内容可包含如下:(1)程序运行时,等待约15ms的时间让LCD VDD电压达4.5V。
(2)用编写的LCD写指令函数设置LCD的显示模式,如设置LCD1602用16 x 2显示、5x7点库、使用8位数据端口。
对应送往LCD 1602 8个端口的数据为0x38。
(3)设置LCD开显示模式,是否显示光标,光标是否闪烁。
都设置时8个数据端口的数据为0x0f。
(4)设置LCD读写字符后地址指针、光标位置是否往后增1,屏幕移动与否。
地址指针、光标在读写字符后增1,屏幕不移动时8个端口的数据为0x06。
(5)清屏。
清屏指令为0x01.可在LCD写指令模式设置下写入清屏指令。
清屏指令主要是为了下一次的显示不受上一次显示的干扰。
1.2 LCD1602写指令/数据可专门编写函数来实现。
函数内容可包含如下:(1)检测LCD忙信号:LCD的D7位是否为1,如果此位为1则表示LCD处于忙碌状态,需要等到D7状态位为0时方可进入写指令操作。
(2)设置LCD的RS端口为0来表示对LCD进行指令操作,RW端口为0表示往LCD内写东西。
二者构成往LCD内写指令。
延时等待(时间不长,需参考手册中的时间)保证RS,RW 两端口彻底的到达低电平。
(3)将指令置于LCD的D0-D7位,延时等待保证D0-D7电平得到彻底变化。
(4)将LCD的EN使能位置为1,延时等待其位彻底变高后将EN置为1,使得EN端口得到一个负脉冲。
(5)EN端负脉冲产生LCD就开始将D0-D7上面的指令往LCD里面写入,此时延时等待一段时间(如5ms,合适的时间可以不断的调试得来)当要对LCD写数据时,步骤跟写指令时一样,只是需要在以上步骤中将RS设置为高电平,表示对LCD进行数据操作。
电子科技大学中山学院学生实验报告学院:机电工程专业:课程名称:单片机原理与接口技术实验3、芯片时序表:4、LCD数据存储器地址LCD内置了DDRAM,用来寄存待显示的字符代码。
其地址与屏幕的对应关系如下:也就意味着想要在LCD1602的第一行第一列显示一个“A”字符,就要向DDRAM的00H地址写入“A”,但是在实际写入时,还必须将00H加上80H,即0X80+0X00。
以此类推,如果想要在LCD1602的第二行的第二列显示字符内容,则实际写入地址应该为0X80+0X41。
5、1602LCD的一般初始化(复位)过程(1) 延时15ms。
(2) 写指令38H(不检测忙信号)。
(3) 延时5ms。
(4) 写指令38H(不检测忙信号)。
(5) 延时5ms。
(6) 写指令38H(不检测忙信号)。
(7) 以后每次写指令、读/写数据操作均需要检测忙信号。
(8) 写指令38H:显示模式设置。
(9) 写指令08H:显示关闭。
(10) 写指令01H:显示清屏。
(11) 写指令06H:显示光标移动设置。
(12) 写指令0CH:显示开及光标设置。
6、LCD1602与单片机直接连接典型示意图如图8.1所示。
图8.1 LCD1602液晶显示。
三、实验内容和步骤1、用Proteus设计一LCD1602液晶显示接口电路。
参考实验指导书上的参考程序,编写程序,实现字符的静态显示。
显示字符为:第一行:“姓名全拼(居中)”,第二行:“专业全拼+学号(后3位)”。
将LCD显示截图以及相应的程序保存在下方。
#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table[]=" xuzhulin ";uchar code table1[]="zidonghua 031";sbit lcden=P2^7;sbit lcdrw=P2^6;sbit lcdrs=P2^5;uchar num;for(num=0;num<12;num++){write_data(table[num]); //写数据,LCD的第一行显示delay(200);}write_com(0x02); //光标返回write_com(0x80+0x40); //设置数据地址指针,LCD第二行显示for(num=0;num<16;num++){write_data(table1[num]);delay(200);}while(1);}}2、在上一题的基础上,增加两个外部中断,实现不同内容的显示。
实验报告实验名称: [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)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循环变换流程图开始定义输入输出变量及类型lcd 液晶屏初始化是否有按键按下?复位键是否启动?定义a=8'h30;i=0将a 赋值给row1_val 低8位是否是时钟输入上升沿?i<=8a=a+1; i=i+1;结束显示定义字符是是否否否是否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快速变化,无法控制其速度,经过对程序及实验原理的研究,最后完成了任务。