日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

3天內(nèi)不再提示

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

jf_qE49KoVBr8 ? 來源:CW32生態(tài)社區(qū) ? 作者:CW32生態(tài)社區(qū) ? 2024-05-06 15:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

3.1.獨(dú)立按鍵基礎(chǔ)知識(shí)

3.1.1.獨(dú)立按鍵結(jié)構(gòu)組成

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

3.1.2.獨(dú)立按鍵控制原理

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

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

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

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

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

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

圖3-1 浮空輸入IO電路

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

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

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

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

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

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

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

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

圖3-3 硬件消抖電路

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

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

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

3.2.獨(dú)立按鍵原理圖

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

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

圖3-4 CW32F003按鍵電路

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

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

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

3.4.按鍵控制LED燈亮滅

3.4.1.配置流程

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

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

配置GPIO的模式

配置GPIO的輸入

編寫消抖函數(shù)

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

3.4.1.1.開啟GPIO的端口初始化

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

void Gpio_Init(void)
{
  __RCC_GPIOC_CLK_ENABLE();//打開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();//打開GPIOB的時(shí)鐘,PB2控制按鍵輸入
  GPIO_InitStruct.Pins = GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP;  //沒有輸入時(shí)PB2默認(rèn)為高電平
  GPIO_InitStruct.IT = GPIO_IT_NONE;
  GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
}
3.4.1.2.編寫消抖函數(shù)

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

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

