|
51單片機(jī)單按鍵控制LED發(fā)光的程序,就是用一個與P3_0引腳連接的按鍵控制P2_0相連LED的亮和滅兩種狀態(tài)。按一次按鍵燈亮,再按一次按鍵燈滅。再按一次又亮,再按一次燈又滅
#include "AT89X51.H" void main(void) // 主程序 { bit mark; //定義位變量 unsigned int n; //定義循環(huán)變量 while(1) //無限循環(huán) { if (P3_0==0) //如果按鍵按下 { for(n=0;n<1000;n++); //延時一段時間,等待按鍵完全按下 mark=~mark; //翻轉(zhuǎn)標(biāo)記 while(!P3_0) //等待按鍵彈起 for(n=0;n<1000;n++); //等待按鍵完全彈起 } P2_0=mark; //點亮或是關(guān)滅LED燈 }} while(1) //無限循環(huán) { if(ldelay==1 ) //若是時間溢出標(biāo)記為1,處理如下語句 { ldelay=0; //清除時間溢出標(biāo)記 P2=ledp[ledi]; //讀出一個表格值送到P2口 ledi++; //指向下一個表格值 if(ledi==4) { ledi=0; //到了最后一個燈就換到第一個 sp--; //速度級別減1 if (sp==3) //如果速度級別減到3 sp=23; // 恢復(fù)速度最慢的級別23 }}}} timer0() interrupt 1 //定時器0中斷服務(wù)程序 { static unsigned int kk; //定義靜態(tài)局部變量 kk++; //每次中斷服務(wù),kk加1 if(kk==(100*sp)) //最少次數(shù)為100*sp=300,時間為300次*0.25ms //最多次數(shù)為2300次,時間為2300次*0.25ms //如果kk=(100*sp),執(zhí)行如下語句 { kk=0; ldelay=1; //當(dāng)kk值與100*sp值相等,將ldelay標(biāo)記置1,則處理燈亮與顯示速度 } }
|