0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區
會(huì )員中心
創(chuàng )作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內不再提示

CW32數字電壓電流表軟件教程(二):按鍵檢測的控制原理解析

武漢芯源半導體 ? 來(lái)源:CW32生態(tài)社區 ? 作者:CW32生態(tài)社區 ? 2024-05-06 15:36 ? 次閱讀

3.1.獨立按鍵基礎知識

3.1.1.獨立按鍵結構組成

獨立按鍵實(shí)際上是一個(gè)非自鎖的輕觸開(kāi)關(guān),有左右兩個(gè)觸點(diǎn),當按下時(shí)左右兩個(gè)觸點(diǎn)閉合,當松開(kāi)時(shí)左右兩個(gè)觸點(diǎn)斷開(kāi)。

3.1.2.獨立按鍵控制原理

想要使用外部的按鍵控制單片機有兩種比較常見(jiàn)的方法:IO掃描和外部中斷。

對于IO掃描的方式而言,需要單片機以比較高的頻率去不間斷地判斷IO口的輸入電平,隨后根據IO電平來(lái)執行后續的邏輯。外部中斷的方式會(huì )在章節十二中進(jìn)行詳細介紹,本章著(zhù)重介紹IO掃描的控制方式。(單片機通過(guò)檢測按鍵按下前后的高低電平變化,來(lái)判斷按鍵是否按下。通過(guò)程序的控制,就可以實(shí)現不同的功能與設置。機械式按鍵在按下或者釋放時(shí),由于機械彈性作用的影響,通常伴隨有一定時(shí)間的觸點(diǎn)機械抖動(dòng),然后其觸點(diǎn)才穩定下來(lái)。抖動(dòng)時(shí)間長(cháng)短與開(kāi)關(guān)的機械特性有關(guān),一般為5-10ms。在觸點(diǎn)抖動(dòng)期間檢測按鍵的按下與否,可能會(huì )導致判斷錯誤,為了克服機械抖動(dòng)所產(chǎn)生的影響,必須采取消抖措施,可分為硬件消抖和軟件消抖。)

3.1.3.按鍵亞穩態(tài)與按鍵消抖

對于一個(gè)IO而言,在將其配置為輸入模式之后,該引腳上的電平受外部電路影響,基本可以分為三種狀態(tài):高電平、低電平、浮空。高低電平很好理解,這里說(shuō)明浮空的意義,浮空就是不對該IO進(jìn)行任何電氣屬性的連接,此時(shí)該IO上的電平是未知的(雖然從直觀(guān)感受上來(lái)看此時(shí)IO電壓應該是0,但是空氣中會(huì )有噪聲,電路板上也會(huì )有噪聲,某些電磁干擾也會(huì )充當噪聲,所以浮空輸入的IO電壓實(shí)際上是未知的)。

典型的浮空輸入型IO電路如圖3-1所示:

af2e55d8-0b7a-11ef-a297-92fbcf53809c.png

圖3-1 浮空輸入IO電路

當開(kāi)關(guān)閉合,IO電壓等于VCC電壓,當開(kāi)關(guān)斷開(kāi),IO電壓未知,此時(shí)IO電壓可能會(huì )受到不明來(lái)源的干擾,如果使用該電路作為IO掃描的電路方案,抗干擾能力會(huì )不好,容易造成誤觸發(fā),故此應用場(chǎng)景下不考慮使用該電路。

和浮空輸入相比,比較好的辦法是使用上拉電阻或下拉電阻將IO的電壓固定下來(lái),帶上拉電阻或下拉電阻電路如圖3-2所示:

af44e2e4-0b7a-11ef-a297-92fbcf53809c.png

圖3-2 上拉電阻(左) 和 下拉電阻(右)電路

上拉電阻可以將IO電壓固定在VCC電壓,當開(kāi)關(guān)閉合時(shí),IO接地使其電壓變?yōu)镚ND電壓;下拉電阻可以將IO電壓固定在GND電壓,當開(kāi)關(guān)閉合時(shí),IO電壓其實(shí)就是電阻R2的電壓,此時(shí)R2的電壓就是VCC。使用上拉/下拉電阻可以很好地提高IO掃描的抗干擾性能,一般情況這兩個(gè)電路不會(huì )有很大區別,挑一個(gè)你喜歡的用就好。

按鍵通過(guò)金屬導體的相互接觸來(lái)控制電信號,由于機械特性,這種接觸實(shí)際上并不可靠,手指按下按鍵不代表按鍵真的閉合且保持穩定,這種情況就是按鍵抖動(dòng),抖動(dòng)過(guò)程中按鍵控制的信號處于亞穩態(tài),亞穩態(tài)的信號不可靠,不能將其作為IO掃描的最終結果,為了獲取正確的按鍵狀態(tài),我們需要對按鍵進(jìn)行消抖處理,按鍵消抖大概可以分為兩種方式:

