找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1583|回复: 8
打印 上一主题 下一主题
收起左侧

单片机呼吸灯程序调试问题

[复制链接]
跳转到指定楼层
楼主
ID:143767 发表于 2022-4-20 10:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位好,想请教大家下面的程序哪里有问题,问题描述:这是一个按键控制呼吸灯的程序,正常情况下按键按一下呼吸灯打开慢慢到最亮,再按一下按键呼吸灯慢慢熄灭,但是现在打开时呼吸灯最亮一下然后熄灭,再慢慢到最亮,不知问题出在哪里

单片机源程序如下:
#include <reg52.h>
unsigned char ID=0;
unsigned int Toff=0;
sbit LED=P1^0;         
sbit S1=P1^1;   
void no();
void off();
void Delay(unsigned int t);
void main(void)
{
   S1=1;
   LED=1;
   while(1)
   {
     if(S1==0)
     {
      Delay(500);                          
       if(S1==0)
         {
                                        while(S1==0);           
          ID++;
          if(ID==3)
                                         
          {
           ID=0;
          }
         }
          switch(ID)
{
          case 1:
          no();
          break;
          case 2:
          off();
          break;
          }
      }
  }
}

void no(void)
{
         
     for(Toff=1;Toff<500;Toff++)  
      {
               LED=0;                                         
               Delay(Toff);            
               LED=1;                                         
              Delay(500-Toff);           
      }  
      LED=0;
                        Delay(1000);
//      while (1);
}
void off(void)
{                        
   for(Toff=500;Toff>0;Toff--)   
    {
             LED=0;                     
             Delay(Toff);               
             LED=1;                    
            Delay(500-Toff);            
     }
      LED=1;
                 Delay(1000);
//      while (1);
}

void Delay(unsigned int t)   
{                        
while(--t);                 
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:121859 发表于 2022-4-20 15:10 | 只看该作者
可能是你的硬件连接是“1”点亮,还有就是Switch里面,再加一个default:break;分支。
回复

使用道具 举报

板凳
ID:143767 发表于 2022-4-20 15:29 | 只看该作者
zhxiufan 发表于 2022-4-20 15:10
可能是你的硬件连接是“1”点亮,还有就是Switch里面,再加一个default:break;分支。

好的,谢谢,我试试看
回复

使用道具 举报

地板
ID:624769 发表于 2022-4-20 16:44 | 只看该作者
本帖最后由 188610329 于 2022-4-20 16:45 编辑

  for(Toff=500;Toff>0;Toff--)     // 要么,这里变501
     {
              LED=0;                     
              Delay(Toff);               
              LED=1;                    
             Delay(500-Toff);            //要么,这里变501
      }

void Delay(unsigned int t)   
{                        
while(--t);                 //又或者这里变 t--
}
回复

使用道具 举报

5#
ID:624769 发表于 2022-4-20 17:26 | 只看该作者
188610329 发表于 2022-4-20 16:44
for(Toff=500;Toff>0;Toff--)     // 要么,这里变501
     {
              LED=0;                    ...

for(Toff=500;Toff>0;Toff--)    // 要么,这里变499
回复

使用道具 举报

6#
ID:482001 发表于 2022-4-20 17:46 来自手机 | 只看该作者
楼主把no函数的Toff=1改成Toff=0试试
回复

使用道具 举报

7#
ID:390416 发表于 2022-4-21 08:30 | 只看该作者
void RGB_Buffer_Allot()
{
        static u8 xdata Blue_PWM,Red_PWM,Green_PWM,CHANGE_Mode=0;
        static u8 count=0;
        count++;
        if(count>100)                                                        //count是速度控制。
        {
                count=0;
                switch(CHANGE_Mode)
                {
                        case 0:       
                                        Red_PWM=0;                               
                                        Green_PWM++;                        //绿灯渐渐亮起
                                        Blue_PWM=0;
                                        if(Green_PWM==255)
                                        {
                                                CHANGE_Mode=2;                //绿灯最亮了,进入2
                                        }
                                        break;
                        case 1:        Red_PWM=0;
                                        Green_PWM--;                        //绿灯渐渐灭掉
                                        Blue_PWM=0;
                                        if(Green_PWM==0)
                                        {
                                                CHANGE_Mode=2;                //绿灯黑了,进入2
                                        }
                                        break;                               
                }                                                               
                PWM_Write_Byte[2]=Green_PWM;
        }
}
这段代码,你改一下,用按键控制(CHANGE_Mode)的状态就行了。
回复

使用道具 举报

8#
ID:143767 发表于 2022-4-21 10:25 | 只看该作者
谢谢,谢谢诸位的帮助,我依次调试看看
回复

使用道具 举报

9#
ID:1006076 发表于 2022-4-22 18:07 | 只看该作者
dj3365191 发表于 2022-4-21 10:25
谢谢,谢谢诸位的帮助,我依次调试看看

楼主结果怎么样了?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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