電子開發網

電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 電子開發網 >> 電子開發 >> EDA開發應用 >> Keilc >> 正文

Keil C51鍵盤譯碼程序

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2008/11/21

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

/***************************
根據硬件電路不同,只修改這段程序即可!!!
***************************/
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++;
    }
}

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

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

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

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

以下是頭文件:
/***************************
鍵盤的鍵值定義
***************************/
#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;//延時
  unsigned char KeyData;//鍵值
}KEY;

Tags:Keil C51,鍵盤,譯碼程序  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網友評論
關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
秀婷和程仪全集| 亚洲第一综合色| 亚洲一区二区三区四区视频| 中文字幕julia中文字幕| 2021国产麻豆剧传媒剧情最新 | 草莓视频未满十八勿网站| 激情三级hd中文字幕| 日本护士xxxx视频| 国精产品wnw2544a| 哒哒哒免费视频观看在线www| 亚洲国产欧美日韩| www.日本在线播放| 男人扒开添女人下部免费视频| 日本阿v视频在线观看高清| 国产精品高清尿小便嘘嘘| 伊人五月天婷婷| 一区二区三区四区精品| 精品久久久无码人妻中文字幕豆芽| 护士与税务干部完整2av| 国产成人精品亚洲精品| 亚洲欧美日韩人成在线播放| 一个人看的www日本高清视频| 香港三级欧美国产精品| 欧美日韩亚洲成人| 女警骆冰被黑人调教免费阅读小说 | 小箩莉奶水四溅小说| 午夜精品一区二区三区在线观看| 精品亚洲一区二区三区在线观看| 免费观看日本污污ww网站一区 | 四虎在线精品观看免费| 男人把女人桶爽30分钟动态| 亚洲色图欧美在线| 桃子视频在线观看高清免费视频| 五福影院最新地址| 成年女人18级毛片毛片免费观看| 一级毛片在线免费播放| 国产麻豆剧果冻传媒一区 | 亚洲av永久无码精品天堂久久 | 色综合久久天天综合| 最好看的免费观看视频| 国产精品福利电影|