1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7360|回復: 31
收起左側

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

  [復制鏈接]
ID:371529 發表于 2018-7-16 11:18 | 顯示全部樓層 |閱讀模式
下面是我寫的程序:
  #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單片機中蜂鳴器沒有反應,偶爾會有很小的聲音,很微弱。

回復

使用道具 舉報

ID:142320 發表于 2018-7-16 12:02 | 顯示全部樓層
因為WHILE是個死循環,你不可能執行到第二個WHILE(1)了,你好好理解WHILE(1)的執行,再來問

評分

參與人數 1黑幣 +5 收起 理由
NPC-1024 + 5 贊一個!

查看全部評分

回復

使用道具 舉報

ID:142320 發表于 2018-7-16 12:03 | 顯示全部樓層
你的程序WHILE(1)理解了再來問,你目前的程序第二個WHILE(1)到死執行不到,所以你單步執行就知道,或者說設置斷看到能不能到BEEF
回復

使用道具 舉報

ID:371425 發表于 2018-7-16 12:34 | 顯示全部樓層
你的第一個while看到了嗎,程序一直在這個while里出不來,所以無法實現蜂鳴器響,試試把蜂鳴器那段代碼放到第一個while里
回復

使用道具 舉報

ID:371529 發表于 2018-7-16 13:17 | 顯示全部樓層
stephen_pro 發表于 2018-7-16 12:34
你的第一個while看到了嗎,程序一直在這個while里出不來,所以無法實現蜂鳴器響,試試把蜂鳴器那段代碼放到 ...

好的,萬分感謝!
回復

使用道具 舉報

ID:371529 發表于 2018-7-16 13:18 | 顯示全部樓層
gujp312365 發表于 2018-7-16 12:02
因為WHILE是個死循環,你不可能執行到第二個WHILE(1)了,你好好理解WHILE(1)的執行,再來問

是的,我對C語言掌握還不夠,謝謝啦!
回復

使用道具 舉報

ID:371529 發表于 2018-7-16 13:30 | 顯示全部樓層
還是不行,我把第二個while(1)放到第一個里面了,流水燈都無法呈現了。求問各位改怎樣修改?
回復

使用道具 舉報

ID:372402 發表于 2018-7-16 14:05 | 顯示全部樓層
學習了,樓上說得對,while這個語句好像有點問題,我也試試。
回復

使用道具 舉報

ID:372615 發表于 2018-7-16 15:45 | 顯示全部樓層
只能用一個while循環,除非你有辦法跳出來
回復

使用道具 舉報

ID:313760 發表于 2018-7-16 16:16 | 顯示全部樓層
因為while是個死循環,不能有兩個while
回復

使用道具 舉報

ID:371425 發表于 2018-7-16 16:59 | 顯示全部樓層
#include<reg52.h>  
這是一個類似的程序,不過和你的接口不一樣,你對照著看看吧
#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);                 }               
        }
}

評分

參與人數 2黑幣 +64 收起 理由
哈哈我哈哈 + 4 很給力!
admin + 60 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:323350 發表于 2018-7-16 17:29 | 顯示全部樓層
哈哈我哈哈 發表于 2018-7-16 13:30
還是不行,我把第二個while(1)放到第一個里面了,流水燈都無法呈現了。求問各位改怎樣修改?

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

使用道具 舉報

ID:371529 發表于 2018-7-16 18:50 | 顯示全部樓層
15797939041 發表于 2018-7-16 16:16
因為while是個死循環,不能有兩個while

跳不出來啊現在
回復

使用道具 舉報

ID:372748 發表于 2018-7-16 19:01 | 顯示全部樓層
第一個循環 跳不出來
回復

使用道具 舉報

ID:372748 發表于 2018-7-16 19:02 | 顯示全部樓層
第一個循環跳不出來
回復

使用道具 舉報

ID:359577 發表于 2018-7-16 19:15 | 顯示全部樓層
參考樓上建議,,
回復

使用道具 舉報

ID:366562 發表于 2018-7-16 22:06 | 顯示全部樓層
你的第一個while把程序包含完了
也就是程序一直在你的第一個while中
蜂鳴器不叫的原因是程序根本沒執行到蜂鳴器的步驟

評分

參與人數 1黑幣 +60 收起 理由
admin + 60 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:372896 發表于 2018-7-16 22:18 | 顯示全部樓層
這里不需要while(1)
while(1)
   {
   for(i=0;i<7;i++)
   {
   led=_crol_(led,1);
   delay(50000);
   }

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:372904 發表于 2018-7-16 22:29 | 顯示全部樓層
程序不能退出第一個 while(1)。
回復

使用道具 舉報

ID:372905 發表于 2018-7-16 22:29 | 顯示全部樓層
看看板子有沒有虛焊
回復

使用道具 舉報

ID:366532 發表于 2018-7-18 17:46 | 顯示全部樓層
樓主的第一個while(1)是一個死循環,程序跑不到蜂鳴器那里,一般的51程序只有一個while(1)保證程序在一直執行,如果有其他的循環一定要加上退出條件
回復

使用道具 舉報

ID:371529 發表于 2018-7-18 18:18 | 顯示全部樓層
51515151黑 發表于 2018-7-18 17:46
樓主的第一個while(1)是一個死循環,程序跑不到蜂鳴器那里,一般的51程序只有一個while(1)保證程序在一 ...

那退出條件怎么弄啊
回復

使用道具 舉報

ID:374321 發表于 2018-7-18 18:53 | 顯示全部樓層
死在第一個while循環里了
回復

使用道具 舉報

ID:374341 發表于 2018-7-18 19:35 | 顯示全部樓層
WHILE死循環用的不對,還有LED的亮滅控制沒有必要兩個for語句
回復

使用道具 舉報

ID:374367 發表于 2018-7-18 20:11 | 顯示全部樓層
把while換if試試
回復

使用道具 舉報

ID:374365 發表于 2018-7-18 20:12 | 顯示全部樓層
你把你改完的發上來看一下,不然不知道你是怎么改的
回復

使用道具 舉報

ID:374387 發表于 2018-7-18 20:50 | 顯示全部樓層
while死循環了。跳不出來。
回復

使用道具 舉報

ID:374396 發表于 2018-7-18 21:06 | 顯示全部樓層
while嵌套結構容易出錯,程序運行不了
回復

使用道具 舉報

ID:370779 發表于 2018-7-18 21:54 | 顯示全部樓層
只執行第一個while(1)如要蜂鳴器響可把蜂鳴器那句話加到第一個while 把第二個while去掉
回復

使用道具 舉報

ID:304658 發表于 2018-7-18 22:10 | 顯示全部樓層
第一個while(1)死循環了
回復

使用道具 舉報

ID:374451 發表于 2018-7-18 22:46 | 顯示全部樓層
while(1)是死循環,進一個就不會進另一個,沒這么用的
回復

使用道具 舉報

ID:374464 發表于 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);    }     }         }

評分

參與人數 1黑幣 +5 收起 理由
哈哈我哈哈 + 5 贊一個!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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