找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

3個(gè)IO口這樣能接6個(gè)按鍵嗎?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
請(qǐng)完善程序

3個(gè)IO口接6個(gè)按鍵.pdf

95.02 KB, 下載次數(shù): 0

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1136941 發(fā)表于 2025-1-14 00:49 | 只看該作者

有興趣完善程序

3個(gè)IO口接6個(gè)按鍵_1.jpg (341.96 KB, 下載次數(shù): 0)

3個(gè)IO口接6個(gè)按鍵_1.jpg
回復(fù)

使用道具 舉報(bào)

板凳
ID:526108 發(fā)表于 2025-1-14 10:28 | 只看該作者

什么亂七八糟的,來(lái)搞笑的吧
回復(fù)

使用道具 舉報(bào)

地板
ID:1136941 發(fā)表于 2025-1-14 10:47 | 只看該作者
這樣寫(xiě)可以實(shí)用吧,消抖用按鍵并電容,
char key()
{
  B1=1;
  B2=1;
  B3=1;
        if(B1==0)return 1;
else  if(B1==0&&B2==0)return 2;
else  if(B2==0)return 3;
else  if(B2==0&&B3==0)return 4;
else  if(B3==0)return 5;
else  if(B3==0&&B1==0)return 6;
else  return 0;
}
回復(fù)

使用道具 舉報(bào)

5#
ID:1003477 發(fā)表于 2025-1-14 13:47 | 只看該作者
判斷B1、B2、B3的電平高低   b1低且b2、b3高對(duì)應(yīng)sw1,b2低且b1、b3高對(duì)應(yīng)sw3,b3低且b1、b2高對(duì)應(yīng)sw5,b1、b2低且b3高對(duì)應(yīng)sw2......
回復(fù)

使用道具 舉報(bào)

6#
ID:476244 發(fā)表于 2025-1-14 14:00 | 只看該作者
可以,也可以再接第7個(gè)開(kāi)關(guān)同時(shí)拉低三個(gè)I/O口。
也可以只用3個(gè)開(kāi)關(guān)組合使用。
二進(jìn)制的 000-111 。
回復(fù)

使用道具 舉報(bào)

