1、键盘扫描与数码管及点阵显示设计 课 程 设 计课程名称 EDA技术 课题名称 键盘扫描与数码管及点阵显示设计 专 业 电子科学与技术 班 级 0802 学 号 * 姓 名 * 指导教师 * 2011年 6 月 20 日 湖南工程学院课程设计任务书课程名称: EDA技术 题 目:键盘扫描与数码管及点阵显示设计 专业班级:电科0802 学号: * 学生姓名: * 指导老师: * 审 批:任务书下达日期 2011 年 6 月 13 日设计完成日期 2011年 6 月 20 日设计内容与设计要求一 设计内容:1 设计并调试键盘扫描与数码管显示电路;2 键盘为3*4,数码管为7段8位;3 以数字形式显示
2、键盘16个输入键的识别;4 外设置控制开关和防抖动电路;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
4、.2 引脚锁定后总电路图 194.3 程序下载界面 194.4 系统总体仿真结果 20第5章 总结与体会 21第6章 参考文献 22第7章 附录 237.1 点阵字符显示效果图 237.2 彩灯显示结果 23第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 键盘扫
7、描程序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_lo
8、gic_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
9、(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 knum=1 & 1& count(3 downto 2); elsif count0event and count0=1 then if(kin3=0) and c
10、ount(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 key
11、code=00000;xuanze=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 keycod
12、e=01011;xuanze=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个按键的控制分别输出“湖” ,“南” ,“工” ,“程” ,“学” ,“院”六个字符。2.2.2 点阵显示模块图图2.
13、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
14、 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; begi
15、nsel=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=001) then case sel is when 0000= lie=1111;hang lie=1110;hang lie=1101;hang lie=1100;hang lie=1011;hang lie=1010;
16、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_state=s0; elsif(dz=010) then next_state=s1; elsif(dz=011)then lie=1111;hang=0000000000000000;next_state=
17、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 case sel is when 0000= lie=1111;hang lie=1110;hang lie=1101;hang lie=1100;hang lie=1011;hang lie=1010;hang l
18、ie=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_state case sel is when 0000= lie=1111;hang lie=1110;hang lie=1101;hang lie=1100;hang lie=1011;hang lie=1010;ha
19、ng 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_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 ; next_state case sel is when 0000= lie=1111;h
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1