EDA技术课程设计报告键盘扫描与数码管及点阵显示设计_第1页
EDA技术课程设计报告键盘扫描与数码管及点阵显示设计_第2页
EDA技术课程设计报告键盘扫描与数码管及点阵显示设计_第3页
EDA技术课程设计报告键盘扫描与数码管及点阵显示设计_第4页
EDA技术课程设计报告键盘扫描与数码管及点阵显示设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、 课 程 设 计 课程名称课程名称 eda 技术技术 课题名称课题名称 键盘扫描与数码管及点阵显示设计键盘扫描与数码管及点阵显示设计 专专 业业 电子科学与技术电子科学与技术 班班 级级 0802 学学 号号 * 姓姓 名名 * 指导教师指导教师 * 2011 年年 6 月月 20 日日 湖南工程学院 课程设计任务书 课程名称课程名称: eda 技术 题题 目目:键盘扫描与数码管及点阵显示设 计 专业班级:电科 0802 学号: * 学生姓名: * 指导老师: * 审 批: 任务书下达日期 2011 年 6 月 13 日 设计完成日期 2011 年 6 月 20 日 设计内容与设计要求 一设计

2、内容: 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 参

3、考文献。 7 任务书; 8 说明书目录; 9 设计总体思路; 10 单元电路设计程序; 进 度 安 排 月 日 日 课题电路设计。 月 日日 总体电路设计和子模块设计 月 日 日 软件仿真和联线。 月 日 日 电路调试 月 日 写设计报告,打印相关图纸, 月 日 答辩; 参 考 文 献 一 电子技术与 eda 技术课程设计 郭照南 主编 中南大学出版社 目录目录 第第 1 章章 总体方案设计分析总体方案设计分析.1 1.1 基本设计思路.1 1.2 总体框图.1 第第 2 章章 各级模块设计与分析各级模块设计与分析.2 2.1 键盘扫描程序设计及仿真.2 2.2 点阵显示程序设计及仿真.5 2

4、.3 彩灯显示程序设计及仿真.11 2.4 数码管扫描程序设计及仿真.14 第第 3 章章 系统总电路设计与仿真系统总电路设计与仿真.16 3.1 系统总电路模块图.16 3.2 总电路仿真波形.16 3.3 系统总体电路图.17 第第 4 章章 软件的调试与下载软件的调试与下载.18 4.1 引脚锁定.18 4.2 引脚锁定后总电路图.19 4.3 程序下载界面.19 4.4 系统总体仿真结果.20 第第 5 章章 总结与体会总结与体会.21 第第 6 章章 参考文献参考文献.22 第第 7 章章 附录附录.23 7.1 点阵字符显示效果图.23 7.2 彩灯显示结果.23 第第 1 章章

5、总体方案设计分析总体方案设计分析 1.1 基本设计思路基本设计思路 首先利用键盘扫描程序完成键盘扫描及按键输出值的输出,同时在 其中加入按键消抖程序,以保证按键每次按下的键值都是有效准确的理 想输出信号。同时通过按键扫描的输出定义两个控制信号量(程序中即 xuanze 和 dz 两信号)以通过按键的按下来达到控制彩灯状态切换以及点 阵字符显示切换的目的。其中,定义了两个彩灯控制信号,以用来选择 彩灯模块中两种彩灯显示状态的切换,而点阵控制信号则定义了五个状 态以控制点阵显示的五个状态的切换。从而整个系统则通过键盘扫描程 序中的两个控制信号连接成了一个整体。最后就将键盘扫描的输出信号 连接到数码

6、管显示模块,彩灯模块连接到 8 个 led 灯,而点阵模块的输 出则接入到点阵上。再在现有的基础上加入清零信号 cr。综上,整个系 统的功能即得以实现。 1.2 总体框图总体框图 图 1.1 系统总体框图 第第 2 章章 各级模块设计与分析各级模块设计与分析 2.1 键盘扫描程序设计及仿真键盘扫描程序设计及仿真 2.1.1 基本设计思路基本设计思路 本模块采用行输入,列输出,并定义一个五位的矢量信号 count,此 矢量通过时钟脉冲的输入计数,并且定义一个信号量 sel 并取其中间两位, 以此两位构成的四个状态进行键盘列扫描,同时再在另外一个进程中通 过三个条件语句的选择判断以确定三个行键中哪

7、个按下,并结合列扫描 中 sel 所取的四个状态共同连接赋值给一个四位矢量 knum,并由此确定 了键盘的 12 个状态。最后利用另外一个进程中对 knum 值的判断从而确 定对应的按键值的输出,以及其他各控制键值的信号输出(其中包括, 控制彩灯状态的控制信号 xuanze,以及控制点阵显示状态的控制信号 dz) 。 2.1.2 键盘扫描模块图键盘扫描模块图 clk cr kin1 kin2 kin3 xuanze1.0 dz2.0 keyv3.0 keycode4.0 keyscan inst1 图 2.1.1 键盘扫描模块图 图中 clk 接时钟脉冲,cr 是复位端,kin1,kin2,k

8、in3 为行扫描输入, 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

9、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); sign

