《51單片機(jī)流水燈中斷》由會員分享,可在線閱讀,更多相關(guān)《51單片機(jī)流水燈中斷(2頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、〃51單片機(jī)控制8個LED燈,左右循環(huán)移動,當(dāng)外部中斷0引腳的按鍵,第一次按下時, 停在當(dāng)前位置;第二次按下時,繼續(xù)向下執(zhí)行
〃*:$:*:$:****:$:*****:$:**********:$:**********:$:*:$:**********:$:**********:$:*****:$:****:$:*:$:*:$:*
***************左****************左********
〃注釋:當(dāng)主函數(shù)中在執(zhí)行左右流水點亮LED燈的時候,按鍵按下(這是第一次按下,即奇 數(shù)次),CPU暫時
//中斷當(dāng)前點亮燈的工作,轉(zhuǎn)去處理中斷程序(c=l),處理完后,再返
2、回原來中斷的地方繼 續(xù)原來的工作,
//因為這時候C為1, while(c);為真,為死循環(huán)狀態(tài),即是LED亮的狀態(tài)停在當(dāng)前位置:當(dāng) 按鍵按下(這是第二次按下,即偶數(shù)次)
//CPU中斷當(dāng)前狀態(tài),轉(zhuǎn)去處理中斷程序(c=0),處理完后,再返回原來中斷的地方繼續(xù)原 來的工作,
〃這時候C為0, while(c);為假,則程序繼續(xù)向下執(zhí)行。
〃************左**************左*******************左**************左**************
#iiiclude
#inc lude//控
3、制左右移的頭文件
void delay(iiit)y/聲明延時函數(shù)
unsigned char i=O,a=O.b=O,c=O;//a為判斷按鍵按下時奇數(shù)次還是偶數(shù)次 void main()
P2=0xfe;
ITO=O;Z/低電平有效
EX0=i;//開外部中斷0
EA=1;//開總中斷
while(l)
for(i=0;i<7;i-H-)// 左循環(huán)
(
b=l;
while(c);//C為0時,順序向下執(zhí)行,為1時停在當(dāng)前狀態(tài), P2=_crol_(P2,l);
delay(500);
)
for(i=0;i< 7 ;i++)//右循環(huán)
(
b=l;
w
4、hile(c);//C為0時,順序向下執(zhí)行,為1時停在當(dāng)前狀態(tài), P2=_cior_(P2,l);
delay(500);
)
)
wlule(l);//等待中斷
}
void intO_iiit(void) intenupt 0 〃中斷服務(wù)函數(shù)
{
delay(40);/Z延時一段時間,消除抖動
iRb==l)
b=0;
a+=l;//按鍵為奇數(shù)次時,停在當(dāng)前的狀態(tài):偶數(shù)次時,接著原來的狀態(tài)繼續(xù)往下 執(zhí)行
C=l;
else
c=0;
}
}
void delay(iiit n)〃延時函數(shù)
{
unsigned hit i,j;
for(j=0j<50j++);