『壹』 單片機一個按鍵控制一個程序
你把幾種方式寫成幾個子程序,然後主程序調用按鍵檢測,根據檢測到的鍵值調用對應的子函數即可
『貳』 狀態機:用51單片機實現時鍾、加法的實現。用keil軟體,不能用delay。
51單片機在編程時需要用定時或者延時,一般盡量不要用delay延時函數,可以用定時器中斷實現定時和延時,長延時可以用定時器計數。
『叄』 AVR 單片機C語言怎樣實現按鍵按一下led燈閃爍 再按一下led燈滅如此反復循環 led接PC0腳 按鍵接PB0腳 (用
用狀態機寫:
函數1:LED閃爍
main()
{
while(1)
{
if(KEY)
State = ~State;
if(State)
LED閃爍
else
LED熄滅
}
}
『肆』 單片機使用狀態機無延時按鍵消抖是怎樣的原理
狀態機,自動化專業一般比較願意吹噓這種花架子。
它是定時(比如20ms)檢測一遍各個變數,得到的數據,就稱為一個狀態。
隔一會,檢測一遍,得到一個狀態。
再隔一會,再檢測一遍,再得到一個狀態。
。。。
每次檢測後,對前後的狀態進行比較,由其不同的變化,執行相應的程序。
其實,這就是一個巡邏哨,很有可能錯過有用的信息。
這種方法,並不如直接掃描法更直接,更加穩定可靠。
『伍』 學習51單片機 狀態機程序,按鍵控制led燈,按下之後一直亮著,不反轉
原為:
if(st==2)
{
P1=~P1;
st=3;
}
return;
改為:
if(st==2)
{
P1=~P1;
st=3;
return;
}
『陸』 單片機返回鍵值好還是鍵號好
單片機返回鍵值好。在所有智能產品中,按鍵是最為常用的,所以按鍵程序的好壞很重要。在學校里學的按鍵檢測方法是不適用,很浪費時間,減少了CPU的效率。在人們的不斷努力下,基本上編程都是用狀態轉移思想,用狀態機思想編的按鍵檢測程序也很多。
『柒』 用單片機C語言怎麼寫用狀態機實現按鍵控制LED燈閃爍這個程序
#include<STC12C52.H>
#defineucharunsignedchar
#defineuintunsignedint
sbitkey=P1^2;
sbitp1_6=P1^6;
voiddelay(uchardelay_time)
{
ucharn;
uintm;
for(n=0;n<delay_time;n++)
{
for(m=0;m<10000;m++);
}
}
voidkeyscan()
{
if(key==0)
{
delay(5);
if(key==0)
while(!key)
{
p1_6=0;
delay(20);
p1_6=1;
delay(20);
}
}
}
voidmain()
{
WDT_CONTR=0x3C;
while(1)
{
keyscan();
WDT_CONTR=0x3C;
}
}
這個功能可以用中斷來實現,當然,現在我寫的這個也可以實現。由於你用的晶振頻率不知道,所以你自己修改一下延時時間,再把頭文件改一下,就可以了,我試驗了,可以實現改功能。
『捌』 用單片機C語言怎麼寫用狀態機實現按鍵控制LED燈閃爍這個程序
按鍵控制LED閃爍,狀態機就是檢測按鍵,如果沒有按下就不閃爍,如果按下就開始閃爍。樓主提的問題就是一個問題。你到底是想問狀態機還是想問程序?
「用單片機C語言怎麼寫用狀態機,實現按鍵控制LED燈閃爍,這個程序」
「用單片機C語言怎麼寫,用狀態機實現,按鍵控制LED燈閃爍這個程序」
???
『玖』 單片機狀態機按鍵為什麼還會抖動
1、狀態機是放在定時器里的?
2、中斷時間加長
『拾』 狀態機:用51單片機實現時鍾、加法的實現。用keil軟體,不能用delay。
不讓用delay那就用定時器唄,12M晶振的時候定時器最大可以記65535us,你設50000us,也就是50ms,然後每次在定時中斷里對一個全局變數加一。加到20時就是1秒了,然後置位一個全局秒標志位,把加一寄存器置0,進去下一個計時周期。然後主程序里檢測到標志位置位的時候,把它置0,然後進行加1秒運算