標(biāo)題:
單片機10mS主循環(huán),按鍵和蜂鳴器如何處理?
[打印本頁]
作者:
liucan2020
時間:
2022-7-30 15:04
標(biāo)題:
單片機10mS主循環(huán),按鍵和蜂鳴器如何處理?
請問大佬,如果主循環(huán)以10mS的基礎(chǔ)時鐘運行,那么在這種情況下,1:按鍵使用中斷觸發(fā)是如何消抖的? 2:蜂鳴器是如何連續(xù)發(fā)聲1秒的?是否有好的示例可以參考?
作者:
xianfajushi
時間:
2022-8-1 08:22
按鍵使用中斷觸發(fā)是硬件消抖,有源蜂鳴器是計時1秒執(zhí)行
作者:
yzwzfyz
時間:
2022-8-1 09:42
1:按鍵使用中斷觸發(fā)是如何消抖的?
方案很多,與【主循環(huán)以10mS的基礎(chǔ)時鐘運行】沒有矛盾。
舉例:每N毫秒(例5ms,你用10ms也行)檢測一次按鍵,M次(6次,你用3次也行)檢測得到的開關(guān)狀態(tài)一致,就判斷開關(guān)穩(wěn)定了。
2:蜂鳴器是如何連續(xù)發(fā)聲1秒的?
它的開關(guān)變化,只是瞬間的事,只與你需要對它作業(yè)的瞬間操作即可,更何況音響多個少個10ms,人是聽不出來的。
作者:
robinsonlin
時間:
2022-8-1 10:07
節(jié)拍計數(shù),符合條件停止。
KeySign ++;
if(KeySign>=2)
{
KeySign = 0;
//執(zhí)行案件操作
}
Buz = 1;
BuzSign ++;
if(BuzSign>=100)
{
BuzSign = 0;
Buz = 0;
}
作者:
lkc8210
時間:
2022-8-1 10:11
先假設(shè)你用C51
void main()
{
while(1)
{
if(Flag10ms)
{
static unit8_t Delay_XD = 0;
static unit8_t Delay_Beep = 0;
Flag10ms = 0;
if(!Key)//有鍵按下,低電平
{
if(Delay_XD<0xFF)Delay_XD++;
if(Delay_XD==2)
{
Delay_Beep = 100;
}
}else{
Delay_XD = 0;
}
if(Delay_Beep)
{
Beep = 0;//低電平啟動蜂鳴器輸出
Delay_Beep--;
}else
{
Beep = 1;//高電平停止蜂鳴器輸出
}
}
}
}
復(fù)制代碼
作者:
大漠落日
時間:
2022-8-4 08:51
定時器中斷定時,產(chǎn)生一個時間標(biāo)志,在主程序中判斷調(diào)用
作者:
杰西Jesse
時間:
2022-8-24 16:32
按鍵消抖可以用CPU去執(zhí)行別的代碼在回頭執(zhí)行按鍵,例如1ms蜂鳴器
作者:
is03zong
時間:
2022-8-26 00:09
可以多次檢測,例如20ms內(nèi)檢測若干次,若結(jié)果穩(wěn)定了才處理。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1