原创 51 4*4 键盘扫描 实验(六)

2008-5-11 23:14 3467 8 8 分类: MCU/ 嵌入式

点击下载


前面介绍的基本都是IO口作为输出口的实验,这里介绍一个输入的实验,实现矩阵键盘扫描.详细介绍见附件.


平台:FDR51开发板


#include<AT89X52.H>
#include"led.h"                          //该头文件包含数码管驱动动
/******************************************************
                按键扫描函数
    若有按键按下:返回 键值(1-16);
    若没按键按下:返回  255              
********************************************************/
unsigned char getch (  )
{  
 unsigned char X="0",                    
 Y=0,
 Z=0,
 k=255;
 P2=0xff;
 P2=0x0f;       //先对P2置数  行扫描
 if(P2!=0x0f)     //判断是否有键按下
 { 
  //延时,软件去干扰
  if(P2!=0x0f)   //确认按键按下X = P2;
  {
   X=P2;          //保存行扫描时有键按下时状态
   P2=0xf0;       //列扫描
   Y=P2;          //保存列扫描时有键按下时状态
   Z=X|Y;         //取出键值
   switch ( Z )   //判断键值(那一个键按下)
   {
    case 0xee: k="0"; break; //对键值赋值
    case 0xde: k="1"; break;
    case 0xbe: k="2"; break;
    case 0x7e: k="3"; break;
    case 0xed: k="4"; break;
    case 0xdd: k="6"; break;
    case 0xbd: k="7"; break;
    case 0x7d: k="8"; break;
    case 0xeb: k="9"; break;
    case 0xdb: k="7"; break;  
    case 0xbb: k="10";break;
    case 0x7b: k="11";break;
    case 0xe7: k="12";break;
    case 0xd7: k="13";break;
    case 0xb7: k="14";break;
    case 0x77: k="15";break;
   }
   while(P2!=0xf0);
  }    
 }  
 return k;
}
void main()
{
 unsigned char temp="0",key=255;
 while(1)
 {
  key=getch();           //扫描
  if(key!=255)temp=key;  //有按键按下  
  led_display(temp);     //显示按键值
 }
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /1 下一条