|
本帖最后由 ll13536121668 于 2017-12-19 15:58 編輯
現(xiàn)在的是按一次打開LED燈、再按一次關(guān)LED燈 改點(diǎn)動(dòng)方式 鍵按下,led燈亮,松開,led燈關(guān)。 、各位師傅請(qǐng)幫小弟看看程序還須增加什么語句能實(shí)現(xiàn)點(diǎn)動(dòng)方式開關(guān)LED燈勞煩大家謝謝
單片機(jī)源程序:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit key1=P1^3; //按鍵1定義
- sbit key2=P1^2; //按鍵2定義
- sbit key3=P1^1; //按鍵3定義
- sbit key4=P1^0; //按鍵4定義
- sbit led1=P3^6; //led1端口
- sbit led2=P3^5; //led2端口
- sbit led3=P3^4; //led3端口
- sbit led4=P3^3; //led4端口
- /********按鍵掃描程序*************/
- void key_scan()
- {
- static bit key1_sign,key2_sign,key3_sign,key4_sign;//靜態(tài)位變量按鍵自鎖標(biāo)志
- static uint count1,count2,count3,count4;//靜態(tài)計(jì)數(shù)變量
-
- if(key1==0) //檢測按鍵1按下
- {
- if(key1_sign==0)
- {
- count1++; //消抖計(jì)數(shù)1自+1
- if(count1>=1000) //按主循環(huán)周期100~2000調(diào)整
- {
- key1_sign=1; //按鍵1自鎖標(biāo)志置1
- led1=~led1; //led1取反
- }
- }
- }
- else //按鍵1抬起
- {
- key1_sign=0; //按鍵1自鎖標(biāo)志清0
- count1=0; //消抖計(jì)數(shù)1清0
- }
- if(key2==0) //檢測按鍵1按下
- {
- if(key2_sign==0)
- {
- count2++; //消抖計(jì)數(shù)2自+1
- if(count2>=1000) //按主循環(huán)周期100~2000調(diào)整
- {
- key2_sign=1; //按鍵2自鎖標(biāo)志置1
- led2=~led2; //led2取反
- }
- }
- }
- else //按鍵2抬起
- {
- key2_sign=0; //按鍵2自鎖標(biāo)志清0
- count2=0; //消抖計(jì)數(shù)2清0
- }
- if(key3==0) //檢測按鍵1按下
- {
- if(key3_sign==0)
- {
- count3++; //消抖計(jì)數(shù)1自+1
- if(count3>=1000) //按主循環(huán)周期100~2000調(diào)整
- {
- key3_sign=1; //按鍵3自鎖標(biāo)志置1
- led3=~led3; //led3取反
- }
- }
- }
- else //按鍵3抬起
- {
- key3_sign=0; //按鍵3自鎖標(biāo)志清0
- count3=0; //消抖計(jì)數(shù)3清0
- }
- if(key4==0) //檢測按鍵1按下
- {
- if(key4_sign==0)
- {
- count4++; //消抖計(jì)數(shù)4自+1
- if(count4>=1000) //按主循環(huán)周期100~2000調(diào)整
- {
- key4_sign=1; //按鍵4自鎖標(biāo)志置1
- led4=~led4; //led4取反
- }
- }
- }
- else //按鍵4抬起
- {
- key4_sign=0; //按鍵4自鎖標(biāo)志清0
- count4=0; //消抖計(jì)數(shù)4清0
- }
- }
- /************主程序************/
- void main()
- {
- while(1)
- {
- key_scan(); //按鍵掃描程序
- }
- }
復(fù)制代碼
|
|