原创 牛年单片机学习日记--矩阵键盘

2009-2-27 13:35 6371 7 12 分类: MCU/ 嵌入式

Wed     Feb    25     2009          阴


                                      牛年单片机学习日记--矩阵键盘


        终于把实习答辩搞完了icon,又可以安心的学习俺的单片机了,呵呵icon,今天就搞矩阵键盘了。键盘的识别方法有行扫描法和行反转法,今天就学用行反转法写吧。


          icon行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法.


     判断键盘中有无键按下: 将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。


     判断闭合键所在的位置: 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。


       icon 反转法:


      用反转法识别闭合键时,要将行线接一个并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作在输入方式。程序使单片机通过输出端口往各行线 上全部送低电平,然后读入列线的值,如此时有某个键按下,则必这定会使某一列线值为0 。这时程序再对两个并行口进行方式设置,使接线的并行端口输出,再读取行线的输入值,那么,在闭合键所在的行线的值必定为0 。这样当一个键按下时,必定可读得一对唯一的行值和列值。


 


                                  icon下面是俺 的小程序icon


 


#include <reg51.h>


#define uchar unsigned char
#define uint unsigned int


uchar code seg7code[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,  
                       0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //段码
         
uchar k;  //记录key值


void delay10ms(void) //延时程序
{  
      unsigned char i,j;  
      for(i=20;i>0;i--)  
      for(j=248;j>0;j--);  
}  
void Getch (    )        //key scan function
{      
      unsigned char X,Y,Z;
      P2=0xff;
      P2=0x0f;              //先对 P2置数    行扫描
      if(P2!=0x0f)          //判断是否有键按下
      {
            delay10ms();        //延时,软件去干扰
            if(P2!=0x0f)      //确认按键按下;
            {
                  X="P2";                    //保存行扫描时有键按下时状态
                  P2=0xf0;              //列扫描
                  Y="P2";                    //保存列扫描时有键按下时状态
                  Z="X|Y";                  //取出键值
                  switch ( Z )      //判断键值(那一个键按下)
                  {
                        case 0x77: k="0"; break; //对键值赋值
                        case 0x7b: k="1"; break;  
                        case 0x7d: k="2"; break;  
                        case 0x7e: k="3"; break;  
                        case 0xb7: k="4"; break;  
                        case 0xbb: k="5"; break;  
                        case 0xbd: k="6"; break;  
                        case 0xbe: k="7"; break;  
                        case 0xd7: k="8"; break;  
                        case 0xdb: k="9"; break;        
                        case 0xdd: k="10";break;  
                        case 0xde: k="11";break;  
                        case 0xe7: k="12";break;  
                        case 0xeb: k="13";break;
      case 0xed: k="14";break;                                             
                        case 0xee: k="15";break;
      default:break; 
                      }          
                  }      
      }          
}  
void main(void)
{  
    while(1)
  {
     P2=0xff;
      Getch();
      P0=seg7code[k];          //查表 LED 输出
      P1=0xf0;                  //输出相同的四位数据。
    }
}


 


 


                        下面是俺的电路图icon;点击下图可放大看


 


点击看大图


 



        呵呵,这个也参考别人的了,我想把它改进一下,让它显示四位不同的四位数,不过还没想好,怎么设置绶冲数组,好了,先去把肚子填一填,再回来搞!

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

用户1485605 2009-3-3 23:16

可以用吗?

xucun915_925777961 2009-2-27 13:19

就是用proteus然后导出位图就是这个样子了,主要是为了仿真方便,呵呵!

xucun915_925777961 2009-2-27 13:18

好的,我试试,谢谢提醒^_^

用户124414 2009-2-27 09:37

请分别实现 单按键一下显示,长按键显示,按键放手后显示,双击显示,和组合键显示, 完成后,按键功能就算差不多了

用户182343 2009-2-26 13:49

图怎么画的? 看起来像proteus
相关推荐阅读
xucun915_925777961 2013-04-28 11:31
毕业后的五年拉开大家差距的原因在哪里?【转】
  有人工作,有人继续上学,大家千万不要错过这篇文章,能看到这篇文章也是一种幸运,真的受益匪浅,对我有很大启迪,这篇文章将会改变我的一生,真的太好了,希望与有缘人分享,也希望对有缘人有所帮助!...
xucun915_925777961 2013-03-31 20:28
职场大牛精彩总结:职场上,如何做人做事做管理【转】(文/张子阳)
      大道至简,越是根源和基本的问题,道理实际上越简单。关于如何做人、做事、做管理的书很多,我看得不多,但是我觉得这些书更多是侧重技术和实现细节上的,而很少从人的思想和观念去讲。实际...
xucun915_925777961 2013-03-28 14:03
介绍几种优秀的UML工具
统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件密集系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言...
xucun915_925777961 2013-03-27 18:05
IAR EW FOR 8051 修改工程名称的方法
        近段时间一直在搞蓝牙4.0的开发任务,所以用到了IAR编译器,话说IAR编译器用途蛮广,可以编译MSP430,ARM,还有TI的51核芯片,当然,这要不同的版本,我现在用的是for...
xucun915_925777961 2013-03-26 16:40
Cortex-M3学习日志(八)-- TFT实验Part(a)
    自己用的LPC1768的开板带有一块2.4寸的TFT彩色液晶屏,虽然自己工作中还用不过显示屏,但是晚上闲着也是闲着,于是继续玩咱的LPC1768吧。 我的开发板上的液晶屏的用的是SPI接口,当...
xucun915_925777961 2013-03-25 20:48
说说那几款查看源代码的工具
说说那几款查看代码的工具 今天给大家介绍几款单片机工程师所喜欢的几款查看源代码的工具,这几款工具在懒猫的日常工作中可是帮了不少忙。 一、 Source Insight     Source Insig...
EE直播间
更多
我要评论
5
7
关闭 站长推荐上一条 /3 下一条