找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5371|回復: 8
收起左側

單片機矩陣鍵盤無法識別 不知道是連接問題還是程序代碼問題

[復制鏈接]
ID:236686 發(fā)表于 2018-4-2 13:15 | 顯示全部樓層 |閱讀模式
10黑幣
附件里面是我矩陣鍵盤的連接方法,不知道對否  還是我代碼有問題 仿真里面識別第一行不出來  我檢查不出什么問題  
下面是我的代碼
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code duan[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e };
  5. sbit wei=P2^4;
  6. uchar temp,k;
  7. void delay(uint i)
  8. {
  9.   uint a,b;
  10. for(a=0;a<=i;a++)
  11. {
  12.   for(b=0;b<110;b++);
  13.   }
  14. }
  15. uchar key()
  16. {
  17.   
  18. P3=0xef;
  19. temp=P3;
  20. temp=temp&0x0f;
  21. while(temp!=0x0f)
  22.   {
  23.        delay(4);
  24.     temp=P3;
  25.     temp=temp&0x0f;
  26.     while(temp!=0x0f)
  27.     {
  28.           temp=P3;
  29.       switch(temp)
  30.      {
  31.       case 0xee:k=1;break;
  32.       case 0xed:k=2;break;
  33.       case 0xeb:k=3;break;
  34.       case 0xe7:k=4;break;
  35.          }
  36.       while(temp!=0x0f)
  37.           {
  38.                temp=P3;
  39.                temp=temp&0x0f;
  40.            }
  41.    
  42.    
  43.      }

  44.   }
  45.   return k;
  46. }
  47. void display(uchar aa)
  48. {
  49. uchar b;
  50. b=aa;
  51. P2=0x00;
  52. P0=duan[b];
  53. P2=0X0f;
  54. }
  55. void main()
  56. {
  57. while(1)
  58. {
  59.   display(key());
  60.   
  61. }
  62. }
復制代碼


Q$]QM2$FV}R~I`6)$VC(AAV.png
AQ$BKUDJ)${TRB{TXS@F79H.png
回復

使用道具 舉報

ID:236686 發(fā)表于 2018-4-2 17:24 | 顯示全部樓層
只要不接電源就可以識別了,求大神告訴是什么原理   會為什么會這樣   萬分感謝  
回復

使用道具 舉報

ID:234549 發(fā)表于 2018-4-2 18:56 | 顯示全部樓層
愛吃餃子 發(fā)表于 2018-4-2 17:24
只要不接電源就可以識別了,求大神告訴是什么原理   會為什么會這樣   萬分感謝

不接電源 是鍵盤的電源嗎
回復

使用道具 舉報

ID:301051 發(fā)表于 2018-4-2 19:18 | 顯示全部樓層
矩陣鍵盤本來就不用加電源呀,大哥!
回復

使用道具 舉報

ID:234549 發(fā)表于 2018-4-2 21:32 | 顯示全部樓層
愛吃餃子 發(fā)表于 2018-4-2 17:24
只要不接電源就可以識別了,求大神告訴是什么原理   會為什么會這樣   萬分感謝

樓主可以看下 鍵盤掃描法——反轉法 是不接電源,接地的哦。
使用單片機8個端口(四行四列)
①前四個端口輸出高電平(行),后四個端口(列)等待輸入。若有鍵按下,短接地,改變(列)輸入寄存器的值,哪一個端口值變?yōu)?,則能知道哪一列被按下
②嵌套 后四個端口輸出高電平(列),前四個端口(行)等待輸入。若有鍵按下,短接地,改變(行)輸入寄存器的值,哪一個端口值變?yōu)?,則能知道哪一行被按下
③行列則能確定哪一鍵被按下

評分

參與人數(shù) 1黑幣 +3 收起 理由
愛吃餃子 + 3

查看全部評分

回復

使用道具 舉報

ID:301369 發(fā)表于 2018-4-3 11:09 | 顯示全部樓層
矩陣鍵盤的掃描不用外加電源,直接先掃描行地址再掃描列地址,掃描完成返回行列組成的合地址,再換成你所需要的鍵碼即可

評分

參與人數(shù) 1黑幣 +1 收起 理由
愛吃餃子 + 1

查看全部評分

回復

使用道具 舉報

ID:291815 發(fā)表于 2018-4-3 17:11 | 顯示全部樓層
不用接電源吧
回復

使用道具 舉報

ID:111634 發(fā)表于 2018-4-3 21:06 | 顯示全部樓層
本帖最后由 zl2168 于 2018-4-3 21:07 編輯

矩陣式鍵盤
Proteus仿真一下,確認有效。
實例75 4×4矩陣式鍵盤.rar (44.8 KB, 下載次數(shù): 3)
4×4矩陣式鍵盤.jpg
以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1.。書中電路和程序設計有詳細說明,程序語句條條有注解。

評分

參與人數(shù) 1黑幣 +4 收起 理由
愛吃餃子 + 4

查看全部評分

回復

使用道具 舉報

ID:302296 發(fā)表于 2018-4-5 10:40 | 顯示全部樓層
矩陣不需要外加電源
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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