ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:312.89KB ,
资源ID:6193097      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6193097.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用键盘开关控制液晶显示器进行十六进制数字显示.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、利用键盘开关控制液晶显示器进行十六进制数字显示 中北大学课 程 设 计 说 明 书学生姓名:张彪学 号:0706024146学 院:电子计算机科学与技术学院专 业:微电子学题 目:利用键盘开关控制液晶显示器进行十六进制数字显示指导教师: 王红亮 职称: 讲师 2010 年 6 月 25 日 目 录 1、课程设计的目的22、课程设计内容和要求22.1、课程设计内容22.2、课程设计要求 23、设计方案及实现情况23.1、设计思路23.2、工作原理及框图 33.3、各模块功能描述 33.4、程序VHDL语言源代码43.5、仿真结果123.6、实验箱验证情况 134、课程设计总结165、参考文献17

2、6、附录:液晶显示器简介17 1、课程设计的目的(1)学习操作数字电路设计实验开发系统,掌握液晶显示模块的工作原理及应用。(2)掌握组合逻辑电路、时序逻辑电路的设计方法。(3)学习掌握可编程器件设计的全过程。2、课程设计的内容和要求2.1、课程设计内容(1)学习掌握键盘开关控制模块、液晶显示模块的工作原理及应用;(2)熟练掌握VHDL编程语言,编写键盘开关控制模块的控制逻辑;(3)仿真所编写的程序,模拟验证所编写的模块功能;(4)下载程序到芯片中,硬件验证所设置的功能,能够实现十六进制数字的显示;(5)整理设计内容,编写设计说明书。2.2、课程设计要求(1)本课程设计说明书。(2)VHDL源程

3、序及内部原理图。(3)该设计可以在实验箱上正常工作并演示。3、设计方案及实现情况3.1、设计思路 本次设计要求利用VHDL语言编写源程序,利用键盘控制液晶显示十六进制数。因此,本次设计的程序利用矩阵键盘模块产生的按键信号来控制OCMJ模块显示0F十六进制数。当程序被下载到FPGA中,首先进行上电自复位,接着检测是否有按键按下,并判读是否是一个干扰,如果确定是0F中的某一按键按下,则程序将检测OCMJ的BUSY信号是否为高,若为高,则继续等待,否则将按键对应的地址送入OCMJ模块的存储单元中,而液晶模块也会置REQ信号为高电平,完成一次握手,同时FPGA向OCMJ发送一个四字的命令,分别是显示8

4、*8ASCII码命令F1、显示坐标值XXYY,以及按键的键值QQ。(注:第一次传送前会先发送一个清零命令F4)若再有按键按下则重复上述过程。3.2、工作原理及框图 本实验采用的是OCMJ中文模块系列液晶显示器,内含 GB 2312 16*16点阵国标一级简体汉字和 ASCII8*8(半高)及8*16(全高)点阵英文字库,用户输入区位码或 ASCII 码即可实现文本显示。 OCMJ中文模块系列液晶显示器也可用作一般的点阵图形显示器之用。提供有位点阵和字节点阵两种图形显示功能,用户可在指定的屏幕位置上以点为单位或以字节为单位进行图形显示。完全兼容一般的点阵模块。OCMJ中文模块系列液晶显示器可以实

5、现汉字、ASCII 码、点阵图形和变化曲线的同屏显示,并可通过字节点阵图形方式造字。引脚功能图和内部结构图分别如下图1所示。 图1 液晶显示器3.3、各功能模块作用描述矩阵模块由四个子电路构成,对应于源程序的四个进程。它们分别是时钟产生电路、键盘扫描电路、键盘消抖电路、以及键盘译码电路。 时钟产生电路时利用自由的计数器产生各种频率的时钟信号。在设计中,用到了系统时钟信号、分频产生的键盘扫描信号、消抖信号。 键盘扫描电路的作用是用来提供键盘扫描信号的电路。扫描时依序扫描八列按键,当扫描信号为000时,扫描0这一列按键.没扫描一列按键,就检查一次是否有按键按下,如果这排有按键按下,就马上停止扫描,

