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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求大神指導(dǎo)我需要一個(gè)能做到30個(gè)按鍵掃描的鍵盤用51單片機(jī)

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 60 黑幣 回復(fù)本帖可獲得 20 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
需要用lcd液晶顯示來顯示按鍵掃描里哪里沒有被按下希望得到大神指點(diǎn)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:401564 發(fā)表于 2020-5-29 15:16 | 只看該作者
使用ADC端口加分壓電阻,三四個(gè)端口就可以有30個(gè)按鍵了,自己參考一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:332444 發(fā)表于 2020-5-29 19:22 | 只看該作者
除了按下的就是都沒按下!
回復(fù)

使用道具 舉報(bào)

地板
ID:420836 發(fā)表于 2020-5-29 22:53 | 只看該作者
可以使用IO擴(kuò)展電路,或IO和電阻矩陣電路來創(chuàng)建大鍵盤。
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2020-5-29 23:29 | 只看該作者
給你寫一個(gè)5*6矩陣鍵盤數(shù)碼管動(dòng)態(tài)顯示示例參考,端口可以按實(shí)際需要自行更改,再把數(shù)碼管顯示改為LCD顯示。


  1. //P1.0~1.5接行線,P1.6~1.7、P2.0~2.2接列線
  2. //數(shù)碼管顯示鍵值
  3. #include<reg51.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define PD (P2&0x07)<<8|P1 //宏定義5*6矩陣端口
  7. sbit wela1=P2^6;//數(shù)碼管十位
  8. sbit wela2=P2^7;//數(shù)碼管個(gè)位
  9. uchar code table[]={//共陰數(shù)碼管段碼"0~f"
  10.                 0x3f,0x06,0x5b,0x4f,
  11.                 0x66,0x6d,0x7d,0x07,
  12.                 0x7f,0x6f,0x77,0x7c,
  13.                 0x39,0x5e,0x79,0x71};
  14. uint key=0;                                                        //鍵值變量
  15. uchar ge,shi;
  16. bit flag;

  17. void PX(uint i)                                        //寫入16位數(shù)據(jù)
  18. {   
  19.         P1=i;
  20.         P2&=0xf8;//清0 P2低3位不影響高5位狀態(tài)
  21.         P2|=i>>8;//
  22. }

  23. void keyscan()                                                //按鍵掃描程序
  24. {
  25.         static bit sign=0;                                //按鍵自鎖標(biāo)志
  26.         static uint count=0;                        //消抖計(jì)數(shù)變量                       
  27.         uint num=0;                                                //臨時(shí)變量
  28.         PX(0x07C0);                                                //賦值PX 11111 000000
  29.         num=PD;                                                        //保存PD值 xxxxx 000000,x為0或1
  30.         if(num!=0x07C0)                                        //檢測有按鍵按下
  31.         {
  32.                 if(++count>=10 && sign==0)  //根據(jù)主循環(huán)周期調(diào)整約10~20ms
  33.                 {                       
  34.                         sign=1;                                        //按鍵自鎖標(biāo)志置1
  35.                         num|=0x003f;                        //保存num按位或003f值 xxxxx 111111
  36.                         PX(num);                                //賦值PX              xxxxx 111111
  37.                         num=PD;                                        //保存PD值            xxxxx xxxxxx
  38.                         switch(num)
  39.                         {
  40.                                 case 0x07be: key= 1; break;//011110 111110
  41.                                 case 0x077e: key= 2; break;//011101 111110
  42.                                 case 0x06fe: key= 3; break;//011011 111110
  43.                                 case 0x05fe: key= 4; break;//010111 111110
  44.                                 case 0x03fe: key= 5; break;//001111 111110

  45.                                 case 0x07bd: key= 6; break;//011110 111101
  46.                                 case 0x077d: key= 7; break;//011101 111101
  47.                                 case 0x06fd: key= 8; break;//011011 111101
  48.                                 case 0x05fd: key= 9; break;//010111 111101
  49.                                 case 0x03fd: key=10; break;//001111 111101

  50.                                 case 0x07bb: key=11; break;//011110 111011
  51.                                 case 0x077b: key=12; break;//011101 111011
  52.                                 case 0x06fb: key=13; break;//011011 111011
  53.                                 case 0x05fb: key=14; break;//010111 111011
  54.                                 case 0x03fb: key=15; break;//001111 111011

  55.                                 case 0x07b7: key=16; break;//011110 110111
  56.                                 case 0x0777: key=17; break;//011101 110111
  57.                                 case 0x06f7: key=18; break;//011011 110111
  58.                                 case 0x05f7: key=19; break;//010111 110111
  59.                                 case 0x03f7: key=20; break;//001111 110111

  60.                                 case 0x07af: key=21; break;//011110 101111
  61.                                 case 0x076f: key=22; break;//011101 101111
  62.                                 case 0x06ef: key=23; break;//011011 101111
  63.                                 case 0x05ef: key=24; break;//010111 101111
  64.                                 case 0x03ef: key=25; break;//001111 101111

  65.                                 case 0x079f: key=26; break;//011110 011111
  66.                                 case 0x075f: key=27; break;//011101 011111
  67.                                 case 0x06df: key=28; break;//011011 011111
  68.                                 case 0x05df: key=29; break;//010111 011111
  69.                                 case 0x03df: key=30; break;//001111 011111
  70.                         }
  71.                 }
  72.         }
  73.         else                                                //鍵抬起
  74.         {
  75.                 sign=0;                                        //按鍵自鎖標(biāo)志清0
  76.                 count=0;                                //消抖計(jì)數(shù)清0
  77.         }
  78. }
  79. void main()                                                //主函數(shù)
  80. {
  81.         while(1)
  82.         {
  83.                 keyscan();                                //按鍵掃描程序
  84.                 if(flag)
  85.                 {
  86.                         P0=0x00;
  87.                         wela1=0;
  88.                         wela2=1;
  89.                         P0=table[key/10];
  90.                         flag=~flag;
  91.                 }
  92.                 else
  93.                 {
  94.                         P0=0x00;
  95.                         wela1=1;
  96.                         wela2=0;
  97.                         P0=table[key%10];
  98.                         flag=~flag;
  99.                 }
  100.         }
  101. }
