|
现在的是按一次跳一个LED灯、但是在同一个按键上按第二次不能关LED灯、各位师傅请帮小弟看看程序还须增加什么语句能实现关LED灯劳烦大家谢谢
4个LED亮灭程序实测视频
kay1按下.LED1亮.
kay2按下.LED2亮.LED1灭
kay3按下.LED3亮.LED2灭
kay4按下.LED4亮.LED3灭
在每只键 上停留时按第二次关led灯须要什样修改才可以
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^6; //按键1定义
sbit key2=P3^5; //按键2定义
sbit key3=P3^4; //按键3定义
sbit key4=P3^3; //按键4定义
sbit led1=P1^3; //led1端口
sbit led2=P1^2; //led2端口
sbit led3=P1^1; //led3端口
sbit led4=P1^0; //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=0;led2=led3=led4=1; //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=0;led1=led3=led4=1; //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=0;led1=led2=led4=1; //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=0;led1=led2=led3=1; //led4取反
}
}
}
else //按键4抬起
{
key4_sign=0; //按键4自锁标志清0
count4=0; //消抖计数4清0
}
}
/************主程序************/
void main()
{
while(1)
{
key_scan(); //按键扫描程序
}
}
|
评分
-
查看全部评分
|