欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 請教下單片機堆塔跑馬燈代碼異常問題 [打印本頁]

作者: 輝芒微    時間: 2022-6-9 17:35
標題: 請教下單片機堆塔跑馬燈代碼異常問題
遇到個項目  國產8位單片機沒AD  充電LED顯示這里卡住了 共有4顆LED 分別 LED1、LED2、LED3、LED4  //D1  D2  D3  D4
堆塔跑馬燈 4顆燈跑馬燈,定時一段時間 LED1燈常亮其余跑馬燈 后續定時一段時間 依次類推 到最后一顆LED4閃爍,滿電燈全亮。 我寫了的這個在while里面有問題,定時函數里面寫的標志位 沒作用
代碼進到跑馬燈void ledpmd()里面第一個if,后面else if 跑不起來 求大佬指教一下

void  ledpmd(void)
{   
        if(cm_ledfag==1)   // 充電開啟 前2分鐘流水跑馬燈
        {
             if(cn1s)
            {
                time1s++;
                cn1s=0;
            }
            if(time1s>40)  //定時1s
            {
                time1s=0;
               
                if(ledcn++>4)

                ledcn=0;

                    switch(ledcn)
                    {
                        case 0:     
                                    D1=1;
                                    D2=1;
                                    D3=1;        
                                    D4=1;
                        break;

                        case 1:                                            
                                     D1=0;                                                                     
                        break;

                        case 2:
                                     D2=0;                                                                                                                              
                        break;

                        case 3:            
                                     D3=0;                                                                                                         
                        break;

                        case 4:            
                                     D4=0;                                                                                                         
                        break;        

                        default:


                        break;

                    }  //switch
                }   
            }  //  
   
        else if(led_state==2)  // 定時2分鐘標志位  LED1常亮 LED2-LED4流水跑馬燈
        {
            if(cn1s)
            {
                time1s++;
                cn1s=0;
            }
            if(time1s>40)   //定時1s
            {
                time1s=0;
                              
                    if(ledcn++>4)
                                
                        ledcn=0;
                                                
                    switch(ledcn)
                    {
                        case 0:     
                             D1=0;
                             D2=1;
                             D3=1;        
                             D4=1;
                        break;

                        case 1:                                            
                              D1=0;                                                                     
                        break;

                        case 2:
                              D2=0;                                                                                                                              
                        break;

                        case 3:            
                              D3=0;                                                                                                         
                        break;

                        case 4:            
                              D4=0;                                                                                                         
                        break;        

                        default:
                                                  

                        break;

                    }  //switch
                                             
              }   
           }  //  2分鐘
   
        else if(led_state==3)   // 定時20分鐘標志位  LED1-LED2常亮 LED3-LED4流水跑馬燈
        {
            if(cn1s)
            {
                time1s++;
                cn1s=0;
            }
            if(time1s>40)  //定時1s
            {
                time1s=0;
                       
                    if(ledcn++>4)
                                
                        ledcn=0;
                                                
                    switch(ledcn)
                    {
                        case 0:     
                             D1=0;
                             D2=0;
                             D3=1;        
                             D4=1;
                        break;

                        case 1:                                            
                              D1=0;                                                                     
                        break;

                        case 2:
                              D2=0;                                                                                                                              
                        break;

                        case 3:            
                              D3=0;                                                                                                         
                        break;

                        case 4:            
                              D4=0;                                                                                                         
                        break;        

                        default:
                                                  

                        break;

                    }  //switch
                                             
              }   
           }        //  20分鐘

          else if(led_state==4)    // 定時30分鐘標志位  LED1-LED3常亮  LED4閃燈
           {
            if(cn1s)
            {
                time1s++;
                cn1s=0;
            }
            if(time1s>40)  //定時1s
            {
                time1s=0;
                       
                    if(ledcn++>4)
                                
                        ledcn=0;
                                                
                    switch(ledcn)
                    {
                        case 0:     
                             D1=0;
                             D2=0;
                             D3=0;        
                             D4=1;
                        break;

                        case 1:                                            
                              D1=0;                                                                     
                        break;

                        case 2:
                              D2=0;                                                                                                                              
                        break;

                        case 3:            
                              D3=0;                                                                                                         
                        break;

                        case 4:            
                              D4=0;                                                                                                         
                        break;        

                        default:
                                                  

                        break;

                    }  //switch
                                             
              }   
           }
}

