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

QQ登錄

只需一步,快速開始

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

單片機(jī)按鍵電路模塊設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1120726 發(fā)表于 2024-5-15 01:06 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在這段程序中,按鍵的原理及作用如下:
### 按鍵原理:
1. **按鍵狀態(tài)檢測**:程序通過查詢(`KEY1`, `KEY2`, `KEY3`, `KEY4`)這四個(gè)宏或變量的值來檢測按鍵的狀態(tài)。當(dāng)按鍵被按下時(shí),對(duì)應(yīng)的宏或變量會(huì)被設(shè)置為0,表示低電平;當(dāng)按鍵釋放時(shí),對(duì)應(yīng)的宏或變量會(huì)被設(shè)置為1,表示高電平。
2. **去抖動(dòng)**:為了過濾掉按鍵按下和釋放時(shí)的機(jī)械抖動(dòng),程序中使用了`delay_ms(10)`函數(shù)在檢測到按鍵按下后延時(shí)10毫秒。這樣可以避免短暫的電平變化導(dǎo)致的誤操作。
### 按鍵作用:
1. **KEY_Init函數(shù)**:這個(gè)函數(shù)初始化GPIOA端口的四個(gè)引腳(Pin 5, 6, 4, 7),將它們?cè)O(shè)置為輸入上拉模式。這意味著引腳內(nèi)部有一個(gè)上拉電阻,當(dāng)沒有按鍵按下時(shí),引腳電平會(huì)被拉高到近似于電源電壓(3.3V或5V,取決于具體的微控制器)。
2. **KEY_Scan函數(shù)**:這個(gè)函數(shù)用于掃描按鍵的狀態(tài),并返回按鍵值。
   - 當(dāng)`mode`參數(shù)為1時(shí),`key_up`變量被設(shè)置為1,表示程序開始檢測按鍵釋放。
   - 如果`key_up`為1,并且任何一個(gè)按鍵被按下,程序會(huì)等待10毫秒的延時(shí),然后將`key_up`設(shè)置為0,表示檢測到按鍵按下。
   - 然后程序檢查是哪個(gè)按鍵被按下,并返回相應(yīng)的按鍵值(1, 2, 3, 或4)。
   - 如果所有按鍵都釋放,`key_up`被設(shè)置為1,準(zhǔn)備檢測下一個(gè)按鍵事件。
   - 如果沒有任何按鍵被按下,函數(shù)返回0。
總結(jié)來說,這段程序中的按鍵用于用戶輸入,通過檢測按鍵的狀態(tài)變化來觸發(fā)不同的操作。當(dāng)按鍵被按下時(shí),程序能夠識(shí)別并返回一個(gè)值,這個(gè)值可以用來執(zhí)行相應(yīng)的功能,例如在菜單選擇、參數(shù)配置或者其他用戶交互場景中。

單片機(jī)源程序如下:
#include "key.h"
#include "sys.h"
#include "delay.h"
#include "user_peripheral.h"
#if KEY_Pre
void KEY_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_4|GPIO_Pin_7;//
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

}


u8 KEY_Scan(u8 mode)
{         
        static u8 key_up=1;
        if(mode)key_up=1;               
        if(key_up&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))
        {
                delay_ms(10);
                key_up=0;
                if(KEY1==0)return 1;
                else if(KEY2==0)return 2;
                else if(KEY3==0)return 3;
                else if(KEY4==0)return 4;
        }else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)key_up=1;            
        return 0;
}

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

使用道具 舉報(bào)

沙發(fā)
ID:1120915 發(fā)表于 2024-5-15 20:41 | 只看該作者
  good,有收獲椰絲!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:1120915 發(fā)表于 2024-5-15 20:48 | 只看該作者
謝謝分享,學(xué)到了!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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