利用键盘开关控制液晶显示器进行十六进制数字显示.doc

上传人:精*** 文档编号:877172 上传时间:2024-03-06 格式:DOC 页数:20 大小:475.60KB
下载 相关 举报
利用键盘开关控制液晶显示器进行十六进制数字显示.doc_第1页
第1页 / 共20页
利用键盘开关控制液晶显示器进行十六进制数字显示.doc_第2页
第2页 / 共20页
利用键盘开关控制液晶显示器进行十六进制数字显示.doc_第3页
第3页 / 共20页
利用键盘开关控制液晶显示器进行十六进制数字显示.doc_第4页
第4页 / 共20页
利用键盘开关控制液晶显示器进行十六进制数字显示.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、 目 录 1、课程设计的目的22、课程设计内容和要求22.1、课程设计内容22.2、课程设计要求 23、设计方案及实现情况23.1、设计思路23.2、工作原理及框图 33.3、各模块功能描述 33.4、程序VHDL语言源代码43.5、仿真结果123.6、实验箱验证情况 134、课程设计总结165、参考文献176、附录:液晶显示器简介17 1、课程设计的目的(1)学习操作数字电路设计实验开发系统,掌握液晶显示模块的工作原理及应用。(2)掌握组合逻辑电路、时序逻辑电路的设计方法。(3)学习掌握可编程器件设计的全过程。2、课程设计的内容和要求2.1、课程设计内容(1)学习掌握键盘开关控制模块、液晶显

2、示模块的工作原理及应用;(2)熟练掌握VHDL编程语言,编写键盘开关控制模块的控制逻辑;(3)仿真所编写的程序,模拟验证所编写的模块功能;(4)下载程序到芯片中,硬件验证所设置的功能,能够实现十六进制数字的显示;(5)整理设计内容,编写设计说明书。2.2、课程设计要求(1)本课程设计说明书。(2)VHDL源程序及内部原理图。(3)该设计可以在实验箱上正常工作并演示。3、设计方案及实现情况3.1、设计思路 本次设计要求利用VHDL语言编写源程序,利用键盘控制液晶显示十六进制数。因此,本次设计的程序利用矩阵键盘模块产生的按键信号来控制OCMJ模块显示0F十六进制数。当程序被下载到FPGA中,首先进

3、行上电自复位,接着检测是否有按键按下,并判读是否是一个干扰,如果确定是0F中的某一按键按下,则程序将检测OCMJ的BUSY信号是否为高,若为高,则继续等待,否则将按键对应的地址送入OCMJ模块的存储单元中,而液晶模块也会置REQ信号为高电平,完成一次握手,同时FPGA向OCMJ发送一个四字的命令,分别是显示8*8ASCII码命令F1、显示坐标值XXYY,以及按键的键值QQ。(注:第一次传送前会先发送一个清零命令F4)若再有按键按下则重复上述过程。3.2、工作原理及框图 本实验采用的是OCMJ中文模块系列液晶显示器,内含 GB 2312 16*16点阵国标一级简体汉字和 ASCII8*8(半高)

4、及8*16(全高)点阵英文字库,用户输入区位码或 ASCII 码即可实现文本显示。 OCMJ中文模块系列液晶显示器也可用作一般的点阵图形显示器之用。提供有位点阵和字节点阵两种图形显示功能,用户可在指定的屏幕位置上以点为单位或以字节为单位进行图形显示。完全兼容一般的点阵模块。OCMJ中文模块系列液晶显示器可以实现汉字、ASCII 码、点阵图形和变化曲线的同屏显示,并可通过字节点阵图形方式造字。引脚功能图和内部结构图分别如下图1所示。 图1 液晶显示器3.3、各功能模块作用描述矩阵模块由四个子电路构成,对应于源程序的四个进程。它们分别是时钟产生电路、键盘扫描电路、键盘消抖电路、以及键盘译码电路。

