嵌入式單片機(jī)基礎(chǔ)篇(十一)之電容觸摸按鍵_第1頁(yè)
嵌入式單片機(jī)基礎(chǔ)篇(十一)之電容觸摸按鍵_第2頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、嵌式單機(jī)基礎(chǔ)篇()之電容觸摸按鍵stm32F1 電容觸摸按鍵詳解1、RC充放電電路原理:(1)如上圖所,當(dāng)開(kāi)關(guān)關(guān)閉時(shí),電容經(jīng)過(guò)電阻R充電,最開(kāi)始的瞬間電流為最值V1/R,隨后隨著Vt越來(lái)越,電流變,電容充電速度變慢,當(dāng)V1=Vt時(shí),電流為0(2)RC電路充放電公式:Vt= V0+(V1-V0)* 1-exp(-t/RC)V0 為電容上的初始電壓值;V1 為電容最終可充到或放到的電壓值;Vt 為t時(shí)刻電容上的電壓值。R 為充電電阻C 為電容容值e 為然底數(shù)t 為充電時(shí)間如果V0為0,也就是從0V開(kāi)始充電。那么公式簡(jiǎn)化為:Vt= V1* 1-exp(-t/RC)結(jié)論:同樣的條件下,電容值C跟時(shí)間值

2、t成正關(guān)系,電容越,充電到達(dá)某個(gè)臨界值的時(shí)間越長(zhǎng)。2、電容觸摸按鍵原理:R:外接電容充放電電阻。Cs:TPAD和PCB間的雜散電容。Cx:指按下時(shí),指和TPAD之間的電容。開(kāi)關(guān):電容放電開(kāi)關(guān),由STM32 IO代替。電容觸摸按鍵原理簡(jiǎn)之就是,當(dāng)指按下觸摸按鍵的時(shí)候,相當(dāng)于充電電容增,那么所需的充電時(shí)間就變長(zhǎng),根據(jù)電容充電時(shí)間的差異來(lái)判斷是否按下了觸摸按鍵上圖的開(kāi)關(guān)作是,當(dāng)開(kāi)關(guān)閉合時(shí),電容放電,當(dāng)開(kāi)關(guān)斷開(kāi)時(shí),電容充電。IO代替的話是需要先將IO配置成推挽輸出,再將IO置低電平0,來(lái)實(shí)現(xiàn)電容放電,再將IO配置成浮空輸,相當(dāng)于斷開(kāi)開(kāi)關(guān),此時(shí)電容開(kāi)始充電3、程序?qū)崿F(xiàn):觸摸按鍵程序與原理#define

3、TPAD_ARR_MAX_VAL 0XFFFF /最的值vu16 tpad_default_val0;/空載的時(shí)候(沒(méi)有按下),計(jì)數(shù)器需要的時(shí)間第步:初始化,也就是先放電后充電RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ); /使能端時(shí)鐘GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1; /PA1 端配置GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP; /推挽輸出GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;GPIO_Res

4、etBits(,GPIO_Pin_1);/PA.1輸出0,放電delay_ms(5);TIM_SetCounter(TIM5,0); /0TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update); /清除中斷標(biāo)志/設(shè)置GPIOA.1為浮空輸GPIO_InitStructure.GPIO_ModeGPIO_Mode_IN_FLOATING; /浮空輸GPIO_Init(, GPIO_InitStructure);第步:輸捕獲,上升沿捕獲/定時(shí)器2通道2輸捕獲配置void TIM5_CH2_Cap_Init(u16 arr,u16 psc)GPIO

5、_InitStructure.GPIO_Pin =GPIO_Pin_1; /PA1端配置GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz; /速度50MHzGPIO_InitStructure.GPIO_ModeGPIO_Mode_IN_FLOATING; /浮空輸GPIO_Init(, GPIO_InitStructure); /設(shè)置為浮空輸TIM_TimeBaseStructure.TIM_Period =arr; /設(shè)定計(jì)數(shù)器動(dòng)重裝值TIM_TimeBaseStructure.TIM_Prescaler psc; /預(yù)分頻器TIM_TimeB

6、aseStructure.TIM_ClockDivision =TIM_CKD_DIV1; /設(shè)置時(shí)鐘分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up; /TIM向上計(jì)數(shù)模式TIM_TimeBaseInit(TIM5, TIM_TimeBaseStructure); /根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位/初始化通道2TIM5_ICInitStructure.TIM_Channel =TIM_Channel_2; /CC1S=01 選擇輸端IC

7、2映射到TI5上TIM5_ICInitStructure.TIM_ICPolarity =TIM_ICPolarity_Rising; /上升沿捕獲TIM5_ICInitStructure.TIM_ICSelection =TIM_ICSelection_DirectTI;TIM5_ICInitStructure.TIM_ICPrescaler =TIM_ICPSC_DIV1; /配置輸分頻,不分頻TIM5_ICInitStructure.TIM_ICFilter =0 x03;/IC2F=0011 8個(gè)定時(shí)器時(shí)鐘周期濾波TIM_ICInit(TIM5, TIM5_ICInitStructur

8、e);/初始化I5 IC2TIM_Cmd(TIM5,ENABLE); /使能定時(shí)器50開(kāi)始到達(dá)上升沿的時(shí)間u16 TPAD_Get_Val(void)TPAD_Reset();while(TIM_GetFlagStatus(TIM5, TIM_IT_CC2) =)/等待捕獲上升沿if(TIM_GetCounter(TIM5)-500)return TIM_GetCounter(TIM5);/超時(shí)了,直接返回CNT的值;return TIM_GetCapture2(TIM5);第四步,獲取時(shí)間最值u16 TPAD_Get_MaxVal(u8 n)u16 temp0;tempTPAD_Get_Va

9、l();/得到次值TIM5_CH2_Cap_Init(,psc-1);/1Mhz的頻率計(jì)數(shù)for(0;10;)/連續(xù)讀取10次delay_ms(10);for(0;9;)/排序if(bufbuf)/升序排列tempbuf;bufbuf;for(2;8;)tempbuf;/取中間的6個(gè)數(shù)據(jù)進(jìn)平均tpad_default_valtemp/6;if(tpad_default_val/2)return 1;/初始化遇到超過(guò)TPAD_ARR_MAX_VAL/2的數(shù)值,不正常!第六步,掃描并判斷是否觸摸按鍵/mode:0,不持連續(xù)觸發(fā)(按下次必須松開(kāi)才能按下次);1,持連續(xù)觸發(fā)(可以直按下)/返回值:0,

10、沒(méi)有按下;1,有按下;#define TPAD_GATE_VAL 100 /觸摸的門(mén)限值,也就是必須于tpad_default_val+TPAD_GATE_VAL,才認(rèn)為是有效觸摸.u8 TPAD_Scan(u8 mode)static u8 keyen0; /0,可以開(kāi)始檢測(cè);0,還不能開(kāi)始檢測(cè)u8 res0;u8 sample3; /默認(rèn)采樣次數(shù)為3次u16 rval;if(mode)sample6; /持連按的時(shí)候,設(shè)置采樣次數(shù)為6次keyen0; /持連按rvalTPAD_Get_MaxVal(sample);if(rval(tpad_default_valTPAD_GATE_VAL)/于tpad_default_val+TPAD_GATE_VAL,有效if(keyen0)res1; /keyen=0,有效/printf(r:%drn,rval);keyen3; /少要再過(guò)3次之后才能按鍵有效if(keyen)keyen-;第七步,主函數(shù)u8 t0; delay_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/設(shè)置中

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論