找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4268|回復: 5
打印 上一主題 下一主題
收起左側

3*3矩陣鍵盤如何解決另外兩個端口資源的占用問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:465020 發(fā)表于 2019-3-10 18:43 來自觸屏版 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
因為要設計一個單片機3*3的矩陣按鍵,但又不想浪費另外兩個mcu端口資源,跪求大神能幫忙想個方法。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:401564 發(fā)表于 2019-3-10 23:49 | 只看該作者
3*3不是用掃描的嗎?一個X端口高電平,然后去檢查Y端口的電平,沒有檢測到電平變化就掃描下一行,這不就可以了,另外兩個還是一樣的正常使用呀
回復

使用道具 舉報

板凳
ID:475444 發(fā)表于 2019-3-11 06:29 | 只看該作者
你是要9個鍵,建議你看一下:這個http://www.torrancerestoration.com/bbs/dpj-152064-1.html

評分

參與人數(shù) 1黑幣 +8 收起 理由
struct00 + 8 贊一個!

查看全部評分

回復

使用道具 舉報

地板
ID:7485 發(fā)表于 2019-3-11 07:32 | 只看該作者
不影響多出的兩個IO正常使用的。
回復

使用道具 舉報

5#
ID:213173 發(fā)表于 2019-3-11 17:11 | 只看該作者
給你寫一個3*3矩陣鍵盤不占用剩余IO口演示程序,有詳細注釋。順序取了P3.0~3.5,按此規(guī)律可以取任意一組的任意6個IO口。

  1. #include <reg52.h>
  2. #define uint unsigned int                 //宏定義無符號整型數(shù)據(jù)
  3. #define uchar unsigned char         //宏定義無符號字符型數(shù)據(jù)

  4. uchar key=0;                                        //定義鍵值全局變量

  5. void keyscan()                                        //按鍵掃描程序
  6. {
  7.         static bit sign=0;                        //按鍵自鎖標志
  8.         static uint count=0;                //消抖計數(shù)變量                       
  9.         uchar temp1=0,temp2=0,temp3;//臨時變量
  10.         P3|=0x3f;                                        //賦值P3,保留高2位不變,操作低6位 xx11 1111 x為0或1
  11.         P3&=0xf8;                                        //賦值P3,保留高2位不變,操作低6位 xx11 1000 x為0或1
  12.         temp1=P3&0x38;                                //保存P3低6位狀態(tài)到temp1
  13.         if(temp1!=0x38)                                //檢測有按鍵按下
  14.         {
  15.                 count++;                                //消抖計數(shù)
  16.                 if((count>=250)&&(sign==0))//count100~1000,根據(jù)主循環(huán)周期調(diào)整約10~20ms
  17.                 {                       
  18.                         sign=1;                                //按鍵自鎖標志置1
  19.                         P3|=0x3f;                        //賦值P3,保留高2位不變,操作低6位 xx11 1111 x為0或1
  20.                         P3&=0xc7;                        //賦值P3,保留高2位不變,操作低6位 xx00 0111 x為0或1
  21.                         temp2=P3&0x07;                //保存P3低6位狀態(tài)到temp2
  22.                         temp3=temp2|temp1;        //保存temp2和temp1相或值
  23.                         switch(temp3)
  24.                         {
  25.                                 case 0x36: key=1; break;
  26.                                 case 0x35: key=2; break;
  27.                                 case 0x33: key=3; break;
  28.                                 case 0x2e: key=4; break;
  29.                                 case 0x2d: key=5; break;
  30.                                 case 0x2b: key=6; break;
  31.                                 case 0x1e: key=7; break;
  32.                                 case 0x1d: key=8; break;
  33.                                 case 0x1b: key=9; break;
  34.                         }
  35.                 }
  36.         }
  37.         else                                                //鍵抬起
  38.         {
  39.                 sign=0;                                        //按鍵有效標志清0
  40.                 count=0;                                //消抖計數(shù)清0
  41.         }
  42. }

  43. void main()                                                //主函數(shù)
  44. {

  45.         while(1)
  46.         {
  47.                 keyscan();                                //按鍵掃描程序
  48.                 P1=key;                                        //P1顯示(2進制)
  49.         }
  50. }
復制代碼




評分

參與人數(shù) 1黑幣 +2 收起 理由
小學僧 + 2

查看全部評分

回復

使用道具 舉報

6#
ID:465020 發(fā)表于 2019-3-25 12:04 | 只看該作者
wulin 發(fā)表于 2019-3-11 17:11
給你寫一個3*3矩陣鍵盤不占用剩余IO口演示程序,有詳細注釋。順序取了P3.0~3.5,按此規(guī)律可以取任意一組的 ...

感謝您的幫助,因為之前我已經(jīng)解決這個問題了,所以到現(xiàn)在才看到這個回復,看了您的答案,使我有了新的感悟,再次感謝您的幫助。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表