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

上传人:仙*** 文档编号:73903848 上传时间:2022-04-12 格式:DOC 页数:30 大小:1.60MB
收藏 版权申诉 举报 下载
EDA技术课程设计报告键盘扫描与数码管及点阵显示设计_第1页
第1页 / 共30页
EDA技术课程设计报告键盘扫描与数码管及点阵显示设计_第2页
第2页 / 共30页
EDA技术课程设计报告键盘扫描与数码管及点阵显示设计_第3页
第3页 / 共30页
资源描述:

《EDA技术课程设计报告键盘扫描与数码管及点阵显示设计》由会员分享,可在线阅读,更多相关《EDA技术课程设计报告键盘扫描与数码管及点阵显示设计(30页珍藏版)》请在装配图网上搜索。

1、 课 程 设 计课程名称 EDA技术 课题名称 键盘扫描与数码管及点阵显示设计 专 业 电子科学与技术 班 级 0802 学 号 * 姓 名 * 指导教师 * 2011年 6 月 20 日 湖南工程学院课程设计任务书课程名称: EDA技术 题 目:键盘扫描与数码管及点阵显示设计 专业班级:电科0802 学号: * 学生姓名: * 指导老师: * 审 批:任务书下达日期 2011 年 6 月 13 日设计完成日期 2011年 6 月 20 日设计内容与设计要求一 设计内容:1 设计并调试键盘扫描与数码管显示电路;2 键盘为3*4,数码管为7段8位;3 以数字形式显示键盘16个输入键的识别;4 外

2、设置控制开关和防抖动电路;5 功能扩展(自选):彩灯状态的转换以及点阵字符的显示 二 设计要求:1.设计思路清晰,整体设计给出框图,提供顶层电路图;2.应用vhdl完成各次级模块设计,绘出具体设计程序;3.完成设计仿真和程序下载; 4.写出设计报告主要设计条件1 提供所需元件及芯片;2 提供电源和调试设备;3 提供EWB设计软件说明书格式1 课程设计封面;2 设计仿真;3 编程下载;4 总结与体会;5 附录;6 参考文献。7 任务书;8 说明书目录;9 设计总体思路;10 单元电路设计程序;进 度 安 排月 日 日 课题电路设计。 月 日日 总体电路设计和子模块设计 月 日 日 软件仿真和联线

3、。 月 日 日 电路调试 月 日 写设计报告,打印相关图纸,月 日 答辩; 参 考 文 献一电子技术与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

4、系统总体仿真结果20第5章 总结与体会21第6章 参考文献22第7章 附录237.1 点阵字符显示效果图237.2 彩灯显示结果2324第1章 总体方案设计分析1.1 基本设计思路首先利用键盘扫描程序完成键盘扫描及按键输出值的输出,同时在其中加入按键消抖程序,以保证按键每次按下的键值都是有效准确的理想输出信号。同时通过按键扫描的输出定义两个控制信号量(程序中即xuanze和dz两信号)以通过按键的按下来达到控制彩灯状态切换以及点阵字符显示切换的目的。其中,定义了两个彩灯控制信号,以用来选择彩灯模块中两种彩灯显示状态的切换,而点阵控制信号则定义了五个状态以控制点阵显示的五个状态的切换。从而整个系

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

6、描中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_116

7、4.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 :

8、 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: proc

9、ess(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 knum=1 & 1& count(3 downto 2); elsif count0event and count0=1 then if(kin3=0) and count(1)=0 then -第三行有键按下时 knum=1 & 0& co

10、unt(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 keycode=00000;xuanze=00;dz keycode=00001;x

11、uanze=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=10;dz keycode=01100;xuan

12、ze=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接从键盘扫描程序中

13、输出的点阵控制信号,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 : ou

14、t 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)

15、-产生扫描信号 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=001) 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

16、;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_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=00000

17、00000000000;next_state=s3; elsif(dz=000)then lie=1111;hang=0000000000000000;next_state=s4; elsif(dz=111)then lie=1111;hang=0000000000000000;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

18、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_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;h

19、ang 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_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=01

20、11;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_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 li

21、e=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_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;han

22、g 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 case; end process p1;end behav;2.2.4 点阵显示仿真波形图2.2.2 点阵显示仿真波形2.3 彩灯显示程序设计及仿真2.3.1 基本设计思路程序通过键盘扫描程序输出的彩灯控制信号xuanze的控制来保证两个彩灯在两个状态之间的顺利切换,其中一个状态为彩灯向左流水与向

23、右流水的循环显示,另一个状态为彩灯向中间流水。整体利用状态机来实现,并在第一个状态的时候就利用条件语句对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_logi

