电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 2027|回复: 10

这个代码为什么只能到d=6就不动了?

[复制链接]
发表于 2023-10-14 20:39:24 | 显示全部楼层 |阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit SPK = P1^0;
sbit K1 = P3^3;
   uchar d;

void delay10ms(unsigned int ms)
{
    unsigned int i, j;
    for(i = ms; i > 0; i--)
        for(j = 10000; j > 0; j--);
}
void Alarm(uchar t)
{
   uchar j;
  
  {
     SPK = 0;
    for(j=0;j<t;j++);
  }
}
  void Alarm1(uchar m)
{
   uchar i;

  {
     SPK = 1;
    for(i=0;i<m;i++);
  }
}
void main()
{
     
   
   while(1)

  {

 楼主| 发表于 2023-10-14 20:40:50 | 显示全部楼层
{
     
   
   while(1)

  {

        if(K1==0)
                        {
                         delay10ms(30);

                          if(K1==0)
                       
                           d++;

                           }

           if(d>11)
           {d=0;}
           P2=~d;
     if(d==1)
    {
       Alarm(0);
            Alarm1(100);
           }

          if(d==2)

   { Alarm(10);
            Alarm1(90);}

         if(d==3)

   { Alarm(20);
            Alarm1(80); }

           if(d==4)
    {
       Alarm(40);
            Alarm1(60);
           }

          if(d==5)

   { Alarm(80);
            Alarm1(20);}

         if(d==6)

   { Alarm(100);
            Alarm1(0);

         if(d==7)

   { Alarm(60);
            Alarm(40); }

           if(d==8)
    {
       Alarm(70);
            Alarm1(30);
           }

          if(d==9)

   { Alarm(80);
            Alarm1(20);}

         if(d==10)

   { Alarm(90);
            Alarm1(10);}

        if(d==11)

   { Alarm(100);
            Alarm1(0);
               

        }
    }
  }        }
发表于 2023-10-15 20:51:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2023-11-25 21:06:51 | 显示全部楼层
if(d==5)

   { Alarm(80);
            Alarm1(20);}

         if(d==6)

   { Alarm(100);
            Alarm1(0);

         if(d==7)

   { Alarm(60);
            Alarm(40); }在d6后面少了一个“}”
发表于 2023-11-25 21:08:15 | 显示全部楼层
if(d==5)

   { Alarm(80);
            Alarm1(20);}

         if(d==6)

   { Alarm(100);
            Alarm1(0);}

         if(d==7)

   { Alarm(60);
            Alarm(40); }
发表于 2023-11-25 23:30:32 来自手机 | 显示全部楼层
首先贴上来的代码没有层次感,不容易发现问题,看代码的意思是:按键K1控制字符型变量d自加,然后利用d的值调用两个函数控制P1.0口产生波形驱动蜂鸣器
发表于 2023-11-25 23:34:51 来自手机 | 显示全部楼层
这么多if容易出错,改成switch case语句要清晰很多
发表于 2023-11-25 23:41:03 来自手机 | 显示全部楼层
再有一个问题,按键K1虽然有消抖代码,但是没有释放代码,你能控制得了d等于多少吗?,说不定一按下K1,d就等于100了,但是d被定义为uchar型,最大值也不可能超过255
发表于 2023-11-25 23:49:41 来自手机 | 显示全部楼层
不好意思,楼主已经限制d<12了,按下K1后d周而复始地从0到11快速变化,P1.0口就能驱动蜂鸣器发声了
发表于 2023-11-26 21:28:57 | 显示全部楼层
1363822353 发表于 2023-11-25 23:34
这么多if容易出错,改成switch case语句要清晰很多

非常正确
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2024-11-21 20:01 , Processed in 0.060975 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

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