|
|
1黑幣
新人,黑幣有限,見諒!
最近不能出門閑的發(fā)慌學(xué)習(xí)51單片機折騰些小玩意,望高手們多海涵
實現(xiàn)目標(biāo):兩個開關(guān)(自鎖型,類似電燈開關(guān)性質(zhì))控制多顆led燈,當(dāng)開關(guān)1打開led每間隔2秒多亮一顆 ,亮起后不熄滅 直到 開關(guān)1關(guān)閉或打開2后熄滅 然后一直檢測兩個開關(guān)狀態(tài) 檢測到開關(guān)2關(guān)閉后從頭開始執(zhí)行
整好代碼后仿真亂跑 有時不亮 有時像流水燈一樣跑 多指教
暫時搞三顆led 順暢后再加
代碼如下
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit x1=P1^2;
sbit x3=P1^4;
sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;
void delay(u16 i)
{
while(i--);
}
void anjian1()
{
if(x1==0)//判斷按鍵是否被按下
{
delay(1000);//消抖,延時1秒
if(x1==0)//消抖之后再次判斷是否被按下
led1=~led1;//led1開啟,led燈默認高電'平
while(!x1);//判斷是否斷開
delay(3000);//消抖,延時3秒
if(x1|==0)//消抖之后再次判斷是否被按下
led2=~led2;//led2開啟,led燈默認高電'平
while(!x1);//判斷是否斷開
delay(5000);//消抖,延時5秒
if(x1==0)//消抖之后再次判斷是否被按下
led3=~led3;//led3開啟,led燈默認高電'平
while(!x1);//判斷是否斷開
}
}
void anjian2()
{
if(x3==0)//判斷消防開關(guān)是否被觸發(fā)
{
delay(100);//消抖,延時10毫秒
if(x3==0)//消抖之后再次判斷消防開關(guān)是否被觸發(fā)
x1==1;//x1拉高,關(guān)閉所有l(wèi)ed
while(!x3);//判斷是否斷開
}
}
void main()
{
while(1)
{
anjian1();
anjian2();
}
}
|
|