您好,欢迎访问三七文档
矩阵键盘实验一.实验目的:1.了解4*4矩阵键盘的工作原理。2.掌握利用行列扫描法读取按键信息及软件消抖的方法。3.熟悉掌握VHDL语言和QUARTUS2软件的使用。4.理解状态机的工作原理和设计方法。5.掌握利用EDA工具进行自顶向下的电子系统设计方法。二.实验任务设计制作一个检测4*4矩阵键盘的按键编码的实验,把实际按键的键值的八位编码先转换成从0000—1111的编码,再译成数码管能识别的八位编码,在数码管动态显示时,4*4矩阵键盘的第一行对应00—03,第二行对应04—07,第三行08—11,第四行对应12—15。三.实验原理:1.键盘的工作原理:按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。行线通过上拉电阻接到+5V电源上。无按键按下时,行线处于高电平的状态,而当有按键按下时,行线电平与此行线相连的列线电平决定。2.行列扫描法原理:第一步,使行线为编程的输入线,列线是输出线,拉低所有的列线,判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则所有的行线都为高电平。第二步,在第一步判断有键按下后,延时10ms消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下一步,否则返回第一步重新判断。第三步,开始扫描按键位置,采用逐行扫描,每间隔1ms的时间,分别拉低第一列,第二列,第三列,第四列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置,分别把行值和列值储存在寄存器里。第四步,从寄存器中找到行值和列值并把其合并,得到按键值,对次按键值进行编码,按照从第一行第一个一直到第四行第四个逐行进行编码,编码值从“0000”至“1111”,再进行译码,最后显示按键号码。3.数码管动态扫描原理:数码管的7个段及小数点都是由LED块组成的,显示方式分为静态显示和动态显示两种。数码管在静态显示方式时,其共阳管的位选信号均为低电平,四个数码管的共用段选线a、b、c、d、e、f、g、dp分别与CPLD的8根I/O口线相连,显示数字时只要给相应的段选线送低电平。数码管在动态显示方式时,在某一时刻只能有一个数码管被点亮显示数字,其余的处于非选通状态,位选码端口的信号改变时,段选码端口的信号也要做相应的改变,每位显示字符停留显示的时间一般为1-5ms,利用人眼睛的视觉惯性,在数码管上就能看到相当稳定的数字显示。四、实验模块电路图及引脚分配1.矩阵键盘电路图:1243K201243K221243K281243K301243K191243K251243K271243K331243K211243K231243K291243K311243K181243K241243K261243K32R3510KR3610KR3710KR3810K+5V1A121A241A361A482A1112A2132A3152A4171Y1181Y2161Y3141Y4122Y192Y272Y352Y431G12G19U1974LS2441A121A241A361A482A1112A2132A3152A4171Y1181Y2161Y3141Y4122Y192Y272Y352Y431G12G19U2174LS2445758606163646567P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P1.712345678K7CON8(矩阵键盘电路图)2.数码管电路图:abfcgdedpe1d2com3c4dp5b6a7com8f9g10U1LED8abfcgdedpe1d2com3c4dp5b6a7com8f9g10U2LED8abfcgdedpe1d2com3c4dp5b6a7com8f9g10U3LED8abfcgdedpe1d2com3c4dp5b6a7com8f9g10U4LED8abfcgdedpe1d2com3c4dp5b6a7com8f9g10U5LED8abfcgdedpe1d2com3c4dp5b6a7com8f9g10U6LED8R1220R92K+5VR2220R102K+5VR3220R112K+5VR4220R122K+5VR5220R132K+5VR6220R142K+5VABCDEFGDPM1M2M3M4M5M61A121A241A361A482A1112A2132A3152A4171Y1181Y2161Y3141Y4122Y192Y272Y352Y431G12G19U1374LS2441A121A241A361A482A1112A2132A3152A4171Y1181Y2161Y3141Y4122Y192Y272Y352Y431G12G19U1474LS2441A121A241A361A482A1112A2132A3152A4171Y1181Y2161Y3141Y4122Y192Y272Y352Y431G12G19U1574LS2441A121A241A361A482A1112A2132A3152A4171Y1181Y2161Y3141Y4122Y192Y272Y352Y431G12G19U1674LS2442212151617Q1PNPQ2PNPQ3PNPQ4PNPQ5PNPQ6PNP1820P2.5P2.4P2.321P2.2P2.1P2.030P0.7P0.6P0.5P0.4P0.3P0.0P0.2P0.112345678K5CON82928272524(数码管电路图)3.引脚分配:(1)矩阵键盘:器件引脚标号CPLD与引脚此连接引脚号L161L260L358L457H167H265H364H463(2)数码管:器件引脚标号CPLD与此引脚连接引脚号A12B15C16D17E18F20G21DP22M124M225M327M428M529M630五、实验步骤:1.启动Quartus2,新建一个*.vhd文件,通过硬件描述语言VHDL来编写矩阵键盘扫描实验程序。2.保存文件,编译并检查语法错误。3.利用Quartus2进行波形仿真,验证所编写的程序是否正确,如果错误,进行相应的修改。4.把输入、输出量分配给相应的引脚,重新编译。5.由并口线将计算机与实验板连接在一起,由软件的下载部分将*.pof下载芯片中。6.把三挡开关打到7128挡,进行实验验证并观察实验现象。7.整理实验内容,加深对实验的理解,并写下自己的心得,整理实验器材。六、实验程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYKEY4_4ISPORT(CLR,CLK:INSTD_LOGIC;--CLK40MH:INSTD_LOGIC_VECTOR(1TO4);L:OUTSTD_LOGIC_VECTOr(1TO4);SEL:OUTSTD_LOGIC_VECTOR(5DOWNTO0);LED8D:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDENTITYKEY4_4;ARCHITECTUREARTOFKEY4_4ISTYPESTIS(S0,S1,S2,S3,S4,S5,S6,S7);SIGNALS:ST;SIGNALCLK1K,CLK10K:STD_LOGIC;SIGNALEN:STD_LOGIC;SIGNALCNT:INTEGERRANGE0TO9;SIGNALD1,D0:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALD:STD_LOGIC_VECTOR(3DOWNTO0);BEGINCLKDIV_1K:PROCESS(CLR,CLK)VARIABLECNT:INTEGERRANGE0TO39999;VARIABLENCLK:STD_LOGIC;BEGINIFCLR='1'THENCNT:=0;NCLK:='0';ELSIFCLK'EVENTANDCLK='1'THENIFCNT=39999THENCNT:=0;NCLK:='1';ELSECNT:=CNT+1;NCLK:='0';ENDIF;ENDIF;CLK1K=NCLK;ENDPROCESSCLKDIV_1K;CLKDIV_10K:PROCESS(CLR,CLK)VARIABLECNT:INTEGERRANGE0TO3999;VARIABLENCLK:STD_LOGIC;BEGINIFCLR='1'THENCNT:=0;NCLK:='0';ELSIFCLK'EVENTANDCLK='1'THENIFCNT=3999THENCNT:=0;NCLK:='1';ELSECNT:=CNT+1;NCLK:='0';ENDIF;ENDIF;CLK10K=NCLK;ENDPROCESSCLKDIV_10K;SM_YS_JSQ:PROCESS(EN,CLK1K)VARIABLECOUNT:INTEGERRANGE0TO9;BEGINIFEN='1'THENCOUNT:=0;ELSIFCLK1K'EVENTANDCLK1K='1'THENIFCOUNT=9THENCOUNT:=0;ELSECOUNT:=COUNT+1;ENDIF;ENDIF;CNT=COUNT;ENDPROCESSSM_YS_JSQ;SM_KEY:PROCESS(CLR,CLK10K,H)VARIABLEEN0:STD_LOGIC;VARIABLEL0,KH0,KL0:STD_LOGIC_VECTOR(1TO4);VARIABLEJZ0:STD_LOGIC_VECTOR(7DOWNTO0);VARIABLEKHL0:STD_LOGIC_VECTOR(1TO8);BEGINIFCLR='1'THENEN0:='1';S=S0;ELSIFCLK10K'EVENTANDCLK10K='1'THENCASESISWHENS0=L0:=0000;EN0:='1';IFH/=1111THENS=S1;ELSES=S0;ENDIF;WHENS1=EN0:='0';IFCNT=9THENS=S2;ELSES=S1;ENDIF;WHENS2=EN0:='1';IFH/=1111THENS=S3;ELSES=S0;ENDIF;WHENS3=EN0:='0';CASECNTISWHEN1=L0:=0111;WHEN2=IFH/=1111THENKH0:=H;KL0:=0111;S=S4;ELSES=S3;ENDIF;WHEN3=L0:=1011;WHEN4=IFH/=1111THENKH0:=H;KL0:=1011;S=S4;ELSES=S3;ENDIF;WHEN5=L0:=1101;WHEN6=IFH/=1111THENKH0:=H;KL0:=1101;S=S4;ELSES=S3;ENDIF;WHEN7=L0:=1110;WHEN8=IFH/=1111THENKH0:=H;KL0:=1110;S=S4;ELSES=S3;ENDIF;WHENOTHERS=NULL;ENDCASE;WHENS4=EN0:='1';KHL0:=KH0&KL0;S=S5;WHENS5=EN0:='1';CASEKHL0ISWHEN01110111=JZ0:=00000000;WHEN01111011=JZ0:=00000001;WHEN01111101=JZ0:=00000010;WHEN01111110=JZ0:=00000011;WHEN10110111=JZ0:=00000100;WHEN10111011=JZ0:=00000101;WHEN10111101=JZ0:=00000110;WHEN10111110=JZ0:=00000111;WHEN11010111=JZ0:=00001000;WHEN11011011=JZ0:=00001001;WHEN11011101=JZ0:=00010000;WHEN11011110=JZ0:=00010001;WHEN11100111=JZ0:=00010010;WHEN11101011=JZ0:=00010011;WHEN111
本文标题:CPLD矩阵键盘
链接地址:https://www.777doc.com/doc-50781 .html