標(biāo)題: 新手求助,51單片機(jī)燈閃五下,蜂鳴器響一下,現(xiàn)在是同時(shí)閃和響,謝謝 [打印本頁(yè)]

作者: zpqm333    時(shí)間: 2021-1-12 22:06
標(biāo)題: 新手求助,51單片機(jī)燈閃五下,蜂鳴器響一下,現(xiàn)在是同時(shí)閃和響,謝謝
#include "reg51.h"
#include "delay.h"
#include "led_flash.h"
#include "beep.h"


void main()
{
        static int y;
        delay(10);
        while (1)
         {
        
        if (y<=5)
        {
        y++;
        led_flash();
        }
        y = 0;
          beep();

         }


}

作者: denglele    時(shí)間: 2021-1-12 23:28
把你的led-flasfh()和beep()發(fā)出來(lái),不然看不出來(lái)
作者: csmyldl    時(shí)間: 2021-1-12 23:50
if (y<=5)改成while(y<5),同時(shí)在前面加一條y=0;
作者: taotie    時(shí)間: 2021-1-13 00:12
閃五下,蜂鳴器響一下。那就缺Y=5的判斷,y=5時(shí)蜂鳴器響,響多長(zhǎng)時(shí)間由延遲確定然后y=0再次循環(huán)
作者: 人人學(xué)會(huì)單片機(jī)    時(shí)間: 2021-1-13 01:11
關(guān)于這種小程序 你可以觀看《人人學(xué)會(huì)單片機(jī)》第12課,學(xué)習(xí)框架式編程方式的操作方式。

不管多少顆燈各自閃爍。只需要尋找一個(gè)公倍數(shù)就行了。
作者: man1234567    時(shí)間: 2021-1-13 08:14
無(wú)需把 led-flasfh() 和 beep() 發(fā)出來(lái),僅main() 也能清楚地看出來(lái):
void main()   {    static int y;  //變量Y,沒(méi)有給初值
        delay(10);  //延時(shí)
        while (1)  //開(kāi)始無(wú)條件循環(huán)
         {      if (y<=5)   {   y++;      led_flash();     }  //只要Y是不大于5就加1并閃燈
                y = 0;   //然后賦值為零,不管前面Y初值有木有或加到多少(只能加到1)都?xì)w零
                beep();   //無(wú)條件地響一下
         }  //以上無(wú)條件循環(huán)所以感覺(jué)就是同閃同響
}

可以改成:
void main()   {    static int y;  y=0; //變量Y初值0
        delay(10);  //延時(shí)
        while (1)
        {      if (y<5)   {     led_flash();     y++;    }  //只要Y從0到4加1并閃燈
                  else      {     beep();         y = 0;   }  //閃5次后響一聲并Y歸零
         }  
}

作者: 游知行合一    時(shí)間: 2021-1-13 08:56
  beep();下面加點(diǎn)延時(shí)試試。
作者: glinfei    時(shí)間: 2021-1-13 09:07
delay 和判斷的位置錯(cuò)了。
void main()
{
        static int y;
        while (1)
         {
            if (y==5)
           {
            y = 0;
            beep();
          }
        y++;
       led_flash();
       delay(10);
      }
}

作者: 適得府君書(shū)    時(shí)間: 2021-1-13 09:32
單片機(jī)里面的編程還是要多注意一些細(xì)節(jié)。還有c語(yǔ)言基礎(chǔ)要了解,至少一些循環(huán)語(yǔ)句的使用要清楚。你這段代碼有幾個(gè)問(wèn)題:
一、定義變量y的時(shí)候沒(méi)有初始化就進(jìn)行y++。有時(shí)候不會(huì)出現(xiàn)問(wèn)題,有時(shí)候那可是致命的問(wèn)題。沒(méi)有初始化的定義不一定0,所以進(jìn)行判斷的時(shí)候就不會(huì)成立。
二、if判斷語(yǔ)句使用有問(wèn)題。if只是一個(gè)判斷不是循環(huán)。所以if條件每次都成立進(jìn)入后y+1跳出后又把0賦值給y。所以這段代碼使用的if是沒(méi)有意義的。跟一些方式是一樣的:
while(1)
{
led_flash();
beep();
}
三、延時(shí)問(wèn)題。delay(10);延時(shí)的位置無(wú)意義。
void main()
{
while (1)
{
//這里是主循環(huán)
delay(10);//在這延時(shí)才有用
}
}
燈閃5下,蜂鳴器響一下你可以用for循環(huán)比較簡(jiǎn)單。流程上也比較易懂。
int i;
for(i=0;i<5;i++)
{
}
方式有很多種可以多嘗試一些




作者: kxcuser    時(shí)間: 2021-1-13 09:35
void main()
{
static int y;
delay(10);
while(1)
{
  for(;y<5;y++)
   {
    led_flash();
   }
  y=0;
  beep();
}
}
作者: woshinh    時(shí)間: 2021-1-13 15:30
你這while循環(huán)里沒(méi)有延時(shí),閃五下,蜂鳴器響一下這個(gè)功能已經(jīng)實(shí)現(xiàn)了,只是速度太快你分辨不出來(lái)
作者: xy07580782    時(shí)間: 2021-1-13 18:11
適得府君書(shū) 發(fā)表于 2021-1-13 09:32
單片機(jī)里面的編程還是要多注意一些細(xì)節(jié)。還有c語(yǔ)言基礎(chǔ)要了解,至少一些循環(huán)語(yǔ)句的使用要清楚。你這段代碼 ...

靜態(tài)型變量應(yīng)該不用賦初值也可以吧,默認(rèn)是0.




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1