欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

關于單片機矩陣按鍵讀取的程序理解

查看數: 2609 | 評論數: 15 | 收藏 2
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2021-10-14 11:26

正文摘要:

這個是某設備上的程序,我有一些不明白的地方把它復制過來了,就是按鍵值的范圍我不太理解 單片機源程序如下: #include <c8051F020.H> #include <intrins.H> #define Keybus  P0 unsigned ...

回復

ID:213173 發表于 2021-10-15 13:25
zhangzhao2423 發表于 2021-10-15 08:11
厲害,原程序就是使用了7個按鍵。并且P0.0接地,但是P0.7是不是空的我就不太清楚了。

P0.7就算不是懸空,其所接電路也必須在掃描按鍵時保持高電平。
ID:450037 發表于 2021-10-15 08:11
wulin 發表于 2021-10-14 17:21
從樓主給的現有條件來看,這個矩陣鍵盤用了6個端口組成3*3,只使用了7個按鍵。并且P0.0是被接地,P0.7空。 ...

厲害,原程序就是使用了7個按鍵。并且P0.0接地,但是P0.7是不是空的我就不太清楚了。
ID:213173 發表于 2021-10-14 17:21
從樓主給的現有條件來看,這個矩陣鍵盤用了6個端口組成3*3,只使用了7個按鍵。并且P0.0是被接地,P0.7空。否則不可能得到上述7個鍵碼。
給你把按鍵代碼順序調整了一下,便于你理解鍵碼是怎么產生的。這是驗證程序:
  1. #include <reg51.H>
  2. #define Keybus  P0
  3. unsigned char Get_Keyno(void)
  4. {
  5.         unsigned char Key_h,Key_l,Key_no;
  6.         Keybus=0xf1;
  7.         Key_h=Keybus;           //獲取高4位狀態
  8.         Keybus=0x0f;               
  9.         Key_l=Keybus;           //獲取低4位狀態
  10.         Key_no=Key_h | Key_l;   //高低4位相加
  11.         return Key_no;   
  12. }
  13. void keyin_work(void)
  14. {
  15.         switch (Get_Keyno())
  16.         {
  17.                 case 0xbc:P2=~0x01;break;//1011 1100
  18.                 case 0xec:P2=~0x02;break;//1110 1100
  19.                 case 0xea:P2=~0x03;break;//1110 1010
  20.                 case 0xba:P2=~0x04;break;//1011 1010
  21.                 case 0xda:P2=~0x05;break;//1101 1010
  22.                 case 0xd6:P2=~0x06;break;//1101 0110
  23.                 case 0xb6:P2=~0x07;break;//1011 0110
  24.         }
  25. }
  26. void main()
  27. {
  28.         while(1)
  29.         {
  30.                 keyin_work();
  31.         }
  32. }
復制代碼

ID:624769 發表于 2021-10-14 16:17
zhangzhao2423 發表于 2021-10-14 16:06
假設0.0到0.3是行,0.4到0.7是列,那么按理說可以區分16個按鍵的值。因為P0^0一直拉低,所以也可以區分12 ...

這樣的話,你兩次對p0的設置,應該分別是 0x0e和0xf0,確保p0.0始終為低,而不是你代碼里的0x0f和0xf1。因為1有不確定性,0有穩定性。
ID:450037 發表于 2021-10-14 16:06
188610329 發表于 2021-10-14 15:42
所以,這個時候,就需要電路圖了, 你設置的  P0 = 0x0f;  誰會知道你的 P0^0 會被拉低呢? 而且如果你的 ...

假設0.0到0.3是行,0.4到0.7是列,那么按理說可以區分16個按鍵的值。因為P0^0一直拉低,所以也可以區分12個按鍵,任何一個按鍵按下去,應該會有三個位是0,因為P0^0始終是零。
ID:624769 發表于 2021-10-14 15:42
zhangzhao2423 發表于 2021-10-14 15:31
不能理解,在3x4的矩陣里,假設P0^0是0,我隨便按下哪個按鈕,也是其中的另外兩個位為0,應該不會有0X07 ...

所以,這個時候,就需要電路圖了, 你設置的  P0 = 0x0f;  誰會知道你的 P0^0 會被拉低呢? 而且如果你的 P0^0 會被拉低, 那么 即使你沒有按任何按鍵, 你的
Key_l=Keybus;                  //我的理解:此時Key_l=0x0f
這個推測是不會成立的,  這個時候也應該是:   Key_l=0x0e
ID:450037 發表于 2021-10-14 15:31
188610329 發表于 2021-10-14 15:07
沒有鍵按下,就是0x0f, 有鍵按下就是 0x07,0x0b 之類的

不能理解,在3x4的矩陣里,假設P0^0是0,我隨便按下哪個按鈕,也是其中的另外兩個位為0,應該不會有0X07的情況吧
ID:624769 發表于 2021-10-14 15:31
Jiang_YY 發表于 2021-10-14 15:15
估計樓主用直接設置IO輸入輸出方向的MCU比較多,用傳統51比較少,對這種轉換輸入方式不太理解。或者是一下 ...

看看我之前的回復。

所以,switch (R_Keyno)     里面的 Case, 隨便找一個,轉換成 二進制:
比如: 0xbc  =>   1011 1100      居然 三個0??   

這里,我是暈了, 你幫忙分析分析啥情況,為啥3個0???  
ID:959346 發表于 2021-10-14 15:15
估計樓主用直接設置IO輸入輸出方向的MCU比較多,用傳統51比較少,對這種轉換輸入方式不太理解。或者是一下沒反應過來?
ID:624769 發表于 2021-10-14 15:07
zhangzhao2423 發表于 2021-10-14 14:52
keybus 在任何時候都是P0,那么keybus=0x0f;然后給key_l 這個結果是0x0f,還是P0啊?
然后它按位或的時 ...

沒有鍵按下,就是0x0f, 有鍵按下就是 0x07,0x0b 之類的
ID:959346 發表于 2021-10-14 15:07
上一句沒回復完,按錯發送了。
Key_l=Keybus;                  //我的理解:此時Key_l=0x0f
這一句,輸出“1”的位就是輸入了,如果有按鍵按下,讀回來的就不是“1”了。
ID:959346 發表于 2021-10-14 15:04
Key_l=Keybus;                  //我的理解:此時Key_l=0x0f   
ID:450037 發表于 2021-10-14 14:52
188610329 發表于 2021-10-14 14:22
基于, #define Keybus  P0   , 所以,Keybus 就是  P0 的意思,是任何時候,而不是僅僅“此時”

所以 ...

keybus 在任何時候都是P0,那么keybus=0x0f;然后給key_l 這個結果是0x0f,還是P0啊?
然后它按位或的時候?低四位結果不是全是1嗎?
ID:624769 發表于 2021-10-14 14:22
基于, #define Keybus  P0   , 所以,Keybus 就是  P0 的意思,是任何時候,而不是僅僅“此時”

所以:   Key_h=Keybus;  就是把  P0 的 值 賦值給 Key_h

所以: Key_no=Key_h | Key_l;    只要有按鍵按下, 就不會等于 0xff

從你: Keybus=0x0f;  Keybus=0xf1;  這兩句看, 如果不是寫錯了。
那么,你的矩陣鍵盤就是   3x4  = 12 的矩陣。

所以,switch (R_Keyno)     里面的 Case, 隨便找一個,轉換成 二進制:
比如: 0xbc  =>   1011 1100      居然 三個0??  

看不懂了………… 你自己捉摸吧……
ID:123289 發表于 2021-10-14 13:09
結合硬件接線圖,就一目了然了。

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

Powered by 單片機教程網

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