标题: 求解答 我写的这个流水灯+蜂鸣器的程序 为什么植入单片机后蜂鸣器不响 [打印本页]

作者: 哈哈我哈哈    时间: 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单片机中蜂鸣器没有反应,偶尔会有很小的声音,很微弱。


作者: gujp312365    时间: 2018-7-16 12:02
因为WHILE是个死循环,你不可能执行到第二个WHILE(1)了,你好好理解WHILE(1)的执行,再来问
作者: gujp312365    时间: 2018-7-16 12:03
你的程序WHILE(1)理解了再来问,你目前的程序第二个WHILE(1)到死执行不到,所以你单步执行就知道,或者说设置断看到能不能到BEEF
作者: stephen_pro    时间: 2018-7-16 12:34
你的第一个while看到了吗,程序一直在这个while里出不来,所以无法实现蜂鸣器响,试试把蜂鸣器那段代码放到第一个while里
作者: 哈哈我哈哈    时间: 2018-7-16 13:17
stephen_pro 发表于 2018-7-16 12:34
你的第一个while看到了吗,程序一直在这个while里出不来,所以无法实现蜂鸣器响,试试把蜂鸣器那段代码放到 ...

好的,万分感谢!
作者: 哈哈我哈哈    时间: 2018-7-16 13:18
gujp312365 发表于 2018-7-16 12:02
因为WHILE是个死循环,你不可能执行到第二个WHILE(1)了,你好好理解WHILE(1)的执行,再来问

是的,我对C语言掌握还不够,谢谢啦!
作者: 哈哈我哈哈    时间: 2018-7-16 13:30
还是不行,我把第二个while(1)放到第一个里面了,流水灯都无法呈现了。求问各位改怎样修改?
作者: 关外秀才    时间: 2018-7-16 14:05
学习了,楼上说得对,while这个语句好像有点问题,我也试试。
作者: qqqqaq12    时间: 2018-7-16 15:45
只能用一个while循环,除非你有办法跳出来
作者: 15797939041    时间: 2018-7-16 16:16
因为while是个死循环,不能有两个while
作者: stephen_pro    时间: 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);                 }               
        }
}
作者: 天才小能猫    时间: 2018-7-16 17:29
哈哈我哈哈 发表于 2018-7-16 13:30
还是不行,我把第二个while(1)放到第一个里面了,流水灯都无法呈现了。求问各位改怎样修改?

你把你改完的发上来看一下,不然不知道你是怎么改的
作者: 哈哈我哈哈    时间: 2018-7-16 18:50
15797939041 发表于 2018-7-16 16:16
因为while是个死循环,不能有两个while

跳不出来啊现在
作者: 利刃    时间: 2018-7-16 19:01
第一个循环 跳不出来
作者: 利刃    时间: 2018-7-16 19:02
第一个循环跳不出来
作者: jigong    时间: 2018-7-16 19:15
参考楼上建议,,
作者: leslie夜阑静    时间: 2018-7-16 22:06
你的第一个while把程序包含完了
也就是程序一直在你的第一个while中
蜂鸣器不叫的原因是程序根本没执行到蜂鸣器的步骤
作者: mizaizyf    时间: 2018-7-16 22:18
这里不需要while(1)
while(1)
   {
   for(i=0;i<7;i++)
   {
   led=_crol_(led,1);
   delay(50000);
   }


作者: cfl    时间: 2018-7-16 22:29
程序不能退出第一个 while(1)。
作者: 安德森大    时间: 2018-7-16 22:29
看看板子有没有虚焊
作者: 51515151黑    时间: 2018-7-18 17:46
楼主的第一个while(1)是一个死循环,程序跑不到蜂鸣器那里,一般的51程序只有一个while(1)保证程序在一直执行,如果有其他的循环一定要加上退出条件
作者: 哈哈我哈哈    时间: 2018-7-18 18:18
51515151黑 发表于 2018-7-18 17:46
楼主的第一个while(1)是一个死循环,程序跑不到蜂鸣器那里,一般的51程序只有一个while(1)保证程序在一 ...

那退出条件怎么弄啊
作者: 自信的感觉    时间: 2018-7-18 18:53
死在第一个while循环里了
作者: 木子十二    时间: 2018-7-18 19:35
WHILE死循环用的不对,还有LED的亮灭控制没有必要两个for语句
作者: a1523122432    时间: 2018-7-18 20:11
把while换if试试
作者: nhao    时间: 2018-7-18 20:12
你把你改完的发上来看一下,不然不知道你是怎么改的
作者: Akari    时间: 2018-7-18 20:50
while死循环了。跳不出来。
作者: dl3029pds    时间: 2018-7-18 21:06
while嵌套结构容易出错,程序运行不了
作者: 叫我红领巾    时间: 2018-7-18 21:54
只执行第一个while(1)如要蜂鸣器响可把蜂鸣器那句话加到第一个while 把第二个while去掉
作者: 会奔跑的蜗牛    时间: 2018-7-18 22:10
第一个while(1)死循环了
作者: zmelody    时间: 2018-7-18 22:46
while(1)是死循环,进一个就不会进另一个,没这么用的
作者: XIUAOJEI    时间: 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);    }     }         }




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1