51/AVR单片机开发系统
·设为首页
·联系站长
·加入收藏
 位置: 雨飞电子科技 >> 文章资讯 >> 单片机 >> 程序源码 >> 正文 本站推出51/AVR单片机专业开发系统  [2006-10-02 17:24:49]      雨飞电子科技综合资讯网开通  [2006-01-15 23:09:58]
  4×4矩阵键盘C语言程序参考    3星级
4×4矩阵键盘C语言程序参考
[ 作者:未知     来源:网上收集     点击数:     更新时间:2006-10-25     文章录入:飞奔
【字体: 字体颜色

#define int8 unsigned int
#define int16 unsigned char 
#define int32 unsigned long 

#define KEY_PORT PORTD
#define KEY_PIN  PIND

#define ROW1  (1<<0)
#define ROW2  (1<<1)
#define ROW3  (1<<2)  
#define ROW4  (1<<3)

static int8 scan_X(void);
static delay(void);
int8 scan_key(void);
/*
 函数原型:int8 scan_key(void)
 功能:     返回按下的按键的行列值,
      如返回第二行第三列,即按键“6”,
      返回值0x23,高位为行,低位为列
 键盘:
           7      8      9      /
           4      5      6      *
           1      2      3      +
           C      0      =      -
 返回值:
           0x11   0x12   0x13  0x14
           0x21   0x22   0x23  0x24
           0x31   0x32   0x33  0x34
           0x41   0x42   0x43  0x44           
 作者:     Benny 
 Email:    89S53@163.com  

2005              
*/
int8 scan_key(void){
//第四行----------------
KEY_PORT|=0xff;
KEY_PORT&=~ROW4;
if ((KEY_PIN&0xf0)!=0xf0)
{
   delay();//去抖动
   if ((KEY_PIN&0xf0)!=0xf0)
   {  
       return (0x40|scan_X());            
   }
}

//第三行----------------
KEY_PORT|=0xff;
KEY_PORT&=~ROW3;
if ((KEY_PIN&0xf0)!=0xf0)
{
   delay();//去抖动
   if ((KEY_PIN&0xf0)!=0xf0)
   {
       return (0x30|scan_X());            
   }

}

//第二行----------------
KEY_PORT|=0xff;
KEY_PORT&=~ROW2;
if ((KEY_PIN&0xf0)!=0xf0)
{
   delay();//去抖动
   if ((KEY_PIN&0xf0)!=0xf0)
   {
       return (0x20|scan_X());            
   }


 
//第一行: 7  8  9  /
KEY_PORT|=0xff;
KEY_PORT&=~ROW1;
if ((KEY_PIN&0xf0)!=0xf0)
{
   delay();//去抖动
   if ((KEY_PIN&0xf0)!=0xf0)
   {  
       return (0x10|scan_X());            
   }
}
 
}
//列扫描函数
static int8 scan_X(void){
       if ((KEY_PIN&0xf0)==0xe0)
       { //"7"
         while((KEY_PIN&0xf0)==0xe0);
         return 0x01; //第一列
       }
       else if((KEY_PIN&0xf0)==0xd0)
       {
         while((KEY_PIN&0xf0)==0xd0);      
         return 0x02;//第二列
       }
       else if((KEY_PIN&0xf0)==0xb0)
       {
         while((KEY_PIN&0xf0)==0xb0);
         return 0x03;//第三列
       }      
       else if((KEY_PIN&0xf0)==0x70)
       {
         while((KEY_PIN&0xf0)==0x70);        
         return 0x04; //第四列
       }

       
}
static delay(void){
//去抖动
int16 i,j;
for (i=0;i<10;i++)
  {
  for (j=0;j<100;j++)
     {}
  }
}

  • 上一篇文章: 实时时钟芯片DS1302的C51程序列子

  • 下一篇文章: 没有了
  • 发表评论   告诉好友   打印此文  收藏此页  关闭窗口  返回顶部
     最新5篇热点文章
     本站推出51/AVR单片机开发系统
     锁相环频率合成控制器MB1501/MB1504置...
     4900种场效应管参数资料(五)
     4900种场效应管参数资料(四)
     4900种场效应管参数资料(三)
     
     最新5篇推荐文章
     本站推出51/AVR单片机开发系统
     锁相环频率合成控制器MB1501/MB1504置...
     4900种场效应管参数资料(一)
     ATMEL89系列单片机特点
     2004-2005中国本土嵌入式十佳企业揭晓...
     
     相 关 文 章

      网友评论:(只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
     设为首页  加入收藏  关于本站  版权申明  联系站长  友情链接  在线留言  与我同在 
    Copyright© 2005-2006 Www.Yufik.Com All Rights Reserved
    广州雨飞电子科技 E-mail: yufik@163.com 中国·广东·广州

    粤ICP备05026189号