欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6623|回復(fù): 11
收起左側(cè)

51單片機(jī)兩個(gè)開關(guān)控制多顆led,一個(gè)開關(guān)打開led燈逐個(gè)亮 另一開關(guān)打開后全滅

[復(fù)制鏈接]
ID:695357 發(fā)表于 2020-2-19 22:29 | 顯示全部樓層 |閱讀模式
1黑幣
新人,黑幣有限,見諒!

最近不能出門閑的發(fā)慌學(xué)習(xí)51單片機(jī)折騰些小玩意,望高手們多海涵

實(shí)現(xiàn)目標(biāo):兩個(gè)開關(guān)(自鎖型,類似電燈開關(guān)性質(zhì))控制多顆led燈,當(dāng)開關(guān)1打開led每間隔2秒多亮一顆 ,亮起后不熄滅  直到 開關(guān)1關(guān)閉或打開2后熄滅   然后一直檢測(cè)兩個(gè)開關(guān)狀態(tài)   檢測(cè)到開關(guān)2關(guān)閉后從頭開始執(zhí)行


整好代碼后仿真亂跑  有時(shí)不亮 有時(shí)像流水燈一樣跑  多指教
暫時(shí)搞三顆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);//消抖,延時(shí)1秒
                if(x1==0)//消抖之后再次判斷是否被按下

                led1=~led1;//led1開啟,led燈默認(rèn)高電'平
                 while(!x1);//判斷是否斷開

                delay(3000);//消抖,延時(shí)3秒
                if(x1|==0)//消抖之后再次判斷是否被按下

                led2=~led2;//led2開啟,led燈默認(rèn)高電'平
                 while(!x1);//判斷是否斷開

                delay(5000);//消抖,延時(shí)5秒
                if(x1==0)//消抖之后再次判斷是否被按下

                led3=~led3;//led3開啟,led燈默認(rèn)高電'平
                 while(!x1);//判斷是否斷開               
        }
}
void anjian2()
{
        if(x3==0)//判斷消防開關(guān)是否被觸發(fā)
        {
                delay(100);//消抖,延時(shí)10毫秒
                if(x3==0)//消抖之后再次判斷消防開關(guān)是否被觸發(fā)

                x1==1;//x1拉高,關(guān)閉所有l(wèi)ed
                 while(!x3);//判斷是否斷開
        }
}
void main()
{
        while(1)
        {
                anjian1();
                anjian2();
        }
}

回復(fù)

使用道具 舉報(bào)

ID:158375 發(fā)表于 2020-2-20 11:34 | 顯示全部樓層
整個(gè)程序結(jié)構(gòu)有問題.
回復(fù)

使用道具 舉報(bào)

ID:445280 發(fā)表于 2020-2-20 12:03 | 顯示全部樓層
你消抖后的if沒有大括號(hào)吧
回復(fù)

使用道具 舉報(bào)

ID:695047 發(fā)表于 2020-2-20 14:21 | 顯示全部樓層
程序結(jié)構(gòu)需要優(yōu)化一下,例如:if(x1==0)最好寫上{ led1=~led1;}
回復(fù)

使用道具 舉報(bào)

ID:679425 發(fā)表于 2020-2-20 16:03 | 顯示全部樓層
程序結(jié)構(gòu)需優(yōu)化
回復(fù)

使用道具 舉報(bào)

ID:275826 發(fā)表于 2020-2-20 17:05 | 顯示全部樓層
自鎖型開關(guān)不需要去抖;while(!x)死循環(huán)了
回復(fù)

使用道具 舉報(bào)

ID:687423 發(fā)表于 2020-2-20 19:17 | 顯示全部樓層
樓主的延時(shí)函數(shù)的時(shí)間注釋有問題,delay(1000)并不是一秒啊。關(guān)于程序的話,樓主的程序的思路并不正確,如果是想讓開關(guān)1打開或者開關(guān)2閉合時(shí)全滅,可以在開關(guān)1程序后面修改,而不是在開關(guān)2的程序中讓x1=1,開關(guān)2閉合全滅的話可以通過中斷來實(shí)現(xiàn)。
回復(fù)

使用道具 舉報(bào)

ID:695357 發(fā)表于 2020-2-20 21:55 | 顯示全部樓層
。。jj 發(fā)表于 2020-2-20 19:17
樓主的延時(shí)函數(shù)的時(shí)間注釋有問題,delay(1000)并不是一秒啊。關(guān)于程序的話,樓主的程序的思路并不正確, ...

先處于小白級(jí),中斷啥的還沒整會(huì)呢 剛玩一段時(shí)間    N年前學(xué)的基本都還給師傅
回復(fù)

使用道具 舉報(bào)

ID:462827 發(fā)表于 2020-2-20 22:02 | 顯示全部樓層
最好是弄狀態(tài)機(jī),按鍵更改狀態(tài),led按狀態(tài)來動(dòng)作。
回復(fù)

使用道具 舉報(bào)

ID:695357 發(fā)表于 2020-2-20 22:05 | 顯示全部樓層
估計(jì)是在哪個(gè)循環(huán)沒整對(duì)   各位建議下是把檢測(cè)兩個(gè)開關(guān)狀態(tài)放在第一步還是最后一步一好  最好能建議一個(gè)結(jié)構(gòu)思路  我想用循環(huán)執(zhí)行來完成  用中斷啥的一是能力不足  二是個(gè)人覺得這么簡單的東西沒必要搞那么復(fù)雜的程序
回復(fù)

使用道具 舉報(bào)

ID:695357 發(fā)表于 2020-2-20 22:29 | 顯示全部樓層
我的目的很簡單   臥室燈晚上突然開燈眼睛一時(shí)難以接受  延時(shí)+1啟動(dòng)達(dá)到漸亮效果  用兩個(gè)開關(guān)防止主開關(guān)故障備用的強(qiáng)制關(guān)   別說買現(xiàn)成燈   設(shè)定學(xué)習(xí)目的以達(dá)到學(xué)習(xí)、實(shí)用二合一
軟件是我的軟肋  硬件基本能搞
回復(fù)

使用道具 舉報(bào)

ID:686985 發(fā)表于 2020-2-22 11:52 | 顯示全部樓層
程序邏輯有問題,當(dāng)你按鍵按下的時(shí)候(且一直保持按下),程序只會(huì)在 led1=~led1; while(!x1);這里一直循環(huán),并不會(huì)執(zhí)行后面的語句了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表