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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3579|回復: 0
收起左側

把單片機4X4按鍵矩陣用出編碼鍵盤效果

[復制鏈接]
ID:404797 發表于 2019-3-16 09:57 | 顯示全部樓層 |閱讀模式
單片機的輸入設備都相對簡單,一般就幾個按鍵,頂多是4X4的按鍵矩陣,即使是4X4按鍵矩陣,也只能得到16種不同的輸入選擇,比計算機的編碼鍵盤差得太遠,在有些場合,可能是有象編碼鍵盤這樣多選擇的需要的,但很顯然,不太可能為單片機配個編碼鍵盤,如何用按鍵矩陣達到編碼鍵盤的效果,在單片機開發中有很高的現實意義,本文對此進行初淺的研究。
       方法是將4X4按鍵矩陣的16個選擇分為兩類,一類為鍵值鍵,用于獲取鍵值,一類為功能鍵,用于調整按鍵獲取值。本文中將第0-12號共13個鍵作為鍵值鍵,將所有字符編為13頁,每頁13個字符,每個按鍵對應一個字符,通過不同的輸入頁選擇不同的輸入鍵,第15號鍵作為回車鍵,將14號鍵加法鍵,每按一次輸入頁加一,將13號鍵作為減法鍵,每按一次輸入頁減一。
    本方法需要配合顯示設備,實時顯示當前所在輸入頁號及本輸入頁所能輸入的字符。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
askp6.JPG
    下面是樣例單片機程序。

  1. #include<reg51.h>
  2. sbit kx0=P2^0;
  3. sbit kx1=P2^1;
  4. sbit kx2=P2^2;
  5. sbit kx3=P2^3;
  6. sbit ky0=P2^4;
  7. sbit ky1=P2^5;
  8. sbit ky2=P2^6;
  9. sbit ky3=P2^7;

  10. sbit rs=P3^5;
  11. sbit rw=P3^6;
  12. sbit E=P3^7;
  13. char shifkey;
  14. //==============================================================================
  15. void delay(int ii){int i;for(i=0;i<ii;i++);}
  16. void writeCmd(unsigned char c){E=0;rw=0;rs=0;delay(50);delay(50);P1=c;delay(50);E=1;delay(50);E=0; }
  17. void writeDat(unsigned char c){E=0;rw=0;rs=1;delay(50);delay(50);P1=c;delay(50);E=1;delay(50);E=0;}
  18. void Putxychar(char x,char y,char c){if(y>0)writeCmd(0x80+0x40+x);else writeCmd(0x80+x);writeDat(c);}
  19. void Prtstr(char *cp){char i=0;while(cp[i]!=0){writeDat(cp[i]);i++;}}
  20. //------------------------------------------------------------------------------
  21. int KeyDown()
  22. {char v,x,y;
  23. x=4;y=4;
  24. P2=0x0f;v=P2;
  25. if(v!=0x0f){if(kx0==0)x=0;if(kx1==0)x=1;if(kx2==0)x=2;if(kx3==0)x=3;
  26.              P2=0xf0;if(ky0==0)y=0;if(ky1==0)y=1;if(ky2==0)y=2;if(ky3==0)y=3;
  27.              }
  28. return x*4+y;
  29. }
  30. //---------------------------------------------------------------
  31. NoteChar(int line)
  32. {char i;
  33. writeCmd(0x80+0x40);
  34. Prtstr("Ch:");
  35. for(i=0;i<13;i++)writeDat(line*10+i);
  36. }
  37. //----------------------------------------------------------------
  38. int GetCH()
  39. {char w,num,key;
  40.   NoteChar(shifkey);Putxychar(14,0,'P');if(shifkey<10)writeDat(shifkey+0x30);else writeDat(shifkey+0x37);
  41.   while(1)
  42.   {key=KeyDown();
  43.    if(key<16)
  44.    {key=KeyDown();while(key==KeyDown());
  45.     switch(key)
  46.     {case 0:w=shifkey*10+key;return w;
  47.      case 1:w=shifkey*10+key;return w;
  48.      case 2:w=shifkey*10+key;return w;
  49.      case 3:w=shifkey*10+key;return w;
  50.      case 4:w=shifkey*10+key;return w;
  51.      case 5:w=shifkey*10+key;return w;
  52.      case 6:w=shifkey*10+key;return w;
  53.      case 7:w=shifkey*10+key;return w;
  54.          case 8:w=shifkey*10+key;return w;
  55.      case 9:w=shifkey*10+key;return w;
  56.      case 10:w=shifkey*10+key;return w;
  57.      case 11:w=shifkey*10+key;return w;
  58.      case 12:w=shifkey*10+key;return w;
  59.      case 13:if(shifkey>0)shifkey--;Putxychar(14,0,'P');if(shifkey<10)writeDat(shifkey+0x30);else writeDat(shifkey+0x37);NoteChar(shifkey);break;
  60.      case 14:if(shifkey<12)shifkey++;Putxychar(14,0,'P');if(shifkey<10)writeDat(shifkey+0x30);else writeDat(shifkey+0x37);NoteChar(shifkey);break;
  61.      case 15:return 27;
  62.      }
  63.     }
  64.    };
  65.   return w;
  66. }
  67. //################################################################
  68. void main()
  69. {int n;shifkey=3;
  70. writeCmd(0x38);writeCmd(0x0f);
  71. while(1){n=GetCH();writeCmd(0x80);writeDat(n);};
  72. }
復制代碼
0.png
全部資料51hei下載地址:
askp6.zip (113.21 KB, 下載次數: 23)

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精视频 | 精品一区二区三区四区外站 | 亚洲欧美中文日韩在线v日本 | 日韩一区二 | 久久91精品国产一区二区 | 日韩视频中文字幕 | 欧美一区视频在线 | 国产精品久久久久久久久久久久 | 久久精品网 | 久久国产精品一区 | 色综合天天天天做夜夜夜夜做 | 黄色一级大片在线观看 | 亚洲狠狠丁香婷婷综合久久久 | 国产乱码久久久 | 日韩高清国产一区在线 | 日韩精品视频中文字幕 | 久久国产精品无码网站 | 伊人网站 | 欧美精品一区二区在线观看 | 欧美视频一区二区三区 | 成人日韩 | 日本视频免费观看 | 亚洲成人一区二区 | 国产韩国精品一区二区三区 | 国产亚洲欧美日韩精品一区二区三区 | 亚洲精选一区二区 | 久久性色 | 中文字幕在线视频免费视频 | 国产精品国产三级国产aⅴ原创 | www.日韩欧美| 91精品久久久久久久久 | 91免费在线看 | 精品久久精品 | 亚洲一区久久 | 久久久www成人免费精品 | 九九色综合 | 91大片| 国产亚洲欧美另类一区二区三区 | 日韩一区二区在线播放 | 韩国毛片一区二区三区 | 国产欧美日韩一区 |