硬件消抖:硬件消抖一般會(huì )在按鍵兩端并聯(lián)電容,通過(guò)電容的充放電作用將按鍵按下時(shí)的高頻振蕩吸收掉,當開(kāi)關(guān)處于亞穩態(tài)時(shí),IO電壓不規則變化,電容會(huì )吸收這些不穩定電壓進(jìn)行充電,這對IO電壓有平緩的效果,以此達到消抖的目的,硬件消抖電路如圖3-3所示。

af54e5f4-0b7a-11ef-a297-92fbcf53809c.png

圖3-3 硬件消抖電路

簡(jiǎn)單的軟件消抖:極為簡(jiǎn)單的軟件消抖一般是通過(guò)延時(shí)的辦法來(lái)跳過(guò)亞穩態(tài)階段,當檢測到按鍵按下時(shí),不會(huì )立即去檢測電平,而是經(jīng)過(guò)短暫的延時(shí)之后,再去檢測當前引腳的電平,這能在一定程度上消除亞穩態(tài)帶來(lái)的影響,但需要對按鍵按下和抬起都進(jìn)行延時(shí)判斷才能更為有效。

更好的軟件消抖:在監測到IO電平發(fā)生變化后的一小段時(shí)間內快速采集IO的電平狀態(tài),如果這一小段時(shí)間內IO電平全都屬于有效電平,則認為按鍵已按下(這種利用數學(xué)進(jìn)行消抖的方式達到了對數字信號的篩選作用,所以他也是一種簡(jiǎn)易濾波器)。

在條件允許的情況下,硬件消抖的效果會(huì )更好,如果PCB沒(méi)有多余的空間留給這個(gè)消抖電容,使用軟件消抖同樣是一個(gè)不錯的方案。

3.2.獨立按鍵原理圖

CW32F003核心板上一共有兩個(gè)按鍵,一個(gè)復位和一個(gè)用戶(hù)按鍵,復位作為單片機的特殊功能,不可以作為按鍵使用,故只有用戶(hù)按鍵可以作為按鍵使用。 CW32F003核心板關(guān)于獨立按鍵的原理圖如圖3-4所示。

af65d4c2-0b7a-11ef-a297-92fbcf53809c.png

圖3-4 CW32F003按鍵電路

3.3.獨立按鍵驅動(dòng)流程

通過(guò)上面的原理圖可以了解到,按鍵的一端接到了地,另一端接到單片機的PB2引腳上。通過(guò)檢測PB2引腳的電平狀態(tài),判斷按鍵是否按下。當按鍵松開(kāi)的時(shí)候,PB2檢測到的電平為高電平,當按鍵按下的時(shí)候,PB2檢測到的電平為低電平。

外部電路不含上下拉電阻,對IO而言是浮空輸入,因此需要使用單片機內部的上下拉電阻;電路不含消抖電容,故編程上需要對按鍵進(jìn)行軟件消抖。

3.4.按鍵控制LED燈亮滅

3.4.1.配置流程

一般我們使用GPIO的輸入功能,都需要有以下幾個(gè)步驟。

開(kāi)啟GPIO的端口時(shí)鐘

配置GPIO的模式

配置GPIO的輸入

編寫(xiě)消抖函數

從開(kāi)發(fā)板原理圖了解到按鍵接的是單片機的PB2。我們要使能按鍵就需要配置GPIOB端口。下面我們就以按鍵連接的PB2進(jìn)行介紹。

3.4.1.1.開(kāi)啟GPIO的端口初始化

由于時(shí)鐘的配置在之前的章節已有說(shuō)明,故不再贅述,我們直接對端口進(jìn)行初始化。初始化的代碼與上文GPIO輸出的配置略有不同,完整代碼如下:

void Gpio_Init(void)
{
  __RCC_GPIOC_CLK_ENABLE();//打開(kāi)GPIOC的時(shí)鐘,PC0控制LED亮滅
  GPIO_InitTypeDef GPIO_InitStruct;
  GPIO_InitStruct.Pins = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.IT = GPIO_IT_NONE;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  GPIO_Init(CW_GPIOC, &GPIO_InitStruct);
        
  __RCC_GPIOB_CLK_ENABLE();//打開(kāi)GPIOB的時(shí)鐘,PB2控制按鍵輸入
  GPIO_InitStruct.Pins = GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP;  //沒(méi)有輸入時(shí)PB2默認為高電平
  GPIO_InitStruct.IT = GPIO_IT_NONE;
  GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
}
3.4.1.2.編寫(xiě)消抖函數

