找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1864|回復: 5
打印 上一主題 下一主題
收起左側(cè)

單片機呼吸燈代碼問題求教

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:469787 發(fā)表于 2019-10-26 20:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
不知道哪里出了問題呼吸燈在逐漸達到最亮后會突然滅掉零點幾秒  然后在亮起來逐漸變暗

代碼如下


#include <reg52.h>
sbit led=P1^1;
void time(unsigned int t)
{
while(--t);
}                            //延時函數(shù)
void main()
     {
unsigned int m=400,k=0;
          while(1)        //主循環(huán)
            {
                       for(k=1;k<m;k++)
               {
          led=0;
     time(k);
          led=1;        
          time(m-k);
               }              //逐漸變亮


               for(k=400;k>0;k--)
               {
                         led=0;
                         time(k);
                         led=1;
                         time(m-k);
                   }           //逐漸變暗
            }                                             
          }


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

使用道具 舉報

沙發(fā)
ID:89515 發(fā)表于 2019-10-27 06:44 來自手機 | 只看該作者
查看一下K值的變化就知道了
回復

使用道具 舉報

板凳
ID:213173 發(fā)表于 2019-10-27 09:54 | 只看該作者
錯誤在K值不能為0,否則帶入延時函數(shù)后while(--t);,--t是先運算再判斷,t值就成了65535。led=1;就要延時2*t+5us。
可以改為while(t--);,t--是先判斷再運算。當然也可以不改延時函數(shù)而是改for循環(huán)條件解決。
回復

使用道具 舉報

地板
ID:151924 發(fā)表于 2019-10-27 10:45 | 只看該作者
K值出問題了。
回復

使用道具 舉報

5#
ID:469787 發(fā)表于 2019-10-27 11:01 | 只看該作者
wulin 發(fā)表于 2019-10-27 09:54
錯誤在K值不能為0,否則帶入延時函數(shù)后while(--t);,--t是先運算再判斷,t值就成了65535。led=1;就要延時2* ...

https://v.youku.com/v_show/id_XNDQxMzIzMDA0MA==.html?spm=a2h3j.8428770.3416059.1


視頻如上  我改成while(t--)還是一樣
回復

使用道具 舉報

6#
ID:213173 發(fā)表于 2019-10-27 12:22 | 只看該作者
在線 發(fā)表于 2019-10-27 11:01
視頻如上  我改成while(t--)還是一樣

改延時while(t--);或改for循環(huán)中參數(shù)time(m-k+1);,隨便改哪一種都可以,只是呼吸周期略有區(qū)別。
  1. #include <reg52.h>
  2. sbit led=P1^1;
  3. void time(unsigned int t)
  4. {
  5.         while(t--);
  6. }                            //延時函數(shù)
  7. void main()
  8. {
  9.         unsigned int m=500,k=0;
  10.         while(1)        //主循環(huán)
  11.         {
  12.                 for(k=1;k<m;k++)
  13.                 {
  14.                         led=0;
  15.                         time(k);
  16.                         led=1;        
  17.                         time(m-k);
  18.                 }              //逐漸變亮
  19.                 for(k=500;k>0;k--)
  20.                 {
  21.                         led=0;
  22.                         time(k);
  23.                         led=1;
  24.                         time(m-k);
  25.                 }           //逐漸變暗
  26.         }
  27. }
復制代碼


#include <reg52.h>
sbit led=P1^1;
void time(unsigned int t)
{
        while(--t);
}                            //延時函數(shù)
void main()
{
        unsigned int m=500,k=0;
        while(1)        //主循環(huán)
        {
                for(k=1;k<m;k++)
                {
                        led=0;
                        time(k);
                        led=1;        
                        time(m-k+1);
                }              //逐漸變亮
                for(k=500;k>0;k--)
                {
                        led=0;
                        time(k);
                        led=1;
                        time(m-k+1);
                }           //逐漸變暗
        }                                             
}
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表