復(fù)制代碼




回復(fù)

使用道具 舉報(bào)

6#
ID:386602 發(fā)表于 2020-5-30 07:15 | 只看該作者
可以做成按鈕矩陣鏈接占用11個(gè)IO口
回復(fù)

使用道具 舉報(bào)

7#
ID:307407 發(fā)表于 2020-5-30 08:56 | 只看該作者
有很多種方法:
第一種:采用獨(dú)立按鍵直接并接到I/O口上;
優(yōu)點(diǎn):程序和硬件電路都簡單;
缺點(diǎn):占用過多的I/O口,需用到I/O口比較多的單片機(jī);
第二種:矩陣掃描,使用12個(gè)I/O口,就可以掃描6x6=36個(gè)按鍵,只需用到30個(gè)按鍵就能完成此功能;
優(yōu)點(diǎn):硬件電路簡單;
缺點(diǎn):矩陣按鍵掃描程序變得更復(fù)雜;
第三種:采用并轉(zhuǎn)串芯片增加I/O口,例如74HC165;
缺點(diǎn):須另加多片165芯片,硬件電路復(fù)雜,軟件也相對復(fù)雜
第四種:采用自帶ADC的單片機(jī);每個(gè)開關(guān)都接上不同的分壓比,將不同的電壓值送入單片機(jī)ADC處理,轉(zhuǎn)換成對應(yīng)的ADC數(shù)值,再通過程序?qū)?yīng)每個(gè)開關(guān),即可實(shí)現(xiàn)一個(gè)I/O口掃描30個(gè)按鍵;
優(yōu)點(diǎn):占用極少的I/O資源,電路也相對容易;
缺點(diǎn):需要用到帶ADC的單片機(jī),如STC12C5612AD;

以上方法都可以實(shí)現(xiàn)30個(gè)按鍵的掃描!!
回復(fù)

使用道具 舉報(bào)

8#
ID:696382 發(fā)表于 2020-5-30 08:57 | 只看該作者
Y_G_G 發(fā)表于 2020-5-29 15:16
使用ADC端口加分壓電阻,三四個(gè)端口就可以有30個(gè)按鍵了,自己參考一下

謝謝大佬提供新思路
回復(fù)

使用道具 舉報(bào)

9#
ID:696382 發(fā)表于 2020-5-30 08:58 | 只看該作者
TTQ001 發(fā)表于 2020-5-29 22:53
可以使用IO擴(kuò)展電路,或IO和電阻矩陣電路來創(chuàng)建大鍵盤。

謝謝,我去查一下資料
回復(fù)

使用道具 舉報(bào)