10、al 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 clkevent and clk=1 then count keyv keyv keyv keyv keyv=1111; end case ; end process; p3: process(count0,count,kin1,kin2,kin3) -查键值 begin if (cr=0) then

11、knum=1 elsif count0event and count0=1 then if(kin3=0) and count(1)=0 then -第三行有键按下时 knum=1 elsif(kin2=0) and count(1)=0 then -第二行有键按下时 knum=0 elsif (kin1=0) and count(1)=0 then -第一行有键按下时 knum=0 end if; end if; end process; p4:process(knum) -键值译码显示输出 begin if cr=0 then xuanze=11;dz keycode=00000;xuan

12、ze=00;dz keycode=00001;xuanze=00;dz keycode=00010;xuanze=00;dz keycode=00011;xuanze=00;dz keycode=00100;xuanze=00;dz keycode=00101;xuanze=00;dz keycode=00110;xuanze=00;dz keycode=00111;xuanze=00;dz keycode=01000;xuanze=00;dz keycode=01001;xuanze=00;dz keycode=01010;xuanze=01;dz keycode=01011;xuanze=

13、10;dz 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 个按键 的控制分别输出“湖” , “南” , “工” , “程” , “

14、学” , “院”六 个字符。 2.2.2 点阵显示模块图点阵显示模块图 clk cr dz2.0 hang15.0 lie3.0 dianzheng inst2 图 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; ent

