❶ 51單片機怎麼用c語言寫一個按鈕控制一個led的閃爍,按一下開始閃爍,再按就滅掉
bit flash;//閃爍標志位
sbit led=P0^0;
sbit P01=P0^1;
sbit P02=P0^2;
void main()
{
P01=P02=0;
flash=0;
led=0;
while(1)
{
scankey();
ledflash();
}
}
void scankey()//鍵盤掃描
{
P01=1;//行線給1
if(P02)//如果P02也是1則說明接通
{
delay(10);//去抖動10MS
if(P02)//再次確定按鍵按下
{
while(P02){flash=flash}//按住按鍵的動作
flash=~flash;//按鍵按下後執行動作
}
}
}
void ledflash()
{
if(flash)
{
led=1;//點亮
delay(100);//延時100MS
led=0;//熄滅
}
else led=0;
}
void delay(unsigned int i)
{自己根據單片機頻率寫個1MS帶形參的演示程序}
這個程序是現寫的。。應該能執行,有些細節沒有寫,自己修改下,只是個大框而已(比如函數聲明,定義埠什麼的)
❷ 為什麼這個程序可以控制單片機點亮的led等一閃一閃,而且這個程序裡面for循環後面可以加分號
兩個 for,構成了「雙重循環」。
循環體中,沒有任何語句,這就是「空循環」。
這是幹嘛?
這就是「浪費」CPU 的時間。目的,就是延時。
好讓你看到:燈亮、燈滅。
如果沒有延時,你將看到:「燈一直亮」,只是稍稍暗一些。