5、时钟产生电路时利用自由的计数器产生各种频率的时钟信号。在设计中,用到了系统时钟信号、分频产生的键盘扫描信号、消抖信号。 键盘扫描电路的作用是用来提供键盘扫描信号的电路。扫描时依序扫描八列按键,当扫描信号为000时,扫描0这一列按键.没扫描一列按键,就检查一次是否有按键按下,如果这排有按键按下,就马上停止扫描,立即进行按键编码动作,存储键码,如果没有按键按下,则继续扫描下一列。 键盘消抖电路的使用是因为按键大多是机械式的开关结构,在开关切换的瞬间会在接触点出现来回弹跳的现象,因此必须加上键盘消抖电路,避免误操作信号的发生。 相关信号定义:在本次课程设计中,定义的主要输入输出信号有:液晶模块的请求

6、应答信号REQBUSY(主要用于OCMJ是否决定处理数据上的数据);键盘选通信号SEL/KEY(两者一起构成键盘行、列扫描信号结合后的信号dcc);数据输出信号DOUT。同时还定义了重要的过程信号,其中counter为计数信号,用来确定REQ(本设计中是计3个数后,REQ才为1,否则为0)。addrbegin用来定义存储器首地址,addr1用来存储地址变量(传送一个数据需要送4个字节,分别是写命令字节,横坐标字节,纵坐标字节,写的内容字节);addr用来定义数据地址(由addrbegin和addr1构成);DAT用来记录输入到lcd的数据,counter1用来分频计数(本设计是四分频);cou

7、nte为键盘扫描辅助信号(类似于连接线的作用);counter2为弹跳消除信号(消抖的方法有三种:加延时程序,需考虑不同器件的延时时间和温度;加触发器,需考虑时钟的同步性;本设计采用计数的方式来消除按键抖动的影响计三十次数之后数据稳定后才开始读入);dcc用来记录键盘行、列扫描信号结合后的信号,DCC1用来记录按下的为哪个键。clk1,test,koff分别为时钟1信号,测试信号,按键消抖信号(test=0时,表示有按键按下,koff=0时,表示按键无抖动影响)。3.4、程序VHDL语言源代码LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.s

