資源描述:
《51單片機按鍵控制花樣燈》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、51單片機按鍵控制花樣燈時間:2012-09-1013:50:11來源:51hei作者:/*****************************************************本程序?qū)崿F(xiàn)用按鍵控制花樣燈。**當K1按下時,燈從0xfe向左跑一遍;**當K2按下時,LED燈從0x7f向右跑一遍到了0xfe右跑回到起始位置;**當K3鍵按下時,LED燈從0xfe開始作流水燈形式運行一次,然后再流回來。**當K4鍵按下時,LED燈先亮前四個,接著再轉(zhuǎn)向亮后四個。**當K5鍵按下時,結
2、束任意正在進行的程序,使LED燈全部熄滅。*******************************************************/*************************************************連接方法:P0接獨立按鍵JP5;P2接LED燈接口JP1************************************************************/#include//頭文件,函數(shù)聲明#include<
3、intrins.h>//定義按鍵所在位sbitK1=P0^0;sbitK2=P0^1;sbitK3=P0^2;sbitK4=P0^3;sbitK5=P0^4;unsignedcharled;unsignedcharj;voiddelayms(unsignedcharms)//1ms標準延時{while(ms--){for(j=0;j<110;j++);//還是無法設置比較標準的延時,如1S等;所以應該用定時器延時才最準確}}voidmain(){//P2=led;unsignedinti;whil
4、e(1){/**********************************************當K1按下時,燈從0xfe向左跑一遍;**********************************************/if(K1==0)delayms(10);//消除鍵盤抖動if(K1==0){led=0xfe;for(i=0;i<7;i++)//i可以去8的倍數(shù),表示本電路執(zhí)行多少次{//led=0x7f;//P端口的初定義要在循環(huán)外面,不然會使效果錯亂P2=led;//由于這
5、里已經(jīng)初設一個燈,所以for里面要加上這一個delayms(100);//起初這里設置500MS,使按鍵每按一下燈彩走一個,不能達到要求。led=_crol_(led,1);P2=led;delayms(100);}while(!K1);//這里強調(diào)松開就沒再次執(zhí)行程序P2=led;//說明執(zhí)行完上面的程序的最后狀態(tài)}//P2=led;//如果把本行放在這里,雖然在開頭中沒有說明程序燒寫好之后就先顯示一個燈,但由于本行在if外面,所有最后還是會顯示/************************
6、************************************當K2按下時,LED燈從0x7f向右跑一遍到了0xfe右跑回到起始位置************************************************************/if(K2==0)delayms(10);if(K2==0){led=0x7f;for(i=0;i<7;i++){P2=led;delayms(100);led=_cror_(led,1);P2=led;delayms(100);}whi
7、le(!K1);P2=led;delayms(100);for(i=0;i<7;i++){led=_crol_(led,1);P2=led;delayms(100);//跑回去怎么就那么快呀?}//此時led=0x7f}/******************************************************當K3鍵按下時,LED燈從0xfe開始作流水燈形式運行一次,然后再流回來。*************************************************
8、*/if(K3==0)delayms(10);//消除抖動if(K3==0){led=0xfe;delayms(200);for(i=0;i<7;i++){P2=led;delayms(200);led=led<<1;//備注led=_crol_(led,1)等于led<<1
9、
10、led>>7;P2=led;delayms(200);if(led==0x00)break;//這里一定要有個break,跳出循環(huán),然后別忘了此時的狀態(tài)是00,而不是7f}while(!K1);led=0x