预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共39页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

矩阵键盘控制接口电路(完整版)实用资料(可以直接使用,可编辑完整版实用资料,欢迎下载)电子信息工程专业年月日实验名称矩阵键盘控制接口电路指导教师姓名年级学号成绩预习部分实验目的实验基本原理主要仪器设备(含必要的元器件、工具)实验原理:扫描信号为BCOM[8..1],在BCOM[8..1]前已接有一个3-8译码器,3-8译码器的输入为SEL0~SEL3。当3-8译码器的输入为“000”时,即BCOM1为‘0’,其他位为‘1’,我们按下第一排第一键,此时KIN0输出‘0’,KIN1~KIN3输出全为‘1’,按下第二排第二键时,KIN1输出‘0’,其他输出‘1’;当3-8译码器输入为001时,即BCOM2为‘0’,我们按下第一排第二键,此时KIN0输出‘0’,KIN1~KIN3输出全为‘1’,同理其他键依此类推。键盘上的每个按键就是一个开关,当某键被按下时,该按键的接点会呈现‘0’状态,反之为‘1’。扫描信号为SEL[2..0]进入3-8译码器,再从译码器输出到键盘,所以第一次只能扫描一排,依此周而复始。按键位置与数码的关系如表40-1所示。若从KIN[3..0]输出的皆为‘1’时,表示没有按键按下,代表该列没有按键被按下,则不进行按键编码的操作,反之,如果有被按下时,则应将KIN[3..0]读出的值送到译码电路进行编码。表40-1按键位置与数码关系SEL2~SEL0KIN3~KIN0对应的按键00011100110161011LAST0111CTRL00111101110171011STEP0111EMPTY1010111021101REG1011C0111EMPTY2011111031101EXEC1011D0111EMPTY31001110MEM1011E0111EMPTY41011110ESC110191011F0111SHIFT110111041101A1011NEXT0111NONE111111051101B1011ENTER0111NONE11018实验内容:按键的去抖:消抖动电路:时钟产生:libraryieee;useieee.std_logic_1164.all;entitydivisport(clr,clk:inbit;q:bufferbit);enddiv;architectureartofdivisbeginprocess(clr,clk)variablecount:integerrange0to12499;beginif(clk='1'andclk'event)thenifclr='1'thencount:=0;elsifcount=12499thencount:=0;q<=notq;elsecount:=count+1;endif;endif;endprocess;endart;(2)仿真图键盘扫描译码电路:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitykeyboard4_4isport(rst:instd_logic;clk:instd_logic;keyin:instd_logic_vector(3downto0);scan:outstd_logic_vector(3downto0);leds:outstd_logic_vector(3downto0));endkeyboard4_4;architecturekeyboard4_4_archofkeyboard4_4issignalclkfrq:std_logic;signalcntscn:std_logic_vector(1downto0);signalscnlin:std_logic_vector(3downto0);signalcntfrq:std_logic_vector(14downto0);--signalcntfrq:std_logic_vector(3downto0);signallednum:std_logic_vector(7downto0);beginprocess(rst,clk,clkfrq)beginifrst='0'thenclkfrq<='0';cntfrq<=(others=>'0');elsifclk'eventandclk='1'then--ifcntfrq="1111"thencntfrq<=(others=>'0');clkfrq<=notclkfrq;elsecntfrq<=cntfrq+1;endif;endif;endprocess;process(rst,clkfrq)beginifrst='0'thencntscn<="00";elsifclkfrq'eventandclkfrq='1'then