7#
ID:161164 發(fā)表于 2025-1-14 14:46 | 只看該作者

  1. sbit Pin_B1 = P3^2;
  2. sbit Pin_B2 = P3^3;
  3. sbit Pin_B3 = P3^4;
  4. u8 KeyVal = 0;//用完清零
  5. void key_Proc()//多鍵短按,1ms中斷內(nèi)運(yùn)行
  6. {
  7.         static u8 Delay_XD=0; //消抖計(jì)數(shù)
  8.         static bit ons = 0;
  9.         if(!Pin_B1 || !Pin_B2 || !Pin_B3)
  10.         {
  11.                 if(++Delay_XD>=20 && !ons) //消抖
  12.                 {
  13.                         ons = 1;
  14.                         if(!Pin_B1 && !Pin_B2)
  15.                         {
  16.                                 KeyVal = SW2;
  17.                         }else if(!Pin_B2 && !Pin_B3)
  18.                         {
  19.                                 KeyVal = SW4;
  20.                         }else if(!Pin_B1 && !Pin_B3)
  21.                         {
  22.                                 KeyVal = SW6;
  23.                         }else{
  24.                                 if(!Pin_B1)
  25.                                 {
  26.                                         KeyVal = SW1;
  27.                                 }
  28.                                 if(!Pin_B2)
  29.                                 {
  30.                                         KeyVal = SW3;
  31.                                 }
  32.                                 if(!Pin_B3
  33.                                 {
  34.                                         KeyVal = SW5;
  35.                                 }                               
  36.                         }
  37.                 }
  38.         }
  39.         else //按鍵抬起
  40.         {
  41.                 Delay_XD=0; //Delay_XD清0
  42.                 ons = 0;
  43.         }
  44. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

8#
ID:1143011 發(fā)表于 2025-1-14 15:24 | 只看該作者
不知道什么原理 ,為何不用ADC口
回復(fù)

使用道具 舉報(bào)

9#
ID:277550 發(fā)表于 2025-1-14 15:26 | 只看該作者
邏輯像是 3 排列,取2個(gè)、和取1個(gè)。

這硬件電路沒(méi)有問(wèn)題,測(cè)試過(guò)。
程序中,可以使用掃描,也可以用3個(gè)中斷、再判斷哪個(gè)按鈕
回復(fù)

使用道具 舉報(bào)

10#
ID:277550 發(fā)表于 2025-1-14 15:38 | 只看該作者
再加3只二極管,可以7個(gè)按鈕
回復(fù)

使用道具 舉報(bào)

11#
ID:69038 發(fā)表于 2025-1-14 15:49 | 只看該作者
邏輯上沒(méi)啥問(wèn)題。
但對(duì)于現(xiàn)在的MCU來(lái)說(shuō),意義不大,
6個(gè)4148不是錢(qián)?
為什么不用AD口來(lái)測(cè)按鍵?還能少兩個(gè)IO。
要知道硬件成本遠(yuǎn)大于軟件成本。
回復(fù)

使用道具 舉報(bào)

12#
ID:446156 發(fā)表于 2025-1-14 16:37 | 只看該作者
注意按鍵不要同時(shí)按下多個(gè)就行
回復(fù)

使用道具 舉報(bào)

13#
ID:1136941 發(fā)表于 2025-1-14 16:48 | 只看該作者

這樣就很完善了,學(xué)習(xí)了。
回復(fù)

使用道具 舉報(bào)

14#
ID:1109793 發(fā)表于 2025-1-14 18:50 | 只看該作者
這是都對(duì)地接,如果接兩個(gè)IO之間,是不是還能更多?
回復(fù)

使用道具 舉報(bào)

15#
ID:161164 發(fā)表于 2025-1-15 09:44 | 只看該作者
太陽(yáng)雨ZW 發(fā)表于 2025-1-14 16:48
這樣就很完善了,學(xué)習(xí)了。

5樓提醒了我,代碼可以簡(jiǎn)化為

  1. sbit Pin_B1 = P3^2;
  2. sbit Pin_B2 = P3^3;
  3. sbit Pin_B3 = P3^4;
  4. u8 KeyVal = 0;//用完清零
  5. void key_Proc()//多鍵短按,1ms中斷內(nèi)運(yùn)行
  6. {
  7.         static u8 Delay_XD=0; //消抖計(jì)數(shù)
  8.         static bit ons = 0;
  9.         u8 KeyTemp = 0;
  10.         if(!Pin_B1)KeyTemp |= 0x01;
  11.         if(!Pin_B2)KeyTemp |= 0x02;
  12.         if(!Pin_B3)KeyTemp |= 0x04;
  13.         if(KeyTemp)
  14.         {
  15.                 if(++Delay_XD>=20 && !ons) //消抖
  16.                 {
  17.                         ons = 1;
  18.                         KeyVal = KeyTemp;
  19.                 }
  20.         }
  21.         else //按鍵抬起
  22.         {
  23.                 Delay_XD=0; //Delay_XD清0
  24.                 ons = 0;
  25.         }
  26. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

16#
ID:1136941 發(fā)表于 2025-1-15 13:31 | 只看該作者
zhuls 發(fā)表于 2025-1-14 15:49
邏輯上沒(méi)啥問(wèn)題。
但對(duì)于現(xiàn)在的MCU來(lái)說(shuō),意義不大,
6個(gè)4148不是錢(qián)?

用的是AT89C2051,不帶ADC
回復(fù)

使用道具 舉報(bào)

17#
ID:1034262 發(fā)表于 2025-1-16 13:17 | 只看該作者

3個(gè)IO不需要節(jié)任何別的零件,可以節(jié)6個(gè)按鍵:
IO1、IO2、IO3分別對(duì)地接一個(gè)按鍵。
IO1-IO2、IO1-IO3、IO2-IO3接3個(gè)按鍵。
回復(fù)

使用道具 舉報(bào)

18#
ID:264021 發(fā)表于 2025-1-16 20:55 | 只看該作者
可以,但是那3個(gè)I/O必須帶ADC功能
回復(fù)

使用道具 舉報(bào)

19#
ID:69038 發(fā)表于 2025-1-17 09:16 | 只看該作者

AT89C2051,可以說(shuō)是史前文物了!
現(xiàn)在哪家上新項(xiàng)目還用這料?
現(xiàn)在新出的20腳MCU,哪個(gè)性能配置比不過(guò)它?除了固有的庫(kù)存,全新貨還貴的要人命。。
回復(fù)

使用道具 舉報(bào)

20#
ID:1109793 發(fā)表于 2025-1-17 09:54 | 只看該作者
zhuls 發(fā)表于 2025-1-17 09:16
AT89C2051,可以說(shuō)是史前文物了!
現(xiàn)在哪家上新項(xiàng)目還用這料?
現(xiàn)在新出的20腳MCU,哪個(gè)性能配置比不過(guò) ...

我手里還有一點(diǎn)庫(kù)存呢,你要不?
回復(fù)

使用道具 舉報(bào)

21#
ID:1136941 發(fā)表于 2025-1-17 11:01 | 只看該作者
zhuls 發(fā)表于 2025-1-17 09:16
AT89C2051,可以說(shuō)是史前文物了!
現(xiàn)在哪家上新項(xiàng)目還用這料?
現(xiàn)在新出的20腳MCU,哪個(gè)性能配置比不過(guò) ...

手中還有過(guò)去買(mǎi)的幾十個(gè),放著浪費(fèi)了,現(xiàn)在用來(lái)做些小制做利用下。
回復(fù)

使用道具 舉報(bào)

22#
ID:1136941 發(fā)表于 2025-1-17 11:05 | 只看該作者
單片機(jī)學(xué)習(xí)習(xí) 發(fā)表于 2025-1-16 20:55
可以,但是那3個(gè)I/O必須帶ADC功能

3個(gè)口帶ADC,沒(méi)有搞懂
回復(fù)

使用道具 舉報(bào)

23#
ID:1136941 發(fā)表于 2025-1-17 12:15 | 只看該作者
devcang 發(fā)表于 2025-1-14 15:38
再加3只二極管,可以7個(gè)按鈕

也可以接10個(gè)按鍵,7個(gè)加B1-B2,B2-B3,B1-B3三個(gè)。
回復(fù)

使用道具 舉報(bào)

24#
ID:69038 發(fā)表于 2025-1-17 14:27 | 只看該作者
xiaobendan001 發(fā)表于 2025-1-17 09:54
我手里還有一點(diǎn)庫(kù)存呢,你要不?

我要這東西做什么哎。。。
手里還的幾十個(gè)8G1K08A的,當(dāng)時(shí)剛出來(lái)沒(méi)多久就買(mǎi)了,放在手里吃灰呢。。
回復(fù)

使用道具 舉報(bào)

25#
ID:69038 發(fā)表于 2025-1-17 14:29 | 只看該作者
太陽(yáng)雨ZW 發(fā)表于 2025-1-17 11:01
手中還有過(guò)去買(mǎi)的幾十個(gè),放著浪費(fèi)了,現(xiàn)在用來(lái)做些小制做利用下。

也是哈,就DIY樂(lè)呵樂(lè)呵,真做項(xiàng)目不要再考慮用它了。
回復(fù)

使用道具 舉報(bào)

26#
ID:584814 發(fā)表于 2025-1-20 11:39 | 只看該作者
3個(gè)IO口這樣能接6個(gè)按鍵,是查理復(fù)用接法的上限,并不是51單片機(jī)能力的上限。
用電阻電壓法理論上可以單口無(wú)限,實(shí)際單口接三五個(gè)也很常見(jiàn)。
回復(fù)

使用道具 舉報(bào)

27#
ID:1143230 發(fā)表于 2025-1-20 14:02 | 只看該作者
也可以
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表