wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機鍵盤c程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2008年08月29日   【字體:

void int1proc() interrupt IE1_VECTOR using 1
{
unsigned char i, key;
code unsigned char PS2TAB[] = {//20鍵PS2小鍵盤鍵碼表
  0x70,//0
  0x69,//1
  0x72,//2
  0x7a,//3
  0x6b,//4
  0x73,//5
  0x74,//6
  0x6c,//7
  0x75,//8
  0x7d,//9
  0x05,//F1
  0x06,//F2
  0x04,//F3
  0x0c,//F4
  0x03,//F5
  0x0b,//F6
  0x5a,//Enter
  0x76,//Esc
  0x66,//Bksp
  0x71//KP.
  };
  if (PS2Buffers.PS2KeyCount == 0){//PS2起始位測試
    if (!PS2CLOCK && !PS2DATA){//低電平是起始位
      if (PS2Buffers.PS2KeyExtFlage != 0xf0){
        PS2Buffers.PS2KeyTemp = 0;
        PS2Buffers.PS2KeyExtFlage = 0;
        PS2Buffers.PS2KeyPopError = 0;
      }
      PS2Buffers.PS2KeyCount ++;//脈沖計數
    }
    else PS2Buffers.PS2KeyPopError = 0xeb;//置鍵起始位錯誤號0xeb
  }
  else if (PS2Buffers.PS2KeyCount < 9){//PS2數據位
    key = PS2Buffers.PS2KeyTemp;//取鍵盤緩沖區移位數據
    key >>= 1;
    if (PS2DATA) key = 0x80;
    PS2Buffers.PS2KeyTemp = key;
    PS2Buffers.PS2KeyCount++;//脈沖計數
  }
  else if (PS2Buffers.PS2KeyCount == 9){//PS2數據奇校驗
    ACC = PS2Buffers.PS2KeyTemp;//取鍵盤緩沖區移位數據(C51取偶校驗位)
    if (P != PS2DATA) PS2Buffers.PS2KeyCount ++;//脈沖計數
    else{
      PS2Buffers.PS2KeyPopError = 0xec;////置鍵奇校驗位錯誤號0xec
      PS2Buffers.PS2KeyCount = 0;//脈沖計數歸零
    }
  }
  else if (PS2Buffers.PS2KeyCount == 10){//停止位
    key = PS2Buffers.PS2KeyTemp;//取鍵盤緩沖區移位數據
    PS2Buffers.PS2KeyCount = 0;//脈沖計數歸零
    if (PS2DATA){//高電平是停止位
      if (key == 0xe0){//本次是擴展鍵
        PS2Buffers.PS2KeyExtFlage = 0xe0;//置擴展鍵標志(小鍵盤只有回車鍵)
      }
      else if (key == 0xf0){//本次是鍵斷碼,鍵釋放
        PS2Buffers.PS2KeyExtFlage = 0xf0;//置鍵釋放標志
      }
      else{//本次必為鍵值
        if ((key == 0xaa) (key == 0xfa)) PS2Buffers.PS2KeyPushCount = 0;//長
壓鍵計數器清零
        else{
            PS2CLOCK = 0;//阻止PS2鍵盤立即回送數據
          PS2Buffers.PS2KeyPopError = 0xaa;//出錯碼
          for (i = 0; i < 20; i++){
            if (key == (PS2TAB[i])){//搜索
              key = i + 1;
              if (PS2Buffers.PS2KeyExtFlage == 0xf0){
                key = 0x80;//鍵釋放
                PS2Buffers.PS2KeyPushCount = 0;//長壓鍵計數器清零
                PS2Buffers.PS2KeyMessage = key;//存入當前鍵值并執行命令
              }
              else{
                if (key != PS2Buffers.PS2KeyVal){//換了一個鍵
                  PS2Buffers.PS2KeyPushCount = 0;//長壓鍵計數器清零
                  PS2Buffers.PS2KeyMessage = key;//存入當前鍵值并執行命令
                }
                else{//未換鍵
                  PS2Buffers.PS2KeyPushCount ++;//長壓鍵計數器計數
                  if (PS2Buffers.PS2KeyPushCount > DEFPS2PUSHCOUNT){//長壓時間到
                    PS2Buffers.PS2KeyMessage = key 0x40;//存入當前鍵值并執行命

                    PS2Buffers.PS2KeyPushCount = 0;//長壓鍵計數器清零
                  }
                }
              }
              PS2Buffers.PS2KeyVal = key;//存入當前鍵值值1~20或0x80+(1~20)
              PS2Buffers.PS2KeyTemp = 0;//鍵碼移位記錄器
              PS2Buffers.PS2KeyExtFlage = 0;//擴展鍵標志
              PS2Buffers.PS2KeyPopError = 0;//鍵釋放標志或出錯碼
              break;
            }
          }
          if (PS2Buffers.PS2KeyPopError) PS2Buffers.PS2KeyPushCount = 0;//長壓鍵
計數器清零
          PS2CLOCK = 1;//釋放PS2時鐘總線
        }
      }
    }
    else PS2Buffers.PS2KeyPopError = 0xed;//置停止位錯誤號0xed
  }
  else PS2Buffers.PS2KeyCount = 0;//PS2鍵盤出錯
}
/*------------------------------------------------------------------
         利用函數指針數組運行PS2鍵盤散轉命令
-------------------------------------------------------------------*/
void PS2CommandExec(unsigned char key)
{
unsigned int i;
code void *funcpushbuffers[] = {//命令散轉表(匯編中的16個DW)
/*------------------------------------------------------------------
        鍵盤c程序15個壓鍵、放鍵及長壓鍵事件處理函數指針地址
-------------------------------------------------------------------*/
  (void *)ClrWdt            + 0x0000,
/*---------------------------------------------
           10個功能鍵壓鍵事件處理(獨立管理)
----------------------------------------------*/
  (void *)PS2F1KeyPush      + 0x5b7d,      //功能鍵F1壓鍵事件處理
  (void *)PS2F2KeyPush      + 0xa6ea,      //功能鍵F2壓鍵事件處理
  (void *)PS2F3KeyPush      + 0xf157,      //功能鍵F3壓鍵事件處理
  (void *)PS2F4KeyPush      + 0x4cc4,      //功能鍵F4壓鍵事件處理
  (void *)PS2F5KeyPush      + 0x9731,      //功能鍵F5壓鍵事件處理
  (void *)PS2F6KeyPush      + 0xe2ae,      //功能鍵F6壓鍵事件處理
  (void *)PS2EnterKeyPush   + 0x3d1b,      //功能鍵Enter壓鍵事件處理
  (void *)PS2EscKeyPush     + 0x8888,      //功能鍵Esc壓鍵事件處理
  (void *)PS2BkspKeyPush    + 0xd3f5,      //功能鍵Bksp壓鍵事件處理
  (void *)PS2KpKeyPush      + 0x2e62,      //功能鍵Kp壓鍵事件處理
/*---------------------------------------------
           2個放鍵事件處理(集中管理)
----------------------------------------------*/
  (void *)PS2NumberKeyPop   + 0x79df,      //數字鍵放鍵事件處理
  (void *)PS2FuncKeyPop     + 0xc44c,      //功能鍵放鍵事件處理
/*---------------------------------------------
           2個長壓鍵事件處理(集中管理)
----------------------------------------------*/
  (void *)PS2NumberKeyPushL + 0x1fb9,      //數字鍵長壓鍵事件處理
  (void *)PS2FuncKeyPushL   + 0x6a26,      //功能鍵長壓鍵事件處理
/*---------------------------------------------
           1個數字鍵壓鍵事件處理(集中管理)
----------------------------------------------*/
  (void *)PS2NumberKeyPush  + 0xb593       //數字鍵0~9壓鍵事件處理
  };
/*--------------------------------------------*/
  i = key;
  key &= 0x3f;//去掉鍵釋放及長壓鍵標志,取真鍵碼
  key --;
  if (key < 20){//只有20個鍵
    if (key < 10){//數字鍵0~9
      if (i <= 10) key = 15;//(散轉號0)壓數字鍵0~9
      else{
        if (i & 0x80) key = 11;//(散轉號11)放數字鍵0~9
        else key = 13;//(散轉號13)長壓數字鍵0~9
      }
    }
    else{//壓功能鍵F1~F6,Enter..KP
      if ((i & 0xc0) == 0) key -= 9;//(散轉號1~10)壓功能鍵F1~F6,Enter..KP
      else{
        if (i & 0x80) key = 12;//(散轉號12)放功能鍵
        else key = 14;//(散轉號14)長壓功能鍵
      }
    }
    ClrWdt();//喂狗(鬼知道鍵盤程序要運行多久,就替它先喂一次吧)
    i = ((key * 53 & 0xf) * 0x1000)+ ((key * 43 & 0xf) * 0x100) + ((key * 23 &
0xf) * 0x10) + (key * 13 & 0xf);
    _icall_((void *)funcpushbuffers[key] - i);//取鍵盤散轉表并執行鍵盤命令
  }
}
這個鍵盤程序與一般網上的有很大區別,它充分利用了外部中斷(0字)hotpower[1次]