本次實(shí)驗采用軟件消抖,消抖函數的編寫(xiě)思路為:設置按鍵檢測標志位(Flag_Key),當單片機檢測到按鍵按下,即PB2為低電平時(shí),將標志位置1;在后續的條件判斷中如果標志位為1,則檢測按鍵是否松開(kāi),若已松開(kāi)則完成本次判斷,認為按鍵已經(jīng)按下過(guò)一次。這種方式可以不用延時(shí)判斷,節約軟件資源。

完整的按鍵檢測程序如下:
uint8_t Flag_Key;         //按鍵標志位
extern uint8_t Flag_LED;         //LED顯示標志位
void Key_Scan(void)
{
  if(GPIO_ReadPin(CW_GPIOB,GPIO_PIN_2) == GPIO_Pin_RESET)  //檢測PB2是否為低電平
    {
          Flag_Key = 1;
    }
  if(Flag_Key)     //接著(zhù)判斷標志位
    {
      if(GPIO_ReadPin(CW_GPIOB,GPIO_PIN_2) == GPIO_Pin_SET)    //如果按鍵已經(jīng)松開(kāi)
        {
          Flag_Key = 0;   //清零標志位,等待下一次按鍵檢測
          if(Flag_LED == 0) Flag_LED = 1; //按鍵按下該變LED顯示標志位的值,由顯示標志位控制LED   
          else Flag_LED = 0;
        }
    }
}
3.4.1.3.LED顯示函數

在按鍵按下更改LED顯示標志位后,需要根據顯示標志位的值來(lái)控制LED燈的亮滅。
uint8_t Flag_LED;       


