C51矩阵键盘的检测
矩阵键盘检测

C51矩阵键盘的检测要求:扫描矩阵键盘,并将对应按键的值显示在LED上方法一(传统检测):#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;//sbit key1=P3^4;uchar code table[]={//共阳极LED数码管显示数字0~F0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchar num,temp,num1;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}uchar keyscan();void display(uchar aa);void main(){while(1){display(keyscan());}}void display(uchar aa){/*先送数,后选通,延时以后,将所有端口都不选通,这样,拖影就消失了*/ dula=1;P0=table[aa-1];dula=0;wela=1;P0=0x01;wela=0;delay(5);wela=1;P0=0x00;wela=0;}uchar keyscan(){P3=0xfe;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case0xee:num=1;break;case0xde:num=2;break;case0xbe:num=3;break;case0x7e:num=4;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfd;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case0xed:num=5;break;case0xdd:num=6;break;case0xbd:num=7;break;case0x7d:num=8;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfb;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case0xeb:num=9;break;case0xdb:num=10;break;case0xbb:num=11;break;case0x7b:num=12;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xf7;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case0xe7:num=13;break;case0xd7:num=14;break;case0xb7:num=15;break;case0x77:num=16;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}return num;}方法二(技巧检测):#include<reg51.h>#include<intrins.h>sbit dula=P2^6;sbit wela=P2^7;#define uint unsigned int#define uchar unsigned char//uchar code table[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01, 0x09};uchar code table[]={//共阳极LED数码管显示数字0~F0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchar Key_Value;void Delay_1ms(uint x){uchar i,j;for(i=0;i<x;i++)for(j=0;j<=148;j++);}void Getkey(){uchar i,j,temp,num,Key_Temp1,Key_Temp2,Buffer[4]={0xfe,0xfd,0xfb, 0xf7};for(j=0;j<4;j++)//循环四次{P3=Buffer[j];_nop_();_nop_();temp=0x10;for(i=0;i<4;i++)//循环四次{if(!(P3&temp)){num=i+j*4;//返回取得的按键值}temp<<=1;//换左边一位}}P3=0xff;Key_Temp1=num;//读入按键if(Key_Temp1<16)//有键按下{Delay_1ms(5);//延时消抖Key_Temp2=num;//再读一次if(Key_Temp1==Key_Temp2)//两次相等Key_Value=Key_Temp1;//就确认下来}}void Display(uchar k){dula=1;P0=table[k];dula=0;wela=1;P0=0x01;wela=0;Delay_1ms(5);wela=1;P0=0x00;wela=0;}void Main(void){while(1){Getkey();Display(Key_Value);//显示键值}}。
51键盘矩阵扫描程序

51键盘矩阵扫描程序假设按下的是S1键进行如下检测(4*4键盘)先在P3口输出p3 00001111低四位行会有变化cord_h =00001111&00001110 =00001110if !=00001111延时0.1uscord_h=00001110&00001111=00001110if !=00001111P3再输出11111110P3 =00001110|11110000=11111110输出高四位cord_l=P3&0xf0 //此时P3口就是(实际值)输入值01111110 而不是上面的11111110cord_l=01111110&11110000=01110000cord_h+cord_l=00001110+01110000=01111110=0x7e //此编码即为S1的编码#include <reg52.h>//包含头文件#define uchar unsigned char#define uint unsigned intunsigned char consttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-Fuchar keyscan(void);void delay(uint i);void main(){uchar key;P2=0x00;//1数码管亮按相应的按键,会显示按键上的字符while(1){key=keyscan();//调用键盘扫描,switch(key){case 0x7e:P0=table[0];break;//0 按下相应的键显示相对应的码值case 0x7d:P0=table[1];break;//1case 0x7b:P0=table[2];break;//2case 0x77:P0=table[3];break;//3case 0xbe:P0=table[4];break;//4case 0xbd:P0=table[5];break;//5case 0xbb:P0=table[6];break;//6case 0xb7:P0=table[7];break;//7case 0xde:P0=table[8];break;//8case 0xdd:P0=table[9];break;//9case 0xdb:P0=table[10];break;//acase 0xd7:P0=table[11];break;//bcase 0xee:P0=table[12];break;//ccase 0xed:P0=table[13];break;//dcase 0xeb:P0=table[14];break;//ecase 0xe7:P0=table[15];break;//f}}}uchar keyscan(void)//键盘扫描函数,使用行列反转扫描法{uchar cord_h,cord_l;//行列值P3=0x0f; //行线输出全为0cord_h=P3&0x0f; //读入列线值if(cord_h!=0x0f) //先检测有无按键按下{delay(100); //去抖cord_h=P3&0x0f; //读入列线值if(cord_h!=0x0f){P3=cord_h|0xf0; //输出当前列线值cord_l=P3&0xf0; //读入行线值return(cord_h+cord_l);//键盘最后组合码值}}return(0xff); //返回该值}void delay(uint i)//延时函数{while(i--);}。
实验6 矩阵键盘的检测

