欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機兩個開關控制多顆led,一個開關打開led燈逐個亮 另一開關打開后全滅
[打印本頁]
作者:
xcled
時間:
2020-2-19 22:29
標題:
51單片機兩個開關控制多顆led,一個開關打開led燈逐個亮 另一開關打開后全滅
新人,黑幣有限,見諒!
最近不能出門閑的發慌學習51單片機折騰些小玩意,望高手們多海涵
實現目標:兩個開關
(自鎖型,類似電燈開關性質)
控制多顆led燈,當開關1打開led每間隔2秒多亮一顆 ,亮起后不熄滅 直到 開關1關閉或打開2后熄滅 然后一直檢測兩個開關狀態 檢測到開關2關閉后從頭開始執行
整好代碼后仿真亂跑 有時不亮 有時像流水燈一樣跑 多指教
暫時搞三顆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)//判斷消防開關是否被觸發
{
delay(100);//消抖,延時10毫秒
if(x3==0)//消抖之后再次判斷消防開關是否被觸發
x1==1;//x1拉高,關閉所有led
while(!x3);//判斷是否斷開
}
}
void main()
{
while(1)
{
anjian1();
anjian2();
}
}
作者:
笨笨兔
時間:
2020-2-20 11:34
整個程序結構有問題.
作者:
17727219780
時間:
2020-2-20 12:03
你消抖后的if沒有大括號吧
作者:
taizi1988
時間:
2020-2-20 14:21
程序結構需要優化一下,例如:if(x1==0)最好寫上{ led1=~led1;}
作者:
haierzaifei11
時間:
2020-2-20 16:03
程序結構需優化
作者:
tyrl800
時間:
2020-2-20 17:05
自鎖型開關不需要去抖;while(!x)死循環了
作者:
。。jj
時間:
2020-2-20 19:17
樓主的延時函數的時間注釋有問題,delay(1000)并不是一秒啊。關于程序的話,樓主的程序的思路并不正確,如果是想讓開關1打開或者開關2閉合時全滅,可以在開關1程序后面修改,而不是在開關2的程序中讓x1=1,開關2閉合全滅的話可以通過中斷來實現。
作者:
xcled
時間:
2020-2-20 21:55
。。jj 發表于 2020-2-20 19:17
樓主的延時函數的時間注釋有問題,delay(1000)并不是一秒啊。關于程序的話,樓主的程序的思路并不正確, ...
先處于小白級,中斷啥的還沒整會呢 剛玩一段時間 N年前學的基本都還給師傅
作者:
hantu
時間:
2020-2-20 22:02
最好是弄狀態機,按鍵更改狀態,led按狀態來動作。
作者:
xcled
時間:
2020-2-20 22:05
估計是在哪個循環沒整對 各位建議下是把檢測兩個開關狀態放在第一步還是最后一步一好 最好能建議一個結構思路 我想用循環執行來完成 用中斷啥的一是能力不足 二是個人覺得這么簡單的東西沒必要搞那么復雜的程序
作者:
xcled
時間:
2020-2-20 22:29
我的目的很簡單 臥室燈晚上突然開燈眼睛一時難以接受 延時+1啟動達到漸亮效果 用兩個開關防止主開關故障備用的強制關 別說買現成燈 設定學習目的以達到學習、實用二合一
軟件是我的軟肋 硬件基本能搞
作者:
LXZ1114
時間:
2020-2-22 11:52
程序邏輯有問題,當你按鍵按下的時候(且一直保持按下),程序只會在 led1=~led1; while(!x1);這里一直循環,并不會執行后面的語句了。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1