版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 课 程 设 计课程名称 EDA技术 课题名称键盘扫描显示与加减运算电路设计专 业 电子科学与技术 班 级 电科1102 学 号 201101040216 姓 名 周洁 指导教师 陈意军 2014年 3 月 20 日 湖南工程学院课程设计任务书 课程名称:eda技术 题目:键盘扫描显示与加减运算电路设计 专业班级:电科1102学号:201101040216 学生姓名: 周洁 指导老师: 陈意军 审 批:任务书下达日期 2014 年3 月10 日设计完成日期 2014 年 3 月 20日 设计内容与设计要求一 设计内容:1 设计并调试键盘扫描与数码管显示电路;2 键盘为3*4,数码管为7段8位;
2、3 以数字形式或字母显示键盘12个输入键的功能;4 完成2位数的加减运算,并显示运算结果。5 设置控制开关和防抖动电路设计;6 功能扩展(自选);通过键盘完成汉字显示或对某外部硬件对象的控制。 二 设计要求:1.设计思路清晰,整体设计给出框图,提供顶层电路图;2.应用vhdl或verilog完成各次级模块设计,给出具体设计程序;3.完成设计仿真和程序下载; 4.写出设计报告 主要设计条件1 提供EDA实验室;2 提供EL实验箱和CPLD芯片3 提供ALTERA公司的quartus设计软件; 说明书格式1 课程设计封面;2 任务书;3 说明书目录;4 设计总体思路;5 单元电路设计程序;6 设计
3、仿真;7 编程下载;8 总结与体会;9 附录;10 参考文献。 进 度 安 排月 日 日 课题电路设计。 月 日日 总体电路设计和子模块设计 月 日 日 软件仿真和联线。 月 日 日 电路调试 月 日 写设计报告,打印相关图纸, 月 日 答辩; 参 考 文 献目录第一章 总体方案设计分析11.1基本设计思路11.2总体框图1第二章 子模块程序模块分析22.1 键盘扫描和消抖程序设计与分析22.1.1 基本设计思路22.1.2 流程图22.1.3键盘扫描、编码、防抖输出、42.1.4键盘扫描、编码、防抖仿真结果及分析42.1.5子程序52.2 加减功能模块程序与分析112.2.1功能模块基本设计
4、思路112.2.2加减功能流程图112.2.3加减功能模块122.2.4加减法电路仿真图结果与分析132.2.5加减功能模块程序132.3数码管译码显示模块162.3.1显示模块基本设计思路162.3.2数码管显示模块流程图162.3.3数码管显示模块172.3.4数码管电路仿真图172.3.5数码管显示子程序18第三章 总电路213.1总电路连接图213.2电路仿真波形图21第四章 程序下载224.1实验箱及芯片简介224.2管脚224.3下载224.4实际接线图及加减法运算实例23第五章 心得体会25第一章 总体方案设计分析1.1基本设计思路本设计利用键盘扫描程序完成3*4键盘的扫描并编码
5、输出按键值,然后对按键输出值进行消抖,以保证每次按键值都能准确无误的输出,同时利用加减功能模块对输入值进行简单的二进制加法、减法操作,并将加减之后的结果转换成BCD码输出到显示控制模块,通过译码显示模块将加减后的结果显示在数码管上。本设计对时钟的利用充分,通过同一个时钟使各个模块之间协同工作,充分利用时钟的上下边沿,使整个系统处于一种高速工作状态,以提高整个系统工作效率。1.2总体框图键盘输入键盘扫描及消抖加减功能模块数码管译码显示模 块时钟脉冲第二章 子模块程序模块分析2.1 键盘扫描和消抖程序设计与分析2.1.1 基本设计思路本模块采用行输入,列输出,并定义一个4进制计数信号,在时钟脉冲的
6、上升沿输入时计数,利用3进制提供行扫描信号,在没有按键按下时,行扫描的输入信号变化顺序为110101011依次周而复始;列扫描的输出信号变化顺序为1110110110110111当有按键按下时,在时钟的下降沿延按键输出,同时将行扫描值与列输入值合并形成组合值作为按键的输入值,并对按键的输入值进行编码使其输出为7位二进制值。按键时通常会造成持续时间不大于10ms的信号抖动,这种抖动使系统无法正确识别按键的操作次数,本系统的抖动消除电路使用一个16进制计数器,当输入值在计数16次的过程中没有变化时,则认为该值为一个正确的可识别的数值,同时输出该值。2.1.2 流程图falling_edgeRisi
7、ng_edge开始scan_clk1110110110110111110101011101111011011101110110000110010111110111010111011011011101011110111100111101011101101101110110000111116个周期内没有按键键入结束输出2.1.3键盘扫描、编码、防抖输出、图中clk为时钟脉冲输入,在该模块中利用时钟的上下边沿,使该工作模块更高效。clear为清零信号,con为控制功能输出方式信号,row_key2.0为按键输入值,column_key3.0为编码,key_out3.0为扫描编码输出值(消抖后输出值)
8、,sel为选择性输出时钟信号。2.1.4键盘扫描、编码、防抖仿真结果及分析2.1.4.1 键盘扫描模块仿真图2.1.4.2 键盘编码模块仿真图2.1.4.3防抖动电路仿真图时钟信号为1465Hz2.1.5子程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity scan_column is Port ( scan_clk : in STD_LOGIC; column_key : out STD_LOGIC_VECTOR(3 dow
9、nto 0) );end scan_column;architecture behavioral of scan_column issignal count : std_logic_vector(1 downto 0):="00"beginprocess(scan_clk)beginif rising_edge(scan_clk) thenif count="11" thencount<="00"elsecount<=count+1;end if;end if;end process;process(count)begin
10、case count iswhen "00"=>column_key<="1110"when "01"=>column_key<="1101"when "10"=>column_key<="1011"when "11"=>column_key<="0111"when others =>column_key<="0000"end case;end proces
11、s;end behavioral;键盘编码程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity key_code is Port ( code_clk,clear : in std_logic; row_key : in STD_LOGIC_VECTOR (2 downto 0); column_key : in STD_LOGIC_VECTOR (3 downto 0);con : in std_logic; key_out
12、: out STD_LOGIC_VECTOR (3 downto 0) ); end key_code;architecture one of key_code issignal temp : STD_LOGIC_VECTOR (6 downto 0);signal key_value: STD_LOGIC_VECTOR (3 downto 0):="0000"signal count : std_logic_vector (1 downto 0):="00"begintemp<=column_key&row_key;process(cod
13、e_clk)beginif clear='0' thenkey_value<="0000"elsif falling_edge(code_clk) thenif row_key="1111" thenif count="11" thenkey_value<="1111"count<="00"elsecount<=count+1;end if;elsecount<="00"case temp iswhen"1110110&
14、quot;=>if con='1' then key_value<="0000"else key_value<="1111"end if;when"1101110"=>if con='1'thenkey_value<="1010"else key_value<="1101"end if;when"1011110"=>if con='1' thenkey_value<="1
15、011"else key_value<="1110"end if;when"0111110"=>key_value<="0001"when"1110101"=>key_value<="0010"when"1101101"=>key_value<="0011"when"1011101"=>key_value<="0100"when"0111101
16、"=>key_value<="0101"when"1110011"=>key_value<="0110"when"1101011"=>key_value<="0111"when"1011011"=>key_value<="1000"when"0111011"=>key_value<="1001"when others =>key_value&
17、lt;=key_value;end case;end if;end if;end process;key_out<=key_value;end one;消抖模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity xiaodou is Port ( xiaodou_clk : in STD_LOGIC;sel :out STD_LOGIC; key_in : in STD_LOGIC_VECTOR (3 downto 0);
18、key_out : out STD_LOGIC_VECTOR (3 downto 0);end xiaodou;architecture one of xiaodou issignal temp:std_logic_vector(3 downto 0);signal cnt :std_logic_vector(4 downto 0);signal flag:std_logic;beginprocess(xiaodou_clk)beginif rising_edge(xiaodou_clk) then if flag='0' thentemp<="1111&quo
19、t;key_out<="1111"flag<='1'else if key_in/=temp then temp<=key_in; cnt<="00000"else if cnt="10100" thenkey_out<=key_in;sel<='1'cnt<="00000"elsecnt<=cnt+1;sel<='0'end if;end if;end if;end if;end process;end one;
20、2.2 加减功能模块程序与分析2.2.1功能模块基本设计思路本模块能完成简单的加、减操作和清0显示操作,由于该模块从键盘得到的编码值每次只能输入一个按键值,所以在加减法中首先用一个信号保存第一次输入的值,当输入的是加号或减号时,将第一次的输入值与0组成组合值,可以当再次按键时,用另一个信号保存一个新的输入值,最后当“=”按下时两个输入值根据加减号所对应的编码执行将相加或相减,从组合值最高位可以得到加减后的结果的进位或借位,并通过对最高位和低四位的判断的判断,将最后结果转换成BCD码并输出输出到数码管显示。2.2.2加减功能流程图11011110clkB0<='0'&
21、;A; led<='0' flag:="11"led<='0'flag:="11"othersB0<='0'&A; led<='0' flag:="10"led<='0'flag:="11"X<=B0+B1B0<B1B0>B1X<=B0+B1; temp<='0'X<=B0+B1; temp<='1'X<='0&
22、#39;&value_in;1111B1<='0'&A; led<='0'led<='0'flag:="11"2.2.3加减功能模块图中value_in3.0为按键输入值,clk为选择性时钟输入信号;con为清零端, value_out13.0为计算结果的十位值; value_out03.0为个位值,Led为加减等于信号指示灯。2.2.4加减法电路仿真图结果与分析2.2.5加减功能模块程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD
23、_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity calculator is Port ( CLK ,con : in STD_LOGIC;led : out std_logic; value_in : in STD_LOGIC_VECTOR (3 downto 0); value_out0 : out STD_LOGIC_VECTOR (3 downto 0); value_out1 : out STD_LOGIC_VECTOR (3 downto 0);end calculator;architecture ben of cal
24、culator issignal A :std_logic_vector(3 downto 0):="0000"signal B0:std_logic_vector(4 downto 0):="00000"signal B1:std_logic_vector(4 downto 0):="00000"signal X :std_logic_vector(4 downto 0):="00000"signal temp : std_logic:='1'beginprocess(CLK)variable f
25、lag:std_logic_vector(1 downto 0):="00"beginIF CLK' EVENT AND CLK='1' THEN case value_in iswhen "1101" =>B0<='0'&A;led<='0'flag:="11"when "1110" => B0<='0'&A;led<='0' flag:="10"when
26、 "1111" =>B1<='0'&A; led<='0' if flag="11" thenX<=B0+B1; elsif flag="10" thenif B0<B1 thenX<=B1-B0; temp<='0'else X<=B0-B1; temp<='1'end if;else X<=B1; end if;when others => X<='0'&value
27、_in; A<=value_in; led<='1' end case;END IF; end process; process(X,temp) variable valu:std_logic_vector(3 downto 0); beginvalu:=X(3)&X(2)&X(1)&X(0);if con='1' thenvalue_out0<=valu;value_out1<="1100"elsif X(4)='1' then value_out0<=valu+&quo
28、t;0110" value_out1<="0001"elseif valu>"1001" then value_out0<="0110"+valu;value_out1<="0001"elseif temp='1' then value_out0<=valu; value_out1<="0000"else value_out0<=valu; value_out1<="1110"end if;end if
29、;end if; end process;end ben;2.3数码管译码显示模块2.3.1显示模块基本设计思路每个数码管有8个段:h、g、f、e、d、c、b、a(dp是小数点)都连在一起,8个数码管分别由8个选通信号k1k8来选择。被选通的数码管显示数据。例如,在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其他7个数码管呈现关闭状态。根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1k8分别被单独选通,与此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,根据人眼的视觉暂留原理,就能
30、实现动态扫描显示的目的。本次课程设计只用到了其中两个数码管,所以在BT中只需选择高两位显示即可,其他的可以不接。2.3.2数码管显示模块流程图段选位选开始结束是否稳定输出2.3.3数码管显示模块2.3.4数码管电路仿真图2.3.5数码管显示子程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SCAN_LED IS PORT ( CLK : IN STD_LOGIC; d0,d1,d2,d3,d4,d5,d6,d7:in STD_LOGIC_VECTOR(3 DOWNTO 0); S
31、G : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); BT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END;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 ) BEGIN CASE CNT8 IS WHEN "000" => BT <= "00000001" ;
32、 A <= d0 ; WHEN "001" => BT <= "00000010" ; A <= d1 ; WHEN "010" => BT <= "00000100" ; A <= d2; WHEN "011" => BT <= "00001000" ; A <= d3 ; WHEN "100" => BT <= "00010000" ; A <= d4;
33、WHEN "101" => BT <= "00100000" ; A <= d5; WHEN "110" => BT <= "01000000" ; A <= d6; WHEN "111" => BT <= "10000000" ; A <= d7 ; WHEN OTHERS => NULL ; END CASE ; END PROCESS P1;P2: PROCESS(CLK)BEGINIF CLK'EVE
34、NT AND CLK='1'THENCNT8<=CNT8+1;END IF;END PROCESS P2;P3:PROCESS( A ) BEGIN CASE A IS WHEN "0000"=> SG <= "0111111" WHEN "0001" => SG <= "0000110" WHEN "0010"=> SG <= "1011011" WHEN "0011" => SG <
35、= "1001111" WHEN "0100"=> SG <= "1100110" WHEN "0101" => SG <= "1101101" WHEN "0110"=> SG <= "1111101" WHEN "0111" => SG <= "0000111" WHEN "1000"=> SG <= "1111111&qu
36、ot; WHEN "1001" => SG <= "1101111" WHEN "1010"=> SG <= "1110111" WHEN "1011" => SG <= "1111100" WHEN "1100"=> SG <= "0000000" -清屏WHEN "1101"=> SG <= "1110110" -加 WHEN "1110"=> SG <= "1000000" -减WHEN "1111"=> SG <= "1000001"-等于 WHE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 花字课件教学课件
- 吸墨白板课件教学课件
- 2024固定资产业权转让合同
- 2024年店铺买卖与租赁合同一本通
- 2024年广告装饰新篇章:工程合同全新范本
- 2024年办公室装修设计实施合同
- 2024年度供应链管理合同与物流服务协议
- 2024年工程项目人力资源配置与管理合同
- 2024年度国际广告传媒合作合同
- 2024光伏发电设备采购合同
- 银行业信息系统灾难恢复管理规范
- 医院重点岗位工作人员轮岗制度
- 2023光伏发电工程项目安全文明施工方案
- 带式输送机胶带安装
- 陈育民对FLAC3D常见问题的解答概要
- 专利文献检索方法与步骤课件
- 第5讲-申论大作文课件
- 大咯血的护理及急救课件
- 读《学生的精神》有感
- Module 5 Museums模块测试题二(含答案)(外研版九年级上册)
- 张家爷爷的小花狗2
评论
0/150
提交评论