利用按键开关控制点阵进行十进制数字显示Word文件下载.docx
《利用按键开关控制点阵进行十进制数字显示Word文件下载.docx》由会员分享,可在线阅读,更多相关《利用按键开关控制点阵进行十进制数字显示Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
(1)学习掌握按键开关控制模块、点阵显示模块的工作原理及应用;
(2)熟练掌握VHDL编程语言,编写按键开关控制模块的控制逻辑;
(3)仿真所编写的程序,模拟验证所编写的模块功能;
(4)下载程序到芯片中,硬件验证所设置的功能,能够实现十进制数字的显示;
(5)整理设计内容,编写设计说明书。
3、
设计方案及实现情况
3.1、设计思路
此电路共由三个模块组成:
按键消抖模块、行选通信号产生模块与列扫描控制模块。
8×
8的LED点阵显示器是由64个LED组成,内部电路如图1所示。
图18×
8LED点阵电路原理图
共阳极的8×
8的LED点阵显示器的典型连接方式是:
每一行的8个阳极连在一起,由行扫描码锁存器和驱动器的一位控制,总共8行阳极连线由8位分别控制;
每一列的8个阴极连在一起,由列扫描码锁存器和驱动器的一位控制,总共8列阴极连线由8位分别控制。
本实验采用四块8×
8的LED点阵拼成的一个16×
16点阵(16列16行)作为1位字符显示的点阵码图。
点阵式LED显示器采用逐行扫描式工作。
要使点阵显示出一个字符的编程方法是:
首先选通第一行;
接着,向行码锁存器写入该行的字型码(即列数据)。
然后,按相同的方式选通第二行,写第二行的字型码……由此类推,直到写完所有行的字型码,完成一个字符的显示。
3.2、工作原理及框图
(1)工作原理
按键的抖动问题:
由于机械触点的弹性振动,按键在按下时不会马上稳定地接通而在弹起时也不能一下子完全的断开,因而在按键闭合和断开的瞬间均会出现一连串的抖动,这称为按键的抖动干扰,其产生的波形如图2所示,当按键按下时会产生前沿抖动,当按键弹起时会产生后沿抖动。
这是所有机械触点式按键在状态输出是的共性问题,抖动的时间长短取决于按键的机械特性与操作状态,一般为10ms-100ms,此为键盘处理设计时要考虑的一个重要参数。
图2按键抖动干扰产生的波形
键盘抖动干扰的消除:
按键的抖动会造成按一次键产生的开关状态被可编程逻辑器件误读几次。
为了使可编程逻辑器件能正确地读取按键状态,必须在按键闭合或断开时,消除产生的前沿或后沿抖动,
去抖动的方法有硬件方法和软件方法两种。
本次课程设计采用了软件方法:
软件方法是指编制一段时间大于100ms的延时程序,在第一次检测到有键按下时,执行这段延时子程序使键的前沿抖动消失后再检测该键状态,如果该键仍保持闭合状态电平,则确认为该键已稳定按下,否则无键按下,从而消除了抖动的影响。
同理,在检测到按键释放后,也同样要延迟一段时间,以消除后沿抖动,然后转入对该按键的处理。
点阵扫描电路的产生
扫描电路的作用是用来提供按键扫描信号K的电路,扫描信号的变化的顺序依次为1111111110-1111111101-1111111011-1111110111-1111101111-1111011111-1110111111-1101111111-1011111111-01111111111依次的周而复始。
扫描时依序分别扫描按键,当扫描信号为1111111110时,扫描K1这个按键,每扫描一个按键,就检查一次是否有按键按下,如果有按键按下,就马上停止扫描,立即进行按键编码动作,存储键码,如果没有按键按下,则继续扫描下一个。
(2)总体电路原理图
图3总体电路原理图
3.3、各模块功能描述
(1)消抖模块
图4消抖模块图
程序代码
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entityxiaodouis
port(
rst:
instd_logic;
k:
instd_logic_vector(9downto0);
clk:
instd_logic;
kout:
outstd_logic_vector(9downto0)
);
endxiaodou;
architectureaofxiaodouis
signalcount:
integerrange0to100;
begin
process(clk,rst,k)
if(rst='
0'
)then
count<
=0;
kout<
="
0000000000"
;
elsif(clk'
eventandclk='
1'
if(count=100)then
=k;
else
=count+1;
endif;
endprocess;
enda;
(2)行选通模块
图5行选通模块图
entitycntais
port(clk:
q:
outstd_logic_vector(3downto0));
endcnta;
architecturecnt_arcofcntais
begin
process(clk)
variabletmp:
std_logic_vector(3downto0);
ifclk'
then
iftmp="
1111"
tmp:
0000"
tmp:
=tmp+1;
endif;
endif;
q<
=tmp-1;
endprocess;
endcnt_arc;
图6行选通仿真波形图
(3)列扫描控制模块
图7列扫描控制模块图
entitycorais
port(ch:
sel:
instd_logic_vector(3downto0);
outstd_logic_vector(15downto0)
endcora;
architecturecorn_arcofcorais
process(ch,sel)
casechis
when"
1111111110"
=>
caseselis
0000000000000000"
0001"
0010"
0011"
0100"
0001111111111000"
0101"
0011111111111100"
0110"
0110000000000110"
0111"
1000"
1001"
1010"
1011"
1100"
1101"
1110"
whenothers=>
null;
endcase;
1111111101"
caseselis
0111111111111110"
when"
whenothers=>
1111111011"
0011000001111000"
0011000111111100"
0011001100001110"
0011001100000110"
0011011000000110"
0011110000000110"
0011110000001100"
0001100000011000"
when"
1111110111"
0001110000111000"
0011111001111100"
0110000110000110"
0011000110001100"
1111101111"
0000000110000000"
0000000110000011"
0000000110001110"
0000000110111000"
0000000111100000"
1111011111"
0011111110001100"
0111111110001100"
0110000110001100"
0110000111111100"
1110111111"
0001111110011000"
1101111111"
0000000000001100"
0000000000111100"
0000000001101100"
1111111100001100"
1011111111"
0111111111"
0001100111111000"
0000000000000000