欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    EDA技术课程设计报告键盘扫描与数码管及点阵显示设计 .doc

    • 资源ID:2385588       资源大小:448.50KB        全文页数:30页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    EDA技术课程设计报告键盘扫描与数码管及点阵显示设计 .doc

    课 程 设 计课程名称 EDA技术 课题名称 键盘扫描与数码管及点阵显示设计 专 业 电子科学与技术 班 级 0802 学 号 * 姓 名 * 指导教师 * 2011年 6 月 20 日 湖南工程学院课程设计任务书课程名称: EDA技术 题 目:键盘扫描与数码管及点阵显示设计 专业班级:电科0802 学号: * 学生姓名: * 指导老师: * 审 批:任务书下达日期 2011 年 6 月 13 日设计完成日期 2011年 6 月 20 日设计内容与设计要求一 设计内容:1 设计并调试键盘扫描与数码管显示电路;2 键盘为3*4,数码管为7段8位;3 以数字形式显示键盘16个输入键的识别;4 外设置控制开关和防抖动电路;5 功能扩展(自选):彩灯状态的转换以及点阵字符的显示 二 设计要求:1.设计思路清晰,整体设计给出框图,提供顶层电路图;2.应用vhdl完成各次级模块设计,绘出具体设计程序;3.完成设计仿真和程序下载; 4.写出设计报告主要设计条件1 提供所需元件及芯片;2 提供电源和调试设备;3 提供EWB设计软件说明书格式1 课程设计封面;2 设计仿真;3 编程下载;4 总结与体会;5 附录;6 参考文献。7 任务书;8 说明书目录;9 设计总体思路;10 单元电路设计程序;进 度 安 排月 日 日 课题电路设计。 月 日日 总体电路设计和子模块设计 月 日 日 软件仿真和联线。 月 日 日 电路调试 月 日 写设计报告,打印相关图纸,月 日 答辩; 参 考 文 献一电子技术与EDA技术课程设计 郭照南 主编中南大学出版社目录第1章 总体方案设计分析11.1 基本设计思路11.2 总体框图1第2章 各级模块设计与分析22.1 键盘扫描程序设计及仿真22.2 点阵显示程序设计及仿真52.3 彩灯显示程序设计及仿真112.4 数码管扫描程序设计及仿真14第3章系统总电路设计与仿真163.1 系统总电路模块图163.2 总电路仿真波形163.3 系统总体电路图17第4章 软件的调试与下载184.1 引脚锁定184.2 引脚锁定后总电路图194.3 程序下载界面194.4 系统总体仿真结果20第5章 总结与体会21第6章 参考文献22第7章 附录237.1 点阵字符显示效果图237.2 彩灯显示结果23第1章 总体方案设计分析1.1 基本设计思路首先利用键盘扫描程序完成键盘扫描及按键输出值的输出,同时在其中加入按键消抖程序,以保证按键每次按下的键值都是有效准确的理想输出信号。同时通过按键扫描的输出定义两个控制信号量(程序中即xuanze和dz两信号)以通过按键的按下来达到控制彩灯状态切换以及点阵字符显示切换的目的。其中,定义了两个彩灯控制信号,以用来选择彩灯模块中两种彩灯显示状态的切换,而点阵控制信号则定义了五个状态以控制点阵显示的五个状态的切换。从而整个系统则通过键盘扫描程序中的两个控制信号连接成了一个整体。最后就将键盘扫描的输出信号连接到数码管显示模块,彩灯模块连接到8个led灯,而点阵模块的输出则接入到点阵上。再在现有的基础上加入清零信号cr。综上,整个系统的功能即得以实现。1.2 总体框图图1.1 系统总体框图第2章 各级模块设计与分析2.1 键盘扫描程序设计及仿真2.1.1 基本设计思路本模块采用行输入,列输出,并定义一个五位的矢量信号count,此矢量通过时钟脉冲的输入计数,并且定义一个信号量sel并取其中间两位,以此两位构成的四个状态进行键盘列扫描,同时再在另外一个进程中通过三个条件语句的选择判断以确定三个行键中哪个按下,并结合列扫描中sel所取的四个状态共同连接赋值给一个四位矢量knum,并由此确定了键盘的12个状态。最后利用另外一个进程中对knum值的判断从而确定对应的按键值的输出,以及其他各控制键值的信号输出(其中包括,控制彩灯状态的控制信号xuanze,以及控制点阵显示状态的控制信号dz)。2.1.2 键盘扫描模块图图2.1.1 键盘扫描模块图图中clk接时钟脉冲,cr是复位端,kin1,kin2,kin3为行扫描输入,xuanze为彩灯控制信号,dz为点阵控制信号,keyv为列输出,keycode为按键显示数值输出。2.1.3 键盘扫描程序library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity keyscan is port(clk ,cr : in std_logic; -扫描时钟输入 kin1,kin2,kin3 : in std_logic; -按键行扫描输入 xuanze : out std_logic_vector(1 downto 0); dz:out std_logic_vector(2 downto 0); keyv: out std_logic_vector(3 downto 0);-按键列扫描 keycode : out std_logic_vector(4 downto 0) ); -段码显示输出 end keyscan; architecture a of keyscan is signal sel : std_logic_vector(1 downto 0); signal knum : std_logic_vector(3 downto 0); signal count : std_logic_vector(4 downto 0); signal count0 : std_logic; begin sel<=count(3 downto 2); count0<=count(0); p1: process(clk) -产生扫描信号 begin if clk'event and clk='1' then count<=count+1; end if; end process; p2: process(sel) -扫描信号译码输出 begin case sel is when "00"=> keyv<="1110" when "01"=> keyv<="1101" when "10"=> keyv<="1011" when "11"=> keyv<="0111" when others=> keyv<="1111" end case ; end process; p3: process(count0,count,kin1,kin2,kin3) -查键值 begin if (cr='0') then knum<='1' & '1'& count(3 downto 2); elsif count0'event and count0='1' then if(kin3='0') and count(1)='0' then -第三行有键按下时 knum<='1' & '0'& count(3 downto 2); elsif(kin2='0') and count(1)='0' then -第二行有键按下时 knum<='0' & '1' & count(3 downto 2); elsif (kin1='0') and count(1)='0' then -第一行有键按下时 knum<='0' & '0' & count(3 downto 2); end if; end if; end process; p4:process(knum) -键值译码显示输出 begin if cr='0' then xuanze<="11"dz<="111" else case knum is when "0000" => keycode<="00000"xuanze<="00"dz<="001" when "0001" => keycode<="00001"xuanze<="00"dz<="010" when "0010" => keycode<="00010"xuanze<="00"dz<="011" when "0011" => keycode<="00011"xuanze<="00"dz<="100" when "0100" => keycode<="00100"xuanze<="00"dz<="000" when "0101" => keycode<="00101"xuanze<="00"dz<="000" when "0110" => keycode<="00110"xuanze<="00"dz<="000" when "0111" => keycode<="00111"xuanze<="00"dz<="000" when "1000" => keycode<="01000"xuanze<="00"dz<="000" when "1001" => keycode<="01001"xuanze<="00"dz<="000" when "1010" => keycode<="01010"xuanze<="01"dz<="000" when "1011" => keycode<="01011"xuanze<="10"dz<="000" when others => keycode<="01100"xuanze<="00"dz<="000" end case ; end if; end process; end a;2.1.4 键盘扫描仿真波形图2.1.2 键盘扫描仿真波形2.2 点阵显示程序设计及仿真2.2.1 基本设计思路 程序通过键盘扫描程序中的点阵输出控制信号dz来控制点阵字符显示的状态,然后定义点阵的行列为输出类型,通过六个case语句以及16个显示状态的循环扫描来达到字符显示效果。最终结果,通过6个按键的控制分别输出“湖” ,“南” ,“工” ,“程” ,“学” ,“院”六个字符。2.2.2 点阵显示模块图图2.2.1 点阵显示模块图其中clk接时钟脉冲,cr接复位端,dz接从键盘扫描程序中输出的点阵控制信号,hang,lie分别定义为点阵的行列的20个输入引脚。2.2.3 点阵显示程序library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity dianzheng isport( clk ,cr : in std_logic; -扫描时钟输入 dz : in std_logic_vector(2 downto 0); hang : out std_logic_vector(15 downto 0); lie : out std_logic_vector(3 downto 0);end entity dianzheng;architecture behav of dianzheng issignal sel : std_logic_vector(3 downto 0);signal count : std_logic_vector(4 downto 0);type zhuangtai is (s0,s1,s2,s3,s4,s5); signal current_state, next_state: zhuangtai; beginsel<=count(3 downto 0);p0: process(clk) -产生扫描信号 begin if cr='0' then count<="00000" elsif clk'event and clk='1' then count<=count+1; if( count="10000") then count<="00000"end if; current_state<=next_state; end if;end process p0;p1: process(sel,dz,current_state) begin case current_state is when s0 => if(dz="001") then case sel is when "0000"=> lie<="1111"hang<="0100001000000010" when "0001"=> lie<="1110"hang<="0011001000011111" when "0010"=> lie<="1101"hang<="0001001000010010" when "0011"=> lie<="1100"hang<="0000001000010010" when "0100"=> lie<="1011"hang<="1001111111110010" when "0101"=> lie<="1010"hang<="0110001000011110" when "0110"=> lie<="1001"hang<="0010001010010010" when "0111"=> lie<="1000"hang<="0000111111010010" when "1000"=> lie<="0111"hang<="0001100010010010" when "1001"=> lie<="0110"hang<="0010100010011110" when "1010"=> lie<="0101"hang<="1100100010010010" when "1011"=> lie<="0100"hang<="0100100010010010" when "1100"=> lie<="0011"hang<="0100100010010010" when "1101"=> lie<="0010"hang<="0100111110010010" when "1110"=> lie<="0001"hang<="0100100000101010" when "1111"=> lie<="0000"hang<="0100000001000100" when others=> count<="00000"hang<="0000000000000000" end case ; next_state<=s0; elsif(dz="010") then next_state<=s1; elsif(dz="011")then lie<="1111"hang<="0000000000000000"next_state<=s2; elsif(dz="100")then lie<="1111"hang<="0000000000000000"next_state<=s3; elsif(dz="000")then lie<="1111"hang<="0000000000000000"next_state<=s4; elsif(dz="111")then lie<="1111"hang<="0000000000000000"next_state<=s5; else null; end if; when s1 => case sel is when "0000"=> lie<="1111"hang<="0000000100000000" when "0001"=> lie<="1110"hang<="0000000100000100" when "0010"=> lie<="1101"hang<="1111111111111110" when "0011"=> lie<="1100"hang<="0000000100000000" when "0100"=> lie<="1011"hang<="0000000100000100" when "0101"=> lie<="1010"hang<="0111111111111110" when "0110"=> lie<="1001"hang<="0100100000100100" when "0111"=> lie<="1000"hang<="0100010001000100" when "1000"=> lie<="0111"hang<="0101111111110100" when "1001"=> lie<="0110"hang<="0100000100000100" when "1010"=> lie<="0101"hang<="0100000100000100" when "1011"=> lie<="0100"hang<="0101111111110100" when "1100"=> lie<="0011"hang<="0100000100000100" when "1101"=> lie<="0010"hang<="0100000100000100" when "1110"=> lie<="0001"hang<="0100000100010100" when "1111"=> lie<="0000"hang<="0100000000001000" when others=> count<="00000"hang<="0000000000000000" end case ; next_state<=s0; when s2 => case sel is when "0000"=> lie<="1111"hang<="0000000000000000" when "0001"=> lie<="1110"hang<="0000000000001000" when "0010"=> lie<="1101"hang<="0111111111111100" when "0011"=> lie<="1100"hang<="0000000100000000" when "0100"=> lie<="1011"hang<="0000000100000000" when "0101"=> lie<="1010"hang<="0000000100000000" when "0110"=> lie<="1001"hang<="0000000100000000" when "0111"=> lie<="1000"hang<="0000000100000000" when "1000"=> lie<="0111"hang<="0000000100000000" when "1001"=> lie<="0110"hang<="0000000100000000" when "1010"=> lie<="0101"hang<="0000000100000000" when "1011"=> lie<="0100"hang<="0000000100000000" when "1100"=> lie<="0011"hang<="0000000100000100" when "1101"=> lie<="0010"hang<="1111111111111110" when "1110"=> lie<="0001"hang<="0000000000000000" when "1111"=> lie<="0000"hang<="0000000000000000" when others=> count<="00000"hang<="0000000000000000" end case ; next_state<=s0; when s3=> case sel is when "0000"=> lie<="1111"hang<="0000100000000100" when "0001"=> lie<="1110"hang<="0001110111111110" when "0010"=> lie<="1101"hang<="1111000100000100" when "0011"=> lie<="1100"hang<="0001000100000100" when "0100"=> lie<="1011"hang<="0001000100000100" when "0101"=> lie<="1010"hang<="1111111100000100" when "0110"=> lie<="1001"hang<="0001000111111100" when "0111"=> lie<="1000"hang<="0011100000000000" when "1000"=> lie<="0111"hang<="0011011111111110" when "1001"=> lie<="0110"hang<="0101010000100000" when "1010"=> lie<="0101"hang<="0101000000101000" when "1011"=> lie<="0100"hang<="1001000111111100" when "1100"=> lie<="0011"hang<="0001000000100000" when "1101"=> lie<="0010"hang<="0001000000100100" when "1110"=> lie<="0001"hang<="0001011111111110" when "1111"=> lie<="0000"hang<="0001000000000000" when others=> count<="00000"hang<="0000000000000000" end case ; next_state<=s0; when s4=> case sel is when "0000"=> lie<="1111"hang<="0010001000001000" when "0001"=> lie<="1110"hang<="0001000100001000" when "0010"=> lie<="1101"hang<="0001000100010000" when "0011"=> lie<="1100"hang<="0000000000100000" when "0100"=> lie<="1011"hang<="0111111111111110" when "0101"=> lie<="1010"hang<="0100000000000010" when "0110"=> lie<="1001"hang<="1000000000000100" when "0111"=> lie<="1000"hang<="0001111111100000" when "1000"=> lie<="0111"hang<="0000000001000000" when "1001"=> lie<="0110"hang<="0000000110000100" when "1010"=> lie<="0101"hang<="1111111111111110" when "1011"=> lie<="0100"hang<="0000000100000000" when "1100"=> lie<="0011"hang<="0000000100000000" when "1101"=> lie<="0010"hang<="0000000100000000" when "1110"=> lie<="0001"hang<="0000010100000000" when "1111"=> lie<="0000"hang<="0000001000000000" when others=> count<="00000"hang<="0000000000000000" end case ; next_state<=s0; when s5=> case sel is when "0000"=> lie<="1111"hang<="0000000010000000" when "0001"=> lie<="1110"hang<="0111100001000000" when "0010"=> lie<="1101"hang<="0100111111111110" when "0011"=> lie<="1100"hang<="0101010000000010" when "0100"=> lie<="1011"hang<="0101100000010100" when "0101"=> lie<="1010"hang<="0110001111111000" when "0110"=> lie<="1001"hang<="0101000000000000" when "0111"=> lie<="1000"hang<="0100100000001000" when "1000"=> lie<="0111"hang<="0100111111111100" when "1001"=> lie<="0110"hang<="0100100010100000" when "1010"=> lie<="0101"hang<="0110100010100000" when "1011"=> lie<="0100"hang<="0101000010100000" when "1100"=> lie<="0011"hang<="0100000100100010" when "1101"=> lie<="0010"hang<="0100000100100010" when "1110"=> lie<="0001"hang<="0100001000011110" when "1111"=> lie<="0000"hang<="0100110000000000" when others=> count<="00000"hang<="0000000000000000" end case ; when others => next_state<=s0; end case; end process p1;end behav;2.2.4 点阵显示仿真波形图2.2.2 点阵显示仿真波形2.3 彩灯显示程序设计及仿真2.3.1 基本设计思路程序通过键盘扫描程序输出的彩灯控制信号xuanze的控制来保证两个彩灯在两个状态之间的顺利切换,其中一个状态为彩灯向左流水与向右流水的循环显示,另一个状态为彩灯向中间流水。整体利用状态机来实现,并在第一个状态的时候就利用条件语句对xuanze值的判断从而控制状态机的循环路径,从而达到了控制两个彩灯状态的目的。2.3.2 彩灯显示模块图图2.3.1 彩灯显示模块图图中clk接时钟脉冲,cr接复位端,xuanze接键盘扫描程序的彩灯控制信号输出端,comb_outputs接8个led灯。2.3.3 彩灯显示程序library ieee;use ieee.std_logic_1164.all;entity leddeng isport( clk,cr : in std_logic; xuanze : in std_logic_vector(1 downto 0); comb_outputs :out std_logic_vector(7 downto 0); keycode2:in std_logic_vector(4 downto 0) );end entity leddeng;architecture behav of leddeng is type zhuangtai is (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s20,s21,s22,s23); signal current_state, next_state: zhuangtai; beginp0: process(clk,cr) beginif cr='0' then current_state<=s0;elsif (clk' event and clk='1') then current_state<=next_state; end if; end process p0;p1: process(xuanze) begin case current_state is when s0 => if xuanze="01" then comb_outputs<="01111111"next_state<=s1; elsif xuanze="10" then next_state<=s14; elsif xuanze="00" then next_state<=s23;elsif xuanze="11"then comb_outputs<=

    注意事项

    本文(EDA技术课程设计报告键盘扫描与数码管及点阵显示设计 .doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开