8、td_logic_unsigned.ALL;USE ieee.std_logic_arith.all;ENTITY shixian is PORT(clr,clk,BUSY: IN std_logic; REQ : OUT std_logic; sel : OUT STD_LOGIC_VECTOR (2 downto 0) ; key : IN STD_LOGIC_VECTOR (3 downto 0) ; dout: out std_logic_vector(7 downto 0);END shixian;ARCHITECTURE doit OF shixian ISsignal count

9、er :std_logic_vector(7 downto 0); signal addrbegin:std_logic_vector(7 downto 0); signal addr1: std_logic_vector(7 downto 0); signal addr: std_logic_vector(7 DOWNTO 0); signal DAT : std_logic_vector(7 downto 0); signal counter1 : std_logic_vector(1 downto 0); signal counte : std_logic_vector(2 downto

10、 0); signal counter2 : std_logic_vector(4 downto 0); signal dcc : std_logic_vector(6 downto 0); signal clk1,test,koff: std_logic; signal DCC1:STD_LOGIC_VECTOR (3 DOWNTO 0); BEGINtest=key(3) and key(2) and key(1) and key(0); P0: process(clr,clk) begin if(clr=0) then counter1=00; elsif(clkevent and cl

11、k=1) then counter1=counter1+1; end if;end process P0;clk1=0 when counter1=01 else 1;P1: process(clr,clk1,test) begin if(clr=0) then counte=000; elsif(clk1event and clk1=1) then if(test=0) or (koff=0) then counte=counte; else counte=counte+1; end if; end if;end process P1;sel=counte;dcc=counte & key;

12、P2: process(clk,test) begin if clr=0 then dcc1=0000; elsif(clkevent and clk=0) then if(dcc=0001110) then dcc1=0000; elsif(dcc=0011110) then dcc1=0001; elsif(dcc=0101110) then dcc1=0010; elsif(dcc=0111110) then dcc1=0011; elsif(dcc=1101110) then dcc1=0100; elsif(dcc=1111110) then dcc1=0101; elsif(dcc

13、=0001101) then dcc1=0110; elsif(dcc=0011101) then dcc1=0111; elsif(dcc=1001101) then dcc1=1000; elsif(dcc=1011101) then dcc1=1001; elsif(dcc=1101101) then dcc1=1010; elsif(dcc=1111101) then dcc1=1011; elsif(dcc=0101011) then dcc1=1100; elsif(dcc=0111011) then dcc1=1101; elsif(dcc=1001011) then dcc1=

14、1110; elsif(dcc=1011011) then dcc1=1111; elsif(test=0) then dcc1=1111; end if; end if;end process P2;P3: process(test,clk,clr) begin if(clr=0) then counter2=00000; koff=1; elsif(clkevent and clk=1) then if(test=0) then counter2=00000; koff=0; elsif(counter211110) then counter2=counter2+1; elsif(coun

15、ter2=11110) then koff addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin null; end case;end process p4;P5: process(clr,busy) begin if(clr=0) then addr=00000000; elsif(busyevent and busy=0) th

16、en addr=addrbegin+addr1; end if;end process P5;P6: process(clr,busy) begin if(clr=0) then addr1=00000000; elsif(busyevent and busy=1) then if(addr1=00000011) then addr1=00000000; else addr1=addr1+1; end if; end if;end process P6;P7: process(busy, clk) begin if(busy=1) then counter=00000000; elsif(cl

17、kevent and clk=1) then counter=counter+1; end if;end process P7;dout=DAT;REQ=00000011 else 0; P8:PROCESS(addr) BEGIN CASE addr IS WHEN 00000000 = DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DA

18、T DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT DAT=00000000; END CASE; END PROCESS P8;END doit;3.5、仿真结果 图2 仿真波形3.6、实验箱验证情况 图3 数字0 图4 数字1 图5 数字2 图6 数字3 图7 数字4 图8 数字5 图9 数字6 图10 数字7 图11 数字8 图12 数字9 图13 字母A 图14 字母B 图15 字母C 图16 字母D 图17 字母E 图18 字

19、母F 图19 管脚分配图图20 连接图 4、课程设计总结 回顾起此次的利用键盘开关控制液晶显示器进行十六进制数字显示课程设计,至今我仍感慨颇多:即便这是第二次做课程设计,但每次对我来说都是新的,都需要自己去构思,去熟悉以前的知识。本次课程设计所应用的主要由矩阵键盘模块和液晶模块两部分构成,由于需要两个模块共同完成这次试验的,连接的部分显得尤为重要。在源程序中使用的是信号来作为连接的,它的作用就是一个桥梁,就类似于连接线。我查阅了相关矩阵键盘和液晶模块的书籍,了解了设计中所用到的模块的电气性能和参数(主要是液晶模块OCMJ)。在设计的过程中遇到问题,可以说得是困难重重,即使是第二次做的,难免会遇

20、到过各种各样的问题:在仿真程序的时候能顺利通过,但在和机箱连接之后,当有些按下键时,会出现明显的延时,有的甚至不能显示出相应的数字。后来查阅书籍才知道,当按键按下时,会出现抖动,数据有一段不稳定的时期,这就需要我们进行消抖。消抖的方法有三种:加延时程序,需考虑不同器件的延时时间和温度;加触发器,需考虑时钟的同步性;本设计采用计数的方式来消除按键抖动的影响计三十次数之后数据稳定后才开始读入。但有时候电脑的发热等情况也会影响到仿真波形,出现抖动。这次课程设计终于顺利完成了,我了解了液晶显示屏的逻辑和时序控制要求,掌握液晶显示器的工作原理及应用及键盘控制模块的控制逻辑,并知道如何用它们设计一个基于F

21、PGA的液晶显示驱动电路,同时巩固了自己VHDL知识。但在设计中遇到了很多编程问题,最后在同学、学长以及王红亮老师的辛勤指导下,终于游逆而解。同时,在王红亮老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学、学长和各位指导老师再次表示忠心的感谢!5、参考文献(1)侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计M. 西安:西安电子科技大学出版社,1999(2)求是科技.CPLD/FPGA应用开发技术与工程实践M. 北京:人民邮电出版社,2005(3)罗苑棠.CPLD/FPGA常用模块与综合系统设计实例精讲M. 北京:电子工业出版社,2007(4)基于FPGA的数

22、字系统设计M.西安:西安电子科技大学出版社,20086、附录:液晶显示器简介OCMJ中文模块系列液晶显示器内含 GB 2312 16*16点阵国标一级简体汉字和 ASCII8*8(半高)及8*16(全高)点阵英文字库,用户输入区位码或 ASCII 码即可实现文本显示。 OCMJ中文模块系列液晶显示器也可用作一般的点阵图形显示器之用。提供有位点阵和字节点阵两种图形显示功能,用户可在指定的屏幕位置上以点为单位或以字节为单位进行图形显示。完全兼容一般的点阵模块。 OCMJ中文模块系列液晶显示器可以实现汉字、ASCII 码、点阵图形和变化曲线的同屏显示,并可通过字节点阵图形方式造字。表1:OCMJ2X

23、8(128X32)引脚说明引脚名称方向说明引脚名称方向说明1VLED+I背光源正极(LED+5V)8DB1I数据12VLED-I背光源负极(LED-OV)9DB2I数据23VSSI地10DB3I数据34VDDI(+5V)11DB4I数据45REQI请求信号,高电平有效12DB5I数据56BUSYO应答信号=1:已收到数据并正在处理中 =0:模块空闲,可接收数据13DB6I数据67DB0I数据014DB7I数据7硬件接口接口协议为 请求/应答(REQ/BUSY) 握手方式。应答BUSY 高电平(BUSY =1) 表示 OCMJ 忙于内部处理,不能接收用户命令;BUSY 低电平(BUSY =0)表

24、示 OCMJ 空闲,等待接收用户命令。发送命令到 OCMJ可在BUSY =0 后的任意时刻开始,先把用户命令的当前字节放到数据线上,接着发高电平REQ 信号(REQ =1)通知OCMJ请求处理当前数据线上的命令或数据。OCMJ模块在收到外部的REQ高电平信号后立即读取数据线上的命令或数据,同时将应答线BUSY变为高电平,表明模块已收到数据并正在忙于对此数据的内部处理,此时,用户对模块的写操作已经完成,用户可以撤消数据线上的信号并可作模块显示以外的其他工作,也可不断地查询应答线BUSY是否为低(BUSY =0?),如果BUSY =0,表明模块对用户的写操作已经执行完毕。可以再送下一个数据。如向模

25、块发出一个完整的显示汉字的命令,包括坐标及汉字代码在内共需5个字节,模块在接收到最后一个字节后才开始执行整个命令的内部操作,因此,最后一个字节的应答BUSY 高电平(BUSY =1)持续时间较长,具体的时序图参见 图21,对应的具体时间参数说明参见表-1 图21:对模块写汉字时序图电性能参数1) 表1模块时间参数表编号名称单位值说 明最小值最大值1TruS0.4-数据线上数据稳定时间2TbuS220最大模块响应时间3TrtuS11-最小REQ保持时间4Ts1uS2045最大数据接收时间5Ts2mS-0.130*最大命令指令处理时间*:不同命令所占用的时间各不相同,具体时间在命令表中给出2)表2

26、模块主要电气参数表编号名称单位值说 明2X84X85X101电源工作电压V5552电源电流mA2353输入引脚电压V5554最大输入电压建立时间uS1115最小复位电压持续时间uS666RES端高电平时间6复位内部处理时间mS151515此时模块不接收命令7背光电压V5558标称背光电流mA1201802509外接灰度调节电位器5K20010K用户命令用户通过用户命令调用 OCMJ 系列液晶显示器的各种功能。命令分为操作码及操作数两部分,操作数为十六进制。共分为 3 类10 条。分别是:一)、字符显示命令:1、显示国标汉字;2、显示8X8 ASCII字符;3、显示8X16ASCII字符;二)、图形显示命令:4、显示位点阵;5、显示字节点阵;三)、屏幕控制命令:6、清屏;7、上移;8、下移; 9、左移;10、右移;(以下所示取值范围分别为:2X8、4X8、5X10的取值范围)图22 以上列表为汉字、ASC码显示屏幕坐标(ASC码Y坐标一点阵坐标为准)如显示图形点阵,则以128*64(OCMJ4X8)或128*32(OCMJ2X8)点阵坐标为准,可在屏幕任意位置显示。外型尺寸图图23 OCMJ2X8模块尺寸图- 19 -

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922