标题: 新手求助,51单片机灯闪五下,蜂鸣器响一下,现在是同时闪和响,谢谢 [打印本页]

作者: zpqm333    时间: 2021-1-12 22:06
标题: 新手求助,51单片机灯闪五下,蜂鸣器响一下,现在是同时闪和响,谢谢
#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    时间: 2021-1-12 23:28
把你的led-flasfh()和beep()发出来,不然看不出来
作者: csmyldl    时间: 2021-1-12 23:50
if (y<=5)改成while(y<5),同时在前面加一条y=0;
作者: taotie    时间: 2021-1-13 00:12
闪五下,蜂鸣器响一下。那就缺Y=5的判断,y=5时蜂鸣器响,响多长时间由延迟确定然后y=0再次循环
作者: 人人学会单片机    时间: 2021-1-13 01:11
关于这种小程序 你可以观看《人人学会单片机》第12课,学习框架式编程方式的操作方式。

不管多少颗灯各自闪烁。只需要寻找一个公倍数就行了。
作者: man1234567    时间: 2021-1-13 08:14
无需把 led-flasfh() 和 beep() 发出来,仅main() 也能清楚地看出来:
void main()   {    static int y;  //变量Y,没有给初值
        delay(10);  //延时
        while (1)  //开始无条件循环
         {      if (y<=5)   {   y++;      led_flash();     }  //只要Y是不大于5就加1并闪灯
                y = 0;   //然后赋值为零,不管前面Y初值有木有或加到多少(只能加到1)都归零
                beep();   //无条件地响一下
         }  //以上无条件循环所以感觉就是同闪同响
}

可以改成:
void main()   {    static int y;  y=0; //变量Y初值0
        delay(10);  //延时
        while (1)
        {      if (y<5)   {     led_flash();     y++;    }  //只要Y从0到4加1并闪灯
                  else      {     beep();         y = 0;   }  //闪5次后响一声并Y归零
         }  
}

作者: 游知行合一    时间: 2021-1-13 08:56
  beep();下面加点延时试试。
作者: glinfei    时间: 2021-1-13 09:07
delay 和判断的位置错了。
void main()
{
        static int y;
        while (1)
         {
            if (y==5)
           {
            y = 0;
            beep();
          }
        y++;
       led_flash();
       delay(10);
      }
}

作者: 适得府君书    时间: 2021-1-13 09:32
单片机里面的编程还是要多注意一些细节。还有c语言基础要了解,至少一些循环语句的使用要清楚。你这段代码有几个问题:
一、定义变量y的时候没有初始化就进行y++。有时候不会出现问题,有时候那可是致命的问题。没有初始化的定义不一定0,所以进行判断的时候就不会成立。
二、if判断语句使用有问题。if只是一个判断不是循环。所以if条件每次都成立进入后y+1跳出后又把0赋值给y。所以这段代码使用的if是没有意义的。跟一些方式是一样的:
while(1)
{
led_flash();
beep();
}
三、延时问题。delay(10);延时的位置无意义。
void main()
{
while (1)
{
//这里是主循环
delay(10);//在这延时才有用
}
}
灯闪5下,蜂鸣器响一下你可以用for循环比较简单。流程上也比较易懂。
int i;
for(i=0;i<5;i++)
{
}
方式有很多种可以多尝试一些




作者: kxcuser    时间: 2021-1-13 09:35
void main()
{
static int y;
delay(10);
while(1)
{
  for(;y<5;y++)
   {
    led_flash();
   }
  y=0;
  beep();
}
}
作者: woshinh    时间: 2021-1-13 15:30
你这while循环里没有延时,闪五下,蜂鸣器响一下这个功能已经实现了,只是速度太快你分辨不出来
作者: xy07580782    时间: 2021-1-13 18:11
适得府君书 发表于 2021-1-13 09:32
单片机里面的编程还是要多注意一些细节。还有c语言基础要了解,至少一些循环语句的使用要清楚。你这段代码 ...

静态型变量应该不用赋初值也可以吧,默认是0.




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