15、ity dianzheng is port( 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 is signal sel : std_logic_vector(3 downto 0); signal count : std_logic_

16、vector(4 downto 0); type zhuangtai is (s0,s1,s2,s3,s4,s5); signal current_state, next_state: zhuangtai; begin sel=count(3 downto 0); p0: process(clk) -产生扫描信号 begin if cr=0 then count=00000; elsif clkevent and clk=1 then count=count+1; if( count=10000) then count=00000; end if; current_state if(dz=00

17、1) then case sel is when 0000= lie=1111;hang lie=1110;hang lie=1101;hang lie=1100;hang lie=1011;hang lie=1010;hang lie=1001;hang lie=1000;hang lie=0111;hang lie=0110;hang lie=0101;hang lie=0100;hang lie=0011;hang lie=0010;hang lie=0001;hang lie=0000;hang count=00000;hang=0000000000000000; end case ;

18、 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_stat

19、e case sel is when 0000= lie=1111;hang lie=1110;hang lie=1101;hang lie=1100;hang lie=1011;hang lie=1010;hang lie=1001;hang lie=1000;hang lie=0111;hang lie=0110;hang lie=0101;hang lie=0100;hang lie=0011;hang lie=0010;hang lie=0001;hang lie=0000;hang count=00000;hang=0000000000000000; end case ; next_

20、state case sel is when 0000= lie=1111;hang lie=1110;hang lie=1101;hang lie=1100;hang lie=1011;hang lie=1010;hang lie=1001;hang lie=1000;hang lie=0111;hang lie=0110;hang lie=0101;hang lie=0100;hang lie=0011;hang lie=0010;hang lie=0001;hang lie=0000;hang count=00000;hang=0000000000000000; end case ; n

21、ext_state case sel is when 0000= lie=1111;hang lie=1110;hang lie=1101;hang lie=1100;hang lie=1011;hang lie=1010;hang lie=1001;hang lie=1000;hang lie=0111;hang lie=0110;hang lie=0101;hang lie=0100;hang lie=0011;hang lie=0010;hang lie=0001;hang lie=0000;hang count=00000;hang=0000000000000000; end case

22、 ; next_state case sel is when 0000= lie=1111;hang lie=1110;hang lie=1101;hang lie=1100;hang lie=1011;hang lie=1010;hang lie=1001;hang lie=1000;hang lie=0111;hang lie=0110;hang lie=0101;hang lie=0100;hang lie=0011;hang lie=0010;hang lie=0001;hang lie=0000;hang count=00000;hang=0000000000000000; end

23、case ; next_state case sel is when 0000= lie=1111;hang lie=1110;hang lie=1101;hang lie=1100;hang lie=1011;hang lie=1010;hang lie=1001;hang lie=1000;hang lie=0111;hang lie=0110;hang lie=0101;hang lie=0100;hang lie=0011;hang lie=0010;hang lie=0001;hang lie=0000;hang count=00000;hang next_state=s0; end

24、 case; end process p1; end behav; 2.2.4 点阵显示仿真波形点阵显示仿真波形 图 2.2.2 点阵显示仿真波形 2.3 彩灯显示程序设计及仿真彩灯显示程序设计及仿真 2.3.1 基本设计思路基本设计思路 程序通过键盘扫描程序输出的彩灯控制信号 xuanze 的控制来保证两 个彩灯在两个状态之间的顺利切换,其中一个状态为彩灯向左流水与向 右流水的循环显示,另一个状态为彩灯向中间流水。整体利用状态机来 实现,并在第一个状态的时候就利用条件语句对 xuanze 值的判断从而控 制状态机的循环路径,从而达到了控制两个彩灯状态的目的。 2.3.2 彩灯显示模块图彩灯显

25、示模块图 clk cr xuanze1.0 keycode24.0 comb_outputs7.0 leddeng inst4 图 2.3.1 彩灯显示模块图 图中 clk 接时钟脉冲,cr 接复位端,xuanze 接键盘扫描程序的彩灯 控制信号输出端,comb_outputs 接 8 个 led 灯。 2.3.3 彩灯显示程序彩灯显示程序 library ieee; use ieee.std_logic_1164.all; entity leddeng is port( clk,cr : in std_logic; xuanze : in std_logic_vector(1 downto

26、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

27、; begin p0: process(clk,cr) begin if cr=0 then current_state=s0; elsif (clk event and clk=1) then current_state 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=11then comb_outputs=11111111;next_state=s23; e

28、lse comb_outputs=11111111;next_state comb_outputs=10111111;next_state comb_outputs=11011111;next_state comb_outputs=11101111;next_state comb_outputs=11110111;next_state comb_outputs=11111011;next_state comb_outputs=11111101;next_state comb_outputs=11111110;next_state comb_outputs= 11111101;next_stat

29、e comb_outputs= 11111011;next_state comb_outputs=11110111;next_state comb_outputs=11101111;next_state comb_outputs=11011111;next_state comb_outputs=10111111;next_state comb_outputs=11111111;next_state comb_outputs=01111110;next_state comb_outputs=10111101;next_state comb_outputs=11011011;next_state

30、comb_outputs=11100111;next_state comb_outputs=11011011;next_state comb_outputs=10111101;next_state comb_outputs=01111110;next_state comb_outputs=00000000;next_state comb_outputs=11111111;next_state next_state=s0; end case; end process p1; end behav; 2.3.4 彩灯显示仿真波形彩灯显示仿真波形 图 2.3.2 彩灯显示仿真波形 2.4 数码管扫描程

31、序设计及仿真数码管扫描程序设计及仿真 2.4.1 基本设计思路基本设计思路 由于本程序中只需要用到一位数码管的显示,因此就无需数码管进 行动态扫描,因此,直接在程序中选通一位数码管即可。并把键盘扫描 程序的键值输出信号直接接到数码管扫描程序的输入信号端口,再通过 case 语句的选择即可将对应的数码管段值状态输入到数码管进行相应的 显示,实现系统指定的功能。 2.4.2 数码管扫描模块图数码管扫描模块图 cr keycode14.0 sg6.0 bt scan_led inst5 图 2.4.1 数码管扫描模块图 图中 cr 接复位端,keycode1 接键盘扫描的键值输出信号端口,sg 作为

32、数码管七段的控制输出信号,bt 作为八位数码管的位选端。 2.4.3 数码管扫描程序数码管扫描程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity scan_led is port ( cr : in std_logic; keycode1:in std_logic_vector(4 downto 0); sg : out std_logic_vector(6 downto 0); bt : out std_logic ); end; architecture one of s

33、can_led is begin p1:process( keycode1 ) begin if(cr=0) then bt=0; elsif(cr=1) then bt sg sg sg sg sg sg sg sg sg sg sg sg sg null ; end case ; end process p1; end; 2.4.4 数码管扫描仿真波形数码管扫描仿真波形 图 2.4.2 数码管扫描仿真波形 第第 3 章章系统总电路设计与仿真系统总电路设计与仿真 3.1 系统总电路模块图系统总电路模块图 clk cr kin1 kin2 kin3 clk1 sg6.0 bt keyv3.0

34、comb_outputs7.0 hang15.0 lie3.0 block1 inst2 图 3.1.1 总电路模块图 图中,clk 接时钟脉冲,cr 接复位端,kin1,kin2,kin3 分别接 入键盘行扫描,clk1 接一提供给点阵显示的时钟脉冲。sg60接数码 管段选信号,bt 为数码管位选信号输出,keyv3.0为键盘列扫描, comb_outputs7.0控制彩灯的输出端,hang15.0,lie3.0分别为点阵行 列的输入扫描信号。 3.2 总电路仿真波形总电路仿真波形 图 3.2.1 总电路仿真波形 3.3 系统总体电路图系统总体电路图 图 3.3.1 系统总体电路图 第第 4

35、 章章 软件的调试与下载软件的调试与下载 4.1 引脚锁定引脚锁定 图 4.1.1 引脚锁定列表 4.2 引脚锁定后总电路图引脚锁定后总电路图 图 4.2.1 引脚锁定后总电路图 4.3 程序下载界面程序下载界面 图 4.3.1 程序下载界面 4.4 系统总体仿真结果系统总体仿真结果 图 4.4.1 系统总体仿真结果 部分相应的实验显示效果参见附录。 第第 5 章章 总结与体会总结与体会 历时两个星期的 eda 课程设计终于落下帷幕,在这两个星期中,我 们从接到课题,到查找资料,再到自己独立编程仿真调试程序,最后到 接硬件调试,我们的每一步都走出了自己奋斗的精彩。刚开始我们组抽 到了做键盘扫描程序的课题。本以为这是个很容易的课题,也很快地查 找好了资料,编出了程序,尤其也在键盘消抖上下了功

温馨提示

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

评论

0/150

提交评论