|
現在的是按一次跳一個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(); //按鍵掃描程序
}
}
|
評分
-
查看全部評分
|