void LED_Init(void)
{
  GPIO_WritePin(CW_GPIOC,GPIO_PIN_0,GPIO_Pin_SET);  //初始化讓LED燈處于熄滅狀態(tài)
}
void LED_Lighting(void)
{
  if(Flag_LED == 1)
    {
      GPIO_WritePin(CW_GPIOC,GPIO_PIN_0,GPIO_Pin_RESET);        //亮
    }
  else 
    {
      GPIO_WritePin(CW_GPIOC,GPIO_PIN_0,GPIO_Pin_SET);       //滅
    }
}
最終主函數里只需要運行相應的初始化函數和上面的函數:
int main()
{
  RCC_Configuration();
  Gpio_Init();
  LED_Init();
   
  while(1)
   {


審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權轉載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習之用,如有內容侵權或者其他違規問(wèn)題,請聯(lián)系本站處理。 舉報投訴
  • 上拉電阻
    +關(guān)注

    關(guān)注

    5

    文章

    351

    瀏覽量

    30329
  • 濾波器
    +關(guān)注

    關(guān)注

    158

    文章

    7401

    瀏覽量

    175452
  • 電磁干擾
    +關(guān)注

    關(guān)注

    36

    文章

    2135

    瀏覽量

    104953
  • GND
    GND
    +關(guān)注

    關(guān)注

    2

    文章

    523

    瀏覽量

    38222
  • 獨立按鍵
    +關(guān)注

    關(guān)注

    1

    文章

    45

    瀏覽量

    11492
  • 電壓電流表
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    2035
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    144

    瀏覽量

    378

原文標題:CW32數字電壓電流表軟件教程-實(shí)驗二:按鍵檢測

文章出處:【微信號:武漢芯源半導體,微信公眾號:武漢芯源半導體】歡迎添加關(guān)注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    CW32數字電壓電流表軟件進(jìn)階教程-1.電壓電流同時(shí)顯示

    基于[CW32數字電壓電流表軟件教程-實(shí)驗七:基本數據處理算法(均值濾波)],可以對電壓電流進(jìn)行同時(shí)采集顯示。
    的頭像 發(fā)表于 05-31 15:50 ?152次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件</b>進(jìn)階教程-1.<b class='flag-5'>電壓電流</b>同時(shí)顯示

    CW32數字電壓電流表軟件教程-實(shí)驗四:數碼管動(dòng)態(tài)顯示

    5.1.數碼管動(dòng)態(tài)顯示原理 所謂動(dòng)態(tài)掃描顯示即輪流向各位數碼管送出段碼和位碼,利用發(fā)光管的余輝和人眼視覺(jué)暫留作用,使人眼的感覺(jué)好像各位數碼管同時(shí)都在顯示。明確了原理,我們要使電壓電流表的三個(gè)位同時(shí)
    的頭像 發(fā)表于 05-31 15:23 ?118次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件教程</b>-實(shí)驗四:數碼管動(dòng)態(tài)顯示

    CW32數字電壓電流表軟件教程-實(shí)驗二:按鍵檢測

    3.1.獨立按鍵基礎知識 3.1.1.獨立按鍵結構組成 獨立按鍵實(shí)際上是一個(gè)非自鎖的輕觸開(kāi)關(guān),有左右兩個(gè)觸點(diǎn),當按下時(shí)左右兩個(gè)觸點(diǎn)閉合,當松開(kāi)時(shí)左右兩個(gè)觸點(diǎn)斷開(kāi)。 3.1.2.獨立按鍵控制
    的頭像 發(fā)表于 05-31 15:16 ?526次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件教程</b>-實(shí)驗二:<b class='flag-5'>按鍵</b><b class='flag-5'>檢測</b>

    CW32數字電壓電流表軟件教程(一):LED原理與驅動(dòng)基礎知識詳解

    LED 驅動(dòng)指的是通過(guò)穩定的電源為 LED 提供合適的電流電壓,使其正常工作點(diǎn)亮。LED 驅動(dòng)方式主要有恒流和恒壓兩種。
    的頭像 發(fā)表于 05-06 15:33 ?1147次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件教程</b>(一):LED原理與驅動(dòng)基礎知識詳解

    CW32數字電壓電流表-產(chǎn)品硬件設計要點(diǎn)

    電壓跟隨器的功能簡(jiǎn)化外圍電路 2、使用了和市面電壓電流表的同款接口(XH2.54+CH3.96),方便通用 3、最大40V的表頭供電電壓,覆蓋大部分常用電壓范圍 4、板載低成本藍牙通
    的頭像 發(fā)表于 04-25 15:20 ?1378次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數字</b><b class='flag-5'>電壓電流表</b>-產(chǎn)品硬件設計要點(diǎn)

    基于單片機的電壓電流表設計

    電子發(fā)燒友網(wǎng)站提供《基于單片機的電壓電流表設計.rar》資料免費下載
    發(fā)表于 01-12 09:59 ?14次下載

    基于單片機的電壓電流表設計

    電子發(fā)燒友網(wǎng)站提供《基于單片機的電壓電流表設計.rar》資料免費下載
    發(fā)表于 01-02 09:36 ?25次下載

    基于CW32的物聯(lián)網(wǎng)應用

    CW32】基于CW32的物聯(lián)網(wǎng)應用
    的頭像 發(fā)表于 11-02 15:55 ?416次閱讀
    基于<b class='flag-5'>CW32</b>的物聯(lián)網(wǎng)應用

    CW32 電容式觸摸按鍵設計指南

    CW32 電容式觸摸按鍵設計指南
    的頭像 發(fā)表于 10-25 16:36 ?691次閱讀
    <b class='flag-5'>CW32</b> 電容式觸摸<b class='flag-5'>按鍵</b>設計指南

    CW32單片機低電壓檢測器的使用介紹

    CW32單片機低電壓檢測器的使用介紹
    的頭像 發(fā)表于 09-18 10:56 ?737次閱讀
    <b class='flag-5'>CW32</b>單片機低<b class='flag-5'>電壓</b><b class='flag-5'>檢測</b>器的使用介紹

    CW Programmer CW32系列芯片燒錄工具配套軟件

    CW Programmer CW32系列芯片的燒錄工具配套軟件
    發(fā)表于 09-15 07:44

    CW32系列微控制器選型分享

    CW32系列微控制器選型
    發(fā)表于 09-15 07:30

    CW32電容式觸摸按鍵設計指南

    CW32 電容式觸摸按鍵設計指南向客戶(hù)提供一種利用 CW32 內部資源結合軟件編程實(shí)現電容式觸摸按鍵有效觸摸
    發(fā)表于 09-15 06:00

    求:推薦微型寬溫數字電壓電流表

    各位大神: 因項目需求,需采購寬溫微型數字電壓電流表頭。工作溫度范圍是:-40°~60°,最低也要在-25°~50°。 不知群里的大神有推薦么?
    發(fā)表于 08-27 15:22

    【應用筆記】CW32 電容式觸摸按鍵設計指南

    前言CW32電容式觸摸按鍵設計指南向客戶(hù)提供一種利用CW32內部資源結合軟件編程實(shí)現電容式觸摸按鍵有效觸摸
    的頭像 發(fā)表于 07-04 11:44 ?725次閱讀
    【應用筆記】<b class='flag-5'>CW32</b> 電容式觸摸<b class='flag-5'>按鍵</b>設計指南
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看