找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3024|回复: 11
收起左侧

新手求助,51单片机灯闪五下,蜂鸣器响一下,现在是同时闪和响,谢谢

  [复制链接]
ID:876967 发表于 2021-1-12 22:06 | 显示全部楼层 |阅读模式
#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();

         }


}
回复

使用道具 举报

ID:317966 发表于 2021-1-12 23:28 | 显示全部楼层
把你的led-flasfh()和beep()发出来,不然看不出来

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:235200 发表于 2021-1-12 23:50 | 显示全部楼层
if (y<=5)改成while(y<5),同时在前面加一条y=0;

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:342822 发表于 2021-1-13 00:12 | 显示全部楼层
闪五下,蜂鸣器响一下。那就缺Y=5的判断,y=5时蜂鸣器响,响多长时间由延迟确定然后y=0再次循环

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:390416 发表于 2021-1-13 01:11 | 显示全部楼层
关于这种小程序 你可以观看《人人学会单片机》第12课,学习框架式编程方式的操作方式。

不管多少颗灯各自闪烁。只需要寻找一个公倍数就行了。
回复

使用道具 举报

ID:584814 发表于 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归零
         }  
}
回复

使用道具 举报

ID:855897 发表于 2021-1-13 08:56 | 显示全部楼层
  beep();下面加点延时试试。
回复

使用道具 举报

ID:844772 发表于 2021-1-13 09:07 | 显示全部楼层
delay 和判断的位置错了。
void main()
{
        static int y;
        while (1)
         {
            if (y==5)
           {
            y = 0;
            beep();
          }
        y++;
       led_flash();
       delay(10);
      }
}
回复

使用道具 举报

ID:367934 发表于 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++)
{
}
方式有很多种可以多尝试一些



回复

使用道具 举报

ID:136485 发表于 2021-1-13 09:35 | 显示全部楼层
void main()
{
static int y;
delay(10);
while(1)
{
  for(;y<5;y++)
   {
    led_flash();
   }
  y=0;
  beep();
}
}
回复

使用道具 举报

ID:238363 发表于 2021-1-13 15:30 | 显示全部楼层
你这while循环里没有延时,闪五下,蜂鸣器响一下这个功能已经实现了,只是速度太快你分辨不出来
回复

使用道具 举报

ID:293933 发表于 2021-1-13 18:11 | 显示全部楼层
适得府君书 发表于 2021-1-13 09:32
单片机里面的编程还是要多注意一些细节。还有c语言基础要了解,至少一些循环语句的使用要清楚。你这段代码 ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表