|
本帖最后由 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(); //按键扫描程序
- }
- }
复制代码
|
|