24、c_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_s

25、tate: zhuangtai; beginp0: process(clk,cr) beginif 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_s

26、tate=s23;else 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

27、;next_state 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;n

28、ext_state 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 数码管扫描程序设计

29、及仿真2.4.1 基本设计思路由于本程序中只需要用到一位数码管的显示,因此就无需数码管进行动态扫描,因此,直接在程序中选通一位数码管即可。并把键盘扫描程序的键值输出信号直接接到数码管扫描程序的输入信号端口,再通过case语句的选择即可将对应的数码管段值状态输入到数码管进行相应的显示,实现系统指定的功能。2.4.2 数码管扫描模块图图2.4.1 数码管扫描模块图图中cr接复位端,keycode1接键盘扫描的键值输出信号端口,SG作为数码管七段的控制输出信号,BT作为八位数码管的位选端。2.4.3 数码管扫描程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;US

30、E 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 SCAN_LED ISBEGINP1:PROCESS( keycode1 ) BEGINif(cr=0) then BT=0; elsif(cr=1) then BT SG SG SG SG SG

31、SG SG SG SG SG SG SG SG NULL ; END CASE ; END PROCESS P1; END;2.4.4 数码管扫描仿真波形图2.4.2 数码管扫描仿真波形第3章 系统总电路设计与仿真3.1 系统总电路模块图 图3.1.1 总电路模块图图中,clk接时钟脉冲,cr接复位端,kin1,kin2,kin3分别接入键盘行扫描,clk1接一提供给点阵显示的时钟脉冲。SG60接数码管段选信号,BT为数码管位选信号输出,keyv3.0为键盘列扫描,comb_outputs7.0控制彩灯的输出端,hang15.0,lie3.0分别为点阵行列的输入扫描信号。3.2 总电路仿真波形

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

33、好了资料,编出了程序,尤其也在键盘消抖上下了功夫,原本我的方案是通过计数器延时而实现键盘消抖(借鉴了单片机键盘消抖的程序思路)。但是,当我们借回来EDA试验箱自己搭接好了线路,下载程序后,才发现,效果不如人意,其中那个消抖电路最不好实现,于是,我们一组的人就经常聚在一起讨论这个问题,因为我们的消抖效果都不理想。但是,讨论了半天也没个好的方案,于是,我们就大量查阅资料,最后,找到了一个效果比较理想的消抖程序设计方法,并借鉴了此思路,顺利地攻克了键盘扫描及消抖的问题,实现了既定的功能,原本我们的课题任务仅仅只要完成这一步就可以啦,但是,后来陈老师要我们各自扩展相应的功能,我选择的是扩展一个彩灯,以

34、及点阵,做彩灯模块的时候,由于刚开始有一个if语句的顺序写错弄的结果总是不理想,经过我一次又一次耐心的检查调试,最后终于完成了彩灯控制模块的设计,我也切切实实的感受到了经过自己努力后换来的成功的喜悦。最后,我就做点阵模块,刚开始,我还不了解点阵的工作原理,于是,我利用一个高电平信号线分别测试点阵的20个引脚,最终确定了行高电平有效,列低电平有效的基本信息。然后,再对字符进行编码。最后,经过,几次调试后,这个模块的功能也实现了,当我们提前完成了既定的任务后,老师也表扬了我们,我们从中也真正尝到了学习的乐趣,虽然编程都是自己独立完成,但我们组四个成员遇到问题相互探讨,在这个过程中,我们学到的不仅是

35、将课内的理论知识与实践动手操作联系了起来,而且我们也发挥了团队合作的效力,最终都取得了比较好的结果。在最后,我也得对我们的指导老师陈老师表示衷心的感谢。第6章 参考文献1. 康华光主编的电子技术基础(数字部分),高等教育出版社。2. 阎石主编的电子技术基础(数字部分),清华大学出版社。3. 刘洪喜,陆颖编著.VHDL电路设计实用教程,清华大学出版社。4. 郭照南主编的电子技术与EDA技术课程设计,中南大学出版社。第7章 附录7.1 点阵字符显示效果图 图7.1.1 点阵字符显示效果图7.2 彩灯显示结果图7.2.1 彩灯显示结果电气信息学院课程设计评分表项 目评 价设计方案的合理性与创造性硬件制作或软件编程完成情况*硬件制作测试或软件调试结果*设计说明书质量设计图纸质量答辩汇报的条理性和独特见解答辩中对所提问题的回答情况完成任务情况独立工作能力组织纪律性(出勤率)综合评分 指导教师签名:_ 日 期:_ 注:表中标*号项目是硬件制作或软件编程类课题必填内容;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!