/*此為自已寫的, 功能:實現按一次按鍵燈亮,再按一次燈滅 歡迎仿問我的空間http://378621667.qzone.qq.com里頭有好多單片機C語言代碼 2011年10月24于廈門軟件園二期 */ #include <pic.h> //此為pic的代碼 #define uint unsigned int #define uchar unsigned char void delay(uint x) //延時函數 { uint a,b; for(a=x;a>0;a--) for(b=110;b>0;b--); } void main() //主函數 { static bit temp; //定義一個靜態的位變量,注意得放在第一行,否則會提示一堆的錯誤 TRISB=0;PORTB=0xff; TRISD=0;PORTD=0x00; temp=RD0; //把RD0 LED燈的當前狀態賦給變量temp while(1) { if(RB0==0) //判斷按鍵是否有被按下,有則為0 { delay(10); //去抖 if(RB0==0) //去抖完得再判斷一次 { temp=!temp; //每按一次,位變量temp取反一次 while(!RB0) //松手檢測,按下時為0取反為1,一直循環直至松手為1取反后為0退出循環 RD0=temp; //把取反后的temp值賦給RD0即LED燈 } } } } //-----------------------下面為51的代碼---------------------------------------------------- /* #include <reg52.h> //此為51單片機的代碼 #define uint unsigned int #define uchar unsigned char void delay(uint x) //延時函數 { uint a,b; for(a=x;a>0;a--) for(b=110;b>0;b--); } void main() //主函數 { static bit temp; //定義一個靜態的位變量,注意得放在第一行,否則會提示一堆的錯誤 sbit RD0=P1^1; //定義LED燈為RD0 sbit RB0=p3^2; //定義INT0為RB0(按鍵) temp=RD0; //把RD0 LED燈的當前狀態賦給變量temp while(1) { if(RB0==0) //判斷按鍵是否有被按下,有則為0 { delay(10); //去抖 if(RB0==0) //去抖完得再判斷一次 { temp=!temp; //每按一次,位變量temp取反一次 while(!RB0) //松手檢測,按下時為0取反為1,一直循環直至松手為1取反后為0退出循環 RD0=temp; //把取反后的temp值賦給RD0即LED燈 } } } } */