****下面是一個不版本的單片機鍵盤c程序歡迎廣大讀者實驗http://m.izizhuan.cn 編制********************************

unsigned CHAR key,key_h,kpush;
unsigned int key_l;

//按鍵連接到p1.0、p1.1、p1.2

void int_t0(void) interrupt 1 {
    unsigned CHAR dd,i;
    TL0=TL0+30;TH0=0xfb;    //800
    /*    按鍵判別    */
    if ((P1&0x7)==0x7) {
        if ((key_l>30)&&(key_l<800)&&(key_h>30)) {        //釋放按鍵,如果之前按鍵時間少于1秒,讀入鍵值
            key=kpush;
        }
        if ((++key_h)>200) key_h=200;
        key_l=0;
        if (key>=0x80) key=0;                            //如果之前的按鍵為長按1秒,清除鍵值
    } else {
        kpush=P1&0x7;
        key_l++;
        if ((key_l>800)&&(key_h>30)) {                    //如果按鍵超過1秒,鍵值加0x80標志長按鍵
            key=kpush|0x80;
            key_h=0;
            key_l=0;
        }
    }
}
void main(void) {
    TMOD=0x1;TR0=1;ET0=1;EA=1;
    while (1) {
        while (!key) {}
        SWITCH (key) {
        case 1:break;
        case 2:break;
        }
    }
}

 

