‘壹’ 51单片机按键控制按下K1四个led灯循环亮,再按一下全灭,c程序怎么写
在四个灯循环点亮的状态下,每点亮一个灯需要延时,如果调用延时子程序,按键就显示不灵敏了,所以,采用定时器中断的方式控制延时,就不影响按键了。
#include<reg51.h>
#include<intrins.h>
仿真图效果。
‘贰’ 单片机编程题:开关控制四盏灯
昨天就看到有人问了,不会还是你吧,呵呵,你要说清楚啊,想怎么控制,一起亮,一起灭?一个按键开,一个按键关?说具体点,要不怎么帮你
呵呵,今天晚上上线晚了,明天上班抽时间给你写吧,一会儿就搞定了,要不要留个邮箱啊,电路图也给你吧
还有,一定要按这个顺序吗?如果我乱按会出现什么情况,直接无效??
算了,直接贴上来吧
#include"reg52.h"
#defineuintunsignedint
#defineucharunsignedchar
sbitLED_R=P2^0;
sbitLED_Y=P2^1;
sbitLED_B=P2^2;
sbitLED_G=P2^3;
sbitKey1=P1^0;
sbitKey2=P1^1;
ucharKey1_Times=0,Key2_Times=0,Key_Flag=0;
voidDelay(uintx)
{
uinta,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
voidKeyScan()
{
if(Key1==0)
{
Delay(10);
if(Key1==0)
{
Key_Flag=1;
Key1_Times++;
if(Key1_Times==3)
Key1_Times=2;
}
while(!Key1);
}
if(Key2==0)
{
Delay(10);
if(Key2==0)
{
Key_Flag=1;
Key2_Times++;
if(Key2_Times==3)
Key2_Times=2;
}
while(!Key2);
}
}
voidmain()
{
P2=0xff;
LED_R=0;
while(1)
{
KeyScan();
if(Key_Flag==1)
{
Key_Flag=0;
if((Key1_Times==1)&&(Key2_Times==0))
{
LED_R=1;
LED_Y=0;
}
elseif((Key1_Times==1)&&(Key2_Times==1))
{
LED_R=1;
LED_Y=1;
LED_B=0;
}
elseif((Key1_Times==1)&&(Key2_Times==2))
{
Key2_Times--;
}
elseif((Key1_Times==2)&&(Key2_Times==0))
{
Key1_Times--;
}
elseif((Key1_Times==2)&&(Key2_Times==1))
{
LED_R=1;
LED_Y=1;
LED_B=1;
LED_G=0;
}
elseif((Key1_Times==2)&&(Key2_Times==2))
{
LED_Y=1;
LED_B=1;
LED_G=1;
LED_R=0;
Key1_Times=0;
Key2_Times=0;
}
}
}
}