6、立即进行按键编码动作,存储键码,如果没有按键按下,则继续扫描下一列。 键盘消抖电路的使用是因为按键大多是机械式的开关结构,在开关切换的瞬间会在接触点出现来回弹跳的现象,因此必须加上键盘消抖电路,避免误操作信号的发生。 相关信号定义:在本次课程设计中,定义的主要输入输出信号有:液晶模块的请求应答信号REQBUSY(主要用于OCMJ是否决定处理数据上的数据);键盘选通信号SEL/KEY(两者一起构成键盘行、列扫描信号结合后的信号dcc);数据输出信号DOUT。同时还定义了重要的过程信号,其中counter为计数信号,用来确定REQ(本设计中是计3个数后,REQ才为1,否则为0)。addrbegin

7、用来定义存储器首地址,addr1用来存储地址变量(传送一个数据需要送4个字节,分别是写命令字节,横坐标字节,纵坐标字节,写的内容字节);addr用来定义数据地址(由addrbegin和addr1构成);DAT用来记录输入到lcd的数据,counter1用来分频计数(本设计是四分频);counte为键盘扫描辅助信号(类似于连接线的作用);counter2为弹跳消除信号(消抖的方法有三种:加延时程序,需考虑不同器件的延时时间和温度;加触发器,需考虑时钟的同步性;本设计采用计数的方式来消除按键抖动的影响计三十次数之后数据稳定后才开始读入);dcc用来记录键盘行、列扫描信号结合后的信号,DCC1用来记

8、录按下的为哪个键。clk1,test,koff分别为时钟1信号,测试信号,按键消抖信号(test=0时,表示有按键按下,koff=0时,表示按键无抖动影响)。3.4、程序VHDL语言源代码LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_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 do

9、wnto 0) ; key : IN STD_LOGIC_VECTOR (3 downto 0) ; dout: out std_logic_vector(7 downto 0);END shixian;ARCHITECTURE doit OF shixian ISsignal counter :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(

10、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 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_VEC

11、TOR (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 clk=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(clk1e

12、vent 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;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; elsi

13、f(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=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

14、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=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 counter

15、2=00000; koff=1; elsif(clkevent and clk=1) then if(test=0) then counter2=00000; koff=0; elsif(counter211110) then counter2=counter2+1; elsif(counter2=11110) then koff addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin addrbegin add

16、rbegin addrbegin addrbegin null; end case;end process p4;P5: process(clr,busy) begin if(clr=0) then addr=00000000; elsif(busyevent and busy=0) then 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=0000001

17、1) 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(clkevent 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 D

18、AT 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 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

19、.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 字母F 图19 管脚分配图图20 连接图 4、课程设计总结 回顾起此次的利用键盘开关控制液晶显示器进行十六进制数字显示课程设计,至今我仍感慨颇多:即便这是第二次做课程设计,但每次对我来说都是新的,都需要自己去构思,去熟悉以前的知识。本次课程设计所应用的主要由矩阵键盘模块和液晶模块两部分构成,由于需要两个模块共同

20、完成这次试验的,连接的部分显得尤为重要。在源程序中使用的是信号来作为连接的,它的作用就是一个桥梁,就类似于连接线。我查阅了相关矩阵键盘和液晶模块的书籍,了解了设计中所用到的模块的电气性能和参数(主要是液晶模块OCMJ)。在设计的过程中遇到问题,可以说得是困难重重,即使是第二次做的,难免会遇到过各种各样的问题:在仿真程序的时候能顺利通过,但在和机箱连接之后,当有些按下键时,会出现明显的延时,有的甚至不能显示出相应的数字。后来查阅书籍才知道,当按键按下时,会出现抖动,数据有一段不稳定的时期,这就需要我们进行消抖。消抖的方法有三种:加延时程序,需考虑不同器件的延时时间和温度;加触发器,需考虑时钟的同步性;本设计采用计数的方式来消除按键抖动的影响计三十次数之后数据稳定后才开始读入。但有时候电脑的发热等情况也会影响到仿真波形,出现抖动。这次课程设计终于顺利完成了,我了解了液晶显示屏的逻辑和时序控制要求,掌握液晶显示器的工作原理及应用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1