機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
4x4鍵盤掃描程序
4x4鍵盤掃描程序
 更新時間:2008-7-27 16:14:49  點擊數(shù):2
【字體: 字體顏色

#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
//*********************************
//;P1 Registers
sbit P2_0=P2^7;
sbit P2_1=P2^7;
sbit P2_2=P2^7;
sbit P2_3=P2^7;
sbit P2_4=P2^7;
sbit P2_5=P2^7;
sbit P2_6=P2^7;
sbit P2_7=P2^7;
#define LEDPort2 P2    //LED控制口
#define LEDPort3 P3    //
const uchar leddigit[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};
//* 字符 0-9 編碼,0xff為關(guān)顯示,0xdf為小數(shù)點 */
//**********************************
static uchar bdata StateREG;     //可位尋址的狀態(tài)寄存器
sbit flag = StateREG^0;             //key是否按下,=1為按下
static uchar keyvl;
//**********************************
/*函數(shù)說明*/
//**********************************
void delay_10ms();
uchar keyscan();
void temp();
//**********************************
/*主函數(shù)*/
//**********************************
void main(void)
{
  uchar keyV;
  flag=0;
  while(1)
  {keyV=keyscan();     //調(diào)用鍵盤掃描函數(shù),返回的鍵值送變量key
   keyvl=keyV;
    if(flag==1) temp();
    delay_10ms();
  }
}

//***************************
/*延時函數(shù)*/
//***************************
void delay_10ms(void)
{uint j;
 for(j=0;j<5000;j++)
 {;}
}

//***************************
/*鍵值處理程序*/
//***************************
/*
void temp(void)
{
  switch(keyvl)
   {
   case 0x11:{ P2=0x01; break; }
   case 0x21:{ P2=0x02; break; }
   case 0x41:{ P2=0x03; break; }
   case 0x81:{ P2=0x04; break; }
   default: break; }
 }   */ 
//***************************
/*鍵值處理程序*/
//***************************
void temp()
{

 if(keyvl==0x11) {P2=0xfe;return;}
 
  else if(keyvl==0x21){P2=0xFD;return;}
 
   else if(keyvl==0x41){P2=0xFB;return;}
  
     else if(keyvl==0x81){P2=0xF7;return;}
     
      else if(keyvl==0x12){P2=0xEF;return;}
       
       else if(keyvl==0x22){P2=0xDF;return;}
       
        else if(keyvl==0x42){P2=0xBF;return;}
        
         else if(keyvl==0x82){P2=0x7F;return;}
        
          else if(keyvl==0x14){P3=0xFE;return;}
         
           else if(keyvl==0x24){P3=0xFD;return;}
            
            else if(keyvl==0x44){P3=0xFB;return;}
           
             else if(keyvl==0x84){P3=0xF7;return;}
            
              else if(keyvl==0x18){P3=0xEF;return;}
             
               else if(keyvl==0x28){P3=0xDF;return;}
               
                else if(keyvl==0x48){P3=0xBF;return;}
               
                 else if(keyvl==0x88){P3=0x7F;return;}
}           
    

    
//***********************************
/*鍵盤掃描函數(shù)*/
//***********************************
uchar keyscan(void)
{
  uchar code_h;         //行掃描值
  uchar code_l;         //列掃描值
  flag=0;               //
  P1=0xF0;              //P1.0--P1.3發(fā)0,準備讀列狀態(tài)
  if((P1&0xF0)!=0xF0)  //如果P1.4--P1.7不為全1,可能有鍵按下
   {
     delay_10ms();      //延時去抖動
     if((P1&0xF0)!=0xF0)//重讀高4位,若還是不全為1,定有鍵按下
     {
       code_h=0xFE;      //P1.0置為0,開始行掃描
       while((code_h&0xF0)!=0xE0) //判斷是否為最后一行,若不是,繼續(xù)掃描
       {
        P1=code_h;                //P1口輸出行掃描值
        if((P1&0xF0)!=0xF0)     //如果P1.4--P1.7不為全1,該行有鍵按下
        {                      
         flag=1;                //
         code_l=(P1&0xF0|0x0F); //保留P1口高4位,低4位變?yōu)?,作為列值
         return((~code_h)+(~code_l)); //鍵編碼=行掃描+列掃描值,返回主程序
        }
        else                         //若該行無鍵按下,行掃描值左移,掃描下一行
          code_h = _crol_(code_h,1);//移位,進入下一行掃描
        }
      }
   }
   return(0);                      //無鍵按下,返回0
 }                                 //

 

 

 

  • 上一篇: 跑馬燈
  • 下一篇: 8路順序控制器源程序
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

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

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

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1