4×4键盘扫描电路设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计项目成绩评定表
设计报告书目录
一、设计目的 (3)
二、设计思路 (3)
三、设计内容 (4)
3.1、原理分析 (4)
3.1 1、4* 4键盘的扫描 (4)
3.1.2、扫描结果的显示 (5)
3.1.3、电路符号 (5)
3.1.4、数码管地址选择控制信号 (6)
3.2、程序设计 (6)
3.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段数码管上显示出来。
图1 4 * 4键盘
三、设计内容
3.1、原理分析
在数字系统设计中,4*4矩阵键盘是一种常见的输入装置,通常作为系统的输入模块。
对应于键盘上每一个键的识别,一般采用扫描的方法来实现。
下面介绍一种用列信号进行扫描时的基本原理和流程,如图2所示。
当进行列扫描时,扫描信号由列引脚进入键盘,以1000、0100、0010、0001的顺序每次扫描不同的一列,然后读取行引脚的点评信号,以此可以判断是哪个按键被按下。
例如,当扫描行信号独处的值为“0000”时,表示正在扫描“89AB”一列,如果该列没有按键被按下,则由行信号读出的值为“0000”;反之,如果按键“9”被按下时,则该行信号读出的值为“0110”。
图2 4 * 4键盘及行列代码
3.1 1、4* 4键盘的扫描
在这一部分中,利用时钟信号进行扫描和频率计数器的计数来完成对键盘的扫描。
程序配套的4*4矩阵键盘电路图如下图所示:
图3 程序配套的4*4矩阵键盘电路图
时钟信号给定相应的时钟信号,通过它的上升沿信号给计数器赋值。
并同时读取复位信号,一旦获取到相应的复位信号,所有键盘值即被初始化复位。
3.1.2、扫描结果的显示
用7段数码管显示相应的扫描结果。
其中7段数码管采用共阴极读取键值。
当某一键被按下,相应的7段数码管获得高电平,便显示该键值,如图4所示:
图4 7段数码管及所对应的I/O接口
3.1.3、电路符号
4*4矩阵键盘扫描电路的电路符号如图5所示。
输入信号:时钟信号clk;开始信号start;行扫描信号kbrow[3:0]。
输出信号:列扫描信号kbcool[3:0];7段显示控制信号seg7_out[6:0];数码管地址选择控制信号scan[2:0],
图5 4*4矩阵键盘扫描电路的电路符号
3.1.4、数码管地址选择控制信号
数码管地址选择控制信号scan[2:0]用于选择哪个数码管显示数字,8个数码管(SM8-SM1)为共阴极数码管(段码为高电平点亮数码管),I/O2-I/O0为数码管位选,位选对应的数码管关系如下表一所示:
接口序列(硬件接口管教号)数码管选中状态,
可显示I/O0 (scan0) I/O1 (scan1) I/O3 (scan2)
1 1 1 SM8
1 1 0 SM7
1 0 1 SM6
1 0 0 SM5
0 1 1 SM4
0 1 0 SM3
0 0 1 SM2
0 0 0 SM1
3.2、程序设计
module jp(kbrow,seg7_out,scan,clk,start,kbcol);
output [3:0] kbrow;// 列扫描信号
output [6:0]seg7_out;// 7段显示控制信号
output [2:0] scan;//数码管地址选择控制信号
input clk,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;
reg fn;// 按键标志位,判断是否有键被按下
initial
scan<=3'b000;// 只使用一个数码管显示
//循环扫描计数器
always @ (posedge clk)
begin
if(start==0)
seg7<=7'b0000000;
else
begin
count<=count+1;
//循环列扫描
case(count)
2'b00:begin kbrow<=4'b0001;sta<=2'b00;end
2'b01:begin kbrow<=4'b0010;sta<=2'b01;end
2'b10:begin kbrow<=4'b0100;sta<=2'b10;end
2'b11:begin kbrow<=4'b1000;sta<=2'b11;end
endcase
//行扫描译码
case(sta)
2'b00:begin
case(kbcol)
4'b0001:begin seg7<=7'b111_1001;dat<=5'b00011;end
4'b0010:begin seg7<=7'b110_1101;dat<=5'b00010;end
4'b0100:begin seg7<=7'b011_0000;dat<=5'b00001;end
4'b1000:begin seg7<=7'b111_1110;dat<=5'b00000;end
default:begin seg7<=7'b000_0000;dat<=5'b11111;end
endcase
end
2'b01:begin
case(kbcol)
4'b0001:begin seg7<=7'b111_0000;dat<=5'b00111;end
4'b0010:begin seg7<=7'b101_1111;dat<=5'b00110;end
4'b0100:begin seg7<=7'b101_1011;dat<=5'b00101;end
4'b1000:begin seg7<=7'b011_0011;dat<=5'b00100;end
default:begin seg7<=7'b000_0000;dat<=5'b11111;end endcase
end
2'b10:begin
case(kbcol)
4'b0001:begin seg7<=7'b001_1111;dat<=5'b01011;end 4'b0010:begin seg7<=7'b111_0111;dat<=5'b01011;end 4'b0100:begin seg7<=7'b111_1011;dat<=5'b01001;end 4'b1000:begin seg7<=7'b111_1111;dat<=5'b01000;end default:begin seg7<=7'b000_0000;dat<=5'b11111;end endcase
end
2'b11:begin
case(kbcol)
4'b0001:begin seg7<=7'b100_0111;dat<=5'b01111;end 4'b0010:begin seg7<=7'b100_1111;dat<=5'b01110;end 4'b0100:begin seg7<=7'b011_1101;dat<=5'b01101;end 4'b1000:begin seg7<=7'b100_1110;dat<=5'b01100;end default:begin seg7<=7'b000_0000;dat<=5'b11111;end endcase
end
default:seg7<=7'b000000;
endcase
end
end
always
begin
fn<=~(dat[0]&dat[1]&dat[2]&dat[3]&dat[4]); end
//产生按键标志位,用于储存按键信息always @ (posedge fn)// 按键信息储存begin
seg7_out<=seg7;
end
endmodule
3.3、管脚分配
表二:管脚分配表
kbrow[2]PIN_61
kbrow[1]PIN_60
kbrow[0]PIN_58
kbcol[0]PIN_67
kbcol[1]PIN_65
kbcol[2]PIN_64
kbcol[3]PIN_63
scan[0]PIN_7
scan[1]PIN_8
scan[2]PIN_9
四、系统调试与结果
将实验箱与微机和电源分别连接好。
首先检测试验箱是否可以使用,经检测无误后,开通电源。
根据引脚的锁定情况,将clk时钟接128Hz时钟输入,对引脚配置编译后,可将设计好的程序下载到EDA实验箱,即可测试功能。
当对应“数字E”按键的按下,在实验箱的7段数码管上,会显示对应的数字E。
实验效果图如下图所示:
五、主要元器件与设备
1、EDA技术试验箱一个
2、计算机一台
3、QuartusⅡ软件
六、课程设计体会
通过此次课程设计,让我对EDA这门技术有了更深的体会,并更好的学会了使用QuartusⅡ软件进行硬件设计。
此次课程设计时基于Verilog HDL语言进行的矩阵键盘控制接口电路设计,在课程设计时,我逐渐掌握了Verilog HDL语言的语句及语法等的使用。
但在学习过程中,也遇到了很多困难,尤其是Verilog HDL语言的运用。
我先上网找了一些资料和程序,一点点的看,慢慢摸索着学习写语句。
最后在老师和同学的帮助下,终于完成了矩阵键盘控制接口电路的设计。
七、参考文献
[1] 宋烈武. EDA技术与实践教程. 北京:电子工业出版社,2009.8
[2] 江国强. 数字系统的V erilog HDL设计. 北京:机械工业出版社,2007.8
[3] 罗杰. Verilog HDL与数字ASIC设计基础. 武汉:华中科技大学出版社,2008年3月
[4] 周润景苏良碧. 基于Quartus II的数字系统Verilog HDL设计实例详解. 北京:电子工业
出版社,2010.5
[5] 潘松黄继业潘明. EDA技术实用教程—Verilog HDL版(第四版). 北京:科学出版社,
2010。