给它发送1,可以返回1,但是蜂鸣器却响了一会。

2019-07-15 21:01发布

本帖最后由 nickychung 于 2014-1-17 22:34 编辑

给它发送1,可以返回1,但是蜂鸣器却响了一会。  是不是我的无限大循环函数出现了问题
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit Beep =  P1^5 ;
uint z,flag,a;
uchar b;
void delay(uint i);
void init();
void wuyuanbeep(uint z);
void main()
{
         init();
         while(1)
         {
                 if(flag==1)
                {        
                        EA=0;
                        flag=0;      
                        SBUF=a;                   //返回1.
        
                        switch(a)                  //蜂鸣器先响了一会。是不是无限循环出现了问题。
                        {        
                                case ‘1’:wuyuanbeep(400);break;
                                case ‘2’:wuyuanbeep(200);break;
                                case ‘3’:wuyuanbeep(100);break;
                                case ‘4’:                           ;break;
                        }
                         while(ti==0);
                         TI=0;
                         EA=1;                        
                  }
         }
}

void wuyuanbeep(uint z)
{
          Beep= 1;
         delay(z);
         Beep= 0;
         delay(z);
}

void ser() interrupt 4
{        
        if(RI==1)
        {
                RI=0;
                a=SBUF;                              //给它发送1.
                flag=1;
        }
}

void init()
{        
        REN=1;
        SM0=0;
        SM1=1;
                                                                  
        TMOD=0x20;//设置定时器1为工作方式2        
        PCON=0x80;

        TH1=0xf3;
        TL1=0xf3;

        TR1=1;
        EA=1;
        ES=1;
}

void delay(unsigned int i)
{
    char j;
    for(i; i > 0; i--)
        for(j = 110; j > 0; j--);
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
水柒
1楼-- · 2019-07-16 00:28
 精彩回答 2  元偷偷看……
nickychung
2楼-- · 2019-07-16 06:06
水柒 发表于 2014-1-17 16:12
蜂鸣器发声是靠震动的 就是高低电平的不停跳变 一直是一肯定不行的

我已经申明了一个wuyuanbeep()里面已经有一个起振。发送的1是赋给a的,a的值只决定我的延迟时间。
ntmusic
3楼-- · 2019-07-16 07:59
void wuyuanbeep(uint z)有问题。既然是无源的,就必须不断给变化的电平才会响。注意是不断给,你的程序只变化一次就结束,能听到一声都不错了
钟情的屌丝男
4楼-- · 2019-07-16 08:37
改程序太麻烦,直接用一个有源的蜂鸣器就行,数字量控制。你用无源的要一直给他加脉冲才行
shh
5楼-- · 2019-07-16 10:17

{:1:}{:1:}
凡艾
6楼-- · 2019-07-16 11:50
 精彩回答 2  元偷偷看……

一周热门 更多>