矩阵键盘扫描实验
实验一 矩阵键盘检测

实验一矩阵键盘检测一、实验目的:1、学习非编码键盘的工作原理和键盘的扫描方式。
2、学习键盘的去抖方法和键盘应用程序的设计。
二、实验设备:51/AVR实验板、USB连接线、电脑三、实验原理:键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。
我们可以通过键盘输入数据或命令来实现简单的人机通信。
1、按键的分类一般来说,按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。
前者造价低,后者寿命长。
目前,微机系统中最常见的是触点式开关按键(如本学习板上所采用按键)。
按键按照接口原理又可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。
编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的识别。
全编码键盘由专门的芯片实现识键及输出相应的编码,一般还具有去抖动和多键、窜键等保护电路,这种键盘使用方便,硬件开销大,一般的小型嵌入式应用系统较少采用。
非编码键盘按连接方式可分为独立式和矩阵式两种,其它工作都主要由软件完成。
由于其经济实用,较多地应用于单片机系统中(本学习板也采用非编码键盘)。
2、按键的输入原理在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。
也就是说,它能提供标准的TTL 逻辑电平,以便与通用数字系统的逻辑电平相容。
此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。
当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。
因此,键信息输入是与软件结构密切相关的过程。
对于一组键或一个键盘,通过接口电路与单片机相连。
单片机可以采用查询或中断方式了解有无按键输入并检查是哪一个按键按下,若有键按下则跳至相应的键盘处理程序处去执行,若无键按下则继续执行其他程序。
矩阵键盘扫描

矩阵键盘扫描1.实验目的与效果:4¡4矩阵键盘在众多场合有举足轻重的地位,所以有必要学好矩阵键盘扫描的编程。
实验板上的矩阵键盘是接单片机P2口的,以P2.4-P2.7作输出线,P2.0-P2.3作输入线;每按一个键会在数码管上显示相关的信息。
键盘上可以这样来定义,这只是个例子,用户在运用矩阵键盘键值是可以重新定义之。
2.原理图:矩阵键盘连接图3.实验板上操作:1)矩阵键盘在实验板上已经固定连接P2口了。
2)将HEX文件烧到单片机上。
3)将数码管的位选拨码开关拨到ON上。
4.实物连接图:拨码开关全部拨到ON5. C语言程序://MCU:AT89S51//晶振:12M#include"AT89X51.H"unsigned char code numcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0XFF};//数字0~9及ABCDEF共阳数码管代码unsigned char code charcode[]={0xc0,0xc7,0xc7,0x86,0x89};// HELLO 字样共阳数码管代码unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //数码管位选代码unsigned char dispbuf[8]={16,16,16,0,1,2,3,4};unsigned char disp_bit_count;unsigned char disp_count;unsigned char temp;unsigned char key;unsigned char i,j;/********1ms延时子程序***********/delay_nms(unsigned int n){unsigned int i;unsigned char j;for(i=0;i<n;i++)for(j=0;j<120;j++); //空操作}unsigned char keyscan(void){P2=0xff;P2_4=0;temp=P2;temp=temp&0x0f;if (temp!=0x0f){delay_nms(10);temp=P2;temp=temp&0x0f;if (temp!=0x0f){temp=P2;temp=temp&0x0f;switch(temp){case 0x0e:key=7;break;case 0x0d:key=8;break;case 0x0b:key=9;break;case 0x07:key=10;break;}temp=P2;temp=temp & 0x0f;while(temp!=0x0f){temp=P2;temp=temp&0x0f;}}}P2=0xff;P2_5=0;temp=P2;temp=temp&0x0f;if (temp!=0x0f){delay_nms(10);temp=P2;temp=temp&0x0f;if (temp!=0x0f){temp=P2;temp=temp&0x0f;switch(temp){case 0x0e:key=4;break;case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=11;break;}temp=P2;temp=temp & 0x0f;while(temp!=0x0f){temp=P2;temp=temp&0x0f;}}}P2=0xff;P2_6=0;temp=P2;temp=temp&0x0f;if (temp!=0x0f){delay_nms(10);temp=P2;temp=temp&0x0f;if(temp!=0x0f){temp=P2;temp=temp&0x0f;switch(temp){case 0x0e:key=1;case 0x0d:key=2;break;case 0x0b:key=3;break;case 0x07:key=12;break;}temp=P2;temp=temp&0x0f;while(temp!=0x0f){temp=P2;temp=temp&0x0f;}}}P2=0xff;P2_7=0;temp=P2;temp=temp & 0x0f;if (temp!=0x0f){delay_nms(10);temp=P2;temp=temp&0x0f;if (temp!=0x0f){temp=P2;temp=temp & 0x0f;switch(temp){case 0x0e:key=0;break;case 0x0d:key=13;break;case 0x0b:key=14;case 0x07:key=15;break;}temp=P2;temp=temp & 0x0f;while(temp!=0x0f){temp=P2;temp=temp & 0x0f;}}}return (key);}void main(void){TMOD=0x02; //使用定时器0,选择方式2(常数自动重装的8位定时器)TH0=0x06; //保存数值,用于自动重装TL0=0x06; //定时250uS初值TR0=1; //开定时器0ET0=1; //开定时器0溢出中断EA=1; //开总中断while(1){dispbuf[0]=keyscan();}}/**********T0250uS中断服务程序***************/void t0(void) interrupt 1 using 0{disp_count++;if(disp_count==8){disp_count=0;if(disp_bit_count>=3)P0=charcode[dispbuf[disp_bit_count]];elseP0=numcode[dispbuf[disp_bit_count]];P1=bitcode[disp_bit_count];disp_count=0;disp_bit_count++;if(disp_bit_count==8){disp_bit_count=0;}}}。
矩阵式键盘设计实训报告

