设计项目成绩评定表一、设计任务及要求:1、设计任务:利用EDA设计试验箱、微机和QuartusⅡ软件系统,设计并实现一个4*4键盘扫描电路。设计过程中使用VerilogHDL语言,完成硬件设计和功能仿真。最后下载EDA设计试验箱中予以实现。2、要求:在时钟控制下循环扫描键盘,根据列扫描信号和对应键盘响应信号确定键盘按键位置,并将按键值显示在7段数码管上。指导教师签名:年月日二、指导教师评语:指导教师签名:年月日三、成绩评定:指导教师签名:年月日四、系部意见:系部盖章:年月日设计报告书目录一、设计目的.................................................................3二、设计思路.................................................................3三、设计内容.................................................................43.1、原理分析............................................................43.11、4*4键盘的扫描...............................................43.1.2、扫描结果的显示................................................53.1.3、电路符号......................................................53.1.4、数码管地址选择控制信号........................................63.2、程序设计............................................................63.3、管脚分配...........................................................10四、系统调试与结果..........................................................11五、主要元器件与设备........................................................12六、课程设计体会............................................................13七、参考文献................................................................13一、设计目的1、掌握常用的输入设备—行列式键盘接口电路的实现方法。2、学习较复杂的数字系统设计方法。二、设计思路如下图所示为“4*4键盘”模拟图。行“kbrow”有四行:kbrow0、kbrow1、kbrow2、kbrow3。列“kbcol”有四列:kbcol0、kbcol1、kbcol2、kbcol3通过给四行赋值循环地对每行进行扫描,例如:通过行线赋值为“1000”时,这样就使得第0行“0键、1键、2键、3键”处在高电平的状态下。此时如果0键被按下,那么就有第0列输出为高电平。即四位kbcol输出为“1000”,获取键值为“0”然后在7段数码管上显示出来。图14*4键盘三、设计内容3.1、原理分析在数字系统设计中,4*4矩阵键盘是一种常见的输入装置,通常作为系统的输入模块。对应于键盘上每一个键的识别,一般采用扫描的方法来实现。下面介绍一种用列信号进行扫描时的基本原理和流程,如图2所示。当进行列扫描时,扫描信号由列引脚进入键盘,以1000、0100、0010、0001的顺序每次扫描不同的一列,然后读取行引脚的点评信号,以此可以判断是哪个按键被按下。例如,当扫描行信号独处的值为“0000”时,表示正在扫描“89AB”一列,如果该列没有按键被按下,则由行信号读出的值为“0000”;反之,如果按键“9”被按下时,则该行信号读出的值为“0110”。图24*4键盘及行列代码3.11、4*4键盘的扫描在这一部分中,利用时钟信号进行扫描和频率计数器的计数来完成对键盘的扫描。程序配套的4*4矩阵键盘电路图如下图所示:图3程序配套的4*4矩阵键盘电路图时钟信号给定相应的时钟信号,通过它的上升沿信号给计数器赋值。并同时读取复位信号,一旦获取到相应的复位信号,所有键盘值即被初始化复位。3.1.2、扫描结果的显示用7段数码管显示相应的扫描结果。其中7段数码管采用共阴极读取键值。当某一键被按下,相应的7段数码管获得高电平,便显示该键值,如图4所示:图47段数码管及所对应的I/O接口3.1.3、电路符号4*4矩阵键盘扫描电路的电路符号如图5所示。输入信号:时钟信号clk;开始信号start;行扫描信号kbrow[3:0]。输出信号:列扫描信号kbcool[3:0];7段显示控制信号seg7_out[6:0];数码管地址选择控制信号scan[2:0],图54*4矩阵键盘扫描电路的电路符号3.1.4、数码管地址选择控制信号数码管地址选择控制信号scan[2:0]用于选择哪个数码管显示数字,8个数码管(SM8-SM1)为共阴极数码管(段码为高电平点亮数码管),I/O2-I/O0为数码管位选,位选对应的数码管关系如下表一所示:表一:数码管地址选择控制信号对应的位选接口序列(硬件接口管教号)数码管选中状态,可显示I/O0(scan0)I/O1(scan1)I/O3(scan2)111SM8110SM7101SM6100SM5011SM4010SM3001SM2000SM13.2、程序设计modulejp(kbrow,seg7_out,scan,clk,start,kbcol);output[3:0]kbrow;//列扫描信号output[6:0]seg7_out;//7段显示控制信号output[2:0]scan;//数码管地址选择控制信号inputclk,start;//扫描时钟信号,开始信号,高电平有效input[3:0]kbcol;//行扫描信号reg[3:0]kbrow;reg[6:0]seg7_out;reg[2:0]scan;reg[1:0]sta;reg[1:0]count;reg[6:0]seg7;reg[4:0]dat;regfn;//按键标志位,判断是否有键被按下initialscan=3'b000;//只使用一个数码管显示//循环扫描计数器always@(posedgeclk)beginif(start==0)seg7=7'b0000000;elsebegincount=count+1;//循环列扫描case(count)2'b00:beginkbrow=4'b0001;sta=2'b00;end2'b01:beginkbrow=4'b0010;sta=2'b01;end2'b10:beginkbrow=4'b0100;sta=2'b10;end2'b11:beginkbrow=4'b1000;sta=2'b11;endendcase//行扫描译码case(sta)2'b00:begincase(kbcol)4'b0001:beginseg7=7'b111_1001;dat=5'b00011;end4'b0010:beginseg7=7'b110_1101;dat=5'b00010;end4'b0100:beginseg7=7'b011_0000;dat=5'b00001;end4'b1000:beginseg7=7'b111_1110;dat=5'b00000;enddefault:beginseg7=7'b000_0000;dat=5'b11111;endendcaseend2'b01:begincase(kbcol)4'b0001:beginseg7=7'b111_0000;dat=5'b00111;end4'b0010:beginseg7=7'b101_1111;dat=5'b00110;end4'b0100:beginseg7=7'b101_1011;dat=5'b00101;end4'b1000:beginseg7=7'b011_0011;dat=5'b00100;enddefault:beginseg7=7'b000_0000;dat=5'b11111;endendcaseend2'b10:begincase(kbcol)4'b0001:beginseg7=7'b001_1111;dat=5'b01011;end4'b0010:beginseg7=7'b111_0111;dat=5'b01011;end4'b0100:beginseg7=7'b111_1011;dat=5'b01001;end4'b1000:beginseg7=7'b111_1111;dat=5'b01000;enddefault:beginseg7=7'b000_0000;dat=5'b11111;endendcaseend2'b11:begincase(kbcol)4'b0001:beginseg7=7'b100_0111;dat=5'b01111;end4'b0010:beginseg7=7'b100_1111;dat=5'b01110;end4'b0100:beginseg7=7'b011_1101;dat=5'b01101;end4'b1000:beginseg7=7'b100_1110;dat=5'b01100;enddefault:beginseg7=7'b000_0000;dat=5'b11111;endendcaseenddefault:seg7=7'b000000;endcaseendendalwaysbeginfn=~(dat[0]&dat[1]&dat[2]&dat[3]&dat[4]);end//产生按键标志位,用于储存按键信息always@(posedgefn)//按键信息储存beginseg7_out=seg7;endendmodule3.3、管脚分配表二:管脚分配表tolocationclkPIN_79seg7_out[6]PIN_10seg7_out[5]PIN_11seg7_out[4]PIN_12seg7_out[3]PIN_13seg7_out[2]PIN_14seg7_out[1]PIN_15seg7_out[0]PIN_16kbrow[3]PIN_62kbrow[2]PIN_61kbrow[1]PIN_60kbrow[0]PIN_58kbcol[0]PIN_67kbcol[1]PIN_65kbcol[2]PIN_64kbcol[3]PIN_63scan[0]PIN_7scan[1]PIN_8scan[2]PIN_9四、系统调试与结果将实验箱与微机和电源分别连接好。首先检测试验箱是否可以使用,经检测无误后,开通电源。根据引脚的锁定情况,将clk时钟接128Hz时钟输入,对引脚配置编译后,可将设计好的程序下载到EDA实验箱,即可测试功能。当对应“数字E”按键的按下,在实验箱的7段数码管上,会显示对应的数字E。实验效果图如下图所示:五、主要元器件与设备1、EDA技术试验箱一个2、计算机一台3、QuartusⅡ软件六、课程设计体会通过此次课程设计,让我对EDA这门技术有了更深的体会,并更好的学会了使用QuartusⅡ软件进行硬件设计。此次课程设计时基于VerilogHDL语言进行的矩阵键盘控制接口电路设计,在课程设计时,我逐渐掌握了VerilogHDL语言的语句及语法等的使用。但在学习过程中,也遇到了很多困难,尤其是VerilogHDL语言的运用。我先上网找了