利用键盘控制点阵进行十进制加法计算显示.doc_第1页
利用键盘控制点阵进行十进制加法计算显示.doc_第2页
利用键盘控制点阵进行十进制加法计算显示.doc_第3页
利用键盘控制点阵进行十进制加法计算显示.doc_第4页
利用键盘控制点阵进行十进制加法计算显示.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

利用键盘控制点阵进行十进制加法计算显示1、课程设计目的: (1)学习操作数字电路设计实验开发系统,掌握点阵显示模块的工作原理及应用。(2)掌握组合逻辑电路、时序逻辑电路的设计方法。(3)学习掌握可编程器件设计的全过程。2、课程设计内容和要求:2.1、设计内容: 用VHDL语言编写程序,编写键盘控制模块的控制逻辑,仿真所编写的程序,模拟验证所编写的模块功能,下载程序到芯片中,实现键盘控制点阵进行十进制加法计算显示。2.2、设计要求:(1)学习掌握键盘控制模块、点阵显示模块的工作原理及应用;(2)熟练掌握VHDL编程语言,编写键盘控制模块的控制逻辑;(3)仿真所编写的程序,模拟验证所编写的模块功能;(4)下载程序到芯片中,硬件验证所设置的功能,能够实现十进制数字的显示;(5)整理设计内容,编写设计说明书。3、设计方案及实现情况:3.1、设计思路:分三个模块编写程序,首先实现键盘对点阵的控制,然后设计加法计算功能模块,由于点阵显示的局限性,当有进位时设置CO为高电平在数码管上显示出来,在最后一个模块编写显示的1到9以及加号的列字符扫描信号,从而实现键盘控制点阵十进制加法计算的显示。3.2、工作原理及框图: 系统的输入信号有:开关(允许输入及显示)信号RST,系统时钟信号CLK,按键信号(KEYIN3.0)。系统的输出信号有:点阵行驱动输出信号(LEDOUT0.15),点阵列选信号(SEL3.0),进位输出信号CO。系统的工作过程为:在开关信号RST(低电平有效)为低电平时,矩阵键盘不工作,1616点阵没有显示;当开关信号RST为高电平时,整个系统工作,当在矩阵键盘上按下按键后,1616点阵会显示出一个1位十进制数,在进行功能操作时,当按下NEXT键时,点阵上显示“+”号,然后再按下一个十进制数在点阵上显示,最后按下ENTER键进行加法计算,如果结果大于9,则进位输出CO输出高电平,点亮发光二极管,点阵显示个位,否则直接输出结果。LED点阵显示原理:LED点阵式显示器不仅可以显示数字,也可显示所有西文字母和符号,与由单个发光二极管连成的显示器相比,具有焊点少、连线少,所有点在同平面、亮度均匀、外形美观以及具有显示信息丰富、功耗低、体积小、重量轻、超薄等许多其他显示器无法比拟的优点,可以代替数码管、符号管和米字管。如果将多块组合可以构成大屏幕显示屏用于汉字、图形、图表等等的显示,因此被泛用于机场、车站、码头、银行及许多公共场所的指示、说明、广告等场合。1616的LED点阵显示器,是由256个LED组成,共阳极的1616的LED点阵显示器的典型连接方式是:每一行的16个阳极连在一起,由行扫描码锁存器和驱动器的一位控制,总共16行阳极连线由16位分别控制;每一列的16个阴极连在一起,由列扫描码锁存器和驱动器的一位控制,总共16列阴极连线由16位分别控制。 点阵字符的驱动过程:点阵式LED显示器采用逐行扫描式工作。要使点阵显示出一个字符的编程方法是:首先选通第一行;接着,向行码锁存器写入该行的字型码(即列数据)。然后,按相同的方式选通第二行,写第二行的字型码由此类推,直到写完所有行的字型码,完成一个字符的显示。1616点阵显示驱动的行选通信号为一4-16译码器的输出,所以我们在设计点阵控制接口时,其行选通信号输出必须经4-16编码。矩阵式键盘的工作原理:矩阵式键盘又叫行列式键盘,是用I/O口线组成的行、列矩阵结构,在每根行线与列线的交叉处,二线不直接相通而是通过一个按键跨接接通。采用这种矩阵结构只需M根行输出线和N根列输入线,就可连接MN个按键。通过键盘扫描程序的行输出与列输入就可确认按键的状态,再通过键盘处理程序便可识别键值。矩阵式键盘的按键识别方法为行扫描法又称为逐行扫描查询法,是一种最常用的按键识别方法,介绍过程如下:1)判断键盘中有无键按下:将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与行线相交叉的按键之中。若所有列线均为高电平,则键盘中无键按下。 2)判断闭合键所在的位置:在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与低电平的行线交叉处的按键就是闭合的按键。 键盘中的按键可分为数字键和功能键。数字键主要用来输入数字,但从上述内容发现,键盘所产生的输出KIN3KIN0无法拿来直接使用;另外不同的数字按键也担负不同的功能,因此必须由键盘译码电路来规划某个按键的输出形式,以便执行相应的动作。图1 总体框图3.3 、各模块功能描述:键盘扫描模块:实验箱中48矩阵键盘的电路原理图如图2所示图2 矩阵键盘的电路原理图该矩阵键盘的工作原理为:扫描信号为BCOM8.1,在BCOM8.1前已接有一个3-8译码器,3-8译码器的输入为SEL0SEL2。当3-8译码器的输入为000时,即BCOM1为0,其他位为1,我们按下第一排第一键,此时KIN0输出0,KIN1KIN3输出全为1,按下第二排第二键时,KIN1输出0,其他输出1;当3-8译码器输入为001时,即BCOM2为0,我们按下第一排第一键,此时KIN0输出0,KIN1KIN3输出全为1,同理其他键依此类推。键盘上的每个按键就是一个开关,当某键被按下时,该按键的接点会呈现0状态,反之为1。扫描信号为SEL2.0进入3-8译码器,再从译码器输出到键盘,所以第一次只能扫描一排,依此周而复始。若从KIN3.0输出的皆为1时,表示没有按键按下,代表该列没有按键被按下,则不进行按键编码的操作,反之,如果有被按下时,则应将KIN3.0读出的值送到译码电路进行编码。按键位置与数码的关系如下表1所示:表1 按键位置与数码关系表SEL2SEL0KIN3KIN0对应的按键按键功能00011100数字011016数字61011LAST功能键0111CTRL功能键00111101数字111017数字71011STEP功能键0111EMPTY1扩展101011102数字21101REG功能键1011C字母C0111EMPTY2扩展201111103数字31101EXEC功能键1011D字母D0111EMPTY3扩展31001110MEM功能键11018数字81011E字母E0111EMPTY4扩展41011110ESC功能键11019数字91011F字母F0111SHIFT功能键11011104数字41101A字母A1011NEXT功能键0111NONE无定义11111105数字51101B字母B1011ENTER功能键0111NONE无定义在设计该模块时,因为要实现十六进制数的显示,所以在KEYBOARD的模块中的p3进程依据上表描述了按键位置与数码的关系,实现了键盘输入输出的功能。KOUT4.0为键盘扫描后的对应的译码输出;CP为时钟CLK的四分频后的输出;Q1.0对按下的键值进行标志:“00”表示按下09之间的键值、“01”表示按下NEXT按键、“10”表示按下ENTER按键、“11”表示按下其它按键。键盘控制模块如图3所示。图3 键盘控制模块图源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity keyboard isport ( clk ,rst : in std_logic; kin : in std_logic_vector (3 downto 0); cp : out std_logic;q : out std_logic_vector (1 downto 0); sel : out std_logic_vector (3 downto 0); kout : out std_logic_vector (4 downto 0) );end keyboard; architecture keyboard_arc of keyboard is signal counter : std_logic_vector(3 downto 0);signal counter1 : std_logic_vector(1 downto 0); signal counter2 : std_logic_vector(4 downto 0); signal colsel,Y : std_logic_vector(4 downto 0); signal clk1,ktest,kdown: std_logic; signal a : std_logic_vector(3 downto 0); signal b : std_logic_vector(2 downto 0);beginktest=kin(3) and kin(2) and kin(1) and kin(0);p1: process(rst,clk) begin if(rst=0) then counter1=00; elsif(clkevent and clk=1) then counter1=counter1+1; end if; end process p1; clk1=0 when counter1=01 else 1; cp=clk1;p2: process(rst,clk1,ktest) begin if(rst=0) then counter=0000; elsif(clk1event and clk1=1) then if(ktest=0) or (kdown=0) then counter=counter; else counter=counter+1; end if; end if; end process p2; sel=counter; p3:process(clk,ktest) begin a=kin; b case a is when 1110=YYYYnull; end case; when 001= case a is when 1110=YYYYnull; end case; when 010= case a is when 1110=YYYYnull; end case; when 011= case a is when 1110=YYYYnull; end case; when 100= case a is when 1110=YYYYnull; end case; when 101= case a is when 1110=YYYYnull; end case; when 110= case a is when 1110=YYYnull; end case; when 111= case a is when 1110=YYYnull; end case; when others=null; end case; end process p3;p4: process(ktest,clk,rst) begin if(rst=0) then counter2=00000; kdown=1; elsif(clkevent and clk=1) then if(ktest=0) then counter2=00000; kdown=0; elsif(counter211110) then counter2=counter2+1; if(counter2=11100) then kdown=1; end if; end if; end if; end process p4;p5: process(kdown,rst) begin if(rst=0) then colsel=00000; elsif(kdownevent and kdown=1) thenif(Y10000)thenq=00;colsel=Y;elsif(Y=10000)thenq=01;elsif(Y=10001)thenq=10;elsif(Y=11111)thenq=11;end if; end if; end process p5; kout case sel is when 0000 = ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout null; end case; when 00001 = case sel iswhen 0000 = ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout null; end case; when 00010 = case sel is when 0000 = ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout null; end case; when 00011 = case sel is when 0000 = ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout null; end case; when 00100 = case sel is when 0000 = ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout null; end case; when 00101 = case sel is when 0000 = ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout

温馨提示

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

评论

0/150

提交评论