单片机部队扫描键盘程序说明_第1页
单片机部队扫描键盘程序说明_第2页
单片机部队扫描键盘程序说明_第3页
单片机部队扫描键盘程序说明_第4页
单片机部队扫描键盘程序说明_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机部队扫描键盘程序说明一、部队扫描法矩阵式键盘的构造与作业原理:在键盘中按键数量较多时,为了削减I/O口的占用,一般将按键摆放成矩阵方法,如图1所示。在矩阵式键盘中,每条水平线和笔直线在穿插处不直接连通,而是通过一个按键加以联接。这么,一个端口(如P1口)就能够构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,并且线数越多,差异越显着,比方再多加一条线就能够构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需求的键数比照多时,选用矩阵法来做键盘是合理的。矩阵式构造的键盘显着比直接法要杂乱一些,辨认也要杂乱一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这么,当按键没有按下时,悉数的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这么,通过读入输入线的情况就可得知是不是有键按下了。详细的辨认及编程方法如下所述。矩阵式键盘的按键辨认方法断定矩阵式键盘上何键被按下介绍一种“行扫描法”。行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键辨认方法,如上图所示键盘,介绍进程如下。差异键盘中有无键按下将悉数行线Y0-Y3置低电平,然后查看列线的情况。只需有一列的电平为低,则标明键盘中有键被按下,并且闭合的键坐落低电平线与4根行线相穿插的4个按键傍边。若悉数列线均为高电平,则键盘中无键按下。差异闭合键地址的方位在供认有键按下后,即可进入断定详细闭合键的进程。其方法是:顺次将行线置为低电平,即在置某根行线为低电往常,其它线为高电平。在断定某根行线方位为低电平后,再逐行查看各列线的电平情况。若某列为低,则该列线与置为低电平的行线穿插处的按键即是闭合的按键。下面给出一个详细的比方:8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3别离接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线构成16个相交点。查看其时是不是有键被按下。查看的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的情况,若P1.0-P1.3为全“1”,则无键闭合,不然有键闭合。去掉键颤抖。当查看到有键按下后,延时一段时刻再做下一步的查看差异。若有键被按下,应辨认出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合顺次输出:P1.71110P1.61101P1.51011P1.40111二、部队回转法了解部队键盘扫描得从硬件开端学习,咱们得知道部队扫描是啥意思。在单片机体系中为了拓宽同一个I/O口的键盘个数,则选用了部队式键盘接法,就是穿插相接。所谓的“行”、“列”是咱们人为规矩的,假定试着把列当作行,将行当作列是相同的。这儿咱们规矩P1.0~P1.3为列,P1.7~P1.4为行。如图所示:1、51比方举一个比方吧。榜首步:行线IOP1.7~P1.4置低电平,列线IOP1.0~P1.3置高电平假定K1按下,那么P1.0=0读P1口P1=00001110第二步:行线IOP1.7~P1.4置高电平,列线IOP1.0~P1.3置低电平假定K1按下,那么P1.7=0读P1口P1=01110000两个字节相加,得到新数据:01111110(榜首行榜首列)每按一个键咱们都得到纷歧样的字节,比对咱们的字节是啥就能够知道键值是啥了。/////////////////////////////////////////////////////////////////////#include//包括头文件,一般情况不需求改动,头文件包括分外功用寄存器的界说#defineucharunsignedchar#defineuintunsignedintunsignedcharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F/*------------------------------------------------函数声明------------------------------------------------*/ucharkeyscan(void);//键盘扫描voiddelay(uinti);//演示程序/*------------------------------------------------主函数------------------------------------------------*/voidmain(){ucharkey;P2=0x00;//1数码管亮按相应的按键,会闪现按键上的字符while(1){key=keyscan();//调用键盘扫描,switch(key){case0x7e:P0=dofly[0];break;//0按下相应的键闪现相对应的码值case0x7d:P0=dofly[1];break;//1case0x7b:P0=dofly[2];break;//2case0x77:P0=dofly[3];break;//3case0xbe:P0=dofly[4];break;//4case0xbd:P0=dofly[5];break;//5case0xbb:P0=dofly[6];break;//6case0xb7:P0=dofly[7];break;//7case0xde:P0=dofly[8];break;//8case0xdd:P0=dofly[9];break;//9case0xdb:P0=dofly[10];break;//acase0xd7:P0=dofly[11];break;//bcase0xee:P0=dofly[12];break;//ccase0xed:P0=dofly[13];break;//dcase0xeb:P0=dofly[14];break;//ecase0xe7:P0=dofly[15];break;//f}}}/*------------------------------------------------键盘扫描程序------------------------------------------------*/一、部队扫描法矩阵式键盘的构造与作业原理:在键盘中按键数量较多时,为了削减I/O口的占用,一般将按键摆放成矩阵方法,如图1所示。在矩阵式键盘中,每条水平线和笔直线在穿插处不直接连通,而是通过一个按键加以联接。这么,一个端口(如P1口)就能够构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,并且线数越多,差异越显着,比方再多加一条线就能够构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需求的键数比照多时,选用矩阵法来做键盘是合理的。矩阵式构造的键盘显着比直接法要杂乱一些,辨认也要杂乱一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这么,当按键没有按下时,悉数的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这么,通过读入输入线的情况就可得知是不是有键按下了。详细的辨认及编程方法如下所述。矩阵式键盘的按键辨认方法断定矩阵式键盘上何键被按下介绍一种“行扫描法”。行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键辨认方法,如上图所示键盘,介绍进程如下。差异键盘中有无键按下将悉数行线Y0-Y3置低电平,然后查看列线的情况。只需有一列的电平为低,则标明键盘中有键被按下,并且闭合的键坐落低电平线与4根行线相穿插的4个按键傍边。若悉数列线均为高电平,则键盘中无键按下。差异闭合键地址的方位在供认有键按下后,即可进入断定详细闭合键的进程。其方法是:顺次将行线置为低电平,即在置某根行线为低电往常,其它线为高电平。在断定某根行线方位为低电平后,再逐行查看各列线的电平情况。若某列为低,则该列线与置为低电平的行线穿插处的按键即是闭合的按键。下面给出一个详细的比方:8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3别离接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线构成16个相交点。查看其时是不是有键被按下。查看的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的情况,若P1.0-P1.3为全“1”,则无键闭合,不然有键闭合。去掉键颤抖。当查看到有键按下后,延时一段时刻再做下一步的查看差异。若有键被按下,应辨认出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合顺次输出:P1.71110P1.61101P1.51011P1.40111二、部队回转法了解部队键盘扫描得从硬件开端学习,咱们得知道部队扫描是啥意思。在单片机体系中为了拓宽同一个I/O口的键盘个数,则选用了部队式键盘接法,就是穿插相接。所谓的“行”、“列”是咱们人为规矩的,假定试着把列当作行,将行当作列是相同的。这儿咱们规矩P1.0~P1.3为列,P1.7~P1.4为行。如图所示:1、51比方举一个比方吧。榜首步:行线IOP1.7~P1.4置低电平,列线IOP1.0~P1.3置高电平假定K1按下,那么P1.0=0读P1口P1=00001110第二步:行线IOP1.7~P1.4置高电平,列线IOP1.0~P1.3置低电平假定K1按下,那么P1.7=0读P1口P1=01110000两个字节相加,得到新数据:01111110(榜首行榜首列)每按一个键咱们都得到纷歧样的字节,比对咱们的字节是啥就能够知道键值是啥了。/////////////////////////////////////////////////////////////////////#include//包括头文件,一般情况不需求改动,头文件包括分外功用寄存器的界说#defineucharunsignedchar#defineuintunsignedintunsignedcharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F/*------------------------------------------------函数声明------------------------------------------------*/ucharkeyscan(void);//键盘扫描voiddelay(uinti);//演示程序/*------------------------------------------------主函数------------------------------------------------*/voidmain(){ucharkey;P2=0x00;//1数码管亮按相应的按键,会闪现按键上的字符while(1){key=keyscan();//调用键盘扫描,switch(key){case0x7e:P0=dofly[0];break;//0按下相应的键闪现相对应的码值case0x7d:P0=dofly[1];break;//1case0x7b:P0=dofly[2];break;//2case0x77:P0=dofly[3];break;//3case0xbe:P0=dofly[4];break;//4case0xbd:P0=dofly[5];break;//5case0xbb:P0=dofly[6];break;//6case0xb7:P0=dofly[7];break;//7case0xde:P0=dofly[8];break;//8case0xdd:P0=dofly[9];break;//9case0xdb:P0=dofly[10];break;//acase0xd7:P0=dofly[11];break;//bcase0xee:P0=dofly[12];break;//ccase0xed:P0=dofly[13];break;//dcase0xeb:P0=dofly[14];break;//ecase0xe7:P0=dofly[15];break;//f}}}/*------------------------------------------------键盘扫描程序------------------------------------------------*/ucharkeyscan(void)//键盘扫描函数,运用部队回转扫描法{ucharcord_h,cord_l;//部队值基地变量P3=0x0f;//行线输出全为0cord_h=P3&0x0f;//读入列线值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论