void main()
{
    POWER_INITIAL();        //系統初始化
    PWM1_INITIAL();          //初始化T2
    TIMER0_INITIAL();  
     GIE = 1; //開中斷
     T0IE = 1;
     
   // LED燈初始化           
        D1=0;     //=1置高  關閉LED   
        D2=0;
        D3=0;
        D4=0;        
        PR2L=0;
        led_state=0;
        ledpmd();
        
     while(1)
     {
         MCLRWDT();          //清看門狗
         
            if(flag2s)  //關閉開機畫面
            {
               flag2s=0;
                D1=1;
                D2=1;
                D3=1;   
                D4=1;
            }
          //--------------------------------  
            if(CH) //充電高電平
            {
                MCLRWDT();
                             
            //-------跑馬燈入口----------
                    ledpmd();     
            //------------------------------            
                cm_ledfag=1;         //狀態位   
        //----------2min------------------   
                if(flag_m1)     // 中斷函數里面1分鐘 flag_m1 置一次1
                {
                    min2++;
                    flag_m1=0;
                }
                if(min2>1)
                {
                    min2=0;
                    flag_m1=0;
                    cm_ledfag=0;
                    led_state=2;    //狀態位                           
                    cn5s=0;
                    flag5s=0;
                }   
       //------------20min-----------------         
                if(flag_m1)
                {
                    min20++;
                    flag_m1=0;
                }
                if(min20>19)
                {
                    min20=0;
                    flag_m1=0;
                    cm_ledfag=0;
                    led_state=3;    //狀態位                           
                    cn5s=0;
                    flag5s=0;
                }   
        //--------------30min----------------
                if(flag_m1)
                {
                    min30++;
                    flag_m1=0;
                }
                if(min30>29)
                {
                    min30=0;
                    flag_m1=0;
                    cm_ledfag=0;
                    led_state=4;        //狀態位                    
                    cn5s=0;
                    flag5s=0;
                }  
        //-------------------------------------
            }
      
   } //while
      
}  //main



作者: 人工置頂員    時間: 2022-6-10 16:26
頂一下
作者: lkc8210    時間: 2022-6-10 16:50
你只用一個 flag_m1來判斷1分鐘
第一個if判斷完后就清零
下面的if進不去

而且你把cm_ledfag=1;放在while(1)里
那他就永遠等于1了
下面的if當然進不去

  1.      cm_ledfag=1;         //狀態位   
  2.      while(1)
  3.      {
  4.          MCLRWDT();          //清看門狗
  5.          
  6.             if(flag2s)  //關閉開機畫面
  7.             {
  8.                flag2s=0;
  9.                 D1=1;
  10.                 D2=1;
  11.                 D3=1;   
  12.                 D4=1;
  13.             }
  14.           //--------------------------------  
  15.             if(CH) //充電高電平
  16.             {
  17.                 MCLRWDT();
  18.                              
  19.             //-------跑馬燈入口----------
  20.                     ledpmd();     
  21.             //------------------------------            
  22.                 if(flag_m1)     // 中斷函數里面1分鐘 flag_m1 置一次1
  23.                 {
  24.                     if(minCnt<30)minCnt++;
  25.                     flag_m1=0;
  26.                 }
  27.         //----------2min------------------   
  28.                 if(minCnt==2 && led_state!=2)
  29.                 {
  30.                     cm_ledfag=0;
  31.                     led_state=2;    //狀態位                           
  32.                     cn5s=0;
  33.                     flag5s=0;
  34.                 }   
  35.        //------------20min-----------------   
  36.                 if(minCnt==20 && led_state!=3)
  37.                 {
  38.                     cm_ledfag=0;
  39.                     led_state=3;    //狀態位                           
  40.                     cn5s=0;
  41.                     flag5s=0;
  42.                 }   
  43.         //--------------30min----------------
  44.                 if(minCnt==30 && led_state!=4)
  45.                 {
  46.                     cm_ledfag=0;
  47.                     led_state=4;        //狀態位                    
  48.                     cn5s=0;
  49.                     flag5s=0;
  50.                 }  
  51.         //-------------------------------------
  52.             }
  53.       
  54.    } //while
復制代碼




作者: 楊天想    時間: 2022-6-11 17:56
lkc8210 發表于 2022-6-10 16:50
你只用一個 flag_m1來判斷1分鐘
第一個if判斷完后就清零
下面的if進不去

單片機也沒比較器嗎,如果有的話可以用比較器做,這樣效果會好一點





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1