關閉窗口
97干com| 区一区二日本| 91小视频在线播放| y111111国产精品久久婷婷| 亚洲国产精品va| 亚洲女厕所小便bbb| 一区二区三区导航| 一区视频网站| 色女人在线视频| 黄色网免费看| 欧美色欧美亚洲另类二区精品| 日本熟伦人妇xxxx| 国产成人av一区二区三区不卡| 国产精品999视频| 久久久久久欧美精品色一二三四| 久久久女人电视剧免费播放下载 | 天天av综合| 91欧美精品| caopeng在线| 超碰96在线| 日本三级电影在线播放| 天天操天天干天天爱| 欧美一区二区三区四| 3d动漫精品啪啪一区二区下载 | 91网站免费看| 激情小说亚洲一区| 四虎在线观看| xxx免费视频观看| 中文字幕jux大岛优香| 日本vs亚洲vs韩国一区三区二区 | 男人扒开美女尿口无遮挡图片| 日韩高清在线观看一区二区| 精品久久人人做人人爱| 大桥未久av一区二区三区| 欧美激情一区三区| 成人国产亚洲欧美成人综合网| 久久精品成人| 亚洲二区在线| 欧美国内亚洲| 全球成人免费直播| 精品亚洲免a| 国产精品亚洲四区在线观看| 在线中文字幕播放| 你懂的av在线| 国产欧美在线观看视频| 亚洲综合中文| 久久福利一区二区| 成人欧美一区二区三区视频xxx| 国产精品久久久久久久7电影| 欧美国产日韩二区| 中文字幕亚洲欧美日韩在线不卡| 亚洲精品久久久一区二区三区| 在线成人免费视频| 欧美午夜理伦三级在线观看| 午夜国产不卡在线观看视频| 亚洲免费在线观看| 亚洲色图视频网站| 亚洲人精品一区| 国产欧美精品在线观看| 99久久免费视频.com| 高清成人在线观看| 国产电影一区在线| 成年人国产精品| 91亚洲精品乱码久久久久久蜜桃| 国产成人精品免费| 大尺度一区二区| 国产99久久精品| 高清国产一区二区| 26uuu国产一区二区三区| 91一区二区三区在线观看| 久久一日本道色综合| www国产成人免费观看视频 深夜成人网| 高清在线成人网| 91在线免费视频观看| 91麻豆蜜桃一区二区三区| 26uuu国产在线精品一区二区| 91在线云播放| 国产精品午夜久久| 亚洲精品自拍动漫在线| 亚洲电影第三页| 色综合网站在线| 欧美高清性hdvideosex| 亚洲第一福利网| 在线观看亚洲区| 欧美日本精品在线| 欧美一级片在线播放| 国产精品女主播视频| 成人两性免费视频| 久久久7777| 爱爱爱视频网站| 国产特级黄色大片| 奇米影视四色在线| 国产精品久久不卡| 欧美成人aaa片一区国产精品| 亚洲激情在线| 欧美超级免费视 在线| 伊人国产在线观看| 精品中文字幕一区二区三区| 欧美在线一区二区视频| 成人黄色av网| 色涩成人影视在线播放| 男人天堂999| 亚洲AV成人精品| 久久亚洲无码视频| 九九热在线视频播放| 亚洲精品中文字幕在线| 日韩少妇内射免费播放18禁裸乳| 999在线精品视频| 久久精品国产亚洲AV熟女| 国产大片中文字幕在线观看| 8x福利精品第一导航| 中文字幕第六页| 97超碰资源站在线观看| 日本香蕉视频在线观看| 手机看片日韩国产| 亚洲国产成人va在线观看麻豆| 亚洲狠狠婷婷综合久久久久图片| 日本妇女毛茸茸| 精品人妻无码一区二区 | 日韩不卡在线视频| 欧美黄在线观看| 国产福利一区二区三区视频| 亚洲另类色综合网站| 欧美顶级少妇做爰| 欧美成人激情在线| 91久久大香伊蕉在人线| 狠狠干视频网站| 亚洲AV无码久久精品国产一区| 国产又粗又猛又爽又黄的视频四季 | 久久久久北条麻妃免费看| 日本三级网站在线观看| 一区三区在线欧| 成人av在线播放观看| 性久久久久久久久久久久久久| 欧美日韩在线观看成人| 人人妻人人澡人人爽精品日本 | 久久国产香蕉视频| 超碰在线91| 国产精品久久久久一区二区国产 | 欧美一级片免费播放| 日本黄色大片在线观看| 久久久国产高清| 欧美最猛性xxxxxhd| 一级毛片电影| 日韩av一级| 欧美激情1区| 91免费观看视频| 亚洲成人精品一区二区三区| 午夜成人免费视频| 37p粉嫩大胆色噜噜噜| 国产第一亚洲| 久久人人爽亚洲精品天堂| 超碰在线播放97| 视频一区视频二区在线观看| 日韩欧美亚洲区| 免费看成人a| 亚洲午夜视频在线观看| 国产人妻黑人一区二区三区| 亚洲欧洲自拍| 中文字幕久久久| 国产视频手机在线观看| 久久久久免费| 伊人久久av导航| 香蕉影院在线| 在线观看精品一区| 亚洲xxxx3d动漫| 天堂在线精品| 国产免费一区二区三区在线能观看| 精品一区二区三区五区六区| 99这里都是精品| 欧美三级理论片| 日本黄色免费在线| 影音先锋日韩有码| www.香蕉视频| 麻豆精品新av中文字幕| 亚洲精品国产suv一区88| 九七久久人人| 亚洲白拍色综合图区| 无码视频在线观看| 欧美日韩视频网站| 国产一区二区三区精品久久久| 一本色道久久综合无码人妻| 丝袜美腿亚洲色图| 狠狠精品干练久久久无码中文字幕| 国内在线精品| 日韩精品一区二区三区视频在线观看 | 国家队第一季免费高清在线观看| 欧美色爱综合网| 国产一级久久久| 国产精品magnet| 欧美日韩在线不卡一区| 久草在线在线| 欧美日韩视频在线一区二区| 亚洲一区 视频| 欧美一区二区三区另类| 日本一区二区精品视频| 国产最新视频在线观看| 亚洲韩国青草视频| 99riav国产| 国产不卡视频在线播放| 99re精彩视频| 国产精品igao视频网网址不卡日韩| 热re99久久精品国产66热| 激情网址大全| 欧美日韩国产一区二区三区| 2021亚洲天堂| 亚洲高清毛片| 乱熟女高潮一区二区在线| 色呦呦在线视频| www.日本久久久久com.| 无国产精品白浆免费视| 18涩涩午夜精品.www| 欧美午夜激情影院| 亚洲在线久久| 亚洲国产一二三精品无码| 爱福利在线视频| 欧美极品少妇xxxxⅹ免费视频| 2021最新国产精品一区| 欧美高清视频一区二区| 精品久久久久av| 日韩在线视频观看免费| 日本在线啊啊| www.爱久久.com| 欧美激情视频播放| 妖精视频在线观看| 深夜福利网站| 黑丝美女一区二区| 色婷婷av一区二区三区gif| 久久99国产精品99久久| 精品无码人妻一区二区三区| 日韩电影在线观看完整版| 亚洲高清不卡| 亚洲欧美自拍一区| 国产一级片黄色| 韩日a级毛片| 国产三级精品三级在线观看国产| 亚洲综合一区在线| 成人免费91在线看| 国产又大又黑又粗免费视频| 91视频在线观看| 久久精品久久精品| 欧美大片va欧美在线播放| 亚洲图片欧美另类| 欧洲免费av| 一区二区三区四区电影| 精品国产乱码久久久久久久久| 久艹在线免费观看| 天堂√最新版中文在线| 免费毛片a线观看| 欧美黄色录像| 欧美制服丝袜第一页| 亚洲欧洲日韩精品| 性做久久久久久久| 欧美电影在线观看网站| 一区二区三区四区蜜桃| 久久久综合亚洲91久久98| 久久久久久久久久成人| 美女在线视频免费| 中文字幕在线免费不卡| 国产在线精品一区二区三区》 | 亚洲国产精品久久不卡毛片| 欧美三日本三级少妇三99| 在线观看xxxx| 日产精品一区| 亚洲国产中文字幕在线视频综合| 欧美家庭影院| 久久久www成人免费精品张筱雨| 狠狠插狠狠操| 精品国产青草久久久久福利| 日韩高清一区二区| 日韩国产欧美精品在线| 久久久久亚洲av无码麻豆| 91精品国产高久久久久久五月天| 亚洲网站在线| 久久久999国产| 农村老熟妇乱子伦视频| a天堂在线资源| 99精品1区2区| 国产精品免费视频一区二区 | 欧美24videosex性欧美| 中文字幕第一区二区| 国产99视频精品免费视频36| 一卡二卡在线视频| 日本一区二区乱| 51午夜精品国产| 成 人 黄 色 小说网站 s色| 成人3d漫画免费无遮挡软件| 日本在线不卡视频| 国产成人黄色av| 久久久精品毛片| av在线国产精品| 7777精品伊人久久久大香线蕉| www.超碰com| 狠狠干婷婷色| 国产成人在线视频网站| 亚洲综合日韩中文字幕v在线| 国产农村妇女毛片精品| 国产精品网在线观看| 亚洲国产欧美一区二区丝袜黑人| 日韩精品国产一区| av在线之家电影网站| 成人免费在线视频| 成人免费在线视频播放| 你懂的视频在线观看资源| 久久精品人人| 成人av资源在线播放| 国产日本精品视频| 精品国产一区二区三区| 精品久久国产精品| 精品无码人妻一区二区三| 欧美激情啪啪| 精品欧美黑人一区二区三区| 欧美黑人欧美精品刺激| 国产欧美综合视频| 第九色区aⅴ天堂久久香| 久久久999国产| 国产精品久免费的黄网站| 日韩成人视屏| 在线播放日韩欧美| 久久久久99精品成人片试看| 国产日韩一区二区三免费高清| 日韩一区二区高清| 日本黄色网址大全| 天堂资源在线| 日韩午夜小视频| 调教驯服丰满美艳麻麻在线视频| 松下纱荣子在线观看| 91精品国产入口| 极品人妻videosss人妻| 国模视频一区| 日韩国产欧美精品一区二区三区| 91久久久久久久久久久久久久| 欧美日韩大片| 亚洲老头同性xxxxx| 久久久久久久久久99| 麻豆精品少妇| 久久久久久久av| 国产精品亚洲lv粉色| 午夜精品一区二区三区国产| 国产成人aa精品一区在线播放| 香蕉av在线播放| 日韩高清中文字幕一区| 欧美日韩国产三区| 免费在线播放av| 国产精品传媒入口麻豆| 青青在线视频免费| www在线视频| 欧美剧情电影在线观看完整版免费励志电影 | 男女视频免费看| 欧美jizz19性欧美| 久久久久久18| 手机在线精品视频| 日韩国产欧美在线播放| 欧美日韩国产精品一卡| 丁香资源影视免费观看| 亚洲免费观看高清完整版在线| 激情在线观看视频| 亚洲永久av| 在线观看日韩欧美| 国产精品老熟女视频一区二区| 在线精品亚洲| 日韩av电影免费观看| 动漫h在线观看| 色综合久久综合网欧美综合网| 在线免费看黄视频| 国产精品久久久久久久久久白浆| 久久久久久av| 午夜激情在线视频| 国产高清无密码一区二区三区| 国产乱子伦精品视频| 日韩子在线观看| 亚洲白拍色综合图区| 最近中文字幕在线免费观看| 在线欧美一区| 亚洲国产一区二区精品视频| 95影院理论片在线观看| 欧美在线三级电影| 久久综合亚洲色hezyo国产| 人人狠狠综合久久亚洲婷| 97超碰资源| 女人裸体免费网站| 欧美三级视频在线观看| 日韩久久精品视频| 一区二区三区国产盗摄| 亚洲免费视频播放| 久久综合之合合综合久久| 亚洲福利在线观看| 99er热精品视频| 国产成人精品aa毛片| 亚州精品天堂中文字幕| 伊人亚洲视频| 久久精品免视看| 99久久人妻精品免费二区| 牛牛影视久久网| 粉嫩精品一区二区三区在线观看| 黄色国产网站| 欧美欧美欧美欧美| 亚洲视频在线观看免费视频| 精品一区中文字幕| 国产九九热视频|