LCD1602液晶显示实验_第1页
LCD1602液晶显示实验_第2页
LCD1602液晶显示实验_第3页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验报告实验名称:LLCD1602液晶显示实验姓 名:学 号:指导教师:实验时间:2013年6月15日信息与通信工程学院LCD1602液晶显示实验1. 实验原理i.i基本原理1.1.1 1602 字符型LCD简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1 , 16*2 , 20*2和40*2行等的模块。1.1.2 1602LCD的基本参数及引脚功能1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图1-2所示:一 "'BB0003謝裁B3图1-2

2、 1602LCD尺寸图1.1602LCD主要技术参数:显示容量:16 2个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95 4<35(WXH)mm 2引脚功能说明编符号引脚说明编号符号引脚说明号1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极1602LCD采用标准的14脚(无背光)或表1-3引脚接口说明表16脚(带背光)接口,各引脚接口说明如表1.1.

3、3 1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表1-4所示:表1-4控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM )10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容160

4、2液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)读写操作时序如图1-5和1-6所示:1.1.4 1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以,在执行每条指令之前,一定要确认模块的忙标志为低电平, 表示不忙,否则此指令失效。要显示字符时,要先输入显示字符地址,也就是告诉模块在哪里显示字符, 图1-7是1602的内部显示地址。LCD16字贮行000102030405060708090A0B0C0D0EOF1027404142434445464748494A4B4C4D4E4F5067图1-7 1602LCD内部显示地址

5、例如,第二行第一个字符的地址是 40H,那么是否直接写入 40H就可以将光标定位在第二行第一个 字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是 01000000B( 40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中,要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需 人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM )已经存储了 160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字

6、符都有一个固定的代码, 比如大写的英文字母 “A”的代码是01000001B(41H),显示时模块把地址 41H中的点阵字符图形显示出 来,我们就能看到字母 “ A”因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,编程中还可以用字符型常量或变量赋 值,如“ A ”。1602通过D0D7的8位数据端传输数据和指令。1.1.5 1602LCD的一般初始化(复位)过程延时15mS写指令 38H (不检测忙信号)延时 5mS写指令 38H (不检测忙信号)延时 5mS写指令 38H (不检测忙信号)以后每次写指令、读 /写数据操作均需要检测忙信号写指令 38H :显示模式设置写指令

7、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 任

8、务 3 及其原理任务3:实现液晶屏的某一位完成09的循环变换,并且设置复位键,在循环过程中按下复位键循环可从 0 重新开始。完成本次的实验想法是将“ LCD1602 驱动测试模块”文件中 wire 127:0 row1_val , wire 127:0 row2_val 变量进行改动,将 row1_val 原本赋予的字符替换为一个变量,设定新的时钟,即循环变换的间 隔时间,再通过条件语句控制循环。使能键的控制原理是通过对循环变换的条件进行操作实现的,即当按 键使能时循环开始,反之,则从 0 开始。2. 实验流程图09循环变换流程图3. 实验程序3.1任务1程序程序更改部分:wire 127:0

9、 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

10、(LCD1602_RW);完整程序请参见附件: 13.3 任务 3 程序inputCLOCK_50M,/板载时钟 25MHzinputQ_KEY,/板载按键 RSToutput 7:0 LCD1602_DATA,/ LCD1602数据总线outputLCD1602_E,/ LCD1602使能outputLCD1602_RS,/ LCD1602指令数据选择outputLCD1602_RW,/ LCD1602读写选择outputSEL0,/ LCD1602读写选择outputSEL1,/ LCD1602读写选择outputSEL2/ LCD1602读写选择inputkey ,/使能控制键改动模块:

11、LCD1602驱动测试模块,加重处为修改、添加部分module lcd1602_test();reg 127:0 row1_val;wire 127:0 row2_val = " "/ 将第二行赋值都是空格,实验时显示为空 reg 7:0 a;reg 3:0 i; reg 25:0 cnt;reg en;assign SEL0 = 1'b0; assign SEL1 = 1'b0; assign SEL2 = 1'b1;/ 将原本的 wire 型改为 reg 型/a 变化控制 reg 127:0 row1_/ 分频用/ 使能控制,保证其可变alway

12、s (posedge CLOCK_50M,negedge Q_KEY) if (!Q_KEY) cnt <= 0;else cnt <= cnt + 1'b1;wire lcd_clk = cnt25;/分频模块always (a)beginrow1_val7:0<=a;end/将 a 赋给 row1_val7:0 的低 8 位always (negedge key) beginif (en=0) en<=1;elseen<=0; end/使能控制模块,下降沿有效always (posedge lcd_clk)if (en)if(i<=8)begin

13、a=a+1;i=i+1;endelsebegini=0;a=8'h30;endelsea=8'h30; /例化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.

