找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6368|回復(fù): 31
打印 上一主題 下一主題
收起左側(cè)

求解答 我寫的這個(gè)流水燈+蜂鳴器的程序 為什么植入單片機(jī)后蜂鳴器不響

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:371529 發(fā)表于 2018-7-16 11:18 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
下面是我寫的程序:
  #include"reg52.h"
#include"intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
      sbit beep=P1^5;
  #define led P2  
  void delay(u16 i)
  {
  while(i--);
  }
void main()
{
   u8 i=0;
   led=0xfe;
   delay(50000);
   while(1)
   {
   for(i=0;i<7;i++)
   {
   led=_crol_(led,1);
   delay(50000);
   }
    for(i=0;i<7;i++)
   {
   led=_cror_(led,1);
   delay(50000);
   }
   }  
  
   while(1)
   {
   beep=~beep;
   delay(1000);
   }
}
為什么51單片機(jī)中蜂鳴器沒有反應(yīng),偶爾會(huì)有很小的聲音,很微弱。

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

使用道具 舉報(bào)

沙發(fā)
ID:142320 發(fā)表于 2018-7-16 12:02 | 只看該作者
因?yàn)閃HILE是個(gè)死循環(huán),你不可能執(zhí)行到第二個(gè)WHILE(1)了,你好好理解WHILE(1)的執(zhí)行,再來問

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
NPC-1024 + 5 贊一個(gè)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:142320 發(fā)表于 2018-7-16 12:03 | 只看該作者
你的程序WHILE(1)理解了再來問,你目前的程序第二個(gè)WHILE(1)到死執(zhí)行不到,所以你單步執(zhí)行就知道,或者說設(shè)置斷看到能不能到BEEF
回復(fù)

使用道具 舉報(bào)

地板
ID:371425 發(fā)表于 2018-7-16 12:34 | 只看該作者
你的第一個(gè)while看到了嗎,程序一直在這個(gè)while里出不來,所以無法實(shí)現(xiàn)蜂鳴器響,試試把蜂鳴器那段代碼放到第一個(gè)while里
回復(fù)

使用道具 舉報(bào)

5#
ID:371529 發(fā)表于 2018-7-16 13:17 | 只看該作者
stephen_pro 發(fā)表于 2018-7-16 12:34
你的第一個(gè)while看到了嗎,程序一直在這個(gè)while里出不來,所以無法實(shí)現(xiàn)蜂鳴器響,試試把蜂鳴器那段代碼放到 ...

好的,萬分感謝!
回復(fù)

使用道具 舉報(bào)

6#
ID:371529 發(fā)表于 2018-7-16 13:18 | 只看該作者
gujp312365 發(fā)表于 2018-7-16 12:02
因?yàn)閃HILE是個(gè)死循環(huán),你不可能執(zhí)行到第二個(gè)WHILE(1)了,你好好理解WHILE(1)的執(zhí)行,再來問

是的,我對(duì)C語言掌握還不夠,謝謝啦!
回復(fù)

使用道具 舉報(bào)

7#
ID:371529 發(fā)表于 2018-7-16 13:30 | 只看該作者
還是不行,我把第二個(gè)while(1)放到第一個(gè)里面了,流水燈都無法呈現(xiàn)了。求問各位改怎樣修改?
回復(fù)

使用道具 舉報(bào)

8#
ID:372402 發(fā)表于 2018-7-16 14:05 | 只看該作者
學(xué)習(xí)了,樓上說得對(duì),while這個(gè)語句好像有點(diǎn)問題,我也試試。
回復(fù)

使用道具 舉報(bào)

9#
ID:372615 發(fā)表于 2018-7-16 15:45 | 只看該作者
只能用一個(gè)while循環(huán),除非你有辦法跳出來
回復(fù)

使用道具 舉報(bào)

10#
ID:313760 發(fā)表于 2018-7-16 16:16 | 只看該作者
因?yàn)閣hile是個(gè)死循環(huán),不能有兩個(gè)while
回復(fù)

使用道具 舉報(bào)

11#
ID:371425 發(fā)表于 2018-7-16 16:59 | 只看該作者
#include<reg52.h>  
這是一個(gè)類似的程序,不過和你的接口不一樣,你對(duì)照著看看吧
#include <intrins.h>
#define uint unsigned int   
#define uchar unsigned char  
sbit beep=P2^3;
void delay(uint z)  


{                                                uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);       
}
void main()                  {
        uchar a,i;
        while(1)               {
                a=0xfe;                     for(i=0;i<8;i++)                  {
                        P1=a;                              beep=0;                            delay(50);                         beep=1;                             delay(50);                          a=_crol_(a,1);                 }
                a=0x7f;
                for(i=0;i<8;i++)                 {
                        P1=a;                               beep=0;                             delay(50);                         beep=1;                             delay(50);                           a=_cror_(a,1);                 }               
        }
}

評(píng)分

參與人數(shù) 2黑幣 +64 收起 理由
哈哈我哈哈 + 4 很給力!
admin + 60 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

12#
ID:323350 發(fā)表于 2018-7-16 17:29 | 只看該作者
哈哈我哈哈 發(fā)表于 2018-7-16 13:30
還是不行,我把第二個(gè)while(1)放到第一個(gè)里面了,流水燈都無法呈現(xiàn)了。求問各位改怎樣修改?

你把你改完的發(fā)上來看一下,不然不知道你是怎么改的
回復(fù)

