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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1281|回復: 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


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美在线视频 | 99爱免费 | 欧美一区二区三区小说 | 在线亚洲电影 | 日韩影音 | 国产欧美一区二区精品久导航 | 久久9久| 日韩在线免费播放 | 亚洲精品一区二区三区四区高清 | 羞羞视频网站在线观看 | 久久久成人精品 | 色爱综合| 欧美成年人网站 | 精品国产91 | 在线精品一区 | 精品毛片 | 亚洲精品一区二区 | 精品1区2区 | 日本不卡一区 | 久久一二 | 精品国产乱码久久久久久a丨 | 国产美女黄色片 | 国产精品久久久久久久久免费丝袜 | 久久国产高清视频 | 欧美国产大片 | 亚洲欧美一区二区在线观看 | 国产二区av | 婷婷色国产偷v国产偷v小说 | 一级做受毛片免费大片 | 亚洲欧美中文字幕在线观看 | 日韩高清电影 | 日本特黄a级高清免费大片 成年人黄色小视频 | 中文字幕av亚洲精品一部二部 | 99国产精品一区二区三区 | 成人一区二区三区在线 | 51ⅴ精品国产91久久久久久 | 亚洲成人自拍 | 欧美天堂 | 色婷婷影院| 宅男噜噜噜66一区二区 | 日韩欧美一区二区三区免费观看 |