实验6 矩阵键盘的检测一、实验目的1、掌握七段数码管显示的软件译码方法;2、掌握矩阵键盘的使用。
二、实验内容矩阵键盘来控制数码管显示:实验板上电时,数码管不显示,顺序按下4*4矩阵键盘后,在数码管上依次显示0-F,6个数码管同时静态显示即可。
三、实验方法和手段多媒体教学、演示、讲练结合、软件仿真、实物焊接四、实验条件实验指导书、计算机、Proteus软件、Keil C51软件、耗材、电烙铁五、实验学时2学时六、实验步骤1、Proteus设计电路原理图(1)按照图6-1,在Proteus软件中绘制好电路原理图。
图6-1 电路原理图说明:矩阵键盘行线接P3口低4位(第一行P3.0),列线接P3口高4位(第一列接P3.4)。
(2)电路原理图中所需要的元件见表6-1。
表6-1 元件列表元件名称型号数量Proteus中的名称单片机芯片AT89C51 1个AT89C51 晶振12MHz 1个CRYSTAL电容22PF 2个CAP电解电容22uF/16V 1个CAP-ELEC电阻1K 1个RES排阻1K 1个RESPACK_8 六位一体共阴极数码管1个7SEG-MPX6_CC 锁存芯片74HC573 2个74HC573按键开关16个BUTTON 2、编程控制在Keil软件中进行程序编制,完成目标:顺序按下4*4矩阵键盘后,6个数码管同时静态依次显示0-F。
将下面的参考程序补充完整,也可自行编写新程序。
参考程序代码如下:3、仿真调试将生成的HEX文件加载到Proteus中,进行软件仿真,查看效果。
4、实物调试(1)程序烧制(2)使用焊接成功的电路板,通电调试,查看效果。
七、思考题1、如果采用双数码管显示按键值(0-15),应如何修改程序代码?2、如果行线接P3口低4位,列线接P2口低4位,程序代码如何修改?。
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 }。
51单片机矩阵键盘带去抖释放检测汇编

