久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1351|回復: 3
收起左側

請教下單片機堆塔跑馬燈代碼異常問題

[復制鏈接]
ID:1005692 發表于 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


回復

使用道具 舉報

ID:301191 發表于 2022-6-10 16:26 | 顯示全部樓層
頂一下
回復

使用道具 舉報

ID:161164 發表于 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
復制代碼



回復

使用道具 舉報

ID:609524 發表于 2022-6-11 17:56 | 顯示全部樓層
lkc8210 發表于 2022-6-10 16:50
你只用一個 flag_m1來判斷1分鐘
第一個if判斷完后就清零
下面的if進不去

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费一看一级毛片 | 久久久久久国产精品免费免费狐狸 | 国产精品福利在线观看 | 亚洲一区亚洲二区 | 欧美激情综合五月色丁香小说 | 亚洲a视频| 粉嫩一区二区三区性色av | 中文二区| 毛片一区二区三区 | 伊人春色在线观看 | 天天草天天 | 成人免费观看男女羞羞视频 | 黑人精品欧美一区二区蜜桃 | 91福利电影在线观看 | 日韩久久久一区二区 | 亚洲精品视频在线观看免费 | 久久这里有精品 | 久色激情 | 日韩欧美三区 | 91欧美 | 91传媒在线观看 | 成人毛片网 | 奇米超碰 | 亚洲精品成人在线 | 久久福利 | 国产乱码精品1区2区3区 | 蜜桃日韩| 久久国产精品色av免费观看 | 夜夜艹| 亚洲欧美综合 | 午夜噜噜噜 | 日韩午夜在线播放 | 成人午夜免费视频 | 国产精品美女 | 欧美在线不卡 | 国产精品久久久久久吹潮 | 成人精品鲁一区一区二区 | 日本一二区视频 | 国产一区二区精品在线观看 | 亚洲一区| 久草视频在线播放 |