久久成人国产精品一区二区,在线观看成人网站,精品久久久久久成人AV,国产成人无码免费网站

電子開(kāi)發(fā)網(wǎng)

電子開(kāi)發(fā)網(wǎng)電子設(shè)計(jì) | 電子開(kāi)發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
搜索: 您現(xiàn)在的位置: 電子開(kāi)發(fā)網(wǎng) >> 電子開(kāi)發(fā) >> EDA開(kāi)發(fā)應(yīng)用 >> Keilc >> 正文

Keil C51鍵盤(pán)譯碼程序

作者:佚名    文章來(lái)源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2008-11-21

  鍵盤(pán)譯碼程序是開(kāi)發(fā)項(xiàng)目中最常用到的程序,它的好壞,直接影響著整個(gè)程序!現(xiàn)在介紹一個(gè)使用非常廣泛的Keil C51鍵盤(pán)譯碼程序。
 在主程序中不斷調(diào)用KeyBord(),可以不停地掃描鍵盤(pán)!
 在功能子程序中調(diào)用:unsigned charJB_KeyData(),得到鍵值
#define TK  8         //主程序執(zhí)行時(shí)間8ms
#define Timer20ms  (30/TK)   //延時(shí)時(shí)間20ms
#define Timer2S     (1200/TK) //延時(shí)時(shí)間2S
#define Timer100ms   (1000/TK)  //延時(shí)時(shí)間100ms
#define Port P2 //鍵盤(pán)口
//****************************
KEY  KeyDat;        //定義數(shù)據(jù)結(jié)構(gòu)
//---------------------------
//5個(gè)開(kāi)關(guān)占用的IO腳
//---------------------------
sbit ko=Port^0;
sbit ka=Port^1;
sbit kb=Port^2;
sbit kc=Port^3;
sbit kd=Port^4;

/***************************
根據(jù)硬件電路不同,只修改這段程序即可!!!
***************************/
unsigned char ReadKey(void){
    ko=0;
    if(!ka) return 2;//Ka
    if(!kb) return 3;//Kb
    if(!kc) return 4;//Kc
    if(!kd) return 5;//Kd
    return 0;
}

/***************************
判別是否有建
***************************/
void GetKey(void){
    if(ReadKey()!=0){
    KeyDat.KeyDog=Timer20ms;
    KeyDat.KeyPower++;
    }
}

/***************************
延時(shí)去抖動(dòng)
***************************/
void KeyDog(void){
    if(0==-KeyDat.KeyDog){
    KeyDat.KeyData=ReadKey(); //讀鍵盤(pán)
    if(KeyDat.KeyData!=0){
    KeyDat.KeyPower++;
    KeyDat.KeyDog=Timer3S;
/***************************
//    BeepPower=1;//蜂鳴器短鳴
***************************/
    }else{
    KeyDat.KeyPower=0:
    KeyDat.KeyData=0;    //返回
    }
  }
}

/***************************
判別是否松開(kāi)
***************************/
void KeyOff1(void){
  if(ReadKey0==0){    //松開(kāi)按鍵
    KeyDat.KeyPower=0;
    KeyDat.KeyData |=HaveKey;//定義標(biāo)志
    }else{
    if(0==-KeyDat.KeyDog){ //3秒延時(shí)到
    KeyDat.KeyDog=Timer100ms;
    KeyDat.KeyPower++;
    }
    }
}

/***************************
連擊是否松開(kāi)
***************************/
void KeyOff2(void)
{
    if(ReadKey()!=0){
    if (0==--KeyDat.KeyDog){
    KeyDat.KeyData |=DubClick | HaveKey;  //連擊標(biāo)志
    KeyDat.KeyDog=Timer100ms;
/***************************
//    BeepPower=1;//發(fā)送蜂鳴器短鳴命令
***************************/
    }
    }else{
    KeyDat.KeyData=0;  //?|=HaveKey;//一次按鍵
    KeyDat.KeyPower=0;
    }
}
/***************************
函數(shù)指針定義
***************************/
code void(code *SubKey[])()={
    GetKey,KeyDog,KeyOff1,KeyOff2
};
/***************************
鍵處理程序用戶(hù)在主程序只需不斷調(diào)用它!
***************************/
void KeyBord(void){
   (*SubKey[KeyDat.KeyPower])();

/***************************
用戶(hù)在功能函數(shù)中調(diào)用,返回鍵處理后清除鍵值
***************************/
unsigned char JB_KeyData(void){
    unsigned char i=0;
    if (KeyDat.KeyData>DubClick){
    i=KeyDat.KeyData;
    KeyDat.KeyData=0;
    }
    return i;
}

以下是頭文件:
/***************************
鍵盤(pán)的鍵值定義
***************************/
#define DubClick 0x40    //連擊
#define HaveKey 0x80    //有鍵
#define SeeKey (0x01|HaveKey)
#define SetKey (0x02|HaveKey)
#define RRKey (0x03|HaveKey)
#define UpKey (0x04|HaveKey)
#define RetKey (0x05|HaveKey)
#define RLKey (0x02|HaveKey)

//#define UseKey (0x06|HaveKey)
#define SeeKey_Dub (SeeKey | DubClick | HaveKey)
#define SetKey_Dub (SetKey | DubClick | HaveKey)//雙擊
#define RRKey_Dub (RRKey | DubClick | HaveKey)
#define UpKey_Dub (UpKey | DubClick | HaveKey)
#define RetKey_Dub (RetKey | DubClick | HaveKey)
//#define UseKey_Dub (UseKey | DubClick | HaveKey)

//--------------------------
typedef struct{
  unsigned char KeyPower;  //命令字
  unsigned int KeyDog;//延時(shí)
  unsigned char KeyData;//鍵值
}KEY;

Tags:Keil C51,鍵盤(pán),譯碼程序  
責(zé)任編輯:admin
請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語(yǔ)。 昵稱(chēng):
1分 2分 3分 4分 5分

還可以輸入 200 個(gè)字
[ 查看全部 ] 網(wǎng)友評(píng)論
最新推薦
熱門(mén)文章
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁(yè)面
下到頁(yè)底
晶體管查詢(xún)
久久成人国产精品一区二区,在线观看成人网站,精品久久久久久成人AV,国产成人无码免费网站
    <li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 主站蜘蛛池模板: 欧美日韩国产小视频| 久久天天躁狠狠躁夜夜爽蜜月 | 欧美三级不卡| 欧美日韩喷水| 国产精品国产三级国产a| 国产精品电影在线观看| 国产精品裸体一区二区三区| 国产欧美成人| 久久激情五月激情| 久久精品视频亚洲| 久久综合99re88久久爱| 欧美福利一区| 欧美日韩亚洲一区二区三区在线观看 | 夜夜嗨av一区二区三区中文字幕| 日韩午夜电影av| 亚洲一级黄色片| 欧美在线免费观看视频| 久久午夜羞羞影院免费观看| 欧美成人亚洲成人日韩成人| 欧美色道久久88综合亚洲精品| 国产精品美女午夜av| 国产亚洲一区精品| 亚洲国产电影| 一区二区三区 在线观看视频| 亚洲综合日韩在线| 久久另类ts人妖一区二区| 欧美 日韩 国产 一区| 欧美色图麻豆| 国产亚洲精品aa| 亚洲国产成人不卡| 亚洲视频在线观看三级| 小嫩嫩精品导航| 欧美99久久| 国产精品日韩欧美一区二区三区| 国模一区二区三区| 亚洲美女区一区| 欧美一区二区三区四区高清| 欧美不卡三区| 国产精品羞羞答答| 91久久久久久国产精品| 亚洲在线视频免费观看|