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

標題: 單片機鍵盤掃描顯示 [打印本頁]

作者: xk160cuijinxiu    時間: 2018-6-29 10:09
標題: 單片機鍵盤掃描顯示
①鍵輸入模塊:掃描鍵盤、讀取一次鍵盤并將鍵值存入鍵值緩沖單元。
②顯示模塊:將顯示單元的內容在顯示器上動態顯示。
③主程序:調用鍵輸入模塊和顯示模塊。

向列掃描碼地址(0X002H)逐列輸出低電平,然后從行碼地址(0X001H)讀回。如果有鍵按下,則相應行的值應為低,如果無鍵按下,由于上拉的作用,行碼為高。這樣就可以通過輸出的列碼和讀取的行碼來判斷按下的是什么鍵。在判斷有鍵按下后,要有一定的延時,防止鍵盤抖動。地址中的X是由KEY/LED CS 決定,參見地址譯碼。做鍵盤和LED實驗時,需將KEY/LED CS 接到相應的地址譯碼上。以便用相應的地址來訪問。例如將KEY/LED CS信號接CS0上,則列掃描地址為08002H,行碼地址為08001H列掃描碼還可以分時用作LED的位選通信號。

單片機源程序如下:

  1. #define LEDLen 6

  2. xdata unsigned char OUTBIT _at_ 0x8002;   // 位控制口
  3. xdata unsigned char OUTSEG _at_ 0x8004;   // 段控制口
  4. xdata unsigned char IN     _at_ 0x8001;   // 鍵盤讀入口

  5. unsigned char LEDBuf[LEDLen];    // 顯示緩沖
  6. code unsigned char LEDMAP[] = {  // 八段管顯示碼
  7.   0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
  8.   0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
  9. };

  10. void Delay(unsigned char CNT)
  11. {
  12.   unsigned char i;

  13.   while (CNT-- !=0)
  14.     for (i=100; i !=0; i--);
  15. }

  16. void DisplayLED()
  17. {
  18.   unsigned char i;
  19.   unsigned char Pos;
  20.   unsigned char LED;

  21.   Pos = 0x20;       // 從左邊開始顯示
  22.   for (i = 0; i < LEDLen; i++) {
  23.     OUTBIT = 0;     // 關所有八段管
  24.     LED = LEDBuf[i];
  25.     OUTSEG = LED;
  26.     OUTBIT = Pos;   // 顯示一位八段管
  27.     Delay(1);
  28.     Pos >>= 1;      // 顯示下一位
  29.   }
  30. }

  31. code unsigned char KeyTable[] = {   // 鍵碼定義
  32.   0x16, 0x15, 0x14, 0xff,
  33.   0x13, 0x12, 0x11, 0x10,
  34.   0x0d, 0x0c, 0x0b, 0x0a,
  35.   0x0e, 0x03, 0x06, 0x09,
  36.   0x0f, 0x02, 0x05, 0x08,
  37.   0x00, 0x01, 0x04, 0x07
  38. };

  39. unsigned char TestKey()
  40. {
  41.    OUTBIT = 0;            // 輸出線置為0
  42.    return (~IN & 0x0f);   // 讀入鍵狀態(高四位不用)
  43. }

  44. unsigned char GetKey()
  45. {
  46.   unsigned char Pos;
  47.   unsigned char i;
  48.   unsigned char k;

  49.   i = 6;
  50.   Pos = 0x20;     // 找出鍵所在列
  51.   do {
  52.     OUTBIT = ~ Pos;
  53.     Pos >>= 1;
  54.     k = ~IN & 0x0f;
  55.   } while ((--i != 0) && (k == 0));

  56.   // 鍵值 = 列 x 4 + 行
  57.   if (k != 0) {
  58.     i *= 4;
  59.     if (k & 2)
  60.       i += 1;
  61.     else if (k & 4)
  62.       i += 2;
  63.     else if (k & 8)
  64.       i += 3;

  65.     OUTBIT = 0;
  66.     do Delay(10); while (TestKey());  // 等鍵釋放

  67.     return(KeyTable[i]);  // 取出鍵碼
  68.   } else return(0xff);
  69. }

  70. void main()
  71. {
  72.    LEDBuf[0] = 0xff;
  73.    LEDBuf[1] = 0xff;
  74.    LEDBuf[2] = 0xff;
  75.    LEDBuf[3] = 0xff;
  76.    LEDBuf[4] = 0x00;
  77.    LEDBuf[5] = 0x00;

  78.    while (1) {
  79.      DisplayLED();
  80.      if (TestKey()) LEDBuf[5] = LEDMAP[GetKey() & 0x0f];
  81.    }
  82. }

復制代碼

所有資料51hei提供下載:
鍵盤掃描顯示.rar (991 Bytes, 下載次數: 7)








歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久久国产一区二区三区四区 | 天天操一操 | 亚洲成人精品免费 | 久久中文字幕一区 | 午夜精品久久久久久久久久久久 | 国产免国产免费 | 亚洲九九精品 | 久久久中文 | av国产精品毛片一区二区小说 | 激情一区| 亚洲精品68久久久一区 | a黄毛片 | 九九热免费视频在线观看 | 在线亚洲欧美 | 激情欧美日韩一区二区 | 久久精品欧美视频 | 在线午夜| 精品国产鲁一鲁一区二区张丽 | 欧美日韩一区二区在线观看 | 人人人干 | 视频在线日韩 | 国产二区三区 | 97精品超碰一区二区三区 | 少妇黄色 | 欧美性生活网 | 一区二区三区视频在线免费观看 | 99只有精品| 日韩精品 电影一区 亚洲 | 中文字幕av在线 | 91亚洲国产成人精品一区二三 | 手机在线观看 | 欧美久久一区二区三区 | 日本一卡精品视频免费 | 午夜网 | 亚洲一区精品在线 | 国产成人精品视频在线观看 | 在线视频一区二区 | 亚洲欧美高清 | 久久精品国产99国产精品 | 中国大陆高清aⅴ毛片 | 看a级黄色毛片 |