ORG 0000HLJMP MAINORG 0100HMAIN: ACALL KEYSCAN ;调用子函数MOV A,30H ;从30H单元取相应的数值MOV DPTR,#TABLEMOVC A,@A+DPTRMOV P2,AACALL DELAY20MSSJMP MAINMOV P1,#0FH ;线反转法MOV A,P1ANL A,#0FHMOV B,AMOV P1,#0F0HMOV A,P1ANL A,#0F0HORL A,BMOV 30H,ACJNE A,#0FFH, MASKVIB ;有键按下转去抖动RETMASKVIB: ACALL DELAY20MSMOV P1,#0FH ;再次检测MOV A,P1ANL A,#0FHMOV B,AMOV P1,#0F0HMOV A,P1ANL A,#0F0HORL A,BCJNE A,30H, QUITKEY;比较两次扫描键值RELEASE: MOV P1,#0FFH ;释放检测MOV A,P1CJNE A,#0FFH, RELEASE ;等待释放KEYPRO: MOV B,30H ;键值处理程序MOV DPTR,#KEYV ALUEMOV R7,#0FFHKEY1: INC R7MOV A,R7MOVC A,@A+DPTRCJNE A,B,KEY2MOV A, R7MOV 30H,A;键码保存SETB 20H ;键值有效标志位RETKEY2: CJNE A,#00H,KEY1 ;扫描键值结束标志QUITKEY: RET ;键扫描无效退出DELAY20MS: ;延时20MS子程序,使用40,41,42单元MOV 40H,#20 ;NEXT1: MOV 41H,#20NEXT2: MOV 42H,#248DJNZ 42H,$DJNZ 41H,NEXT2DJNZ 40H,NEXT1RETKEYV ALUE: DB 77H,7BH,7DH,7EH ;键码表DB 0B7H,0BBH,0BDH,0BEHDB 0D7H,0DBH,0DDH,0DEHDB 0E7H,0EBH,0EDH,0EEHDB 00HTABLE: DB 0C0H,0F9H,0A4H,0B0H ;共阳数码管编码表DB 99H,92H,82H,0F8HDB 80H,90H,88H,83HDB 0C6H,0A1H,86H,8EHEND矩阵键盘扫描子程序,使用P1口。
(实验四)单片机矩阵键盘检测和液晶仿真实验

实验四单片机矩阵键盘检测和液晶仿真实验(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键)。
由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
第7章 C51矩阵式键盘程序设计

“天华杯”
教师培训
温锦辉
7.4 小结
• 本章首先介绍了独立式按键和矩阵式键盘的结构, 以及键盘设计的注意事项。接着,重点介绍了3种 矩阵式键盘的设计方法,包括扫描法、线反转法 和中断法。在讲解过程中,均给出了键盘扫描流 程以及C51代码实例。最后通过一个完整实例,来 实现了矩阵式键盘在单片机系统的应用。在实例 中,采用的是4×4矩阵式键盘,并通过线反转法 来获取键值。矩阵式键盘应用十分广泛,熟练掌 握矩阵式键盘的使用是单片机人机接口设计的基 础。
图10-3: 4位静态LED显示器电路。该电路各位 可独立显示。
“天华杯” 教师培训 温锦辉
2. 动态显示方式 所有位的段码线相应段并在一起,由一个8位I/O 口控制,形成段码线的多路复用,各位的公共端分别由 相应的I/O线控制,形成各位的分时选通。
“天华杯” 教师培训 温锦辉
图10-4:4位8段LED动态显示电路。其中段码线占用一个8位I/O口,而位选 线占用一个4位I/O口。
第7章 C51矩阵式键盘程序设计
• 在单片机应用系统中,除了完成基本的功能外,另一个最 重要的任务是设计优秀的人机交互接口。人机交互接口用 来实现控制命令及数据的输入,并且将系统运行信息显示 反映给操作者。键盘以按键的形式来设置控制功能或数据, 其是人机交互的最基本的途径。在键盘中,按键的输入状 态本质上是一个开关量。通过键盘为按键编码,从而实现 命令或数据的输入,以达到控制的目的。 • 在单片机应用系统中,有两种常用的键盘结构:独立式按 键和矩阵式按键。其中,独立式按键比较简单,适合于较 少开关量的输入场合,而矩阵式键盘则适合于输入命令或 者数据较多、功能复杂的系统。采用矩阵式键盘结构可以 最大限度地使用单片机的引脚资源,因此应用十分广泛。
44矩阵键盘扫描C程序(C51)

