44键盘扫描电路设计.docx
- 文档编号:8258505
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:11
- 大小:1.53MB
44键盘扫描电路设计.docx
《44键盘扫描电路设计.docx》由会员分享,可在线阅读,更多相关《44键盘扫描电路设计.docx(11页珍藏版)》请在冰豆网上搜索。
44键盘扫描电路设计
设计项目成绩评定表
一、设计任务及要求:
1、设计任务:
利用EDA设计试验箱、微机和QuartusⅡ软件系统,设计并实现一个4*4键盘扫描电路。
设计过程中使用VerilogHDL语言,完成硬件设计和功能仿真。
最后下载EDA设计试验箱中予以实现。
2、要求:
在时钟控制下循环扫描键盘,根据列扫描信号和对应键盘响应信号确定键盘按键位置,并将按键值显示在7段数码管上。
指导教师签名:
年月日
二、指导教师评语:
指导教师签名:
年月日
三、成绩评定:
指导教师签名:
年月日
四、系部意见:
系部盖章:
年月日
设计报告书目录
一、设计目的
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)
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、程序设计
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;//按键标志位,判断是否有键被按下
initial
scan<=3'b000;//只使用一个数码管显示
//循环扫描计数器
always@(posedgeclk)
begin
if(start==0)
seg7<=7'b0000000;
else
begin
count<=count+1;
//循环列扫描
case(count)
2'b00:
beginkbrow<=4'b0001;sta<=2'b00;end
2'b01:
beginkbrow<=4'b0010;sta<=2'b01;end
2'b10:
beginkbrow<=4'b0100;sta<=2'b10;end
2'b11:
beginkbrow<=4'b1000;sta<=2'b11;end
endcase
//行扫描译码
case(sta)
2'b00:
begin
case(kbcol)
4'b0001:
beginseg7<=7'b111_1001;dat<=5'b00011;end
4'b0010:
beginseg7<=7'b110_1101;dat<=5'b00010;end
4'b0100:
beginseg7<=7'b011_0000;dat<=5'b00001;end
4'b1000:
beginseg7<=7'b111_1110;dat<=5'b00000;end
default:
beginseg7<=7'b000_0000;dat<=5'b11111;end
endcase
end
2'b01:
begin
case(kbcol)
4'b0001:
beginseg7<=7'b111_0000;dat<=5'b00111;end
4'b0010:
beginseg7<=7'b101_1111;dat<=5'b00110;end
4'b0100:
beginseg7<=7'b101_1011;dat<=5'b00101;end
4'b1000:
beginseg7<=7'b011_0011;dat<=5'b00100;end
default:
beginseg7<=7'b000_0000;dat<=5'b11111;end
endcase
end
2'b10:
begin
case(kbcol)
4'b0001:
beginseg7<=7'b001_1111;dat<=5'b01011;end
4'b0010:
beginseg7<=7'b111_0111;dat<=5'b01011;end
4'b0100:
beginseg7<=7'b111_1011;dat<=5'b01001;end
4'b1000:
beginseg7<=7'b111_1111;dat<=5'b01000;end
default:
beginseg7<=7'b000_0000;dat<=5'b11111;end
endcase
end
2'b11:
begin
case(kbcol)
4'b0001:
beginseg7<=7'b100_0111;dat<=5'b01111;end
4'b0010:
beginseg7<=7'b100_1111;dat<=5'b01110;end
4'b0100:
beginseg7<=7'b011_1101;dat<=5'b01101;end
4'b1000:
beginseg7<=7'b100_1110;dat<=5'b01100;end
default:
beginseg7<=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@(posedgefn)//按键信息储存
begin
seg7_out<=seg7;
end
endmodule
3.3、管脚分配
表二:
管脚分配表
to
location
clk
PIN_79
seg7_out[6]
PIN_10
seg7_out[5]
PIN_11
seg7_out[4]
PIN_12
seg7_out[3]
PIN_13
seg7_out[2]
PIN_14
seg7_out[1]
PIN_15
seg7_out[0]
PIN_16
kbrow[3]
PIN_62
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Ⅱ软件进行硬件设计。
此次课程设计时基于VerilogHDL语言进行的矩阵键盘控制接口电路设计,在课程设计时,我逐渐掌握了VerilogHDL语言的语句及语法等的使用。
但在学习过程中,也遇到了很多困难,尤其是VerilogHDL语言的运用。
我先上网找了一些资料和程序,一点点的看,慢慢摸索着学习写语句。
最后在老师和同学的帮助下,终于完成了矩阵键盘控制接口电路的设计。
七、参考文献
[1]宋烈武.EDA技术与实践教程.北京:
电子工业出版社,2009.8
[2]江国强.数字系统的VerilogHDL设计.北京:
机械工业出版社,2007.8
[3]罗杰.VerilogHDL与数字ASIC设计基础.武汉:
华中科技大学出版社,2008年3月
[4]周润景苏良碧.基于QuartusII的数字系统VerilogHDL设计实例详解.北京:
电子工业出版社,2010.5
[5]潘松黄继业潘明.EDA技术实用教程—VerilogHDL版(第四版).北京:
科学出版社,2010
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 44 键盘 扫描 电路设计