在按鍵按下更改LED顯示標(biāo)志位后,需要根據(jù)顯示標(biāo)志位的值來控制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);       //滅
    }
}
最終主函數(shù)里只需要運(yùn)行相應(yīng)的初始化函數(shù)和上面的函數(shù):
int main()
{
  RCC_Configuration();
  Gpio_Init();
  LED_Init();
   
  while(1)
   {


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

    關(guān)注

    5

    文章

    366

    瀏覽量

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

    關(guān)注

    162

    文章

    8478

    瀏覽量

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

    關(guān)注

    36

    文章

    2506

    瀏覽量

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

    關(guān)注

    2

    文章

    550

    瀏覽量

    41743
  • 獨(dú)立按鍵
    +關(guān)注

    關(guān)注

    1

    文章

    45

    瀏覽量

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

    關(guān)注

    0

    文章

    26

    瀏覽量

    2284
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    326

    瀏覽量

    1969

原文標(biāo)題:CW32數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)二:按鍵檢測(cè)

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    CW32L012電壓電流表設(shè)計(jì)思路

    CW32L012C8T6 定位為 電機(jī)控制、電源管理、智能儀表、工業(yè)傳感器 等領(lǐng)域的高性價(jià)比解決方案,尤其適合需要 高精度模擬信號(hào)處理 + 復(fù)雜數(shù)字控制 的混合信號(hào)系統(tǒng), ARM
    的頭像 發(fā)表于 03-31 21:32 ?656次閱讀

    請(qǐng)問CW32中的CW是啥意思?

    CW32中的CW是啥意思?
    發(fā)表于 02-02 07:10

    請(qǐng)問CW32控制器是否提供軟件開發(fā)工具和庫(kù)函數(shù)支持?

    CW32控制器是否提供軟件開發(fā)工具和庫(kù)函數(shù)支持?
    發(fā)表于 12-16 08:11

    CW32系列微控制器的時(shí)鐘源和定時(shí)器選項(xiàng)介紹

    自己的時(shí)鐘源和寄存器,用于在微控制器休眠或關(guān)閉時(shí)保持計(jì)時(shí)功能。 需要注意的是,具體的時(shí)鐘源和定時(shí)器選項(xiàng)可能因不同的CW32系列微控制器型號(hào)而有所不同。因此,在選擇合適的微控制器型號(hào)時(shí)
    發(fā)表于 12-16 06:26

    CW32單片機(jī)如何讓生活更便捷

    的理想狀態(tài)。一旦溫度過高或過低,馬上會(huì)有信號(hào)發(fā)出,智能馬桶就會(huì)自動(dòng)調(diào)節(jié)座圈的溫度,給你提供更舒適的體驗(yàn)。 專注高效的清潔 - 智能沖洗功能控制CW32單片機(jī)不僅能理解你的需求,而且還能執(zhí)行你的命令。你
    發(fā)表于 12-11 06:11

    CW32時(shí)鐘運(yùn)行中失效檢測(cè)的流程是什么?CW32時(shí)鐘運(yùn)行中失效檢測(cè)注意事項(xiàng)有哪些呢?

    CW32時(shí)鐘運(yùn)行中失效檢測(cè)的流程是什么?CW32時(shí)鐘運(yùn)行中失效檢測(cè)注意事項(xiàng)有哪些?
    發(fā)表于 12-10 07:22

    CW32 電容式觸摸按鍵設(shè)計(jì)指南

    前言 CW32 電容式觸摸按鍵設(shè)計(jì)指南向客戶提供一種利用 CW32 內(nèi)部資源結(jié)合軟件編程實(shí)現(xiàn)電容式觸摸按鍵有效 觸摸
    發(fā)表于 12-09 06:53

    CW32單片機(jī)在智能馬桶的應(yīng)用

    進(jìn)行調(diào)節(jié),提供更加舒適的使用體驗(yàn)。 圖1:CW32在智能馬桶控制板的應(yīng)用框圖 2.智能沖洗功能控制 CW32單片機(jī)通過接收用戶的操作指令,進(jìn)行流量
    發(fā)表于 12-04 08:01

    基于芯源CW32 MCU的LED閃爍示例及代碼分析

    最近我在項(xiàng)目中使用了芯源的CW32 MCU,這是一款非常適合物聯(lián)網(wǎng)和低功耗應(yīng)用的微控制器。在初步學(xué)習(xí)和使用中,我做了一個(gè)簡(jiǎn)單的LED閃爍實(shí)驗(yàn),通過這篇帖子給大家分享一下代碼及相關(guān)的配置步驟。 硬件
    發(fā)表于 12-04 06:52

    基于芯源CW32 MCU智能家居照明控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    。 定時(shí)控制:用戶可以設(shè)置定時(shí)任務(wù),比如晚上自動(dòng)開啟或在預(yù)設(shè)時(shí)間關(guān)閉。 手動(dòng)調(diào)節(jié):系統(tǒng)支持本地按鍵或觸摸面板調(diào)節(jié),方便在無網(wǎng)絡(luò)時(shí)操作。 代碼實(shí)現(xiàn)以下是基于CW32 MCU的核心代碼,實(shí)現(xiàn)了通過PWM
    發(fā)表于 12-03 06:06

    基于芯源半導(dǎo)體MCU cw32芯片制作的USB電壓電流表

    0.91 oled顯示出來。本USB電壓電流表為寬電壓設(shè)計(jì),支持4.2V到40寬電壓輸入,相比較于傳統(tǒng)4.2V-40V穩(wěn)壓芯片有更多的好處。還使用芯源半導(dǎo)體MCU cw32芯片充當(dāng)整個(gè)
    發(fā)表于 12-02 06:39

    cw32 systick怎么用?

    cw32 systick怎么用
    發(fā)表于 12-01 08:10

    使用芯源CW32CW32L012開發(fā)評(píng)估板做了spi屏幕驅(qū)動(dòng)

    CW32生態(tài)社區(qū)以極高的性價(jià)比入手了這塊CW32L012開發(fā)評(píng)估板,開發(fā)板以底板、核心板、1.77寸TFT顯示屏構(gòu)成,所有的IO口都引出了排針,這點(diǎn)好評(píng),使用杜邦線可以非常方便的連接其他模塊。引腳
    的頭像 發(fā)表于 11-21 11:34 ?841次閱讀
    使用芯源<b class='flag-5'>CW32</b>的<b class='flag-5'>CW</b>32L012開發(fā)評(píng)估板做了spi屏幕驅(qū)動(dòng)

    CW32 MCU用什么IDE開發(fā)?

    推薦使用IAR Embedded Workbench for ARM、Keil μVision for ARM等IDE開發(fā)CW32 MCU應(yīng)用,其中新版本IAR EWARM直接支持CW32 MCU,Keil MDK-ARM則需要安裝CW
    發(fā)表于 11-12 07:52

    CW32 MCU的工作電壓、工作溫度是多少?

    CW32通用型MCU工作電壓是1.65V~5.5V,射頻MCU工作電壓則是1.8V/2.2V~3.6V;通用型CW32F系列MCU,比如:CW
    發(fā)表于 11-12 06:49
    靖江市| 永清县| 女性| 敦煌市| 凯里市| 广昌县| 璧山县| 荆州市| 泗阳县| 平湖市| 炉霍县| 高安市| 芦山县| 晋中市| 静宁县| 东莞市| 新兴县| 盘山县| 鱼台县| 琼海市| 鄂尔多斯市| 滦平县| 拉孜县| 安平县| 东阿县| 陇南市| 济源市| 吉安县| 襄樊市| 金川县| 玉林市| 遂宁市| 酒泉市| 诏安县| 任丘市| 常德市| 洛宁县| 大余县| 乌审旗| 宁都县| 子长县|