|
本帖最后由 ll13536121668 于 2017-12-19 15:58 編輯
現在的是按一次打開LED燈、再按一次關LED燈 改點動方式 鍵按下,led燈亮,松開,led燈關。 、各位師傅請幫小弟看看程序還須增加什么語句能實現點動方式開關LED燈勞煩大家謝謝
單片機源程序:
- #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;//靜態位變量按鍵自鎖標志
- static uint count1,count2,count3,count4;//靜態計數變量
-
- if(key1==0) //檢測按鍵1按下
- {
- if(key1_sign==0)
- {
- count1++; //消抖計數1自+1
- if(count1>=1000) //按主循環周期100~2000調整
- {
- key1_sign=1; //按鍵1自鎖標志置1
- led1=~led1; //led1取反
- }
- }
- }
- else //按鍵1抬起
- {
- key1_sign=0; //按鍵1自鎖標志清0
- count1=0; //消抖計數1清0
- }
- if(key2==0) //檢測按鍵1按下
- {
- if(key2_sign==0)
- {
- count2++; //消抖計數2自+1
- if(count2>=1000) //按主循環周期100~2000調整
- {
- key2_sign=1; //按鍵2自鎖標志置1
- led2=~led2; //led2取反
- }
- }
- }
- else //按鍵2抬起
- {
- key2_sign=0; //按鍵2自鎖標志清0
- count2=0; //消抖計數2清0
- }
- if(key3==0) //檢測按鍵1按下
- {
- if(key3_sign==0)
- {
- count3++; //消抖計數1自+1
- if(count3>=1000) //按主循環周期100~2000調整
- {
- key3_sign=1; //按鍵3自鎖標志置1
- led3=~led3; //led3取反
- }
- }
- }
- else //按鍵3抬起
- {
- key3_sign=0; //按鍵3自鎖標志清0
- count3=0; //消抖計數3清0
- }
- if(key4==0) //檢測按鍵1按下
- {
- if(key4_sign==0)
- {
- count4++; //消抖計數4自+1
- if(count4>=1000) //按主循環周期100~2000調整
- {
- key4_sign=1; //按鍵4自鎖標志置1
- led4=~led4; //led4取反
- }
- }
- }
- else //按鍵4抬起
- {
- key4_sign=0; //按鍵4自鎖標志清0
- count4=0; //消抖計數4清0
- }
- }
- /************主程序************/
- void main()
- {
- while(1)
- {
- key_scan(); //按鍵掃描程序
- }
- }
復制代碼
|
|