14、 管脚分配4.1 任务 2 管教分配通过条件控制语句实现09的循环变换aSELOtitputPIN 144senOutputPIN 145SELSOutputPIN t46dkInputPIN 23Afcd-data可OutputPIN 13kd data6OutputPINlllcd datB5|OcitputPIN 10Icd-datm 円OutputPIN 8kddataOutputPIN 6lcd_data2Output&kd_datclOutputPIN,kd-dat曰0OutputPIN .3-olcd eOutputPIN 15efcd_rsOutputPIN 33Icd

15、.rwOutputPIN 30A 心InputPIN .564.2任务3管教分配CLOCK 50WInputPIN 23IX D160 2 DATA7IOutputPIM 13LeD1602 DATA6lOutputPINllLCD1602 DATA5OutputPIN IOL 匸 D160 Z DATA4IOutputP1N 3LCD16O2 DATA3IOutputPIN 6<!>LCD1602 DATA21OutputPIN 5LCD IGO 2 DATA1)OutputPIM 4oLCD1602 Dm0OutputPINLCD1602 EOutputPIN I5LCD 16

16、0 Z_F15OutputPIN 33LCDlGOi.FtV1/OutputPIN 30AQ_KEYInputPIN 56SB dOutputPIN W& SEL1OutputPIN-t45<>5EL2OutputPIN 16*kVInputPm t06v hUnknownPI忡05.实验结果5.1任务1实验结果修改程序后,液晶屏第一行显示"liu wupeng ",第二行显示"2009081206 "5.2任务2实验结果文件合并后,显示内容仍与原始程序相同。5.3任务3实验结果液晶屏第一行最后一位可实现 09的循环变换,拨动复位键,

17、计数从 0重新开始。6.实验心得通过本次实验,我了解了 LCD-1602的构成及使用方法, 能够通过编程显示字符。 在完成课堂任务“实 现某一位09循环变换”时,起初由于没有掌握LCD的工作原理,出现了问题,即09快速变化,无法控制其速度,经过对程序及实验原理的研究,最后完成了任务。FPGA实验是锻炼编程能力、逻辑思维能力的一门很好的课程,我现在所欠缺的便是缜密的思维及查错的能力,还望在以后实验中提高。通过这次实 验,学到了很多东西,体会到了自己实现一个程序功能的小小喜悦,也认识到了自己只是FPGA道路上的新手,还有很多未知的知识需要学习。真正学习的历程需要在课下多下功夫,希望通过这学期的学习

18、自己/ LCD1602 In terfaceoutput reg 7:0 lcd_data,/outputlcd_e,/output reglcd_rs,/outputlcd_rw/丿;/ 0 (8*16-1)=128/ 16bits-> 0123456789ABCDEF <数据总线使能信号指令、数据选择 读、写选择能熟练掌握一些编程的技术,培养良好的思维模式。附件:1module heb ing(in putclk,/ 50MHz时钟in putrst_n./复位信号in put127:0 row1_val,/第一行字符in put127:0 row2_val,/第二行字符/ L

19、CD1602 In terfaceoutputSEL0,/ LCD1602读写选择outputSEL1,/ LCD1602读写选择outputSEL2,/ LCD1602读写选择wire 127:0 row1_val = " liu wupeng "wire 127:0 row2_val = " 2009081206 ”;assig n SEL0 = 1'b0;assig n SEL1 = 1'b0;assign SEL2 = 1'b1;/ +/ 分频模块 开始/ +reg 15:0 cnt; / 计数子 always (posedge c

20、lk, negedge rst_n)if (!rst_n)cnt <= 0;elsecnt <= cnt + 1'b1;/ 500Khz 1MHz 皆可wire lcd_clk = cnt15;/ (2A15 / 50M) = 1.31ms/ / 分频模块 结束/ / +/ LCD1602 驱动模块 开始/ +parameter DISP_SET =8'h01;parameter DISP_OFF =8'h03;parameter CLR_SCR =8'h02;parameter CURSOR_SET1 = 8'h06;parameter C

21、URSOR_SET2 = 8'h07;/ 显示第一行parameter ROW1_ADDR= 8'h05;parameter ROW1_0=8'h04;parameter ROW1_1=8'h0C;parameter ROW1_2=8'h0D;parameter ROW1_3=8'h0F;parameter ROW1_4=8'h0E;parameter ROW1_5=8'h0A;parameter ROW1_6=8'h0B;parameter ROW1_7=8'h09;parameter ROW1_8=8'

22、h08;parameter ROW1_9=8'h18;parameter ROW1_A=8'h19;parameter ROW1_B=8'h1B;parameter ROW1_C=8'h1A;parameter ROW1_D=8'h1E;parameter ROW1_E=8'h1F;parameter ROW1_F=8'h1D;/ 显示第二行parameter ROW2_ADDR= 8'h1C;parameter ROW2_0=8'h14;parameter ROW2_1=8'h15;/ 格雷码编码:共 40 个状

