通過(guò)四個(gè)基礎(chǔ)練習(xí)學(xué)習(xí)按鍵開(kāi)關(guān)
1.第一個(gè)按鍵:按下一次,LED1亮,再次按下LED1滅
2.第二個(gè)按鍵:按下一次,LED1亮,按下第二次LED2亮..... 按下第四次LED4亮,按下第五次,LED1亮,依次往復(fù)。
3.第三個(gè)按鍵:按下所有LED滅
4.第四個(gè)按鍵:按下所有LED都亮了
四個(gè)基礎(chǔ)練習(xí)的效果動(dòng)圖
按鍵抖動(dòng)的原因和危害,軟件消抖
按鍵開(kāi)關(guān)通常為機(jī)械式開(kāi)關(guān),因?yàn)闄C(jī)械觸點(diǎn)有彈性。 在閉合和斷開(kāi)的瞬間都會(huì)伴隨彈性抖動(dòng)。 抖動(dòng)時(shí)間: 一般為5ms~10ms
按鍵的抖動(dòng)對(duì)于人類來(lái)說(shuō)是感覺(jué)不到的,但對(duì)單片機(jī)來(lái)說(shuō),是一個(gè)很“漫長(zhǎng)”的過(guò)程,因?yàn)閱纹瑱C(jī)處理的速度在“微秒”級(jí),而按鍵抖動(dòng)的時(shí)間至少在“毫秒”級(jí)
軟件消抖的方法是不斷檢測(cè)按鍵值,直到按鍵值穩(wěn)定。
實(shí)現(xiàn)方法:假設(shè)未按鍵時(shí)輸入為1,按鍵后輸入為0,抖動(dòng)時(shí)不確定。 可以做以下檢測(cè):檢測(cè)到按鍵輸入為0之后,延時(shí)5ms~10ms,再次檢測(cè),如果按鍵還為0,那么就認(rèn)為有按鍵輸入。 延時(shí)的5ms~10ms恰好避開(kāi)了抖動(dòng)期。
if(0==BUTTON1)//判斷是否有按鍵按下
{
delay(10); //延時(shí)一段時(shí)間(10ms)去除前沿抖動(dòng)
if(0==BUTTON1)//再次確認(rèn)是否有按鍵按下
{
while(0==BUTTON1);//按鍵抬起繼續(xù)往下執(zhí)行,沒(méi)有則繼續(xù)等待
LED1 = ~LED1; //按下一次,LED1亮,再次按下LED1滅
}
一個(gè)按鍵控制多個(gè)LED燈
按下一次,LED1亮,按下第二次LED2亮..... 按下第四次LED4亮,按下第五次,LED1亮,依次往復(fù)。 利用C語(yǔ)言的取模運(yùn)算符,1%4 = 1 , 2%4=2 , 3%4=3 , 4%4=0 , 5%4=1 , 6%4=2...
//定義全局變量count,a
if(0==BUTTON2)
{
delay(10);//延遲10ms
if(0==BUTTON2)
{
while(!BUTTON2);//按鍵抬起繼續(xù)往下執(zhí)行,沒(méi)有則繼續(xù)等待
count++;//每按下BUTTON2按鍵抬起時(shí),變量count加1
a = count%4;
switch(a)
{
case 1:
P0= 0xfe; //11111110 LED1亮
break;
case 2:
P0= 0xfd;//11111101 LED2亮
break;
case 3:
P0= 0xfb; //11111011 LED3亮
break;
case 0:
P0=0xf7;//11110111 LED4亮
break;
default :
P0=0xff;
break;
}
}
}
按下4個(gè)LED燈全熄滅
P0口為高電平時(shí)LED熄滅,低電平全亮
if(0==BUTTON3)
{
delay(10);
if(0==BUTTON3)
{
while(0==BUTTON3);
P0 = 0xff; //P0 = 0x00 全亮
}
}
把四個(gè)練習(xí)封裝成函數(shù)
void main()
{
while(1)
{
task1();
task2();
task3();
task4();
}
}
補(bǔ)充
#define u16 unsigned int 等效于typedef unsigned int u16;
#define u8 unsigned char 等效于typedef unsigned char u8;
為什么要這樣定義,這樣寫(xiě)非常直觀,不用擔(dān)心平臺(tái)的不同可移植性好,它的字節(jié)數(shù)一看就知道,u16是16位2個(gè)字節(jié),
-
led
+關(guān)注
關(guān)注
242文章
23306瀏覽量
661537 -
單片機(jī)
+關(guān)注
關(guān)注
6039文章
44575瀏覽量
636384 -
抖動(dòng)
+關(guān)注
關(guān)注
1文章
69瀏覽量
18881 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4338瀏覽量
62739 -
按鍵開(kāi)關(guān)
+關(guān)注
關(guān)注
2文章
36瀏覽量
10412
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論