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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1933|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機鍵盤掃描顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:361540 發(fā)表于 2018-6-29 10:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
①鍵輸入模塊:掃描鍵盤、讀取一次鍵盤并將鍵值存入鍵值緩沖單元。
②顯示模塊:將顯示單元的內(nèi)容在顯示器上動態(tài)顯示。
③主程序:調(diào)用鍵輸入模塊和顯示模塊。

向列掃描碼地址(0X002H)逐列輸出低電平,然后從行碼地址(0X001H)讀回。如果有鍵按下,則相應(yīng)行的值應(yīng)為低,如果無鍵按下,由于上拉的作用,行碼為高。這樣就可以通過輸出的列碼和讀取的行碼來判斷按下的是什么鍵。在判斷有鍵按下后,要有一定的延時,防止鍵盤抖動。地址中的X是由KEY/LED CS 決定,參見地址譯碼。做鍵盤和LED實驗時,需將KEY/LED CS 接到相應(yīng)的地址譯碼上。以便用相應(yīng)的地址來訪問。例如將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;     // 關(guān)所有八段管
  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);   // 讀入鍵狀態(tài)(高四位不用)
  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. }

復(fù)制代碼

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



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人黄色网址大全 | 欧美精品一区三区 | 亚洲精品在线免费播放 | 一区二区三区免费 | 欧美综合在线观看 | 欧美亚洲视频 | 日韩综合一区 | 嫩草视频在线 | 99热.com| 免费国产精品久久久久久 | 久久大陆 | 日韩欧美中文字幕在线观看 | 亚洲福利| 午夜视频一区二区三区 | 久久久久久久久久毛片 | 精品综合久久久 | 中文字幕a√| 天天操操 | 国产精品精品 | 毛片大全 | 日日噜噜噜夜夜爽爽狠狠视频, | 在线午夜 | 日日久 | 久久精品久久久 | 亚洲一区高清 | 欧美在线一区二区三区四区 | 亚洲精品综合 | 欧美性一区二区三区 | 亚洲成人免费视频 | 国产精品久久久久aaaa九色 | 欧美性猛交一区二区三区精品 | 日韩av在线一区 | 伊人网91 | 亚洲精视频 | 美女黄网站 | 中文字幕精品一区二区三区精品 | 日本在线观看视频 | 干干干日日日 | 亚洲精品久久久蜜桃 | 日韩av在线一区二区三区 | 亚洲成人一区 |