矩阵键盘扫描实验
实验一 矩阵键盘检测
实验一矩阵键盘检测一、实验目的: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. 通过实验验证矩阵键盘的可靠性和稳定性。
实验步骤:1. 准备实验材料:矩阵键盘、电路板、导线等;2. 连接电路:将矩阵键盘与电路板通过导线连接;3. 编写程序:使用C语言编写程序,实现对矩阵键盘的扫描和按键检测;4. 烧录程序:将编写好的程序烧录到单片机中;5. 运行实验:按下矩阵键盘上的按键,观察电路板上的指示灯是否亮起。
实验结果:经过实验,我们成功地完成了矩阵键盘的接线和程序烧录,并进行了按键测试。
在按下不同的按键时,电路板上相应的指示灯亮起,证明了矩阵键盘的正常工作。
讨论:1. 矩阵键盘的工作原理:矩阵键盘是由行线和列线组成的,每个按键都与行线和列线相连。
当按下某个按键时,对应的行线和列线会短接,从而使得电流流过该按键,被检测到。
2. 矩阵键盘的接线方法:在本实验中,我们采用了常见的4行4列的接线方式,即将矩阵键盘的4个行线连接到单片机的4个输入引脚上,将4个列线连接到单片机的4个输出引脚上。
3. 矩阵键盘的可靠性和稳定性:通过实验,我们发现矩阵键盘具有较高的可靠性和稳定性。
即使在长时间使用和频繁按键的情况下,矩阵键盘仍能正常工作,并且按键的检测准确率较高。
4. 矩阵键盘的应用潜力:矩阵键盘广泛应用于各种电子产品中,如计算机、手机、电视遥控器等。
它具有结构简单、成本低廉、易于集成等优点,因此在电子产品设计中具有广阔的应用前景。
结论:通过本次实验,我们对矩阵键盘的工作原理和接线方法有了更深入的了解,并验证了其可靠性和稳定性。
矩阵键盘作为一种常见的输入设备,在电子产品设计中具有重要的地位和潜力。
实验三 矩阵键盘检测实验
实验三矩阵键盘识别实验
一、实验目的
掌握单片机I/O口的输入检测的方法、矩阵按键的识别方法、键盘消抖等。
学会实时程序的调试技巧。
二、实验原理
我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms 左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们在首次检测到键被按下后延时10ms 左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。
三、实验内容
实验板上电时,数码管不显示,顺序按下矩阵键盘后,在数码管上依次显示0到F,6个数码管同时静态显示即可。
下图中按键s6-s218条线分别联接p3口相连,p3.0~p3.3控制1~4行,p3.4~p3.7控制1~4列。
图1 实验板键盘电路原理图
四、实验步骤
1、按实验要求在Keil中创建项目,编辑、编译程序。
2、将编译生成的目标码文件(后缀为.Hex)传入实验板中。
3、在实验板上运行程序,观察实验运行结果并记录。
实验五 键盘扫描实验 实验报告
实验五键盘扫描实验实验报告一、实验目的本次实验的主要目的是深入了解键盘扫描的工作原理,掌握键盘扫描的编程实现方法,以及提高对硬件接口和软件编程的综合应用能力。
二、实验设备1、计算机一台2、实验开发板一套3、下载线一根4、键盘一个三、实验原理键盘扫描的基本原理是通过逐行或逐列扫描键盘矩阵,检测按键的按下和释放状态。
常见的键盘扫描方式有行列式扫描和编码式扫描。
在行列式扫描中,将键盘的行线和列线分别连接到微控制器的输入输出端口。
通过依次将行线设置为低电平,同时读取列线的状态,来判断是否有按键按下。
如果在某一行被设置为低电平时,对应的列线检测到低电平,则表示该行和该列交叉处的按键被按下。
编码式扫描则是利用专门的编码芯片对键盘进行扫描和编码,微控制器只需读取编码芯片输出的按键编码即可确定按键的状态。
四、实验步骤1、硬件连接将实验开发板与计算机通过下载线连接好。
将键盘连接到实验开发板的相应接口。
2、软件编程选择合适的编程语言和开发环境,如 C 语言和 Keil 开发环境。
定义键盘的行线和列线所对应的端口。
编写扫描函数,实现键盘扫描的逻辑。
在主函数中调用扫描函数,并根据返回的按键值进行相应的处理,如显示按键字符或执行特定的操作。
3、编译下载对编写好的程序进行编译,检查是否有语法错误。
将编译生成的可执行文件下载到实验开发板中。
4、实验测试按下键盘上的不同按键,观察实验开发板上的显示或输出结果是否正确。
检查是否能够准确检测到按键的按下和释放,以及是否存在按键抖动等问题。
五、实验结果与分析1、实验结果在实验过程中,成功实现了对键盘的扫描,并能够准确检测到按键的按下。
按下不同的按键时,实验开发板能够正确显示相应的按键字符或执行预定的操作。
2、结果分析对于按键的准确检测,说明编写的扫描函数逻辑正确,能够有效地识别键盘矩阵中的按键状态变化。
在检测到按键按下时,没有出现误判或漏判的情况,表明行线和列线的设置以及读取操作正常。
实验8-矩阵键盘扫描实验
//查询按键键值
key = Key_Scan() ;
if( key != 0xff )
printf( "Interrupt occur... K%d is pressed!\n", key ) ;
//重新初始化IO口
rGPGCON = rGPGCON & (~((3<<12)|(3<<4))) | ((1<<12)|(1<<4)) ;//GPG6,2 set output
6.EINT19、EINT11、EINT2、EINT0中断开启
}
6.2键盘中断响应
void __irq KeyISR(void)
{
1.GPG13、GPG11、GPF2、GPF0设为input端口
2.清楚中断EINT19、EINT11、EINT2、EINT0
3.键盘扫描Key_Scan(),并在串口输出
else if( (rGPGDAT&(1<< 3)) == 0 )return 14 ;
else if( (rGPGDAT&(1<<11)) == 0 )return 13 ;
//扫描键盘第2列K11、K8、K5、K2
rGPGDAT = rGPGDAT & (~((1<<6)|(1<<2))) | (0<<6) | (1<<2) ;//GPG6 output 0;GPG2 output 1
rEXTINT0 &= ~(7|(7<<8));
rEXTINT0 |= (2|(2<<8));//set eint0,2 falling edge int
单片机 矩阵键盘实验 实验报告
单片机矩阵键盘实验实验报告
实验名称:单片机矩阵键盘实验
实验目的:掌握单片机矩阵键盘的原理和应用,能够使用单片机按键输入
实验内容:利用Keil C51软件,采用AT89C51单片机实现一个4x4的矩阵键盘,当按下任何一个按键时,将相应的键值传输到液晶显示屏上进行显示。
实验步骤:
1、搭建实验电路,将矩阵键盘与单片机相连,连接好电源正负极,然后将电路焊接成一个完整的矩阵键盘输入电路。
2、打开Keil C51软件,新建一个单片机应用工程,然后编写代码。
3、通过代码实现对矩阵键盘输入的扫描功能,当按下任何一个按键时,将相应的键值传输到液晶显示屏上进行显示。
4、编译代码,生成HEX文件,下载HEX文件到单片机中,将单片机与电源相连,然后就可以测试了。
5、测试完成后,根据测试结果修改代码,重新编译生成HEX 文件,然后下载到单片机中进行验证。
实验结果:
经过测试,实验结果良好,能够准确地输入按键的值,显示在液晶屏上。
实验感想:
通过这次实验,我深深地认识到了矩阵键盘技术的重要性以及应用价值,同时也更加深入了解单片机的工作原理和应用技术,这对我的学习和工作都有很好的帮助。
课程设计矩阵键盘扫描
课程设计矩阵键盘扫描一、教学目标本课程的目标是让学生掌握矩阵键盘扫描的原理和实现方法。
知识目标要求学生理解矩阵键盘的基本结构和工作原理,掌握键盘扫描的算法和程序设计方法。
技能目标要求学生能够运用矩阵键盘扫描原理设计简单的键盘输入系统。
情感态度价值观目标在于培养学生对计算机科学和编程的兴趣,提高他们的问题解决能力和创新意识。
二、教学内容本课程的教学内容主要包括矩阵键盘的基本原理、键盘扫描的算法实现和程序设计。
首先,学生将学习矩阵键盘的结构和工作原理,了解键盘扫描的基本概念。
然后,学生将学习如何设计和实现键盘扫描算法,包括行列扫描法和非阻塞扫描法。
最后,学生将通过实际编程练习,掌握如何使用矩阵键盘扫描原理设计实用的键盘输入系统。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法。
首先,将采用讲授法,系统地讲解矩阵键盘扫描的基本原理和算法。
其次,将采用讨论法,引导学生通过小组讨论和分享,深入理解键盘扫描的实现方法。
此外,还将采用案例分析法,通过分析实际案例,让学生学会将理论知识应用于实际问题解决中。
最后,将采用实验法,让学生通过动手实践,亲自设计和实现矩阵键盘扫描程序。
四、教学资源为了支持教学内容和教学方法的实施,本课程将选择和准备适当的教学资源。
教材将提供基础知识,参考书将提供更深入的内容,多媒体资料将帮助学生更直观地理解键盘扫描的原理和实现方法。
实验设备将用于学生的动手实践,让他们能够亲自验证和应用所学的知识。
通过丰富多样的教学资源,学生将能够更全面地掌握矩阵键盘扫描的知识,并提高他们的学习体验。
五、教学评估为了全面反映学生的学习成果,本课程将采用多元化的评估方式。
平时表现将占30%的比重,通过课堂参与、提问和小组讨论等方式评估学生的积极性和主动性。
作业将占20%的比重,通过布置相关的编程练习和项目设计,评估学生对矩阵键盘扫描知识的掌握程度。
考试将占50%的比重,包括期中考试和期末考试,将通过笔试和上机操作的方式,全面评估学生的知识水平和应用能力。
键盘扫描实验
实验键盘扫描显示实验一、实验要求编写程序,将键盘上的值显示在第八位LED七段数码管上。
二、实验目的1.掌握LED七段数码管动态显示的原理。
2.学习键盘扫描的原理及其编程方法。
三、实验说明图1 矩阵键盘原理图电路如图1所示。
键盘矩阵输入电路采用行列扫描法实现。
将行线接输出口,列线接到输入口,采用列扫描法,先将某一行输出为低电平,其它行输出为高电平,用输入口来查询列线上的电平,逐次读入列值,如果行线上的值为0时,列线上的值也为0,则表明有按键按下。
否则,接着读入下一列,直到找到该行有按下的键为止。
如该行没有找到有按键按下,就按此方法逐行找下去,直到扫描完全部的行和列,并显示键值。
四、实验电路连线此实验不需要连线。
五、程序框图开始数码管消隐启动T0计时中断计时至0.1ms扫描键盘按键消抖发送位码和段码显示数字六、程序代码#include <C:\keil\c51\INC\STC\STC15.h>sbit P_HC595_SER = P4^0; //pin 14 SER data inputsbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clocksbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clockunsigned char code rui[]={// 0 1 2 3 4 5 6 7 8 9 A B C D E F0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x10}; //段码//unsigned char code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码unsigned char i,j;unsigned char code T_COM = 0x01;unsigned char display_index = 0; //显示位索引void Send_595(unsigned char dat, unsigned char dat2){ unsigned char a;for(a=0; a<8; a++){ dat <<= 1; //选数码管,位码P_HC595_SER = CY;P_HC595_SRCLK = 1;P_HC595_SRCLK = 0;}for(a=0; a<8; a++) //要显示的数字,段码{ dat2 <<= 1;P_HC595_SER = CY;P_HC595_SRCLK = 1;P_HC595_SRCLK = 0; }P_HC595_RCLK = 1;P_HC595_RCLK = 0; //锁存输出数据}void main(void){TMOD=0x01;TL0=0xCE;TH0=0xFF;ET0=1; //允许T0中断EA=1; //开总中断TR0=1; //启动T0计数i=500;Send_595(0xff,rui[17]);Send_595(0xff,rui[17]);//消抖while(1);}//中断函数void T0_ISR(void) interrupt 1{unsigned char a,b,hang,lie;TL0=0xCE;TH0=0xFF; //1毫秒显示一次i--;hang = 0x10;for(a=0;a<4;a++){P0=~hang;hang <<= 1;if( (P0&0x0f) < 0x0f ){lie = 0x01;for(b=0;b<4;b++){if( (P0&lie) == 0x00 ){if( i=500&&(P0&lie) == 0x00 ){while( (P0&lie) == 0x00 );display_index = a*4+b;Send_595(~T_COM,rui[display_index]); //共阴输出位码,段码i=500;return;}}lie <<= 1;}}}}七、问题与解决数码管初始化时,显示的数字是乱码,可能原因是寄存器重置时存入的数是随机的。
实验四键盘扫描及显示设计实验报告
实验四键盘扫描及显⽰设计实验报告实验四键盘扫描及显⽰设计实验报告⼀、实验要求1. 复习⾏列矩阵式键盘的⼯作原理及编程⽅法。
2. 复习七段数码管的显⽰原理。
3. 复习单⽚机控制数码管显⽰的⽅法。
⼆、实验设备1.PC 机⼀台2.TD-NMC+教学实验系统三、实验⽬的1. 进⼀步熟悉单⽚机仿真实验软件 Keil C51 调试硬件的⽅法。
2. 了解⾏列矩阵式键盘扫描与数码管显⽰的基本原理。
3. 熟悉获取⾏列矩阵式键盘按键值的算法。
4. 掌握数码管显⽰的编码⽅法。
5. 掌握数码管动态显⽰的编程⽅法。
四、实验内容根据TD-NMC+实验平台的单元电路,构建⼀个硬件系统,并编写实验程序实现如下功能:1.扫描键盘输⼊,并将扫描结果送数码管显⽰。
2.键盘采⽤ 4×4 键盘,每个数码管显⽰值可为 0~F 共 16 个数。
实验具体内容如下:将键盘进⾏编号,记作 0~F,当按下其中⼀个按键时,将该按键对应的编号在⼀个数码管上显⽰出来,当再按下⼀个按键时,便将这个按键的编号在下⼀个数码管上显⽰出来,数码管上可以显⽰最近 4 次按下的按键编号。
五、实验单元电路及连线矩阵键盘及数码管显⽰单元图1 键盘及数码管单元电路实验连线图2实验连线图六、实验说明1. 由于机械触点的弹性作⽤,⼀个按键开关在闭合时不会马上稳定地接通,在断开时也不会⼀下⼦断开。
因⽽在闭合及断开的瞬间均伴随有⼀连串的抖动。
抖动时间的长短由按键的机械特性决定,⼀般为 5~10ms。
这是⼀个很重要的时间参数,在很多场合都要⽤到。
键抖动会引起⼀次按键被误读多次。
为了确保 CPU 对键的⼀次闭合仅做⼀次处理,必须去除键抖动。
在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。
按键的抖动,可⽤硬件或软件两种⽅法消除。
2. 为了减少键盘与单⽚机接⼝时所占⽤ I/O 线的数⽬,在键数较多时,通常都将键盘排列成⾏列矩阵形式。
3. 从数码管显⽰⽅式看,数码管分为静态显⽰和动态显⽰两种⽅式。
矩阵键盘扫描与数码管显示实验结果分析
矩阵键盘扫描与数码管显示实验结果分析
矩阵键盘扫描与数码管显示实验是一种常见的数字电路实验。
在这个实验中,我们可以通过按下矩阵键盘上的按键,控制数码管上的数字显示。
实验结果分析主要包括以下几个方面:
1. 矩阵键盘扫描:在实验中按下键盘上的某个按键,可以通过扫描算法检测到按键的位置,并将对应按键的行列信息送入微处理器或控制电路。
分析实验结果时,可以观察是否可以正常检测到按键的位置,并且是否能够正确传递给其他部分的电路或处理器。
2. 数码管显示:通过实验中的控制电路,可以将微处理器或其他控制器输出的数字信号转换成数码管上的对应数字显示。
在分析实验结果时,可以观察数码管是否能够正常显示所期望的数字,并且是否能够响应输入信号的变化。
3. 信号传递与处理:在整个实验电路中,信号的传递和处理是关键部分。
可以分析信号在各个部分的传递过程中是否出现错误或干扰,是否能够实现正确的数据传输和处理。
4. 稳定性和可靠性:实验结果的分析还需要考虑电路的稳定性和可靠性。
即在长时间使用或复杂环境条件下,电路能否保持正常工作,并且不出现意外错误或故障。
总结来说,矩阵键盘扫描与数码管显示实验结果的分析需要关注按键的检测和传递、数码管的正确显示、信号传递与处理等方面,同时也需要考虑电路的稳定性和可靠性。
矩阵键盘扫描及LED数码显示综合实验
实验三:矩阵键盘扫描及LED数码显示综合实验
一、实验要求
利用4×4键盘和一个LED数码管构成简单的输入显示系统,实现键盘输入和LED数码显示相应键值的功能。
二、实验目的
1.掌握数码管显示原理,及无译码显示电路的显示程序的编写;
1.理解矩阵键盘扫描的原理;
2.掌握矩阵键盘与51单片机接口的编程方法。
三、实验电路图
四、主要知识点
键盘扫描原理、无译码电路的显示原理。
五、实验流程图
六、实验效果:点击相应按键显示相应的键值
七、实验步骤
1.在keil环境下编写程序,汇编后生成*.Hex文件。
2.硬件验证
1)用ISP下载*.HEX程序到CPU
2)按连接表连接电路
3)检查验证结果。
八、连线表
十、源程序:自己编写源程序。
键盘扫描输入实验
4.1键盘扫描输入实验4.1.1 实验目的1.学习复杂数字系统的设计方法;2.掌握矩阵式键盘输入列阵的设计方法。
4.1.2 实验设备PC微机一台,TD-EDA试验箱一台,SOPC开发板一块。
4.103 实验内容在电子,控制,信息处理等各种系统中,操作人员经常需要想系统输入数据和命令,以实现人机通信。
实现人机通信最常用的输入设备是键盘。
在EDA技术的综合应用设计中,常用的键盘输入电路独立式键盘输入电路、矩阵式键盘输入电路和“虚拟式”键盘输入电路。
所谓矩阵是键盘输入电路,就是将水平键盘扫描线和垂直输入译码线信号的不同组合编码转换成一个特定的输入信号值或输入信号编码,利用这种行列矩阵结构的键盘,只需N 个行线和M个列线即可组成NXM按键,矩阵式键盘输入电路的优点是需要键数太多时,可以节省I/O口线;缺点是编程相对困难。
本实验使用TD-EDA实验系统的键盘单元设计一个4x4的矩阵键盘的扫描译码电路。
此设计包括键盘扫描模块和扫描码锁存模块,原理如图4-1-1。
每按下键盘列阵的一个按键立即在七段数码管上显示相应的数据。
4.1.1 实验步骤1. 运行Quartus II 软件,分别建立新工程,选择File->New菜单,创建VHDL描述语言设计文件,分别编写JPSCAN.VHD、REG.VHD.2.扫描码锁存模块REG的VHDL源程序如下;--输入锁存器VHDL源程序:REGVHDLLIBRARY IEEE;USB IEEE.STD-LOGIC-1164.ALL;ENTITY REG ISPORT ( RCLK : IN STD-LOGIC; --扫描时钟YXD : IN STD-LOGIC-VECTOR(3 DOWNTO 0); --Y 列消抖输入DATA : IN STD-LOGIC-VECTOR(7 DOWNTO 0); --输入数据LED : OUT STD-LOGIC- VECTOR(7 DOWNTO 0)); --锁存数据输出END ENTITY REG;ARCHITECTURE BEHV OF REG ISSIGNAL RST : STD-LOGIC; --锁存器复位清零SIGNAL OLDDATA : STD-LOGIC- VECTOR(7 DOWNTO 0); --锁存器旧数据SIGNAL NEWDATA : STD-LOGIC- VECTOR(7 DOWNTO 0); --锁存器新数据BEGINPROCESS(RCLK)BEGINIF RCLK’EVENT AND RCLK=’1’THENRST<=YXD(3)AND YXD(2)AND YXD(1))AND YXD(0); --判断是否有按键END IF;END PROCESS;PROCESS(RST) ISBEGINIF(RST=‘1’)THEN --RST=1没有按键按下NEWDATA<=OLDDATA;ELSEOLDDATA<=DATA; --RST=0有按键按下打入新据END IF;LED<=NEWDATA;END PORCESS;END ARCHIECTUBE BEHV;3. 键盘扫描模块JPSCAN的VHDL源程序如下;--键盘扫描电路的VHDL源程序;JPSCAN.VHDLIBRARY IEEE;USB IEEE-STD-LOGIC-1164-ALL;USB IEEE-STD-LOGIC-ARITH-ALL;USB IEEE-STD-LOGIC-UNSIGNED-ALL;ENTITY JPSCAN ISPORT(SCLK : IN STD-LOGIC --系统时钟:1KHZ YLINE : IN STD-LOGIC-VECTOR(4 DOWN 1); --Y列按键输入RCLK : OUT STD-LOGIC; --X行键盘扫描时钟YXD : OUT STD-LOGIC-VECTOR(3 DOWN 0); --Y列消抖输出DATA : OUT STD-LOGIC-VECTOR(7 DOWN 0); --数字输出XROW : OUT STD-LOGIC-VECTOR(4 DOWN 1); --X行键盘扫描END ENTITY JPSCAN;ARCHITECTURE BEHV OF JPSCAN ISCOMPONENT JPXD IS --控制电路工作时钟:512HzSIGNAL KEY-SCAN:STD-LOGIC-VECTOR(1 DOWNTO 0); --键盘扫描时钟信号--“00-01-10-11”SIGNAL CLK-JPXD : STD-LOGIC; --去抖电路工作时钟SIGNAL Y-XD : STD-LOGIC-VECTOR(3 DOWNTO 0); --键盘列输入去抖后的寄存器SIGNAL X-SCAN : STD-LOGIC-VECTOR(3 DOWNTO 0) --键盘行扫描输出寄存器--1110-1101-1011-0111 SIGNAL VALUE : STD-LOGIC-VECTOR(7 DOWNTO 0); --按键译码数值寄存器BEGINDATA<=VALUE;COUNTER:BLOCK IS --信息扫描发生器SIGNAL Q :STD-LOGIC-VECTOR(6 DOWNTO 0); --计数器实现分频BEGINPROCESS(SCLK)ISBEGINIF SCLK’EVENT AND SCLK=’THENQ<=Q+1;END IF;CLK<=Q(0); --控制电路工作时钟:512Hz,系统时钟的二分频CLK-JPXD<=Q(2); --去抖时钟信号,大约128HzKEY-SCAN<=Q(6 DOWNTO 5); --产生键盘扫描信号00-01-10-11,大约16Hz END PROCESS;X-SCAN<=”1110”WHEN KEY-SCAN=”00”ELSE”1101”WHEN KEY-SCAN=”01”ELSE”1011”WHEN KEY-SCAN=”10”ELSE”0111”WHEN KEY-SCAN=”11”ELSE“1111”XROW(4 DOWNTO 1)<=X-SCAN(3 DOWNTO 0); --X行扫描END BLOCK COUNTER;JPXDMK:BLOCK IS --键盘去抖模块BEGINU1:JPXD PORT MAP(D-IN=>YLINE(1),D-OUT=>Y-XD(0),CLK=>CLK-JPXD);U2:JPXD PORT MAP(D-IN=>YLINE(2),D-OUT=>Y-XD(1),CLK=>CLK-JPXD);U3:JPXD PORT MAP(D-IN=>YLINE(3),D-OUT=>Y-XD(2),CLK=>CLK-JPXD);U4:JPXD PORT MAP(D-IN=>YLINE(4),D-OUT=>Y-XD(3),CLK=>CLK-JPXD);YXD(3 DOWNTO 0)<=Y-XD(3 DOWNTO 0);RCLK<=CLK; --键盘扫描时钟等于控制电路工作时钟:512Hz END BLOCK JPXDMK;KEY-DECODER : BLOCK IS --键盘译码模块SIGNAL Z:STD-LOGIC-VECTOR(5 DOWNTO 0);BEGINPORCESS(CLK)BEGINZ<=KEY-SCAN&Y-XD;IF CLK’EVENT AND CLK=’1’THENCASE Z ISWHEN”001110”=>VALUE<=”00111111”; --0WHEN”011110”=>VALUE<=”00000110”; --1WHEN”101110”=>VALUE<=”01011011”; --2WHEN”111110”=>VALUE<=”01001111”; --3WHEN”001101”=>VALUE<=”01100110”; --4WHEN”011101”=>VALUE<=”01101101”; --5WHEN”101101”=>VALUE<=”01111101”; --6WHEN”111101”=>VALUE<=”00000111”; --7WHEN”001001”=>VALUE<=”01111111”; --8WHEN”011011”=>VALUE<=”01101111”; --9WHEN”101011”=>VALUE<=”01110111”; --AWHEN”111011”=>VALUE<=”01111100”; --BWHEN”000111”=>VALUE<=”00111001”; --CWHEN”010111”=>VALUE<=”01011110”; --DWHEN”100111”=>VALUE<=”01111001”; --EWHEN”110111”=>VALUE<=”01110001”; --FWHEN OTHERS => VALUS<=”00000000”; --OTHER END CASE;END IF;END PROCESS;END BLOCK KEY-DECODER;END ARCHITECTURE BEHV;4. 上述程序中键盘消抖模块JPXD的VHDL源程序如下:--键盘输入消抖电路的VHDL源程序。
- 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 ;程序结束。