#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar dis_buf; //显示缓存uchar temp;uchar key; //键顺序吗void delay0(uchar x); //x*0.14MS#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};// 此表为LED 的字模0 1 2 3 4 5 6 7 89 a b c d e funsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};/*************************************************************//* *//* 延时子程序*//* *//*************************************************************/void delay(uchar x){ uchar j;while((x--)!=0){ for(j=0;j<125;j++){;}}}/*************************************************************//* *//* 键扫描子程序(4*4 的矩阵) P2.4 P2.5 P2.6 P2.7为行*//* P2.0 P2.1 P2.2 P2.3为列*//* *//*************************************************************/void keyscan(void){ temp = 0;P2=0xF0; //高四位输入行为高电平列为低电平delay(1);temp=P2; //读P2口temp=temp&0xF0; //屏蔽低四位temp=~((temp>>4)|0xF0);if(temp==1) // p2.4 被拉低key=0;else if(temp==2) // p2.5 被拉低key=1;else if(temp==4) // p2.6 被拉低key=2;else if(temp==8) // p2.7 被拉低key=3;elsekey=16;P2=0x0F; //低四位输入列为高电平行为低电平delay(1);temp=P2; //读P2口temp=temp&0x0F;temp=~(temp|0xF0);if(temp==1) // p2.0 被拉低key=key+0;else if(temp==2) // p2.1 被拉低key=key+4;else if(temp==4) // p2.2 被拉低key=key+8;else if(temp==8) // p2.3 被拉低key=key+12;elsekey=16;dis_buf = key; //键值入显示缓存//dis_buf = dis_buf & 0x0f;}/*************************************************************/ /* */ /*判断键是否按下*/ /* */ /*************************************************************/void keydown(void){P2=0xF0;if(P2!=0xF0) //判断按键是否按下如果按钮按下会拉低P2其中的一个端口{keyscan(); //调用按键扫描程序}}/*************************************************************//* *//* 主程序*//* *//*************************************************************/main(){P0=0xFF; //关段码P1=0x10; //开位码delay(10); //延时while(1){keydown(); //调用按键判断检测程序P0 = LED7Code[dis_buf]; //显示按键的数值}}/************************************************************/。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
资料仅供参考
矩阵键盘检测的控制方式
中断方式
➢为提高CPU工作效率,可 采用中断扫描工作方式。 其工作过程如下:当无键 按下时,CPU处理自己的 工作,当有键按下时,产 生中断请求,CPU转去执 行键盘扫描子程序,并识 别键号。
80C51
&
INT0
P1.0 P1.1 P1.2 P1.3
P1.4 P1.5 P1.6 P1.7
2)线反转法
➢ 先将行线作为输出线,列线作为输入线,行线输出 全“0”信号,读入列线的值;
➢ 然后将行线和列线的输入输出关系互换,并且将刚 才读到的列线值从列线所接的端口输出,再读取行 线的输入值。那么在闭合键所在的行线上值必为0。 这样,当一个键被按下时,必定可读到一对唯一的 行列值。
➢键值 = 行值 | 列值 查表得键号。
➢ 键号 = 行首键号(0、4、8、12)+列号(0、1、2、3)
6
资料仅供参考
矩阵键盘的检测方法
U1
P10 P11 P12 P13 P14 P15 P16 P17
1 2 3 4 5 6 7 8
P10 P11 P12 P13 P14 P15 P16 P17
P00 P01 P02 P03 P04 P05 P06 P07
4*4矩阵式键盘
3
资料仅供参考
矩阵键盘的结构
矩阵键盘特点
➢ 电路结构复杂,但提高了I/O引脚的利用率,软件编程 较复杂,适用于所需按键较多的场合。
矩阵键盘的检测需解决以下问题:
➢ 1、开关状态的可靠输入——可设计硬件去抖动电路或 设计去抖动软件。
➢ 2、键盘检测的方法(即如何编写键盘扫描函数)。 ➢ 3、键盘检测的控制方式(即扫描函数如何被调用)——
39 38 37 36 35 34 33 32
K0
P10
K4
P11
0 K1 4 K5
1 K2 5 K6
2 K3 6 K7
3 713 1215143119 18
9
17 16
INT 1 INT 0
T1 T0
89C52
EA /V P
X1 X2
RE SET
RD WR
P20 P21 P22 P23 P24 P25 P26 P27
8
资料仅供参考
矩阵键盘的检测方法
以4*4矩阵键盘接P3口为例 ➢先列扫描置P3=0xf0,当有键按下得列值,再行 扫描置P3=0x0f,当有键按下得行值,最后合并 行列值得键值。
9
资料仅供参考
矩阵键盘检测的控制方式
单片机在运行过程中,何时进行键盘扫描和处理, 有以下几种方式: ➢顺序查询方式 ➢定时扫描方式 ➢中断方式
矩阵键盘控制2位数码管显示,分别按下0-15号按 键,数码管显示对应的键号,最初无键按下时数 码管显示16,用行扫描法+定时扫描实现。
参考程序见“矩阵键盘-行扫描法+定时扫描”
16
资料仅供参考
矩阵键盘案例(2)--行扫描法+定时扫描
17
资料仅供参考
小结
矩阵键盘的检测:
➢按键的识别:行扫描法、线反转法; ➢软件消抖及松手检测; ➢按键按下的处理
13
资料仅供参考
矩阵键盘案例(1)--线反转法
矩阵键盘控制2位数码管显示,分别按下0-15号按 键,数码管显示对应的键号,最初无键按下时数 码管显示16,用线反转法实现。
参考程序见“矩阵键盘-线反转法”
14
资料仅供参考
矩阵键盘案例(1)--线反转法
15
资料仅供参考
矩阵键盘案例(2)--行扫描法+定时扫描
18
资料仅供参考
思考题
中断式矩阵键盘如何与单片机连接电路?
19
资料仅供参考
预习内容 本周小课
➢行扫描法的原理是什么?键值如何得到? ➢线反转法的原理是什么?键值如何得到? 下周大课 ➢串行通信基础知识 ➢80C51串口结构及其工作方式0
20
1)行扫描法
➢ 通过行线发出低电平信号,如果该行线所连接的键没有 按下的话,则列线所接的端口得到的是全“1”信号, 如果有键按下的话,则得到非全“1”信号。
➢ 为了防止双键或多键同时按下,往往从第0行一直扫描 到最后1行,若只发现1个闭合键,则为有效键,否则全 部作废。
➢ 找到闭合键后,读入相应的键值,再转至相应的键处理 程序。
资料仅供参考
教学内容
矩阵键盘的结构 矩阵键盘的检测方法 矩阵键盘的编程操控及功能处理
1
资料仅供参考
教学要求
掌握独立键盘的检测原理及软件编程方法 ➢行扫描法 ➢线反转法
2
资料仅供参考
矩阵键盘的结构
矩阵键盘实际上是 由排列成矩阵形式 的一系列按键开关 组成,用户通过键 盘可以向CPU输入数 据、地址和命令。 常见的接口电路如 右图所示。
10
资料仅供参考
矩阵键盘检测的控制方式
顺序查询方式 ➢单片机主程序通过调用键盘扫描子程序,查询 有无按键按下。 ➢何时调用键盘扫描子程序,何时扫描键盘;否 则不进行键盘的扫描。
11
资料仅供参考
矩阵键盘检测的控制方式
定时扫描方式 ➢每隔一段时间调用键盘扫描子程序对键盘扫描 一次。 ➢利用单片机内部的定时器产生一定时间(例 10ms)的定时,当定时时间到就产生定时器溢 出中断。CPU响应中断后对键盘进行扫描,并 在有键按下时识别出该键,再执行该键的功能 程序。
V CC G ND RX D TX D A LE/P PSE N
21 22 23 24 25 26 27 28
40 20 10 11 30 29
P12 K8 P13 K12
P14 P15 P16 P17
8 K9 C K13
9 K10 D K14
A K11 E K15
B F
7
资料仅供参考
矩阵键盘的检测方法
顺序查询方式、定时查询方式和中断方式。 ➢ 4、键盘控制程序的编写。
4
资料仅供参考
按键的消抖
按键抖动时间约5ms-10ms,可软 件消抖或者硬件消抖。
软件消抖:延时约10ms再次判断。 硬件消抖:并联电容或双稳态消
抖电路。
消抖电路
5
资料仅供参考
矩阵键盘的检测方法
矩阵键盘识别按键的方法有两种:一是行扫描法, 二是线反转法。