使用道具 舉報(bào)

13#
ID:371529 發(fā)表于 2018-7-16 18:50 | 只看該作者
15797939041 發(fā)表于 2018-7-16 16:16
因?yàn)閣hile是個(gè)死循環(huán),不能有兩個(gè)while

跳不出來啊現(xiàn)在
回復(fù)

使用道具 舉報(bào)

14#
ID:372748 發(fā)表于 2018-7-16 19:01 | 只看該作者
第一個(gè)循環(huán) 跳不出來
回復(fù)

使用道具 舉報(bào)

15#
ID:372748 發(fā)表于 2018-7-16 19:02 | 只看該作者
第一個(gè)循環(huán)跳不出來
回復(fù)

使用道具 舉報(bào)

16#
ID:359577 發(fā)表于 2018-7-16 19:15 | 只看該作者
參考樓上建議,,
回復(fù)

使用道具 舉報(bào)

17#
ID:366562 發(fā)表于 2018-7-16 22:06 | 只看該作者
你的第一個(gè)while把程序包含完了
也就是程序一直在你的第一個(gè)while中
蜂鳴器不叫的原因是程序根本沒執(zhí)行到蜂鳴器的步驟

評(píng)分

參與人數(shù) 1黑幣 +60 收起 理由
admin + 60 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

18#
ID:372896 發(fā)表于 2018-7-16 22:18 | 只看該作者
這里不需要while(1)
while(1)
   {
   for(i=0;i<7;i++)
   {
   led=_crol_(led,1);
   delay(50000);
   }

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

19#
ID:372904 發(fā)表于 2018-7-16 22:29 | 只看該作者
程序不能退出第一個(gè) while(1)。
回復(fù)

使用道具 舉報(bào)

20#
ID:372905 發(fā)表于 2018-7-16 22:29 | 只看該作者
看看板子有沒有虛焊
回復(fù)

使用道具 舉報(bào)

21#
ID:366532 發(fā)表于 2018-7-18 17:46 | 只看該作者
樓主的第一個(gè)while(1)是一個(gè)死循環(huán),程序跑不到蜂鳴器那里,一般的51程序只有一個(gè)while(1)保證程序在一直執(zhí)行,如果有其他的循環(huán)一定要加上退出條件
回復(fù)

使用道具 舉報(bào)

22#
ID:371529 發(fā)表于 2018-7-18 18:18 | 只看該作者
51515151黑 發(fā)表于 2018-7-18 17:46
樓主的第一個(gè)while(1)是一個(gè)死循環(huán),程序跑不到蜂鳴器那里,一般的51程序只有一個(gè)while(1)保證程序在一 ...

那退出條件怎么弄啊
回復(fù)

使用道具 舉報(bào)

23#
ID:374321 發(fā)表于 2018-7-18 18:53 | 只看該作者
死在第一個(gè)while循環(huán)里了
回復(fù)

使用道具 舉報(bào)

24#
ID:374341 發(fā)表于 2018-7-18 19:35 | 只看該作者
WHILE死循環(huán)用的不對(duì),還有LED的亮滅控制沒有必要兩個(gè)for語句
回復(fù)

使用道具 舉報(bào)

25#
ID:374367 發(fā)表于 2018-7-18 20:11 | 只看該作者
把while換if試試
回復(fù)

使用道具 舉報(bào)

26#
ID:374365 發(fā)表于 2018-7-18 20:12 | 只看該作者
你把你改完的發(fā)上來看一下,不然不知道你是怎么改的
回復(fù)

使用道具 舉報(bào)

27#
ID:374387 發(fā)表于 2018-7-18 20:50 | 只看該作者
while死循環(huán)了。跳不出來。
回復(fù)

使用道具 舉報(bào)

28#
ID:374396 發(fā)表于 2018-7-18 21:06 | 只看該作者
while嵌套結(jié)構(gòu)容易出錯(cuò),程序運(yùn)行不了
回復(fù)

使用道具 舉報(bào)

29#
ID:370779 發(fā)表于 2018-7-18 21:54 | 只看該作者
只執(zhí)行第一個(gè)while(1)如要蜂鳴器響可把蜂鳴器那句話加到第一個(gè)while 把第二個(gè)while去掉
回復(fù)

使用道具 舉報(bào)

30#
ID:304658 發(fā)表于 2018-7-18 22:10 | 只看該作者
第一個(gè)while(1)死循環(huán)了
回復(fù)

使用道具 舉報(bào)

31#
ID:374451 發(fā)表于 2018-7-18 22:46 | 只看該作者
while(1)是死循環(huán),進(jìn)一個(gè)就不會(huì)進(jìn)另一個(gè),沒這么用的
回復(fù)

使用道具 舉報(bào)

32#
ID:374464 發(fā)表于 2018-7-18 23:32 | 只看該作者
#include"reg52.h" #include"intrins.h" typedef unsigned char u8; typedef unsigned int u16;       sbit beep=P1^5;   #define led P2     void delay(u16 i)   {   while(i--);   } void main() {    u8 i=0;    led=0xfe;    delay(50000);    while(1)    {    for(i=0;i<7;i++)    {    led=_crol_(led,1);    delay(50000);    }  beep=~beep;    delay(1000);     for(i=0;i<7;i++)    {    led=_cror_(led,1);    delay(50000);    }     }         }

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
哈哈我哈哈 + 5 贊一個(gè)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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