⑴ 單片機如何一個按鈕實現控制4個led燈的循環閃爍
0 0
1 1
1 0
0 1
是這樣的四種狀態嗎? 這樣很簡單的,, 主要還是檢測按鍵, 按鍵按下 你把一個變數+1, 比如
if(Key == 0)
{
delay(); //延時10ms,延時函數 自己寫吧
if(Key == 0)
{
num++;
if(num >= 4)
num = 0;
while(!Key);
}
}
然後根據num 的值 對Led進行狀態刷新就好了。
switch(num)
{
case 0: Led1 = 1; Led2 = 0; break;
case 1: Led1 = 0; Led2 = 1; break;
case 2: Led1 = 0; Led2 = 0; break;
case 3: Led1 = 1; Led2 = 1; break;
default : break;
}
就可以了,,,順序的話 可以按照具體要求更換下位置就可以了。
⑵ 51單片機按鍵控制按下K1四個led燈循環亮,再按一下全滅,c程序怎麼寫
在四個燈循環點亮的狀態下,每點亮一個燈需要延時,如果調用延時子程序,按鍵就顯示不靈敏了,所以,採用定時器中斷的方式控制延時,就不影響按鍵了。
#include<reg51.h>
#include<intrins.h>
模擬圖效果。
⑶ 51單片機:0faa為啥能控制四個燈啊
應該是0xaa吧,根據二進制碼,0xaa=10101010,一般高電平的時候二極體亮,有四個高電平所以四個燈亮,具體要根據電路分析,希望可以幫到你
⑷ 急需單片機高手幫忙用C語言寫一個單片機4個燈輪流閃亮的源程序。 詳細內容看補充。
/*對於個單片機的初學者,我希望用最直觀的方式來達到你要的要求,程序每一句我已經寫好備注,希望對你有幫助*/
#include<reg51.h> //使用51功能頭文件
sbit L1=P0^0; //L1對應P0.0,表示第一盞燈
sbit L2=P0^1; //L1對應P0.1,表示第二盞燈
sbit L3=P0^2; //L1對應P0.2,表示第三盞燈
sbit L4=P0^3; //L1對應P0.3,表示第四盞燈
void delay(unsigned int i) //延遲子程序,注意這里的unsigned int i,這里相當於限定了調用時候變數的類型
{
unsigned char j; //局部變數定義
while(i--) //循環i次,主程序main調用時候,i為100,這數值你可隨便該,但小於65355
for(j = 200; j > 0; j--) ; //這步的意思是空操作200次,也就是暫用CPU200次的工作時間
}
void main(void) //主函數,這里的viod是無類型,意思是沒有給這函數指定數據類型
{
P0=0x00; //將P0口初始化位高電平,如果沒有這句,初始化為低電平,這里可根據需要選擇
L1=1; //第一盞燈亮
delay(100); //調用延時子程序
L2=1; //第二盞燈亮
delay(100); //調用延時子程序
L3=1; //第三盞燈亮
delay(100); //調用延時子程序
L4=1; //第四盞燈亮
delay(100); //調用延時子程序
while(1); //這里我用了個死循環,目的程序只運行一次,如果需要自動重新運行,可以把這句刪掉
}
純手工書寫,並模擬調試過,記得加分喲~
⑸ 誰知道用單片機如何點下K1、K2、K3、K4來控制四盞燈 要求點下時不亮鬆手才亮。 要求用SWITCH語句。急用!
main()
{
unsigned char i;
P1 &= 0xC3;//所有的燈亮
while()
{
while(P3&0x3C==0x3C);//同時檢測4個按鍵
i = P3 & 0x3C;//有按鍵按下,讀取鍵值
delay();//按鍵去抖延時10 - 50ms,自己定
if(P3 & 0x3C == i)//按鍵確認
{
switch(i)
{
case 0x38:P1^0 = 1;while(!P3^2);P1^0 = 0;break;//按鍵K1按下燈滅,等待按鍵松開D1亮
case 0x34:P1^1 = 1;while(!P3^3);P1^1 = 0;break;//k2
case 0x2C:P1^2 = 1;while(!P3^4);P1^2 = 0;break;//K3
case 0x1C:P1^3 = 1;while(!P3^5);P1^3 = 0;//K4
}
}
}
}
⑹ 單片機編程當k1按下時四個燈亮,松開則四個燈不亮
單片機io掃描按鍵電平,控制四個燈的io電平高低變化即可
⑺ 51單片機四燈閃爍c程序
#include<reg51.h>
sfr p2=0xa0;
sfr p1=0x90;
sbit p1_0=0x90;
sbit p1_1=0x91;
int kk[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; DELAY();
int a,b;
int main()
{
if(p1_0==0)
{
while(1)
{
b=1;
for(a=0;a<10;a++)
{p2=kk[a];
DELAY();
}
if(p1_1==0)
{b=0; break;}
if(p1_1==0)
{
while(1)
{b=0;
for(a=9;a>=0;a--)
{p2=kk[a];
DELAY();
} } }
if(p1_0==0)
{b=1;break;}
}
}
}
DELAY()
{
unsigned char i,j,p;
for(i=10;i>0;i--)
for(j=100;j>0;j--)
{if(p1_1==0)
{b=0;a=10;break;}
if(p1_0==0)
{b=1;a=-1;break;}
for(p=200;p>0;p--)
;
}
}
你看這樣對么。
⑻ 單片機編程怎麼讓四個燈,每個燈延遲0.3秒亮的編程
當然可以了,加入延時函數即可實現,或者使用定時器實現。
⑼ 單片機編程題:開關控制四盞燈
昨天就看到有人問了,不會還是你吧,呵呵,你要說清楚啊,想怎麼控制,一起亮,一起滅?一個按鍵開,一個按鍵關?說具體點,要不怎麼幫你
呵呵,今天晚上上線晚了,明天上班抽時間給你寫吧,一會兒就搞定了,要不要留個郵箱啊,電路圖也給你吧
還有,一定要按這個順序嗎?如果我亂按會出現什麼情況,直接無效??
算了,直接貼上來吧
#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;
}
}
}
}
⑽ 內容是 用單片機控制四個燈,按照一定規律閃亮,閃亮方式能夠通過按鍵控制轉換, 這是c語言
template<classT>
voidSelectSort(Ta[],intlen)
{
Ttemp;
intnIndex=0;
//每次循環只進行一次交換最多進行len-1次循環,因此總體上,比冒泡進行交換的次數少
for(inti=0;i<len-1;i++)
{
//第i次排序時,已經進行了i次大循環,因此已經排好了i個元素
//已排好序的元素0,,...,i-2,i-1
//待排元素為i,i+1,...,len-1
nIndex=i;
for(intj=i+1;j<len;j++)
{
if(a[j]<a[nIndex])
{
nIndex=j;
}
}
//交換
if(nIndex!=i)
{
temp=a[i];
a[i]=a[nIndex];
a[nIndex]=temp;
}
}
}