10#
ID:332444 發(fā)表于 2020-5-30 14:09 | 只看該作者
不用擴(kuò)展不用6*6,使用4*4就可以組合實(shí)現(xiàn)32個(gè)按鍵,之前發(fā)布的電路圖已經(jīng)24個(gè)按鍵了,可再加8個(gè)按鍵。
回復(fù)

使用道具 舉報(bào)

11#
ID:332444 發(fā)表于 2020-5-30 21:37 | 只看該作者


評分

參與人數(shù) 1黑幣 +12 收起 理由
8092553 + 12 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

12#
ID:332444 發(fā)表于 2020-5-30 21:51 | 只看該作者
這個(gè)圖調(diào)整的精致點(diǎn)好看點(diǎn)



回復(fù)

使用道具 舉報(bào)

13#
ID:332444 發(fā)表于 2020-5-31 05:40 | 只看該作者


回復(fù)

使用道具 舉報(bào)

14#
ID:332444 發(fā)表于 2020-5-31 14:42 | 只看該作者
2種按鍵掃描結(jié)合起來即可實(shí)現(xiàn)32按鍵功能。4*4矩陣按鍵掃描代碼也不多可參
回復(fù)

使用道具 舉報(bào)

15#
ID:332444 發(fā)表于 2020-6-1 08:26 | 只看該作者

回復(fù)

使用道具 舉報(bào)

16#
ID:332444 發(fā)表于 2020-6-1 15:07 | 只看該作者

回復(fù)

使用道具 舉報(bào)

17#
ID:696382 發(fā)表于 2020-6-2 11:57 | 只看該作者
wulin 發(fā)表于 2020-5-29 23:29
給你寫一個(gè)5*6矩陣鍵盤數(shù)碼管動(dòng)態(tài)顯示示例參考,端口可以按實(shí)際需要自行更改,再把數(shù)碼管顯示改為LCD顯示。 ...

謝謝大佬
回復(fù)

使用道具 舉報(bào)

18#
ID:696382 發(fā)表于 2020-6-2 13:33 | 只看該作者

謝謝大佬提供思路,我現(xiàn)在是使用的38譯碼器來設(shè)計(jì)的,我的按鍵都是常開繼電器,我想通電后線路無誤,其對應(yīng)的繼電器就會(huì)閉合,但是我沒技術(shù)找到比較好的存儲(chǔ)按鍵信息的方法,我想用顯示屏來顯示某號繼電器未閉合。請問大佬有案例供我們初學(xué)者學(xué)習(xí)的嗎
回復(fù)

使用道具 舉報(bào)

19#
ID:332444 發(fā)表于 2020-6-2 13:59 | 只看該作者
你的30個(gè)常開繼電器觸點(diǎn)按4*4矩陣按鍵電路接法來檢測?如果是的話,那么,對應(yīng)不同的IO讀取值,是可以判斷哪個(gè)沒閉合。
回復(fù)

使用道具 舉報(bào)

20#
ID:332444 發(fā)表于 2020-6-2 16:03 | 只看該作者
扯點(diǎn)閑篇,這是剛設(shè)計(jì)出來的使用數(shù)碼管顯示A-Z字母,有些字母需要一點(diǎn)想象力。


回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 九九视频在线观看视频6 | 国产成人精品一区二三区在线观看 | 9999在线视频 | 精品国产青草久久久久福利 | 蜜桃av鲁一鲁一鲁一鲁 | 自拍偷拍中文字幕 | 日韩欧美在线播放 | 97久久精品午夜一区二区 | 国产精品久久久久永久免费观看 | 久久久国产一区二区三区四区小说 | 欧美性一区二区三区 | 狠狠干天天干 | 成人av鲁丝片一区二区小说 | 春色av| 男女羞羞的网站 | 日韩中文字幕一区 | 国产一区二区三区久久久久久久久 | 中文字幕一区在线观看视频 | 色吊丝2 | 亚洲精品 在线播放 | 三级成人片| 久久免费香蕉视频 | 给我免费的视频在线观看 | 四虎在线播放 | 国产精品成人一区 | 精品欧美乱码久久久久久 | 国产一区二区三区四区五区加勒比 | 国产一极毛片 | 人人做人人澡人人爽欧美 | 日韩av成人 | 亚洲精品久久久一区二区三区 | 亚洲逼院 | 国产一区二区三区 | 本道综合精品 | 日韩欧美1区2区 | 久久av资源网 | 国产中文字幕在线观看 | 亚洲激情在线视频 | 最新毛片网站 | 狠狠涩 | 免费在线播放黄色 |