久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6123|回復: 11
打印 上一主題 下一主題
收起左側

51單片機兩個開關控制多顆led,一個開關打開led燈逐個亮 另一開關打開后全滅

[復制鏈接]
跳轉到指定樓層
樓主
ID:695357 發表于 2020-2-19 22:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1黑幣
新人,黑幣有限,見諒!

最近不能出門閑的發慌學習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();
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:158375 發表于 2020-2-20 11:34 | 只看該作者
整個程序結構有問題.
回復

使用道具 舉報

板凳
ID:445280 發表于 2020-2-20 12:03 | 只看該作者
你消抖后的if沒有大括號吧
回復

使用道具 舉報

地板
ID:695047 發表于 2020-2-20 14:21 | 只看該作者
程序結構需要優化一下,例如:if(x1==0)最好寫上{ led1=~led1;}
回復

使用道具 舉報

5#
ID:679425 發表于 2020-2-20 16:03 | 只看該作者
程序結構需優化
回復

使用道具 舉報

6#
ID:275826 發表于 2020-2-20 17:05 | 只看該作者
自鎖型開關不需要去抖;while(!x)死循環了
回復

使用道具 舉報

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

使用道具 舉報

8#
ID:695357 發表于 2020-2-20 21:55 | 只看該作者
。。jj 發表于 2020-2-20 19:17
樓主的延時函數的時間注釋有問題,delay(1000)并不是一秒啊。關于程序的話,樓主的程序的思路并不正確, ...

先處于小白級,中斷啥的還沒整會呢 剛玩一段時間    N年前學的基本都還給師傅
回復

使用道具 舉報

9#
ID:462827 發表于 2020-2-20 22:02 | 只看該作者
最好是弄狀態機,按鍵更改狀態,led按狀態來動作。
回復

使用道具 舉報

10#
ID:695357 發表于 2020-2-20 22:05 | 只看該作者
估計是在哪個循環沒整對   各位建議下是把檢測兩個開關狀態放在第一步還是最后一步一好  最好能建議一個結構思路  我想用循環執行來完成  用中斷啥的一是能力不足  二是個人覺得這么簡單的東西沒必要搞那么復雜的程序
回復

使用道具 舉報

11#
ID:695357 發表于 2020-2-20 22:29 | 只看該作者
我的目的很簡單   臥室燈晚上突然開燈眼睛一時難以接受  延時+1啟動達到漸亮效果  用兩個開關防止主開關故障備用的強制關   別說買現成燈   設定學習目的以達到學習、實用二合一
軟件是我的軟肋  硬件基本能搞
回復

使用道具 舉報

12#
ID:686985 發表于 2020-2-22 11:52 | 只看該作者
程序邏輯有問題,當你按鍵按下的時候(且一直保持按下),程序只會在 led1=~led1; while(!x1);這里一直循環,并不會執行后面的語句了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品www | 仙人掌旅馆在线观看 | 一区二区在线免费观看视频 | 国产精品久久久久久久久免费相片 | 97人人干 | 日韩国产免费 | 日韩一区二区在线播放 | 涩涩视频在线观看 | 亚洲国产免费 | 精品久久一 | 国产精品日韩欧美一区二区三区 | 国产精品高清在线 | 91麻豆精品国产91久久久久久 | 日韩精品a在线观看图片 | 欧美一区二区三 | 欧美在线a | 欧美精品区 | 男女一区二区三区 | 在线免费观看日本视频 | 粉嫩av久久一区二区三区 | 亚洲午夜视频在线观看 | 国产大学生情侣呻吟视频 | 操一草 | 日韩一区二区三区在线 | 欧美自拍视频 | 亚洲国产精品一区在线观看 | 狠狠做深爱婷婷综合一区 | 国产精品不卡 | 久久久久久久久99 | 日本天天操 | 久久久久国产精品一区三寸 | 蜜桃视频在线观看免费视频网站www | 日本精品一区二区 | 久久亚洲国产 | 日韩在线观看网站 | 国产成人精品一区二区三区在线 | 中国一级毛片免费 | 日韩欧美精品 | 99精品国产一区二区青青牛奶 | 国产成人jvid在线播放 | 青青久在线视频 |