一、实验目的1. 掌握矩阵式键盘的工作原理及电路设计方法。
2. 熟悉单片机与矩阵键盘的接口连接及编程技巧。
3. 提高动手实践能力,培养创新意识。
二、实验设备1. 单片机实验平台2. 矩阵键盘模块3. 数字多用表4. 编译器(如Keil51)5. 连接线三、实验原理矩阵键盘是一种常用的键盘设计方式,通过行列交叉点连接按键,从而实现多个按键共用较少的I/O端口。
矩阵键盘通常采用逐行扫描的方式检测按键状态,当检测到按键按下时,根据行列线的电平状态确定按键位置。
四、实验内容1. 矩阵键盘电路设计2. 矩阵键盘编程3. 矩阵键盘测试与调试五、实验步骤1. 电路设计(1)根据矩阵键盘的规格,确定行线和列线的数量。
(2)将行线和列线分别连接到单片机的I/O端口。
(3)在行线上串联电阻,防止按键抖动。
(4)连接电源和地线。
2. 编程(1)初始化单片机的I/O端口,将行线设置为输出,列线设置为输入。
(2)编写逐行扫描程序,逐行拉低行线,读取列线状态。
(3)根据行列线状态判断按键位置,并执行相应的操作。
3. 测试与调试(1)将编写好的程序下载到单片机中。
(2)连接矩阵键盘,观察按键是否正常工作。
(3)使用数字多用表检测行列线电平,确保电路连接正确。
(4)根据测试结果,对程序进行调试,直到矩阵键盘正常工作。
六、实验结果与分析1. 电路连接正确,按键工作正常。
2. 逐行扫描程序能够正确检测按键位置。
3. 按键操作能够触发相应的程序功能。
七、实验总结1. 通过本次实训,掌握了矩阵式键盘的工作原理及电路设计方法。
2. 熟悉了单片机与矩阵键盘的接口连接及编程技巧。
3. 提高了动手实践能力,培养了创新意识。
八、心得体会1. 在实验过程中,遇到了电路连接错误和程序调试困难等问题,通过查阅资料、请教老师和同学,最终成功解决了问题。
2. 本次实训让我深刻体会到理论知识与实际操作相结合的重要性,同时也认识到团队合作的重要性。
九、改进建议1. 在电路设计过程中,可以考虑增加去抖动电路,提高按键稳定性。
关于矩阵键盘行列扫描的测试实验

