日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
4×4矩陣鍵盤C語言程序參考
4×4矩陣鍵盤C語言程序參考
 更新時間:2008-7-26 20:01:38  點擊數:2
【字體: 字體顏色

#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++)
     {}
  }
}

  • 上一篇: AT89S51與AT89C51的區(qū)別
  • 下一篇: 基于AT89C51單片機的LED彩燈控制器設計
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網站

    網站經營許可證:浙B2-20080178-1