标题: 求助这个C语言程序,怎么样修改才能退出case9模式? [打印本页]

作者: zzh2118    时间: 2020-8-26 13:11
标题: 求助这个C语言程序,怎么样修改才能退出case9模式?
void key()
{
        u8 j;
        static u8 cnt=0;
         key1=1;
         if(key1==0)
         {
                 delay(10);
                 if(key1==0)
           {
                   while(!key1);
                         cnt++;
                         if(cnt>=10)
                                 cnt=0;
                 }
         }
                 
         switch(cnt)
         {
                 
                 
                case 1:
                         for(j=10;j>0;j--)
                {
                 sendGRB(g);
                }
                break;

                case 2:
                         for(j=10;j>0;j--)
                {
                 sendGRB(r);
                }
                break;

                case 3:
                         for(j=10;j>0;j--)
                {
                 sendGRB(b);
                }
                break;

                case 4:
                         for(j=10;j>0;j--)
                {
                 sendGRB(bor);
                }
                break;

                case 5:
                         for(j=10;j>0;j--)
                {
                 sendGRB(bog);
                }
                break;

                case 6:
                         for(j=10;j>0;j--)
                {
                 sendGRB(gor);
                }
                break;

                case 7:
                         for(j=10;j>0;j--)
                {
                 sendGRB(white);
                }
                break;
               
        
                case 8:         
                for(j=10;j>0;j--)
                {
                 sendGRB(black);
                }
                break;
               
                case 9:         
                for(j=10;j>0;j--)
                {
                 zidong();
                }
                break;
               
                default:
                ws2812b=1;
                break;                 
   }
}

void main()
{
        
        while(1)
        {
                key();
         }
}


作者: angmall    时间: 2020-8-26 15:44
你这个程序不完整,没法给你看是哪里出问题了!

作者: zzh2118    时间: 2020-8-27 07:42
#include<STC15.H>
#include<intrins.h>

#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
#define r 0x00ff00
#define g 0xff0000
#define b 0x0000ff
#define black 0x000000
#define white 0xffffff
#define bor 0x00ffff
#define bog 0xff00ff
#define gor 0xffff00



u32 grb;
sbit ws2812b=P5^4;
sbit led2=P5^5;
sbit key1=P3^3;


void delay(u16 z)
{
        u16 x;
        u8 y;
        for(x=z;x>0;x--)
        for(y=112;y>0;y--);
}
void write0()
{
        ws2812b=1;
        _nop_();
        ws2812b=0;
        _nop_();
        _nop_();
       
}

void write1()
{
        ws2812b=1;
        _nop_();
        _nop_();
        _nop_();
        ws2812b=0;
        _nop_();
       
}


void sendGRB(u32 grb)
{
          u8 i;
        for(i=24;i>0;i--)
        {
                if(grb&0x800000)
                        write1();
                else
                        write0();
                grb<<=1;
  }
}

void zidong()
{
        u8 j;
       
                         for(j=10;j>0;j--)
                {
                 sendGRB(g);
                }
                delay(65535);
               
                         for(j=10;j>0;j--)
                {
                 sendGRB(r);
                }
                delay(65535);
                         for(j=10;j>0;j--)
                {
                 sendGRB(b);
                }
                delay(65535);

       
       
                         for(j=10;j>0;j--)
                {
                 sendGRB(bor);
                }
                delay(65535);
               
                         for(j=10;j>0;j--)
                {
                 sendGRB(bog);
                }
                delay(65535);
               
                         for(j=10;j>0;j--)
                {
                 sendGRB(gor);
                }
                delay(65535);
               
                         for(j=10;j>0;j--)
                {
                 sendGRB(white);
                }
                delay(65535);
       
}

void key()
{
        u8 j;
        static u8 cnt=0;
         key1=1;
         if(key1==0)
         {
                 delay(10);
                 if(key1==0)
           {
                   while(!key1);
                         cnt++;
                         if(cnt>=10)
                                 cnt=0;
                 }
         }
        /* if(key2==0)
         {
                 delay(10);
                 if(key2==0)
           {
                   while(!key2);
                         zidong();
                 }
         }*/
         
         switch(cnt)
         {
                 
                 
                case 1:
                         for(j=10;j>0;j--)
                {
                 sendGRB(g);
                }
                //delay(65535);
                break;
                case 2:
                         for(j=10;j>0;j--)
                {
                 sendGRB(r);
                }
                //delay(65535);
                break;
                case 3:
                         for(j=10;j>0;j--)
                {
                 sendGRB(b);
                }
                //delay(65535);
                break;
                case 4:
                         for(j=10;j>0;j--)
                {
                 sendGRB(bor);
                }
                //delay(65535);
                break;
                case 5:
                         for(j=10;j>0;j--)
                {
                 sendGRB(bog);
                }
                //delay(65535);
                break;
                case 6:
                         for(j=10;j>0;j--)
                {
                 sendGRB(gor);
                }
                //delay(65535);
                break;
                case 7:
                         for(j=10;j>0;j--)
                {
                 sendGRB(white);
                }
                //delay(65535);
                break;
               
       
                case 8:
                         
                for(j=10;j>0;j--)
                {
                 sendGRB(black);
                }
                //delay(65535);
                break;
               
                case 9:
                         
                for(j=10;j>0;j--)
                {
                 zidong();
                }
                //delay(65535);
                break;
               
                default:
                ws2812b=1;
               
                break;
       
         
                 
   }
}

void main()
{
       
        while(1)
        {
                key();
               
  }
}
作者: zzh2118    时间: 2020-8-27 13:26
angmall 发表于 2020-8-26 15:44
你这个程序不完整,没法给你看是哪里出问题了!

全部贴出来了,帮忙看看
作者: wulin    时间: 2020-8-27 19:17
zzh2118 发表于 2020-8-27 13:26
全部贴出来了,帮忙看看

楼主认为case 9 不能退出是没有依据的,由于楼主这槽糕的代码
                case 9:               
                for(k=10;k>0;k--)
                {
                        zidong();
                }
                break;               
会运行很长、很长、很长时间,只要你有耐心等就会等到break;跳出。
作者: wulin    时间: 2020-8-27 20:46
zzh2118 发表于 2020-8-27 13:26
全部贴出来了,帮忙看看

做了一个标记,仿真运行了20多分钟才从 case 9: 跳出。
作者: zzh2118    时间: 2020-8-28 07:41
wulin 发表于 2020-8-27 20:46
做了一个标记,仿真运行了20多分钟才从 case 9: 跳出。

谢谢解答
作者: aayon1979    时间: 2020-8-28 09:08
zidong里的延时很长很长,应该可以喝杯茶的时间
作者: zzh2118    时间: 2020-8-29 09:48
aayon1979 发表于 2020-8-28 09:08
zidong里的延时很长很长,应该可以喝杯茶的时间

是的,谢谢回答
作者: 相今    时间: 2020-8-29 10:03
    delay(65535)这个延时改一下会好一些吧
作者: zzh2118    时间: 2020-9-2 08:09
相今 发表于 2020-8-29 10:03
delay(65535)这个延时改一下会好一些吧

是的 改小就有效果了
作者: 0x00000000    时间: 2020-9-2 09:13
延时时间一共为7个65535时钟,得等很久才能执行完成




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