void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f; // 位定义的引脚
if(GPIO_KEY!=0x0f) //读取按键是否按下
/*******************************************************************************
* 函数名 : KeyDown
* 函数功能 : 检测有按键按下并读取键值
* 输入 : 无
* 输出 : 无
* 作者 : INK
* 日期地点 : NANKING
下图就是矩阵键盘 由P1口控制,P10~P13为列 P14~P17为输出低电平,低四位输出高电平,检测低四位不全为高可确定列;反过来高四位输出高电平,低四位输出高电平,高四位不全为高确定行,行列交叉即可获得按键键值。废话不多说,直接上程序,我已经详细注解过了,不懂多看看哈。
{
Delay10ms(); //延时10ms进行消抖
if(GPIO_KEY!=0x0f) //再次检测键盘是否按下
{
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{ //此段程序只是为了确定列的值 方便在后面进行测试行的时候加减运算 获得具体案件的行列值 从而转换为按键值
case(0X07): KeyValue=0;break;//扫描第一列
switch(GPIO_KEY)
{ //已经进行过
case(0X70): KeyValue=KeyValue;break;//自己去看为什么是 0X70 列的时候又为什么是0X07 硬件相结合
矩阵键盘实验报告

自主学习用实验矩阵键盘识别实验
一、实验目的
1、掌握 4×4 矩阵键盘的工作原理和键盘的扫描方式。
2、掌握键盘的去抖方法和键盘应用程序的设计。
二、实验设备
1、PC 机一台;
2、开放式模块化单片机教学实验箱一台;
3、USB 下载线一根。
三、实验内容
自行编制程序,用 51 单片机实现 4×4 矩阵键盘扫描,采用线反转法;并实现当S11按下时在数码管上显值“0”,当S12按下时在数码管上显值“1”……,即依次将 S11 至S26按下,在数码管上依次显示十六进制数“0-F”,矩阵键盘原理图如图1-1 所示。
单片机与数码管接口电路原理图如图 1-2 所示。
图 1-1 矩阵键盘接口电路
图 1-2 数码管接口电路原理图
四、思考题
1.画出所编程序的流程图;
2.若要实现2×4 矩阵键盘,软硬件作如何修改。
答:将行线P2^3, P2^4接线去掉。
程序对应部分P2=0xfd; P2=0xfe;删掉。
3.实验中有何故障、问题出现,是否得到解决?如何解决的?问题:显示值对应出错。
原来是共阳段码和共阴段码弄相反了。
DSP-矩阵键盘扫描实验

班级学号姓名同组人实验日期室温大气压成绩实验五矩阵键盘扫描实验一、实验目的1、掌握键盘信号的输入,DSP I/O的使用;2、掌握键盘信号之间的时序的正确识别和引入。
二、实验设备1、一台装有CCS2000软件的计算机;2、插上2812主控板的DSP实验箱;3、DSP硬件仿真器。
三、实验原理实验箱上提供一个 4 * 4的行列式键盘。
TMS320F2812的8个I / O口与之相连,这里按键的识别方法是扫描法。
当有键被按下时,与此键相连的行线电平将由此键相连的列线电平决定,而行线的电平在无法按键按下时处于高电平状态。
如果让所有的列线也处于高电平,那么键按下与否不会引起行线电平的状态变化,始终为高电平。
所以,在让所有的列线处于高电平是无法识别出按键的。
现在反过来,让所有的列线处于低电平,很明显,按键所在的行电平将被拉成低电平。
根据此行电平的变化,便能判断此行一定有按键被按下,但还不能确定是哪个键被按下。
假如是5键按下,为了进一步判定是哪一列的按键被按下,可在某一时刻只让一条列线处于低电平,而其余列线处于高电平。
那么按下键的那列电平就会拉成低电平,判断出哪列为低电平就可以判断出按键号码。
模块说明:此模块共有两种按键,KEY1—KEY4是轻触按键,在按键未按下时为高电平输入FPGA,当按键按下后对FPGA输入低电平,松开按键后恢复高电平输入,KEY5—KEY8是带自锁的双刀双掷开关,在按键未按下时是低电平,按键按下时为高电平并且保持高电平不变,只有再次按下此按键时才恢复低电平输入。
每当按下一个按键时就对FPGA就会对此按键进行编码,KEY1—KEY8分别对应的是01H、02H、03H、04H、05H、06H、07H、08H。
在编码的同时对DSP产生中断INT1,这个时候DSP就会读取按键的值,具体使用方法可以参考光盘例程key,prj。
实验流程图:1、把2812 模块小板插到大板上;打开液晶模块的电源开关;2、按下键盘按键,液晶会显示所按键的号码。
(实验四)单片机矩阵键盘检测和液晶仿真实验

实验四单片机矩阵键盘检测和液晶仿真实验(4学时)一、实验任务利用51单片机实现4X4矩阵键盘和LCD1602液晶显示人机交互系统,编程实现:(1)按键扫描(1、2、……9、A、B、C、D、E、F)和LCD1602显示按键的键号,格式为:KEYNUM+按键号;(2)LCD1602的第一行显示加1功能,初始数字为980,显示位置自己确定,每次按下某一个按键,数字加1,范围为15---20;二、实验目的1、掌握仿真软件Proteus和单片机联调的方法;2、掌握矩阵键盘扫描检测的原理,并且编程实现键盘按键的检测;3、掌握LCD1602液晶显示的原理,并且编程实现LCD1602的显示功能;4、掌握利用单片机实现键盘检测和液晶显示的功能组合,并掌握独立编程控制的能力。
三、实验设备电脑、Proteus软件、Keil软件四、实验原理(一)矩阵键盘扫描检测原理按照按键结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点开关按键,如电气式按键、磁感应按键等。
在单片机应用系统中,通过按键实现控制功能和数据输入是非常普遍的。
在所需按键数量不多时,系统常采用独立式按键。
独立式按键是指每个按键单独占有一根I/O口线,且其工作状态不会影响其他I/O口线的工作状态。
这种按键的电路配置灵活,软件结构简单。
不过在实际应用中,由于不同的系统对按键的要求不同,因此,对按键程序的设计要考虑全面,以便更好地完成按键所设定的功能。
在按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图4.1所示。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样一个端口(如P1口)就可以构成4×4=16个按键,比直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出1键(共9键)。
由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
矩阵按键实训报告

一、实训背景随着电子技术的飞速发展,按键技术在电子设备中的应用越来越广泛。
矩阵按键因其结构紧凑、易于扩展等优点,被广泛应用于各类电子设备中。
为了提高学生对矩阵按键原理和应用的理解,本次实训选取了矩阵按键作为实训内容。
二、实训目的1. 理解矩阵按键的原理和结构;2. 掌握矩阵按键的驱动程序编写;3. 学会使用矩阵按键实现简单功能;4. 提高学生的动手能力和实践能力。
三、实训内容1. 矩阵按键原理与结构矩阵按键是一种利用行列交叉原理来检测按键状态的按键电路。
它由若干行和列组成,通过行列交叉的交叉点连接按键。
当按键被按下时,相应的行和列被连接,从而实现按键的识别。
2. 矩阵按键驱动程序编写以51单片机为例,介绍矩阵按键驱动程序的编写方法。
(1)初始化矩阵按键:设置行线为输出,列线为输入,并对行线进行上拉。
(2)扫描按键:从第一行开始,依次将行线置低电平,其他行线置高电平,然后读取列线的状态。
如果列线为低电平,则表示该行对应的按键被按下。
(3)消抖处理:为了避免按键抖动引起的误判,需要对按键状态进行消抖处理。
3. 使用矩阵按键实现简单功能以一个简单的计算器为例,介绍使用矩阵按键实现计算器功能的方法。
(1)设计计算器界面:根据计算器的功能需求,设计按键布局。
(2)编写按键扫描程序:根据按键布局,编写按键扫描程序,实现按键的识别。
(3)编写功能实现程序:根据计算器的功能需求,编写功能实现程序,如加、减、乘、除等。
四、实训过程1. 实训准备:准备51单片机开发板、矩阵按键模块、电源等实验器材。
2. 矩阵按键原理与结构学习:通过查阅资料,了解矩阵按键的原理和结构。
3. 矩阵按键驱动程序编写:根据实训要求,编写矩阵按键驱动程序。
4. 矩阵按键功能实现:使用矩阵按键实现计算器功能,包括按键扫描、消抖处理、功能实现等。
5. 实验调试:对实验程序进行调试,确保程序正常运行。
五、实训总结通过本次实训,我掌握了矩阵按键的原理和结构,学会了矩阵按键驱动程序的编写,以及使用矩阵按键实现简单功能的方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验矩阵键盘扫描实验
一、实验要求
利用4X4 16位键盘和一个7段LED构成简单的输入显示系统,实现键盘输入和LED 显示实验。
二、实验目的
1、理解矩阵键盘扫描的原理;
2、掌握矩阵键盘与51单片机接口的编程方法。
三、实验电路及连线
Proteus实验电路
1、主要知识点概述:
本实验阐述了键盘扫描原理,过程如下:首先扫描键盘,判断是否有键按下,再确定是哪一个键,计算键值,输出显示。
2、效果说明:
以数码管显示键盘的作用。
点击相应按键显示相应的键值。
五、实验流程图
1、Proteus仿真
a、在Proteus中搭建和认识电路;
b、建立实验程序并编译,加载hex文件,仿真;
c、如不能正常工作,打开调试窗口进行调试
参考程序:
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV DPTR,#TABLE ;将表头放入DPTR
LCALL KEY ;调用键盘扫描程序
MOVC A,@A+DPTR ;查表后将键值送入ACC
MOV P2,A ;将ACC值送入P0口
LJMP MAIN ;返回反复循环显示
KEY: LCALL KS ;调用检测按键子程序
JNZ K1 ;有键按下继续
LCALL DELAY2 ;无键按调用延时去抖
AJMP KEY ;返回继续检测按键
K1:
LCALL DELAY2
LCALL DELAY2 ;有键按下延时去抖动
LCALL KS ;再调用检测按键程序
JNZ K2 ;确认有按下进行下一步
AJMP KEY ;无键按下返回继续检测
K2: MOV R2,#0EFH ;将扫描值送入R2暂存MOV R4,#00H ;将第一列值送入R4暂存
K3: MOV P1,R2 ;将R2的值送入P1口
L6: JB P1.0,L1 ;P1.0等于1跳转到L1
MOV A,#00H ;将第一行值送入ACC
AJMP LK ;跳转到键值处理程序
L1: JB P1.1,L2 ;P1.1等于1跳转到L2 MOV A,#04H ;将第二行的行值送入ACC
AJMP LK ;跳转到键值理程序进行键值处理
L2: JB P1.2,L3 ;P1.2等于1跳转到L3
MOV A,#08H ;将第三行的行值送入ACC
AJMP LK ;跳转到键值处理程序
L3: JB P1.3,NEXT ;P1.3等于1跳转到NEXT处
MOV A,#0cH 将第四行的行值送入ACC
LK: ADD A,R4 ;行值与列值相加后的键值送入A
PUSH ACC ;将A中的值送入堆栈暂存
K4:
LCALL DELAY2 ;调用延时去抖动程序
LCALL KS ;调用按键检测程序
JNZ K4 ;按键没有松开继续返回检测
POP ACC ;将堆栈的值送入ACC
RET
NEXT:
INC R4 ;将列值加一
MOV A,R2 ;将R2的值送入A
JNB ACC.7,KEY ;扫描完至KEY处进行下一扫描
RL A ;扫描未完将A中的值右移一位进行下一列的扫描
MOV R2,A ;将ACC的值送入R2暂存
AJMP K3 ;跳转到K3继续
KS: MOV P1,#0FH ;将P1口高四位置0低四位值1
MOV A,P1 ;读P1口
XRL A,#0FH ;将A中的值与A中的值相异或
RET ;子程序返回
DELAY2: ;40ms延时去抖动子程序
MOV R5,#08H
L7: MOV R6,#0FAH
L8: DJNZ R6,L8
DJNZ R5,L7
RET
TABLE: ;七段显示器数据定义DB 0C0H, 0F9H, 0A4H, 0B0H, 99H ; 01234
DB 92H, 82H, 0F8H, 80H, 90H ; 56789
DB 88H, 83H, 0C6H, 0A1H, 86H ; ABCDE
DB 8EH ; F
END ;程序结束。