33、慧净51单片机视频教程 矩阵健盘原理
51单片机矩阵键盘原理
51单片机矩阵键盘原理51单片机矩阵键盘原理矩阵键盘是一种常用的输入设备,可以通过少量的I/O口控制多个按键。
51单片机作为嵌入式系统中常用的控制器,也可以通过控制矩阵键盘来实现输入功能。
1. 矩阵键盘的结构矩阵键盘由多个按键组成,每个按键都有一个引脚与其他按键共用,形成了一个按键矩阵。
例如,4x4的矩阵键盘有16个按键,其中每行和每列各有4个引脚。
2. 矩阵键盘的工作原理当用户按下某一个按键时,该按键所在行和列之间会形成一个电路通路。
这时,51单片机可以通过扫描所有行和列的电路状态来检测到用户所按下的具体按键。
具体实现过程如下:(1)将每一行引脚设置为输出状态,并将其输出高电平;(2)将每一列引脚设置为输入状态,并开启上拉电阻;(3)逐一扫描每一行引脚,当发现某一行被拉低时,则表示该行对应的某一个按键被按下;(4)记录下该行号,并将该行引脚设置为输入状态,其余行引脚设置为输出状态;(5)逐一扫描每一列引脚,当发现某一列被拉低时,则表示该列对应的是刚才所记录下的行号及其对应的按键;(6)通过行号和列号确定具体按键,并进行相应的处理。
3. 代码实现下面是一个简单的51单片机矩阵键盘扫描程序:```c#include <reg52.h> //头文件sbit row1 = P1^0; //定义引脚sbit row2 = P1^1;sbit row3 = P1^2;sbit row4 = P1^3;sbit col1 = P1^4;sbit col2 = P1^5;sbit col3 = P1^6;sbit col4 = P1^7;unsigned char keyscan(void) //函数定义{unsigned char keyvalue; //定义变量while(1) //循环扫描{row1=0;row2=row3=row4=1; //设置行状态 if(col1==0){keyvalue='7';break;} //读取按键值 if(col2==0){keyvalue='8';break;}if(col3==0){keyvalue='9';break;}if(col4==0){keyvalue='/';break;}row2=0;row1=row3=row4=1;if(col1==0){keyvalue='4';break;}if(col2==0){keyvalue='5';break;}if(col3==0){keyvalue='6';break;} if(col4==0){keyvalue='*';break;}row3=0;row1=row2=row4=1; if(col1==0){keyvalue='1';break;} if(col2==0){keyvalue='2';break;} if(col3==0){keyvalue='3';break;} if(col4==0){keyvalue='-';break;}row4=0;row1=row2=row3=1; if(col1==0){keyvalue='C';break;} if(col2==0){keyvalue='0';break;} if(col3==0){keyvalue='=';break;} if(col4==0){keyvalue='+';break;}}return keyvalue; //返回按键值}void main() //主函数{unsigned char key;while(1) //循环读取{key = keyscan(); //调用函数}}```以上代码实现了一个简单的矩阵键盘扫描程序,可以通过调用`keyscan()`函数来获取用户所按下的具体按键值。
51单片机矩阵键盘行扫描
51单⽚机矩阵键盘⾏扫描————————————————————————————————————————————分类:按结构原理分:触点式开关按键⽆触点开关按键接⼊⽅式独⽴式按键矩阵式键盘————————————————————————————————————————————矩阵式键盘识别⽅法(⾏扫描法)检测列线的状态:列线Y4~Y7置⾼电平,⾏线Y0~Y3置低电平。
只要有⼀列的电平为低,则表⽰键盘该列有⼀个或多个按键被按下。
若所有列线全为⾼电平,则键盘中⽆按键按下。
判断闭合按键所在的位置:⾏线置⾼电平,列线置低电平。
检测⾏线的状态。
举例:当按下第⼀⾏第⼀列的按键时⾏扫描,⾏线为低电平,列线为⾼电平,得到 1110 0000列扫描,⾏线为⾼电平,列线为低电平,得到 0000 1110将得到的结果进⾏或运算,得到 1110 1110,对应第⼀⾏第⼀列,⼗六进制为0xEE按键表⾏列bin hex111110 11100xEE121101 11100xDE131011 11100xBE140111 11100x7E211110 11010xED221101 11010xDD231011 11010xBD240111 11010x7D311110 10110xEB321101 10110xDB331011 10110xBB340111 10110x7B411110 01110xE7421101 01110xD7431011 01110xB7440111 01110x77————————————————————————————————————————————矩阵式键盘应⽤实例实现结果:通过4*4矩阵键盘对应数码管显⽰0~F设计思路:当检测到按键被按下时,将此时⾏扫描的结果存⼊临时变量,再进⾏列扫描,得到的结果和临时变量进⾏或运算。
通过数组存放按键和数码管编码,⾏列扫描得到结果后遍历数组,找到对应的编码位置并显⽰数码管编码实现代码:1 #include <reg52.h>2 typedef unsigned char uchar;3 typedef unsigned int uint;4 uchar code KEY_TABLE[] =5 {60xEE, 0xDE, 0xBE, 0x7E,70xED, 0xDD, 0xBD, 0x7D,80xEB, 0xDB, 0xBB, 0x7B,90xE7, 0xD7, 0xB7, 0x7710 };11 uchar code TABLE[] =12 {130x3F, 0x06, 0x5B, 0x4F,140x66, 0x6D, 0x7D, 0x07,150x7F, 0x6F, 0x77, 0x7C,160x39, 0x5E, 0x79, 0x71,17 };18void Delay(uchar m)19 {20 --m;21 }22void main()23 {24 uchar temp, key, i;25while(1)26 {27 P3 = 0xF0;28if (P3 != 0xF0)29 {30 Delay(2000);31if (P3 != 0xF0)32 {33 temp = P3;34 P3 = 0x0F;35 key = temp | P3;36for (i = 0; i < 16; ++i)37if (key == KEY_TABLE[i])38break;39 P2 = TABLE[i];40 }41 }42 }43 }。
单片机独立按键和矩阵键盘概念及原理
单片机独立按键和矩阵键盘概念及原理一、基本知识 1.按键分类与输入原理 按键按照结构原理科分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式按键,磁感应按键等。
前者造价低,后者寿命长。
目前,微机系统中最常见的是触点式开关按键。
在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。
当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入时与软件结构密切相关的过程。
对于一组键或一个键盘,总有一个接口电路与CPU相连。
CPU可以采用查询或中断方式了解有无将按键输入,并检查是哪一个按键按下,将该键号送人累加器,然后通过跳转指令转入执行该键的功能程序,执行完成后再返回主程序。
2.按键结构与特点 微机键盘通常使用机械触点式按键开关,其主要功能式把机械上的通断转换为电气上的逻辑关系。
也就是说,它能提供标准的TTL逻辑电平,以便于通用数字系统的逻辑电平相容。
机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定的时间触点机械抖动,然后其触点才稳定下来。
其抖动过程如下图1所示,抖动时间的长短与开关的机械特性有关,一般为5-10ms。
在触点抖动期间检测按键的通与断,可能导致判断出错,即按键一次按下或释放错误的被认为是多次操作,这种情况是不允许出现的。
为了克服你、按键触点机械抖动所致的检测误判,必须采取消抖措施。
按键较少时,可采用硬件消抖;按键较多式,采用软件消抖。
图1 按键触点机械抖动 (1)按键编码 一组按键或键盘都要通过I/O口线查询按键的开关状态。
根据键盘结构的不同,采用不同的编码。
无论有无编码,以及采用什幺编码,最后都要转换成为与累加器中数值相对应的键值,以实现按键功能程序的跳转。
(2)键盘程序 一个完整的键盘控制程序应具备以下功能: a.检测有无按键按下,并采取硬件或软件措施消抖。
矩阵键盘原理
db 08eh ;F
end
D3:
MOV A,P1 ; 读入 P1
XRL A,R4
JZ D3
MOV A,R1
MOV DPTR,#TABLE
MOVC A,@A+DPTR
Table:
db0c0h,0f9h,0a4h,0b0h,099h ;0-4
db 092h,082h,0f8h,080h,090h ;5-9
RLC A ; 将按键值左移一位元
JNC KEYIN ; 若 C=0, 有按, 执行 KEYIN
INC R1 ; 将指标值加 1, 继续扫描下一行
DJNZ R5,L1 ; 扫描四行
MOV A,R3 ; 载入扫描值
SETB C ; C=1
RRC A ; 扫描下一列(P13~P10)
SCAN1:
MOV A,R3 ; 开始扫描
MOV P1,A ; 将扫描值输出到 P1
MOV A,P1 ; 读入 P1 判断是否有按下
MOV R4,A ; 存到 R4, 判断是否放开
SETB C ; C=1
MOV R5,#04H ; 扫描 P14~P17
L1:
MOV R3,A ; 存回扫描值
JC SCAN1 ; C=1, 尚未完成扫描
RET ; 结束键盘扫描, 回到 Main Program
YIN:
MOV R7,#10 ; 消除弹跳
D2:
MOV R6,#248
DJNZ R6,$
DJNZ R7,D2
由於这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,為了避免让8051误判為多次输入同一按键,我们必须在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定状态,再去判读所按下的键,就可以让键盘的输入稳定。
51单片机矩阵键盘
JC NEXT5 NEXT6: MOV A,P1 ANL A,#0FH CJNE A,#0FH,NEXT6 MOV R0,#0FFH RET <2>确定矩阵式键盘上何键被按下介绍一种“高低电平翻转 法”。 首先让P1口高四位为1,低四位为0,。若有按键按下,则高 四位中会有一个1翻转为0,低四位不会变,此时即可确定被 按下的键的行位置。 然后让P1口高四位为0,低四位为1,。若有按键按下,则低 四位中会有一个1翻转为0,高四位不会变,此时即可确定被 按下的键的列位置。 最后将上述两者进行或运算即可确定被按下的键的位置。
K0
P10
K4
0 4 8 C
P14
K1
1 5 9 D
P15
K2
2 6 A E
P16
K3
3 7 B F
P17
K5
K6
K7
P11 P12 P13
K8
K9
K10
K11
89C52
E A/VP X1 X2 RE SE T RD WR
K12
K13
K14
K15
数码管前三位显示一个跑表,从000到 999之间以1%秒速度运行,当按下一个独 立键盘时跑表停止,松开手后跑表继续运 行。(用定时器设计表)。 在上题的基础上,用另外三个独立键盘实 现按下第一个时计时停止,按下第二个时 计时开始,按下第三个是计数值清零从头 开始。 按下16个矩阵键盘依次在数码管上显示116的平方。如按下第一个显示1,第二个 显示4...
键盘扫描程序: 从以上分析得到键盘扫描程序的流程图所示。程序如下 SCAN: MOV P1,#0FH MOV A,P1 ANL A,#0FH CJNE A,#0FH,NEXT1 SJMP NEXT3 NEXT1: ACALL D20MS MOV A,#0EFH NEX,P1 ANL A,#0FH CJNE A,#0FH,KCODE; MOV A,R1
51单片机点阵原理
51单片机点阵原理
1. 点阵显示器的结构,点阵显示器由多行多列的LED灯组成,每个LED灯可以看作是一个像素点,通过控制每个像素点的亮灭来显示图形和文字。
2. 51单片机控制,51单片机具有多个通用输入输出引脚,可以通过这些引脚来控制点阵显示器的每个像素点。
通过编程控制这些引脚的高低电平,可以实现对点阵显示器的控制。
3. 行列扫描,点阵显示器通常采用行列扫描的方式来控制。
在行列扫描中,通过控制行引脚和列引脚的高低电平,可以选择点阵中的某一个LED,并控制其亮灭状态。
4. 刷新频率,为了保持点阵显示的稳定性和清晰度,需要以一定的刷新频率对点阵进行控制。
通过51单片机的定时器功能,可以实现对点阵的定时刷新,从而实现稳定的显示效果。
5. 数据存储,在51单片机中需要设置相应的数据存储区域,用来存储需要在点阵上显示的图形、文字或动画的数据,通过读取这些数据并控制点阵显示器的引脚,可以实现对点阵的显示控制。
总之,51单片机控制点阵显示器的原理是通过控制引脚的高低电平来选择并控制点阵中的LED灯,同时通过定时器功能和数据存储来实现稳定的显示效果。
这样就可以实现在点阵显示器上显示各种图形、文字和动画等效果。
单片机矩阵键盘
汇报人: 202X-01-04
contents
目录
• 单片机矩阵键盘概述 • 单片机矩阵键盘硬件设计 • 单片机矩阵键盘软件编程 • 单片机矩阵键盘调试与测试 • 单片机矩阵键盘优化与扩展
01 单片机矩阵键盘 概述
定义与特点
定义
单片机矩阵键盘是一种由行线和 列线组成的键盘,通过按键的行 和列交叉点来识别按键。
用于显示输入的信息或状态, 如数码管、液晶显示屏等。
电源模块
为整个系统提供稳定的电源, 保证系统的正常工作。
电路连接
01
矩阵键盘的行线和列线分别连接到单片机的输入/输出端口,通 过软件扫描方式检测按键状态。
02
单片机控制模块与显示模块连接,将需要显示的信息传输给显
示模块。
电源模块为整个系统提供稳定的电源,保证系统的正常工作。
在通讯设备领域,单片机矩阵键盘可以用 于手机、电话等设备的操作面板,实现拨 号、挂断等功能。
பைடு நூலகம்
02 单片机矩阵键盘 硬件设计
硬件组成
01
02
03
04
矩阵键盘模块
由行线和列线组成的键盘矩阵 ,按键被安排在行线和列线的
交叉点上。
单片机控制模块
用于接收和处理来自矩阵键盘 的信号,控制整个系统的运行
。
显示模块
软件编程
编写单片机程序,用于扫描矩阵键盘并识 别按键按下事件。
测试方法
按键响应时间测试
测试从按键按下到单片机响应 的时间,确保在合理范围内。
按键防抖测试
测试按键防抖功能是否正常, 即在按键按下和释放时是否能 够正确识别。
多键同时按下测试
测试在多个按键同时按下时, 单片机是否能够正确识别并处 理。
自学单片机之矩阵按键
矩阵按键1.1矩阵按键连接图:1.2矩阵按键扫描原理:1.3矩阵按键与独立按键转换:看电路图,只用将某一个IO 口写0 ,即可组成独立按键。
1.4 程序实例:矩阵4 x4共十六个按键按顺序按下,数码管分别显示0~F。
#include "reg52.h"typedef unsigned int u16;typedef unsigned char u8;#define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;u8 KeyValue;u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//ÏÔʾ0~FµÄÖµvoid delay(u16 i){while(i--);}void KeyDown(void){char a=0;GPIO_KEY=0x0f; // 低四位写高高四位写0if(GPIO_KEY!=0x0f)//判断是否有按键按下{delay(1000);//延时10ms消抖if(GPIO_KEY!=0x0f)//确认是否真的有按键按下{GPIO_KEY=0X0F; // 再次高四位写0 低四位写1 去干扰开始列扫描此时按键任然是按下状态switch(GPIO_KEY){case(0X07): KeyValue=0;break;case(0X0b): KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e): KeyValue=3;break;}GPIO_KEY=0XF0; //第二步开启行扫描高四位写1 低四位写0switch(GPIO_KEY){case(0X70): KeyValue=KeyValue;break;case(0Xb0): KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;case(0Xe0): KeyValue=KeyValue+12;break;}while((a<50)&&(GPIO_KEY!=0xf0)) //判断按键是否松开{delay(1000); //延时消抖a++; //设定一个强制退出条件}}}}void main(){LSA=0;LSB=0;LSC=0;while(1){KeyDown();GPIO_DIG=smgduan[KeyValue];}}。
试述51系列单片机矩阵键盘编程
试述51系列单片机矩阵键盘编程摘要在单片机系统中,常常使用键盘向单片机输入信息。
键盘由一组常开的按键组成,当按键闭合时就会向单片机系统输入一个电平信息。
每个按键都被赋予了一个键码,单片机根据此代码执行任务。
在单片机系统按键数量较多时,为了减少I/O口的使用通常使用矩阵键盘。
关键词单片机;键盘;矩阵键盘;I/O口1 矩阵键盘的结构矩阵键盘的按键排成矩阵,一般是4×4矩阵,即4行4列,行和列的交叉点接一个常开的独立按键,按键被闭合时就接通行线和列线。
8个I/O口产生16个交叉点16个按键,按键数量比独立按键多了一倍,9个I/O口产生20个按键,I/O口越多产生的按键数量越多,效果越明显。
可以在键盘扫描程序中对每个按键进行编号,如第一行按键从左到右对应0、1、2、3,第二行按键从左到右对应4、5、6、7,第三行按键从左到右对应8、9、A、B,第四行按键左到右对应C、D、E、F,每按一次键让数码管显示该按键所代表的编号。
2 矩阵键盘的工作原理矩阵键盘结构比独立键盘复杂,识别难度也比独立按键大很多。
矩阵键盘的工作方式有程序扫描方式、定时扫描方式、中断扫描方式3种。
本文只讨论程序扫描方式。
程序扫描方式是CPU主动调用扫描子函数,响应键盘的输入要求。
在子函数里有以下步骤:1)判断键盘中有无按键闭合;2)延时去抖消除干扰;3)检测是否确实有按键闭合,确定闭合键的编号;4)等待闭合键的释放。
整个步骤中确定闭合键的编号是关键所在,常用的判断方法有逐行扫描法和反转扫描法。
3 硬件仿真4×4矩阵键盘无需外接电源,电位变化完全由编程来决定。
通过软件延时来消抖动,去干扰。
4×4矩阵键盘4行4列交叉,每个按键位于交叉点上对应的行列号唯一,共16个按键。
4×4矩阵键盘8个I/O口接P1口,7SEG-MPX2-AN-GREEN7段共阳极数码管通过上拉电阻接P0口。
键盘中每闭合一个按键让数码管显示对应的编号。
51单片机--矩阵键盘仿真
51单片机--矩阵键盘仿真矩阵键盘实验该实验采用proteus 7.4 sp3进行的仿真,仿真原理图如下图所示,该实验是4×4矩阵键盘实验,每按一个键最后一个数码管显示,原先显示的数左移一位,六位都显示后从新从第一个开始显示。
键盘输入值如下图键盘上标注。
输入0、1、2时的显示结果:有输入5、6、7后的显示结果:/********************************************************************** * 程序名; 矩阵键盘实验* 功能:数码管通过动态扫描显示键盘输入的数字,输入一个数,数码管上* 显示的数左移一位,达到六位后从第一个开始显示.* 编程者:ZPZ* 编程时间:2009/8/11**********************************************************************/ #include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charbit flag=0;uchar temp,i,m,s=0,s1,s2,s3,s4,s5;uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};void display(uchar a);void delay(uint z);void keyscan();void keyin(uchar zhi,uchar a,uchar b,uchar c,uchar d);/****************** 主函数*******************/ void main(){while(1){keyscan();if(flag==0){P1=0xff;P0=0xff;}if(flag==1){display(m);}}}/****************** 显示函数*******************/ void display(uchar a){if(s==1){P1=0x20;P0=table[a];s1=table[a];delay(1);}if(s==2){P1=0x10;P0=s1;delay(1);P1=0x20;P0=table[a];s2=table[a];delay(1);} if(s==3){P1=0x08;P0=s1;delay(1);P1=0x10;P0=s2;delay(1);P1=0x20;P0=table[a];s3=table[a];delay(1);} if(s==4){P1=0x04;P0=s1;delay(1);P1=0x08;P0=s2;delay(1);P1=0x10;P0=s3;delay(1);P1=0x20;P0=table[a];s4=table[a];delay(1);} if(s==5){P1=0x02;P0=s1;delay(1);P1=0x04;P0=s2;delay(1);P1=0x08;P0=s3;delay(1);P1=0x10;P0=s4;delay(1);P1=0x20;P0=table[a];s5=table[a];delay(1);} if(s==6){P1=0x01;P0=s1;delay(1);P1=0x02;P0=s2;delay(1);P1=0x04;P0=s3;delay(1);P1=0x08;P0=s4;delay(1);P1=0x10;P0=s5;delay(1);P1=0x20;P0=table[a];delay(1);}if(s>6){s=1;}}/****************** 延时子函数*******************/ void delay(uint z){uint j,k;for(j=z;j>0;j--)for(k=120;k>0;k--);}/****************** 键扫描函数*******************/ void keyscan(){P3=0xff;keyin(0xfe,0,1,2,3);keyin(0xfd,4,5,6,7);keyin(0xfb,8,9,10,11);keyin(0xf7,12,13,14,15);}/****************** 键输入函数*******************/void keyin(uchar zhi,uchar a,uchar b,uchar c,uchar d){P3=zhi;temp=P3;temp=P3&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=P3&0xf0;if(temp!=0xf0){temp=P3;temp=P3&0xf0;switch(temp){case(0xe0):m=a;break;case(0xd0):m=b;break;case(0xb0):m=c;break;case(0x70):m=d;break;default:break;}flag=1;delay(200);s++;if(s>6)s=1;}delay(10);}}。
单片机矩阵键盘编码
单片机矩阵键盘编码是一种常用的输入设备接口技术,它通过将按键矩阵与单片机相连,实现对按键的识别和操作。
在单片机矩阵键盘编码中,常用的编码方式有行列式编码和扫描式编码等。
本文将介绍一种基于行列式编码的单片机矩阵键盘编码方法,以实现按键的识别和操作。
一、按键矩阵电路设计首先,我们需要设计一个按键矩阵电路,该电路由多个按键组成,并使用行线和列线进行连接。
常见的按键矩阵电路有4x4、5x5等不同规格,其中每个按键都通过行线和列线连接到单片机上。
二、行列式编码原理行列式编码是一种基于矩阵的按键编码方式,它通过将按键矩阵中的行线和列线进行编码,实现对按键的识别和操作。
具体来说,我们将按键矩阵中的行线和列线分别连接到单片机的I/O口上,并使用单片机的软件对I/O口的状态进行检测,从而识别出按键的位置和状态。
在行列式编码中,我们通常将行线划分为上、下两行,并将列线划分为左、右两列。
这样,当一个按键被按下时,其所在的行线和列线将同时发生变化。
通过检测行线和列线的状态变化,我们可以确定按键的位置和状态。
三、编码实现方法在实现单片机矩阵键盘编码时,我们需要编写相应的软件程序,对行线和列线的状态进行检测和判断。
通常,我们使用单片机的中断系统来实现按键的实时检测和响应。
具体来说,我们可以在单片机的I/O口上设置相应的中断请求,并在中断服务程序中对行线和列线的状态进行检测和判断。
当一个按键被按下时,其所在的行线和列线将同时发生变化。
我们可以通过比较当前状态和上一次状态的不同来确定按键的位置和状态。
如果某一行或某一列的状态发生变化,则说明有按键被按下。
我们可以通过判断该行或该列的状态变化来确定是哪个按键被按下。
四、总结单片机矩阵键盘编码是一种常用的输入设备接口技术,通过将按键矩阵与单片机相连,实现对按键的识别和操作。
在单片机矩阵键盘编码中,常用的编码方式有行列式编码和扫描式编码等。
本文介绍了一种基于行列式编码的单片机矩阵键盘编码方法,通过将按键矩阵中的行线和列线进行编码,实现对按键的识别和操作。
中断法识别矩阵键盘的原理
中断法识别矩阵键盘的原理
中断法识别矩阵键盘的原理如下:
在一个矩阵键盘中,每个按键都与一个行和一个列相交。
当按下某个按键时,该按键的行和列之间会形成一个电路。
这个电路会触发一个中断信号,通知处理器有一个按键按下了。
中断是一种硬件信号,它可以暂停处理器正在执行的程序,并跳转到一个特殊的中断处理程序。
在矩阵键盘中,当有按键按下时,会触发一个中断信号,处理器会立即跳转到中断处理程序。
中断处理程序会读取键盘的状态寄存器,确定哪个按键被按下了。
然后它会将按键的ASCII码或扫描码存储在一个缓冲区中,以便处理器的主程序可以读取它。
通过这种方式,处理器可以在不阻塞主程序的情况下,实时地响应用户的键盘输入。
矩阵键盘的工作原理和扫描确认方式
9.3.1 矩阵键盘的工作原理和扫描确认方式
来源:《AVR 单片机嵌入式系统原理与应用实践》M16 华东师范大学电子系 马潮 当键盘中按键数量较多时,为了减少对 I/O 口的占用,通常将按键排列成
矩阵形式,也称为行列键盘,这是一种常见的连接方式。矩阵式键盘接口见图 9-7 所示,它由行线和列线组成,按键位于行、列的交叉点上。当键被按下时,其交 点的行线和列线接通,相应的行线或列线上的电平发生变化,MCU 通过检测行 或列线上的电平变化可以确定哪个按键被按下。
图 9-7 为一个 4 x 3 的行列结构,可以构成 12 个键的键盘。如果使用 4 x 4 的行列结构,就能组成一个 16 键的键盘。很明显,在按键数量多的场合,矩 阵键盘与独立式按键键盘相比可以节省很多的 I/O 口线。
File name
: demo_9_3.c
Chip type
: ATmega16
Program type
: Application
Clock frequency
: 4.000000 MHz
// 输出行线电平 // 必须送 2 次!!!(注 1 // 读列电平 // 没有按键,继续扫描
// 有按键,停止扫描 // 转消抖确认状态
// 再次读列电平, // 与状态 0 的相同,确认按键 // 键盘编码,返回编码值
case 0b01000110:
key_return = K4_1;
break;
它们不仅与键盘的硬件连接有关系,同时还要注意他们在程序中是如何使用的, 其值的保存等等。
51单片机综合学习系统之矩阵键盘篇
10-5 软件流程图 51 单片机综合学习系统资源丰富,可做实验有:8 位 LED 数码管、32 路 LED、4x4 矩阵键盘、4 个直控 键盘、蜂鸣器喇叭、继电器试验、I2C 总线接口、SPI 总线接口、160X 液晶、128X64 液晶、红外接收头接 口、支持 PS/2 接口的 104 键标准键盘、步进电机驱动接口、ADC0832 模/数转换接口、PC817 光电耦合器、 串行时钟芯片 DS1302、温度传感器 DS18B20 接口、RS232 串口通讯、外扩展接口以便外接更多的实验资源。 软件代码 /***************************************************************************/ /*杭州晶控电子有限公司*/ /**/
图 1 矩阵键盘布局图
图 2 矩阵键盘内部电路图 当无按键闭合时,P10~P13 与 P14~P17 之间开路。当有键闭合时,与闭合键相连的两条 I/O 口线之间 短路。判断有无按键按下的方法是:第一步,置列线 P14~P17 为输入状态,从行线 P10~P13 输出低电平, 读入列线数据, 若某一列线为低电平, 则该列线上有键闭合。 第二步, 行线轮流输出低电平, 从列线 P14~P17 读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是 键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可 能会连续多次进行同样的键操作。 矩阵键盘软硬件设计实例 本期以 51 单片机综合学习系统为硬件平台,介绍矩阵式键盘的编程方法。实验通过按下相应键后在一 位数码管上显示出键值。0 到 16 个键分别对应显示 0 到 F。
switch(n) { case(0xe0):display(7);break; case(0xd0):display(6);break; case(0xb0):display(5);break; case(0x70):display(4);break; } } } //扫描第三行 P1=0xfb; n=P1; n&=0xf0; if(n!=0xf0) { delay(); P1=0xfb; n=P1; n&=0xf0; if(n!=0xf0) { switch(n) { case(0xe0):display(11);break;
33、51单片机视频教程 HL-1 矩阵健盘原理
开关A 开关B
灯C
ABC 000 011 101 111
真值表
条件A
结果C
非运算: 举例:现在有2件事情:开关A合上;灯C亮。我们来研究它们之间 的关系。 条件为真,结果为假;条件为假,结果为真。
A=C,在C51中写成 !A=C
A
C
开关A
灯C
0
1
1
0
真值表
注意区分逻辑运算和位逻辑运算
逻辑运算:参与运算的对象是逻辑量,结果也是逻辑量,运算符是与或非。 逻辑运算用于多个关系表达式的连接,例如: If (a>2)&& (a<9) 可以实现更复杂的条件判断。
……
Case 变量可能值n:分支n语句
break;
default:最后分支语句
//default也可以省略。
}
程序先读出这个变量的值,然后在各个"case"里查找哪个值和这个变量相等,如果相等,就
算条件成立,程序执行相应的分支,直到碰上break或者switch语句结束。
位运算
在前面我们已经讲了一种位运算,就是移位,这里我们再介绍其 他的位运算----位逻辑运算: 先讲一下什么是逻辑运算?见下页 什么是位逻辑运算?按位对变量进行逻辑运算。 位逻辑运算有以下4种: ~ 按位取反 & 按位与 | 按位或 ^ 按位异或 注意点:位运算不改变参与运算的变量的值,如果希望改变参与 运算的变量的值,应利用相应的赋值操作!
也可以使用switch语句,建议采用switch语句。switch语句也叫开关语句,它是C语言提供的
专门处理多方向分支的语句,可以使程序简洁、高效。
一般格式:
switch( 变量 )
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
或运算: 举例:当电路发生了变化,我们来研究它们 事情之间的关系 条件A或者条件B有一个为真时,结果C为真。 A+B=C,在C51中写成 A || B=C
开关A 开关B
灯C
ABC 000 011 101 111
真值表
条件A
结果C
非运算: 举例:现在有2件事情:开关A合上;灯C亮。我们来研究它们之间 的关系。 条件为真,结果为假;条件为假,结果为真。 A=C,在C51中写成 !A=C
注:C是列的英文缩写,R是行的英文缩写
带返回值函数的定义
返回值类型 函数名(形式参数表) {
局部变量定义; 函数体语句; return 返回值; }
return后面可以是常量、变量或表达式。 执行到return语句时,函数即告结束,如果后面还有代码,
则后面的代码不被执行。
带返回值函数的调用
完成函数的调用三种方式:
~ 按位取反 & 按位与 | 按位或 ^ 按位异或
注意点:位运算不改变参与运算的变量的值,如果希望改变参与运算 的变量的值,应利用相应的赋值操作!
注意:这个不是乘号,是 与运算符,也叫逻辑乘, 在C51中为了避免与算术 乘混淆,已改用& &
逻辑运算
在第数字电路中提到过:2、逻辑运算:参与运算的对象是逻辑量,结果也
---慧净电子---行善积德---
慧净电子---行善积德---交流网站 日行一善,美满人生。
HL-1原理图
HJ-C52原理图
列0 列1 列2 列3 列扫描线
P3.3
行0
P3.4
行1
行2
P3.5
行输入线
这3个引脚必须设置 为准双向口(带内部 上拉电阻),并且用 作为输入方式(该口 对应的锁存器必须 先存放1) 由于单片机上电复 位后,所有的IO口已 经自动设置成为了 准双向口的输入方 式,应该本步骤可以 省略!
……
Case 变量可能值n:分支n语句
break; default:最后分支语句
default也可 以省略。
}
程序先读出这个变量的值,然后在各个"case"里查找哪个值和这个变量相等,如果相
等,就算条件成立,程序执行相应的分支,直到碰上break或者switch语句结束。
位运算
在数字电路中我们已经讲了一种位运算,就是移位,这里我们再介绍其 他的位运算----位逻辑运算: 先讲一下什么是逻辑运算?见下页 什么是位逻辑运算?按位对变量进行逻辑运算。 位逻辑运算有以下4种:
1、函数语句。函数名(实际参数表);有参调用和无参调用(前面已讲)
2、函数表达式。(本讲用到了这一种)
3、函数参数。
带返回值函数的调用,一般采用2、3这两种方 法
SWITCH语句(多方向分支语句 )
if...else语句只能实现从二选一,如果要实现多选一,可以使用多级 if...else...语句,也
导入
从“独立按键”的缺点说起…… 矩阵键盘的优点:
当键数较多时,可以节约大量的I/O口资源。
结构与工作原理
• 在键盘中按键数量较多时,为了减少I/O口 的占用,通常将按键排列成矩阵形式,如 图1所示。在矩阵式键盘中,每条水平线和 垂直线在交叉处不直接连通,而是通过一 个按键加以连接。这样,一个端口(如P1 口)就可以构成4*4=16个按键,比之直接 将端口线用于键盘多出了一倍,而且线数 越多,区别越明显,比如再多加一条线就 可以构成20键的键盘,而直接用端口线则 只能多出一键(9键)。由此可见,在需要 的键数比较多时,采用矩阵法来做键盘是 合理的。
是逻辑量,运算符是与或非; 与运算:
条件A
条件B
结果C
举例:现在有3件事情:开关A合上;开关B合上;灯C亮。C为真。
A×B=C,在C51中写成 A&&B=C
A
B
C
开关A
开关B
0
0
0
0
1
0
灯C 1
0
0
1
1
1
真值表
注意:这个不是加号,是 或运算符,也叫逻辑加, 在C51中为了避免与算术 加混淆,已改用||
可以使用switch语句,建议采用switch语句。switch语句也叫开关语句,它是C语言提供
的专门处理多方向分支的语句,可以使程序简洁、高效。
一般格式:
switch( 变量 ) {
case 变量可能值1 :分支1语句 break;
变量只能是 整型或字 符型。
Case 变量可能值2:分支2语句
break;
位与、位或主要用来对特定位的屏蔽。
实验原理
1.键盘的工作原理: 键盘的工作原理: 按键设置在行、列线交 点上,行、列线分别连接到按键开关的 两 端。行线通过上拉电阻接到+5V 电源上。 无按键按下时,行线处 于高电平的状态, 而当有按键按下时, 行线电平与此行线相 连的列 线电平决定。 2.行列扫描法原理: 原理: .行列扫描法原理 第一步, 使行线 为编程的输入线,列线是输出线,拉低所 有的列线, 判断行线的变化,如果有按键 按下,按键按下的对应行线被拉低,否则 所有的行线都为高电平。
A
C
开关A
灯C
0
1
1
0
真值表
注意区分逻辑运算和位逻辑运算
逻辑运算:参与运算的对象是逻辑量,结果也是 逻辑量,运算符是与或非。
逻辑运算用于多个关系表达式的连接,例如: If (a>2)&& (a<9) 可以实现更复杂的条件判 断。
位逻辑运算:参与运算的对象是8位二进制数,结 果也是8位二进制数,运算符是位与、位或、位 非。
从零到项目开发学51单片机 与C语言技术
基于MCS-51/HL-1/HJ-C52/HJ-C52增强版 QQ:398115088
矩阵键盘的检测原理及实现
本讲任务:
了解矩阵键盘检测原理及如何获得键盘扫描 码。 掌握矩阵键盘的检测和数码管动态显示混合编 程。
穿插讲解以下知识点:
带返回值函数 位逻辑运算 SWITH语句
结构与工作原理
• 矩阵式结构的键盘显然比直接法要复杂一 些,识别也要复杂一些,下图中,列线通 过电阻接正电源,并将行线所接的单片机 的I/O口作为输出端,而列线所接的I/O口则 作为输入。这样,当按键没有按下时,所 有的输入端都是高电平,代表无键按下。 行线输出是低电平,一旦有键按下,则输 入线就会被拉低,这样,通过读入输入线 的状态就可得知是否有键按下了。
实验原理
第二步, 在第一步判断有键按下后, 延时 10ms 消除 机械抖动,再次读取行值,如果此行线还处于低电平 状态则进入下 一步,否则返回第一步重新判断。第三 步,开始扫描按键位置,采用逐 行扫描,每间隔 1ms 的时间,分别拉低第一列,第二列,第三列,第 四 列,无论拉低哪一列其他三列都为高电平,读取行 值找到按键的位置, 分别把行值和列值储存在寄存器 里。第四步,从寄存器中找到行值和列 值并把其合并, 得到按键值,对此按键值进行编码,按照从第一行第 一 个一直到第四行第四个逐行进行编码,编码值从 “0000” 至“1111” , 再进行译码,最后显示按键号码。