『壹』 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;
}
}
}
}