1、 课 程 设 计课程名称 eda技术 课题名称 键盘扫描与数码管显示电路设计 专 业 班 级 学 号 姓 名 指导教师 2013年 6月5日 湖南工程学院课程设计任务书课程名称:eda技术 题目:键盘扫描与数码管显示电路设计 专业班级: 学号: 学生姓名: 指导老师: 审 批:任务书下达日期 2013年 5月27日设计完成日期 2013年 6月 5日 设计内容与设计要求一 设计内容:1 设计并调试键盘扫描与数码管显示电路;2 键盘为3*4,数码管为7段8位;3 以数字形式显示键盘12个输入键的识别;完成1位数的加减运算。4 外设置控制开关和防抖动电路;5 功能扩展(自选);完成汉字显示或某外部
2、硬件对象的控制 二 设计要求:1.设计思路清晰,整体设计给出框图,提供顶层电路图;2.应用vhdl或verilog完成各次级模块设计,给出具体设计程序;3.完成设计仿真和程序下载; 4.写出设计报告 主要设计条件1 提供EDA实验室;2 提供EL实验箱和CPLD芯片3 提供ALTERA公司的quartus设计软件; 说明书格式1 课程设计封面;2 任务书;3 说明书目录;4 设计总体思路;5 单元电路设计程序;6 设计仿真;7 编程下载;8 总结与体会;9 附录;10 参考文献。 进 度 安 排5月27日31日总体电路设计和子模块设计 6月3日4日 软件仿真和联线。6月4日5日 电路调试6月6
3、日 写设计报告,打印相关图纸,6月7日 答辩; 参 考 文 献EDA技术实用教程VHDL版(第四版)潘松 黄继业 编著 科学出版社EDA技术与实验 李国洪 胡辉 沈明山 等编著 机械工业出版社百度文库目录一 总体方案设计分析61.1 基本设计思路61.2 总体框图6二 子模块程序模块分析72.1 键盘扫描程序设计与分析72.1.1 基本设计思路72.1.2 键盘扫描、编码输出模块72.2 消抖模块功能程序与分析82.2.1 消抖模块基本设计思路82.2.2 消抖模块82.3 加减功能模块程序与分析82.3.1 功能模块基本设计思路82.3.2 加减功能模块82.4 数码管显示模块92.4.1
4、显示模块基本设计思路92.4.2数码管显示模块92.5 时间模块92.5.1 时间模块的基本设计思路92.5.2 时间模块10三 子模块仿真图103.1 键盘列扫描模块仿真103.2 键盘行扫描模块仿真113.3 消抖电路仿真图113.4 加减法电路仿真图123.5 数码管电路仿真图123.6 总电路仿真波形图13四 程序下载13五 心得体会14附录A:系统硬件原理图14附录B:程序清单15电气信息学院课程设计评分表31一 总体方案设计分析1.1 基本设计思路.键盘扫描及显示总体上可分为三大模块:键盘扫面模块、按键消抖模块、编码显示模块,本次课程设计我在其中添加了附加的加减运算模块和时钟模块。
5、键盘扫描模块是利用34矩阵键盘,扫描编码然后经过按键消抖模块以提高按键的准确性,之后将数据送到加减运算模块进行一位数的加减并编程相对应的四位码,最后送到显示模块接七段共阴数码管。附加时钟功能可以实现时分秒的计时,并且可以调节时间,通过六位数码管显示出来。1.2 总体框图时钟脉冲按键消抖显示模块加减运算时间模块键盘扫描图1 键盘扫描总体框图二 子模块程序模块分析2.1 键盘扫描程序设计与分析2.1.1 基本设计思路整个键盘扫描模块分为两个子模块,其一为列扫描模块,作用是为键盘赋一个四位的初值;另一个是行扫描模块,当有按键按下的时候,相对应的行值就会被扫描到的列的低电平拉低,就会得出一个七位的二进
6、制数,即完成键盘的扫描。2.1.2 键盘扫描、编码输出模块图2 键盘扫描模块2.2 消抖模块功能程序与分析2.2.1 消抖模块基本设计思路当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,这就会使按键出现干扰,所以必须要消抖,消抖的方法有很多种,这里利用了一个十六进制的计数器作为延时判断,当按键时间大于这段时间的时候则视为有按键按下。2.2.2 消抖模块图3 消抖模块2.3 加减功能模块程序与分析2.3.1 功能模块基本设计思路此模块在本次课程设计中为附加模块,实现了一位数的加法和减法的
7、运算,其原理是,将经过消抖的按键信号转码为相应的五位二进制数,并送到显示模块,当遇到加法键或减法键的时候,储存上一个键值作为第一个运算数,当遇到等号的时候储存上一个键值作为第二个运算数,并计算出结果输出。2.3.2 加减功能模块图4 加减功能模块2.4 数码管显示模块2.4.1 显示模块基本设计思路使用七段共阴数码管,主要是对其段选和位选进行控制,此模块实现了这一功能,将加减模块送来的三位二进制信号编码成为七位二进制数,对应0f这十六个段码,并选择相应的数码管显示。2.4.2数码管显示模块图5 数码管显示模块2.5 时间模块2.5.1 时间模块的基本设计思路时间模块用六位数码管显示时、分、秒并
8、通过按键更改时间,当K键和K1键同时为高电平时,小时进行加计数,其他数不变,从而实现小时的调整;当K键和K2键同时为高电平时,分钟进行加计数,其他数不变,从而实现分钟的调整。2.5.2 时间模块图6 时间模块三 子模块仿真图3.1 键盘列扫描模块仿真图7 键盘列扫描仿真图3.2 键盘行扫描模块仿真图8 键盘行扫描仿真图3.3 消抖电路仿真图图9 消抖电路仿真图3.4 加减法电路仿真图图10 加减法电路仿真图3.5 数码管电路仿真图图11 数码管电路仿真图3.6 总电路仿真波形图图12 总电路仿真图四 程序下载当仿真结果无误后即可进行管脚绑定,然后按照绑定好的管脚接线,最后通电下载到芯片上。在通
9、电的瞬间,八个数码管全部显示“0”,其中前六位为时钟,经过一秒钟的时间第六位变为“1”,这时计时已经自动开始了,可通过拨动拨码开关K、K1、K2并同时改变时钟频率来调节时间,当K键和K1键同时为高电平时,小时进行加计数,其他数不变,从而实现小时的调整;当K键和K2键同时为高电平时,分钟进行加计数,其他数不变,从而实现分钟的调整;后两位为按键显示,通过键盘输入显示07这八个数字,并实现加减法的运算。五 心得体会像这样的课程设计,无非是考验和锻炼一个人分析问题解决问题的能力。首先拿到这个课题感觉无从下手,因为我知道自己的vhdl语言掌握的还不是很好,但在前面经过两周的单片机课程设计之后,提高了我分
10、析问题解决问题的能力,所以很快我就找到了方法,从图书馆借阅资料,从网上查找并参考相关的文档,和同学讨论等等这些都是解决问题的好方法。在模块的编写过程中,有时候遇到一个问题会纠结很久,经常会在宿舍熬到凌晨两三点,虽然有点累,但把问题解决的那一刻,我内心还是无比的喜悦!在这里我总结了一下,做好课程设计至少需要满足两点:一是有一定的知识储备,也就是说拿到题目的那一刻自己心里就应该有一个思路,二是要有一定的解决问题的能力,就是能够把一个不是太难的而自己又完全不懂的东西在短时间内弄懂并运用。在我看来,后者尤为重要!附录A:系统硬件原理图图13 系统硬件原理图图14 实物图附录B:程序清单按键列扫描模块l
11、ibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;-use IEEE.STD_LOGIC_ARITH.ALL;-use IEEE.STD_LOGIC_UNSIGNED.ALL;-entity scan_key is Port ( clkin : in STD_LOGIC;- keydrv : out STD_LOGIC_VECTOR(3 downto 0);-end scan_key;architecture behavioral of scan_key is-signal count : std_logic_vector(1 downto 0):=00;-beg
12、inprocess(clkin)beginif rising_edge(clkin) then-if count=11 thencount=00;elsecountkeydrvkeydrvkeydrvkeydrvkeydrv=0000;end case;end process;end behavioral;按键行扫描模块library IEEE;-use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity keydecoder is Port ( clkin: i
13、n std_logic; keyin : in STD_LOGIC_VECTOR (2 downto 0);- keydrv : in STD_LOGIC_VECTOR (3 downto 0); keycode : out STD_LOGIC_VECTOR (3 downto 0); end keydecoder;-architecture Rtl of keydecoder is-signal temp:STD_LOGIC_VECTOR (6 downto 0);signal keyvalue1:STD_LOGIC_VECTOR (3 downto 0):=0000;-signal cou
14、nt:std_logic_vector(1 downto 0):=00;begintemp=keydrv&keyin;process(clkin)beginif falling_edge(clkin) then-if keyin=1111 then if count=11 thenkeyvalue1=1111;count=00;else count=count+1;- end if; else countkeyvalue1keyvalue1keyvalue1keyvalue1keyvalue1keyvalue1keyvalue1keyvalue1keyvalue1keyvalue1keyval
15、ue1keyvalue1keyvalue1=keyvalue1;end case;end if;end if;end process;keycode=keyvalue1;end rtl;按键消抖模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;-use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity Antiwitter is Port ( clkin : in STD_LOGIC; keyvaluein : in STD_LOGIC_VECTOR (3 downto 0);-
16、keyvalueout : out STD_LOGIC_VECTOR (3 downto 0);end Antiwitter;architecture Behavioral of Antiwitter is-signal TempNum:std_logic_vector(3 downto 0);signal Counter:std_logic_vector(3 downto 0);signal Start:std_logic;beginprocess(clkin)beginif rising_edge(clkin) then- if Start=0 thenTempNum=1111;keyva
17、lueout=1111; Start=1; else if keyvaluein/=TempNum then-start=1- TempNum=Keyvaluein; Counter=0000; else if Counter=1111 then keyvalueout=keyvaluein;- Counter=0000; else CounterXB0B0B1=0&A;-第二个数 if flag=1010 then-= X=B0+B1; else X X=0&disvaluein;-运算数 A if valu1001 then disvalueout0=0110+valu;disvalueo
18、ut1=0000;else disvalueout0=valu;disvalueout1 if valu1001 then disvalueout0=0110+valu;disvalueout1=0001;else disvalueout0=valu;disvalueout1null;END CASE; end process;end ben;显示模块LIBRARY IEEE;-USE IEEE.STD_LOGIC_1164.ALL;-USE IEEE.STD_LOGIC_UNSIGNED.ALL;-ENTITY scan_led IS PORT (CLK : IN STD_LOGIC; d0
19、,d1,d2,d3,d4,d5,d6,d7:in std_logic_vector(3 downto 0);-SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -段控制信号输出BT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );-位控制信号输出 END scan_led ;ARCHITECTURE one OF scan_led IS SIGNAL CNT8 : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL A : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINP1:PROCESS(CNT8
20、,d0,d1,d2,d3,d4,d5,d6,d7)BEGIN CASE CNT8 IS WHEN 000 = BT = 00000001 ; A BT = 00000010 ; A BT = 00000100 ; A BT = 00001000 ; A BT = 00010000 ; A BT = 00100000 ; A BT = 01000000 ; A BT = 10000000 ; A NULL ; END CASE ; END PROCESS P1;P2:PROCESS(CLK)BEGINIF CLKEVENT AND CLK = 1 THEN -CNT8 SG SG SG SG S
21、G SG SG SG SG SG SG SG SG SG SG SG NULL ; END CASE ; END PROCESS P3; END one;时间模块library ieee;-use ieee.std_logic_1164.all;-use ieee.std_logic_unsigned.all;-entity fpq isport(clk : in std_logic; k : in std_logic; k1 : in std_logic; k2 : in std_logic; ge : out std_logic_vector(0 to 3);- shi : out std
22、_logic_vector(0 to 3); feng : out std_logic_vector(0 to 3); fens : out std_logic_vector(0 to 3); shig : out std_logic_vector(0 to 3); shis : out std_logic_vector(0 to 3);end fpq;architecture first of fpq is signal clock : integer range 0 to 24999999;- signal ge_t : integer range 0 to 9; signal shi_t
23、 : integer range 0 to 5; signal feng_t : integer range 0 to 9; signal fens_t : integer range 0 to 5; signal shig_t : integer range 0 to 9; signal shis_t : integer range 0 to 2; signal temp : integer range 0 to 9; begin-t0: process(clk) begin if (clkevent and clk=1) then clock = clock + 1; if clock =
24、 24999999 then- if k=0 then- if ge_t = 9 then- ge_t = 0; if shi_t = 5 and ge_t = 9 then shi_t = 0; if feng_t = 9 and shi_t = 5 then feng_t = 0; if fens_t = 5 and feng_t = 9 then fens_t = 0; if shis_t = 2 and shig_t = 3 and fens_t = 5 then- shig_t = 0; if shis_t = 2 and shig_t = 3 then shis_t = 0; el
25、se shis_t = shis_t + 1; end if; else if shig_t = 9 and fens_t = 5 then shig_t = 0;- else shig_t = shig_t +1; end if; end if; else fens_t = fens_t + 1; end if; else - feng_t = feng_t + 1; end if; else shi_t = shi_t + 1; end if; else ge_t = ge_t + 1; end if; - else if k1=0 then if feng_t = 9 then feng
26、_t = 0; if fens_t = 5 then fens_t = 0; else fens_t = fens_t + 1; end if; - else feng_t = feng_t + 1; end if; end if; if k2=0 then if shig_t = 3 and shis_t = 2 then shig_t = 0; shis_t = 0;- else if shig_t = 9 then shig_t = 0; if shis_t = 2 then shis_t = 0; else shis_t = shis_t + 1; end if; else shig_
27、t ge ge ge ge ge ge ge ge ge ge shi shi shi shi shi shi feng feng feng feng feng feng feng feng feng feng fens fens fens fens fens fens shig shig shig shig shig shig shig shig shig shig shis shis shis = 0000; end case; end process c;end first;-电气信息学院课程设计评分表项 目评 价优良中及格差设计方案的合理性与创造性软件设计完成情况硬件调试完成情况设计说明书与设计图纸质量答辩情况独立工作能力完成任务情况出勤情况综 合 评 分
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922