|
/****************************************************************************
按一下燈亮,按一下燈滅
*****************************************************************************/
#include<reg52.h>
sbit S1=P1^4; //將S1位定義為P1^4,檢測(cè)獨(dú)立按鍵
sbit led0=P1^0; //將led0定義為P1.0口的LED
/************************************************************************
延時(shí)函數(shù)
***************************************************************************/
void delay(void)
{
unsigned int i;
for(i=5000;i>0;i--)
;
}
/**************************************************************************
主函數(shù)
****************************************************************************/
void main(void)
{
while(1)
{
if(S1==0) //判斷是否有鍵按下
{
delay(); //有鍵按下,延時(shí)去抖,真正應(yīng)用時(shí)要少用這種延時(shí),占用時(shí)間,用定時(shí)器延時(shí)或一個(gè)寄存器循環(huán)檢測(cè)10多次按鍵
if(S1==0)
{
if(F0==0) //用F0標(biāo)志位判斷鍵按下是否已經(jīng)處理,因剛學(xué)C語言沒多久,不知道怎么定義RAM能位尋址的寄存器,先用F0,按鍵多的話,一個(gè)F0不夠用
{
F0=1; //F0置1,表示這次按鍵按下已處理
led0=~led0; //將LED亮滅狀態(tài)取反
}
}
}
else //S1=1說明按鍵釋放
{
F0=0; //F0清零,清按鍵已處理標(biāo)志
}
}
}
上面程序漏了一個(gè)if語句,要不延時(shí)去抖沒作用,汗 |
|