版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中北大学课 程 设 计 说 明 书 学生姓名:金博楠学 号: 0906024139学 院: 电子与计算机科学技术学院专 业: 微电子题 目:利用键盘控制数码管进行十进制数字显示 指导教师: 崔永俊 职称: 副教授 2012 年 6 月 22 日目 录1、课程设计的目的12、课程设计内容和要求12.1、设计内容12.2、设计要求13、设计方案及实现情况13.1、设计思路13.2、工作原理及框图13.3、各模块功能描述33.4、仿真结果93.5、试验箱验
2、证情况104、课程设计总结115、参考文献12- 2 -1、课程设计的目的1)、学习操作数字电路设计实验开发系统,掌握数码管显示模块的工作原理及应用。 2)、掌握组合逻辑电路、时序逻辑电路的设计方法。 3)、学习掌握可编程器件设计的全过程。2、课程设计内容和要求2.1、设计内容1)、学习掌握键盘控制模块、数码管显示模块的工作原理及应用; 2)、熟练掌握VHDL编程语言,编写键盘控制模块的控制逻辑。2.2、设计要求1)、仿真所编写的程序,模拟验证所编写的模块功能; 2)、下载程序到芯片中,硬件验证所设置的功能,能够实现十进制数的显示; 3)、整理设计内容,编写设计说明书。3、设计方案及实现情况3
3、.1、设计思路1)、键盘不断扫描,有按键按下则输出相应信号,并且发出使能信号给处理模块。2)、处理模块对收到的信号进行判断,决定执行什么操作,对数据进行运算。3)、对于数字键需要移位显示,功能键要考虑优先级判断,进行倒计时操作时要能对时钟信号分频自减。4)、专门的程序段用来不断将当前数据各位求出,译码成显示内容输给数据选择模块。5)、数据选择模块根据扫描电路选择信号将各位数字显示出来。3.2、工作原理及框图1、键盘原理 键盘电路网络很像一台微缩的计算机,它拥有自己的处理器和在该处理器之间传输数据的电路,这个电路的很大一部分组成了键矩阵。键矩阵是位于键下方的一种电路网格。在所有的键盘(中,每个电
4、路在每个按键所处的位置点下均处于断开状态。当您按下某个键时,此按键将按下了开关,从而闭合电路,使得少量电流可以通过。开关的机械作用会导致某种振动(称作回弹),处理器可以过滤掉这种振动。如果您按下某键并保持住,则处理器认为您是在反复按下该键。试验箱上的键盘可以看做是8*4的矩阵键盘(虽然外部不是),8行由38译码器选择,所以有外部sel0-2三根线控制扫描。2、键盘中按键的判断 对于键盘中有无键按下的判断是很重要的,具体判断如下:将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与行线相交叉的按键之中。若所有列线均为高电平,则键盘中无键
5、按下。在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与低电平的行线交叉处的按键就是闭合的按键。键盘扫描模块在时钟下不断将行置零,扫描列的状态,判断按键。3、键盘按键对应的编码Sel2-0Kin3-0对应按键0001110000111101010111020111110311011104111111050001101600111017Sel2-0Kin3-0对应按键10011018101110191101011NEXT0001011LAST11
6、11011ENTER1011110ESC1101101A(+)1111101B(-)4、数据处理键盘扫描模块检测到按键按下后,给下级发出使能脉冲,同时将按键信息给数据处理模块。根据按键不同进行不同处理。数字键按下时,要进行移位操作;加减键按下时要进行寄存操作;自加减键按下是要进行加减1操作;清零键按下时要进行全部清零;确认键按下时要进行计算操作或者倒计时操作。这就需要设立一些标志位来判断。计算采用一位BCD形式计算,进借位标志位辅助,这样比用实数计算后转BCD形式的电路简单高效。处于倒计时模式时,引入外部时钟,内部分频后自减一操作。5、多路选择显示四个需要显示的数码管的值始终输入,通过片选决定
7、某一时刻那个值输出。选择信号即为扫描输出信号,因为数码管和键盘是共用一个扫描端。所以当扫描信号选中相应数码管时让对应值输出即可。6、整体电路结构框图图1.原理图框架3.3、各模块功能描述扫描模块:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan ISPORT(clk:IN STD_LOGIC;-输入时钟en:OUT STD_LOGIC;-有键按下时输出使能data:OUT STD_LOGIC_VECTOR(3 DOWN
8、TO 0);-输出按键信息slk:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);-数码管选择端口kin:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-键盘响应输入端口END scan;ARCHITECTURE behave OF scan ISBEGINPROCESS(clk)VARIABLE pslk:STD_LOGIC_VECTOR(2 DOWNTO 0);-扫描变量VARIABLE p:STD_LOGIC_VECTOR(6 DOWNTO 0);-按键信息变量VARIABLE i:INTEGER RANGE 0 TO 7;-扫描循环变量VARIABL
9、E rel:INTEGER RANGE 0 TO 300;-重复按键延时变量VARIABLE int:STD_LOGIC;-按键中断变量BEGINIF(clk'EVENT AND clk='1')THEN-500HZ的时钟信号上升沿触发IF(rel=300)THEN-两次按键产生有效的最短时间,延时避免重复触发rel:=rel;ELSErel:=rel+1;END IF;IF(i<=7)THEN-扫描信号为000111,8次循环扫描slk<=pslk;-赋扫描值int:=kin(0) AND kin(1) AND kin(2) AND kin(3);-按键输
10、入任意位为0即引起中断IF(int='0' AND rel=300)THEN-在中断和最小按键间隔条件满足下对按键内容进行判断FOR j IN 0 TO 20 LOOP-延时(避开抖动阶段)END LOOP;int:=kin(0) AND kin(1) AND kin(2) AND kin(3);IF(int='0')THEN-消抖后再次确认有键按下rel:=0;p:=(pslk-1) & kin;-结合slk和kin的信息判断哪个键按下CASE p IS-判断按键信息WHEN "0001110"=>data<="
11、;0000"-0WHEN "0011110"=>data<="0001"-1WHEN "0101110"=>data<="0010"-2WHEN "0111110"=>data<="0011"-3WHEN "1101110"=>data<="0100"-4WHEN "1111110"=>data<="0101"-5WHEN &q
12、uot;0001101"=>data<="0110"-6WHEN "0011101"=>data<="0111"-7WHEN "1001101"=>data<="1000"-8WHEN "1011101"=>data<="1001"-9WHEN "1101011"=>data<="1010"-10-NEXTWHEN "0001011&qu
13、ot;=>data<="1011"-11-LASTWHEN "1111011"=>data<="1100"-12-ENTERWHEN "1011110"=>data<="1101"-13-ESCWHEN "1101101"=>data<="1110"-14-A(+)WHEN "1111101"=>data<="1111"-15-B(-)WHEN OTHERS
14、=>NULL;END CASE;en<='1'-产生脉冲信号END IF;ELSEen<='0'END IF;pslk:=pslk+1;FOR j IN 0 TO 3 LOOPEND LOOP;i:=i+1;ELSE i:=0;END IF;END IF;END PROCESS;END behave;数据处理模块:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY eightbit
15、 ISPORT(data2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-按键信息输入en2:IN STD_LOGIC;-使能脉冲接收clk2:IN STD_LOGIC;-时钟信号,负责检查输入信号状态,分频倒计时bit1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);bit2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);bit3:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);bit4:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-对应四个需要显示的数码管需要显示的信息END eightbi
16、t;ARCHITECTURE behave OF eightbit ISPROCEDURE q_to_bit-子程序(数值转数码管显示码)(q:IN INTEGER;-需要显示的数值SIGNAL bit0:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)IS-转换出来的数码管显示码BEGINCASE q ISWHEN 0=>bit0<="00111111"WHEN 1=>bit0<="00000110"WHEN 2=>bit0<="01011011"WHEN 3=>bit0&l
17、t;="01001111"WHEN 4=>bit0<="01100110"WHEN 5=>bit0<="01101101"WHEN 6=>bit0<="01111101"WHEN 7=>bit0<="00100111"WHEN 8=>bit0<="01111111"WHEN 9=>bit0<="01101111"WHEN OTHERS=>bit0<="000000
18、00"END CASE;END PROCEDURE q_to_bit;PROCEDURE x_to_y-子程序(四变量赋值)(x1:IN INTEGER;-赋值内容x2:IN INTEGER;x3:IN INTEGER;x4:IN INTEGER;y1:OUT INTEGER;-被赋值变量y2:OUT INTEGER;y3:OUT INTEGER;y4:OUT INTEGER)ISBEGINy1:=x1;y2:=x2;y3:=x3;y4:=x4;END PROCEDURE x_to_y;PROCEDURE add-子程序(十进制一位加法)(a:IN INTEGER;-被加数b:IN
19、INTEGER;-加数c1:IN INTEGER RANGE 0 TO 2;-上级进位z:OUT INTEGER;-和c2:OUT INTEGER RANGE 0 TO 2)IS-下级进位VARIABLE zz:INTEGER;BEGINzz:=a+b+c1;-被加数+加数+进位IF(zz>9)THEN-大于10进位c2:=1;zz:=zz-10;ELSEc2:=0;END IF;z:=zz;END PROCEDURE add;PROCEDURE sub-子程序(十进制一位减法)(a:IN INTEGER;-被减数b:IN INTEGER;-减数c1:IN INTEGER RANGE 0
20、 TO 2;-上级借位z:OUT INTEGER;-差c2:OUT INTEGER RANGE 0 TO 2)IS-下级借位VARIABLE zz:INTEGER;BEGINzz:=a-b-c1;-被减数-减数-借位IF(zz<0)THEN-差小于0借位c2:=1;zz:=zz+10;ELSEc2:=0;END IF;z:=zz;END PROCEDURE sub;BEGINPROCESS(clk2)VARIABLE q1,q2,q3,q4,p1,p2,p3,p4:INTEGER RANGE 0 TO 9:=0;-q为显示的数对应的四个位的值,p和q一一对应,用作加减法时存放被加数,被减
21、数VARIABLE c:INTEGER RANGE 0 TO 2:=0;-进位,借位标志位VARIABLE r,n,a,b,e:BIT:='0'-r为倒计时标志位,n为加减法待操作位,a为加法标志位,b为减法标志位,e为重复屏蔽位VARIABLE count:INTEGER RANGE 0 TO 500:=0;-倒计时分频计数变量BEGINIF(clk2'EVENT AND clk2='1')THEN-时钟信号上升沿触发检查端口状态IF(en2='1' AND e='0')THEN-使能信号有效,且重复屏蔽信号关闭时响应按
22、键信息CASE data2 ISWHEN "1100" =>-按键为“enter”键,执行求结果,倒计时启动暂停功能n:='0'-解除加减法待操作状态IF(a='1')THEN-有加法则进行加法运算a:='0'-加法标志位清零add(q1,p1,0,q1,c);-被加数与加数求和add(q2,p2,c,q2,c);add(q3,p3,c,q3,c);add(q4,p4,c,q4,c);ELSIF (b='1')THEN-有减法则进行减法运算b:='0'-减法标志位清零sub(p1,q1,0
23、,q1,c);-被减数与减数作差sub(p2,q2,c,q2,c);sub(p3,q3,c,q3,c);sub(p4,q4,c,q4,c);ELSIF (r='0')THEN-没有加减法操作又不在倒计时状态则启动倒计时r:='1'ELSE-否则为在倒计时状态,“enter”键功能为暂停r:='0'END IF;WHEN "1110" =>-按键为“A(+)”键,执行加法功能IF (r='0')THEN-不在倒计时状态,则(否则无效)a:='1'-加法标注位置1b:='0'-
24、减法标志位清零n:='1'-待操作位置1x_to_y(q1,q2,q3,q4,p1,p2,p3,p4);-被加数暂存x_to_y(0,0,0,0,q1,q2,q3,q4);-显示清零END IF;WHEN "1111" =>-按键为“B(-)”键,执行减法功能IF (r='0')THEN-不在倒计时状态,则(否则无效)a:='0'-加法标志位清零b:='1'-减法标志位置1n:='1'-待操作位置1x_to_y(q1,q2,q3,q4,p1,p2,p3,p4);-被减数暂存x_to_y(0
25、,0,0,0,q1,q2,q3,q4);-显示清零END IF;WHEN "1010" =>-按键为“next”键,执行自加1功能IF (r='0')THEN-不在倒计时状态,则(否则无效)IF (n='0')THEN-不在加减号刚输入之后(否则无效)add(q1,1,0,q1,c);-加1add(q2,0,c,q2,c);add(q3,0,c,q3,c);add(q4,0,c,q4,c);END IF;END IF;WHEN "1011" =>-按键为“last”键,执行自减1功能IF (r='0
26、39;)THEN-不在倒计时状态,则(否则无效)IF (n='0')THEN-不在加减号刚输入之后(否则无效)sub(q1,1,0,q1,c);-减1sub(q2,0,c,q2,c);sub(q3,0,c,q3,c);sub(q4,0,c,q4,c);END IF;END IF;WHEN "1101" =>-按键为“esc”键,执行清零功能IF (r='0')THEN-不在倒计时状态,则(否则无效)x_to_y(0,0,0,0,p1,p2,p3,p4);-寄存器,标志位清零x_to_y(0,0,0,0,q1,q2,q3,q4);a:=&
27、#39;0'b:='0'n:='0'END IF;WHEN OTHERS =>-按键为“09”,执行多位数据输入,移位显示IF (r='0')THEN-不在倒计时状态,则(否则无效)n:='0'-解除加减法待操作状态q4:=q3;-后一个数码管显示内容给前一个q3:=q2;q2:=q1;q1:=CONV_INTEGER(date2);-第一位读取输入的数字END IF;END CASE;e:='1'-重复屏蔽信号打开,防止重复触发ELSIF (en2='0')THEN-使能脉冲过去后重
28、复屏蔽信号关闭e:='0'END IF;IF(r='1')THEN-在倒计时状态,执行每秒减1倒计时IF(count<500)THEN-计500次一分频count:=count+1;-未到500时累加ELSIF(count=500)THEN-计到500时减1count:=0;-计数清零sub(q1,1,0,q1,c);sub(q2,0,c,q2,c);sub(q3,0,c,q3,c);sub(q4,0,c,q4,c);END IF;END IF;END IF;q_to_bit(q1,bit1);-将各位数值转成数码管显示码给输出q_to_bit(q2,bi
29、t2);q_to_bit(q3,bit3);q_to_bit(q4,bit4);END PROCESS;END behave;显示模块:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY choose ISPORT(slk2:IN STD_LOGIC_VECTOR(2 DOWNTO 0);-扫描信号,用作选择number1:IN STD_LOGIC_VECTOR(7 DOWNTO 0);-各数码管要显示的内容number2:IN
30、STD_LOGIC_VECTOR(7 DOWNTO 0);number3:IN STD_LOGIC_VECTOR(7 DOWNTO 0);number4:IN STD_LOGIC_VECTOR(7 DOWNTO 0);number:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-片选的数码管显示的内容END choose;ARCHITECTURE behave OF choose ISBEGINPROCESS(slk2)BEGINCASE slk2 ISWHEN "000"=>number<=number1;-片选信号对应的多路选择器的选通规则WHEN "001"=>number<=number2;WHEN "010"=>number<=number3;WHEN "011"=>number<=number4;WHEN OTHERS=>number<="00000000"-高四位数码管未用,选到是统一输出全暗END CASE;END PROCESS;END
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 收银培训资料
- 肝升肺降汤治疗慢性肾衰竭升降失常患者的临床疗效观察
- 组合式长周期光纤光栅传感器及其特性研究
- 无人机分群的任务分配与拓扑控制技术研究
- 基于夏克-哈特曼波前检测的无透镜屈光测量技术研究
- 二零二五年私人汽车交易合同范例
- 二零二五年度个人股权抵押贷款合同样本4篇
- 二零二五年度房产买卖合同售后服务保障协议3篇
- 二零二五年度个人写字楼买卖合同标准范本4篇
- 二零二五年度企业适用复杂情况转股协议模板3篇
- 蛋糕店服务员劳动合同
- 土地买卖合同参考模板
- 2025高考数学二轮复习-专题一-微专题10-同构函数问题-专项训练【含答案】
- 新能源行业市场分析报告
- 2025年天津市政建设集团招聘笔试参考题库含答案解析
- 2024-2030年中国烘焙食品行业运营效益及营销前景预测报告
- 岩土工程勘察.课件
- 60岁以上务工免责协议书
- 康复医院患者隐私保护管理制度
- 2022年7月2日江苏事业单位统考《综合知识和能力素质》(管理岗)
- 沈阳理工大学《数》2022-2023学年第一学期期末试卷
评论
0/150
提交评论