23、态parameter IDLE = 8'h00;/ 写指令,初始化/显示模式设置/显示关闭/显示清屏/显示光标移动设置/显示开及光标设置/写第 1 行起始地址/ 写第 2 行起始地址parameter ROW2_2 = 8'h17;parameter ROW2_3 = 8'h16;parameter ROW2_4 = 8'h12;parameter ROW2_5 = 8'h13;parameter ROW2_6 = 8'h11;parameter ROW2_7 = 8'h10;parameter ROW2_8 = 8'h30;pa

24、rameter ROW2_9 = 8'h31;parameter ROW2_A = 8'h33;parameter ROW2_B = 8'h32;parameter ROW2_C = 8'h36;parameter ROW2_D = 8'h37;parameter ROW2_E = 8'h35;parameter ROW2_F = 8'h34;reg 5:0 current_state, next_state; / 现态、次态 / FSM: always1always (posedge lcd_clk, negedge rst_n)if(

25、!rst_n) current_state <= IDLE;elsecurrent_state <= next_state;/ FSM: always2 always begincase(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_SE

26、T2 : next_state = ROW1_ADDR;/ 显示第一行ROW1_ADDR : next_state = ROW1_0;ROW1_0: next_state =ROW1_1;ROW1_1: next_state =ROW1_2;ROW1_2: next_state =ROW1_3;ROW1_3: next_state =ROW1_4;ROW1_4: next_state =ROW1_5;ROW1_5: next_state =ROW1_6;ROW1_6: next_state =ROW1_7;ROW1_7: next_state =ROW1_8;ROW1_8: next_stat

27、e =ROW1_9;ROW1_9: next_state =ROW1_A;ROW1_A: next_stateROW1_B;ROW1_B: next_stateROW1_CROW1_C: next_state= ROW1_DROW1_D: next_state= ROW1_EROW1_E : next_state = ROW1_F;ROW1_F : next_state = ROW2_ADDR; / 显示第二行ROW2_ADDR : next_state = ROW2_0;ROW2_0: next_state =ROW2_1;ROW2_1: next_state =ROW2_2;ROW2_2:

28、 next_state =ROW2_3;ROW2_3: next_state =ROW2_4;ROW2_4: next_state =ROW2_5;ROW2_5: next_state =ROW2_6;ROW2_6: next_state =ROW2_7;ROW2_7: next_state =ROW2_8;ROW2_8: next_state =ROW2_9;ROW2_9: next_state =ROW2_A;ROW2_A: next_stateROW2_B;ROW2_B: next_stateROW2_C;ROW2_C: next_state= ROW2_D;ROW2_D: next_s

29、tate= ROW2_E;ROW2_E: next_stateROW2_F;ROW2_F: next_state =ROW1_ADDR/ default : next_state = IDLE ;endcase end / FSM: always3always (posedge lcd_clk, negedge rst_n) beginif(!rst_n)begin lcd_rs <= 0;lcd_data <= 8'hxx; end else begin/ 写 lcd_rs case(next_state)IDLE: lcd_rs <= 0;/ 写指令,初始化DIS

30、P_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;ROW1_1: lcd_rs <= 1;ROW1_2: lcd_rs <= 1;ROW1_3: lcd_rs <= 1;ROW1_4: lcd_rs <= 1;ROW1_5: lcd_

31、rs <= 1;ROW1_6: lcd_rs <= 1;ROW1_7: lcd_rs <= 1;ROW1_8: lcd_rs <= 1;ROW1_9: lcd_rs <= 1;ROW1_A: lcdrs <= 1;ROW1_B: lcdrs <= 1;ROW1_C: lcd_rs <= 1;ROW1_D: lcd_rs <= 1;ROW1_E: lcdrs <= 1;ROW1_F: lcd_rs <= 1;/ 写数据,显示第二行ROW2ADDR :lcd_rs <= 0;ROW20: lcdrs<= 1;ROW21:

32、 lcdrs<= 1;ROW22: lcdrs<= 1;ROW23: lcdrs<= 1;ROW24: lcdrs<= 1;ROW25: lcdrs<= 1;ROW26: lcdrs<= 1;ROW27: lcdrs<= 1;ROW28: lcdrs<= 1;ROW29: lcdrs<= 1;ROW2A: lcd_rs <= 1;ROW2B: lcd_rs <= 1;ROW2C: lcd_rs <= 1;ROW2D: lcd_rs <= 1;ROW2E: lcd_rs <= 1;ROW2F: lcd_rs &l

33、t;= 1;endcase/ 写 lcd_data case(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'h06; CURSOR_SET2 : lcd_data <= 8'h0C; / 写数据,显示第一行ROW1_ADDR : lcd_d

34、ata <= 8'h80;ROW1_0 : lcd_data <= row1_val127:120; ROW1_1 : lcd_data <= row1_val119:112;ROW1_2 : lcd_data <= row1_val111:104; ROW1_3 : lcd_data <= row1_val103: 96;ROW1_4 : lcd_data <= row1_val 95: 88; ROW1_5 : lcd_data <= row1_val 87: 80;ROW1_6 : lcd_data <= row1_val 79: 72; ROW1_7 : lcd_data <= ro

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论