久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2865|回復: 1
收起左側

51單片機4行6列矩陣按鍵源代碼(注釋很全)

[復制鏈接]
ID:492417 發表于 2019-3-17 10:52 | 顯示全部樓層 |閱讀模式
這是一個4行6列矩陣按鍵原代碼


  1. #include <reg52.h>
  2. sbit KEY_IN_0 = P1^0;
  3. sbit KEY_IN_1 = P1^1;
  4. sbit KEY_IN_2 = P1^2;
  5. sbit KEY_IN_3 = P1^3;
  6. sbit KEY_IN_4 = P1^4;
  7. sbit KEY_IN_5 = P1^5;
  8. sbit KEY_OUT_1 = P3^0;
  9. sbit KEY_OUT_2 = P3^1;
  10. sbit KEY_OUT_3 = P3^2;
  11. sbit KEY_OUT_4 = P3^6;


  12. unsigned char code KeyCodeMap[4][6] = { //矩陣按鍵編號到標準鍵盤鍵碼的映射表
  13. { 0x1B,'1', '2', '3', 0x2A, 0x27 }, //ESC 鍵、數字鍵 1、數字鍵 2、數字鍵 3、向上鍵
  14. { 0x1A,'4', '5', '6', 0x2B, 0x26 }, //開關屏、數字鍵 4、數字鍵 5、數字鍵 6、向左鍵
  15. { 0x1C,'7', '8', '9', 0x2D, 0x25 }, //電機開、數字鍵 7、數字鍵 8、數字鍵 9、向下鍵
  16. { 0x1D,0X06,'0',0x2F, 0x0D, 0x28 }  //功能鍵、DEL 鍵、  數字鍵 0、回車鍵、  向右鍵
  17. };


  18. unsigned char pdata KeySta[4][6] = { //全部矩陣按鍵的當前狀態
  19. {1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1}
  20. };


  21. extern void KeyAction(unsigned char keycode);



  22. /* 按鍵驅動函數,檢測按鍵動作,調度相應動作函數,需在主循環中調用 */
  23. void KeyDriver()
  24. {
  25.    unsigned char i, j;
  26.    static unsigned char pdata backup[4][6] = { //按鍵值備份,保存前一次的值
  27.    {1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1}
  28.    };
  29.    for (i=0; i<4; i++) //循環檢測 4*4 的矩陣按鍵
  30.    {
  31.       for (j=0; j<6; j++)
  32.       {
  33.          if (backup[i][j] != KeySta[i][j]) //檢測按鍵動作
  34.          {
  35.             if (backup[i][j] != 0) //按鍵按下時執行動作
  36.             {
  37.                 KeyAction(KeyCodeMap[i][j]); //調用按鍵動作函數
  38.             }
  39.             backup[i][j] = KeySta[i][j]; //刷新前一次的備份值
  40.          }
  41.       }
  42.    }
  43. }



  44. /* 按鍵掃描函數,需在定時中斷中調用,推薦調用間隔 1ms */
  45. void KeyScan()
  46. {
  47.    unsigned char i;
  48.    static unsigned char keyout = 0; //矩陣按鍵掃描輸出索引
  49.    static unsigned char keybuf[4][6] = { //矩陣按鍵掃描緩沖區
  50.    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  51.    {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
  52.    };
  53. //將一行的 4 個按鍵值移入緩沖區
  54.    keybuf[keyout][0] = (keybuf[keyout][0] << 1) | KEY_IN_0;
  55.    keybuf[keyout][1] = (keybuf[keyout][1] << 1) | KEY_IN_1;
  56.    keybuf[keyout][2] = (keybuf[keyout][2] << 1) | KEY_IN_2;
  57.    keybuf[keyout][3] = (keybuf[keyout][3] << 1) | KEY_IN_3;
  58.    keybuf[keyout][4] = (keybuf[keyout][4] << 1) | KEY_IN_4;
  59.    keybuf[keyout][5] = (keybuf[keyout][5] << 1) | KEY_IN_5;
  60. //消抖后更新按鍵狀態
  61.    for (i=0; i<6; i++) //每行 4 個按鍵,所以循環 4 次
  62.    {
  63.       if ((keybuf[keyout][i] & 0x0F) == 0x00)
  64.       { //連續 4 次掃描值為 0,即 4*4ms 內都是按下狀態時,可認為按鍵已穩定的按下
  65.          KeySta[keyout][i] = 0;
  66.       }
  67.       else if ((keybuf[keyout][i] & 0x0F) == 0x0F)
  68.       { //連續 4 次掃描值為 1,即 4*4ms 內都是彈起狀態時,可認為按鍵已穩定的彈起
  69.          KeySta[keyout][i] = 1;
  70.       }
  71.    }
  72. //執行下一次的掃描輸出
  73.     keyout++; //輸出索引遞增
  74.     keyout &= 0x03; //索引值加到 4 即歸零
  75.     switch (keyout) //根據索引,釋放當前輸出引腳,拉低下次的輸出引腳
  76.     {
  77.         case 0: KEY_OUT_4 = 1; KEY_OUT_1 = 0; break;
  78.         case 1: KEY_OUT_1 = 1; KEY_OUT_2 = 0; break;
  79.         case 2: KEY_OUT_2 = 1; KEY_OUT_3 = 0; break;
  80.         case 3: KEY_OUT_3 = 1; KEY_OUT_4 = 0; break;
  81.         default: break;
  82.     }
  83. }
復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:328014 發表于 2019-3-20 19:45 | 顯示全部樓層
樓主能分享下原理圖嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一二三区在线观看 | 日本一本在线 | 国产精品成人一区二区三区 | 亚洲精品99 | 国产真实精品久久二三区 | 91久久精品国产 | 欧美综合一区 | 美国一级片在线观看 | 91大神xh98xh系列全部 | 四虎在线播放 | 国产激情小视频 | 欧美综合在线观看 | 欧美日韩精品中文字幕 | 国产精品美女www | 午夜精品视频在线观看 | 久久久无码精品亚洲日韩按摩 | 国产精品一区在线 | 欧美在线视频一区 | 国产伦精品一区二区三区视频金莲 | 国产欧美在线一区 | 日韩亚洲一区二区 | 欧美午夜精品 | 亚洲高清视频在线 | 古装三级在线播放 | 国产欧美在线播放 | 亚洲成人av一区二区 | 人成在线视频 | 成年人网站在线观看视频 | 国产精品自拍视频网站 | 国产美女永久免费无遮挡 | 国产一级淫片a直接免费看 免费a网站 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 久久久久国产一区二区三区 | 国产ts人妖系列高潮 | 久久com| 精品在线一区二区三区 | 成人一级黄色毛片 | 在线免费观看日本视频 | 欧美一级久久精品 | 久久精品二区 | 成人欧美一区二区三区在线播放 |