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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1665|回復: 6
打印 上一主題 下一主題
收起左側

單片機堆塔跑馬燈程序框架已完成,想要任意定時時間沒有思路

[復制鏈接]
跳轉到指定樓層
樓主
ID:1005692 發表于 2022-6-13 19:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
堆塔代碼框架完成可以正常跑,但只能調推塔速度和流水速度,這款單片機沒有ADC,沒法根據電量堆塔跑馬燈,定時器有2個,充電模擬ADC 堆塔跑馬燈 我想任意定時時間 比如說2分鐘,8分鐘,16分鐘 如果用我這個框架可以用什么方式去實現?求大佬指點謝謝!

單片機源程序如下:
  1. bit    _1ms_flag;
  2. unint  led_run_stage_time_count_1;
  3. unint  led_run_stage_time_count_2;

  4. unchar led_run_stage;

  5. unint  led_switch_time_count;     //閃燈頻率
  6. unchar led_switch_stage;
  7. /*----------------------------------------
  8. D1=LED1 D2=LED2 D3=LED3 D4=LED4
  9. 為0時 LED點亮 為1時 LED關閉
  10. --------------------------------------------*/
  11. void ParamInitFunc(void)   // 充電參數初始化
  12. {
  13.   _1ms_flag = 0;
  14.   led_time8=0;
  15.   led_run_stage_time_count_1 = 0;
  16.   led_run_stage_time_count_2 = 0;

  17.   led_run_stage         = 0;
  18.   led_switch_time_count = 0;
  19.   led_switch_stage      = 0;
  20. }

  21. void LED_WorkFunc(void)
  22. {
  23.   if( _1ms_flag )     //定時器0 中斷函數定時1ms   置1
  24.   {
  25.     _1ms_flag = 0;
  26.         
  27.         led_run_stage_time_count_1++;      //每毫秒 +1   
  28.         if( led_run_stage_time_count_1 >= 60000 )      // 定時1分鐘
  29.         {
  30.           led_run_stage_time_count_1 = 0;
  31.           led_run_stage_time_count_2++;         // 每分鐘+1

  32.           if( led_run_stage_time_count_2 >= 2 )    // 定時2分鐘   
  33.           {
  34.             led_run_stage_time_count_2 = 0;
  35.          
  36.         
  37.         if( led_run_stage < 3 )
  38.                 {
  39.                   led_switch_stage = 0;
  40.                 }
  41.         
  42.                  led_run_stage++;                           //  每2分鐘+1
  43.                 if( led_run_stage >= 3 )        //初始為0,第2分鐘為1,第4分鐘為2,第6分鐘為3
  44.                 {
  45.                   led_run_stage = 3;
  46.                 }
  47.           }
  48.    
  49.         }
  50.         
  51.         led_switch_time_count++;
  52.         if( led_switch_time_count >= 400 )   //閃燈頻率 400ms進入一次
  53.         {
  54.           led_switch_time_count = 0;
  55.           switch( led_run_stage )     
  56.           {
  57.             case 0:                               //初始為0  led_run_stage =0
  58.                   led_switch_stage++;
  59.                   if( led_switch_stage > 3 )               // switch 0-1-2-3
  60.                   {
  61.                     led_switch_stage = 0;
  62.                   }
  63.                 break;
  64.                
  65.                 case 1:
  66.                   led_switch_stage++;             //2分鐘后 led_run_stage =1
  67.                   if( led_switch_stage > 2 )      // switch 0-1-2
  68.                   {
  69.                     led_switch_stage = 0;
  70.                   }
  71.                 break;
  72.                
  73.                 case 2:
  74.                   led_switch_stage++;          //4分鐘后 led_run_stage =2
  75.                   if( led_switch_stage > 1 )   //switch  0-1
  76.                   {
  77.                     led_switch_stage = 0;
  78.                   }
  79.                 break;
  80.                
  81.                 case 3:
  82.                   led_switch_stage++;        //6分鐘后 led_run_stage =3
  83.                   if( led_switch_stage > 1 )      //switch  0-1
  84.                   {
  85.                     led_switch_stage = 0;
  86.                   }
  87.                 break;
  88.           }
  89.         }
  90.         
  91.         switch( led_run_stage )    //根據前面定時時間 賦值 led_run_stage
  92.         {
  93.           case 0:                         //初始為0  led_run_stage =0
  94.             if( led_switch_stage == 0 )    // switch 0-1-2-3
  95.                 {
  96.                   D1 = 0;
  97.                   D2 = 1;
  98.                   D3 = 1;        
  99.                   D4 = 1;
  100.                 }
  101.                 else if( led_switch_stage == 1 )
  102.                 {
  103.                   D1 = 1;
  104.                   D2 = 0;
  105.                   D3 = 1;        
  106.                   D4 = 1;
  107.                 }
  108.                 else if( led_switch_stage == 2 )
  109.                 {
  110.                   D1 = 1;
  111.                   D2 = 1;
  112.                   D3 = 0;        
  113.                   D4 = 1;
  114.                 }
  115.                 else if( led_switch_stage == 3 )
  116.                 {
  117.                   D1 = 1;
  118.                   D2 = 1;
  119.                   D3 = 1;        
  120.                   D4 = 0;
  121.                 }
  122.           break;
  123.          
  124.           case 1:              //2分鐘后  led_run_stage =1   
  125.             if( led_switch_stage == 0 )            // switch 0-1-2
  126.                 {
  127.                   D1 = 0;
  128.                   D2 = 0;
  129.                   D3 = 1;        
  130.                   D4 = 1;
  131.                 }
  132.                 else if( led_switch_stage == 1 )
  133.                 {
  134.                   D1 = 0;
  135.                   D2 = 1;
  136.                   D3 = 0;        
  137.                   D4 = 1;
  138.                 }
  139.                 else if( led_switch_stage == 2 )
  140.                 {
  141.                   D1 = 0;
  142.                   D2 = 1;
  143.                   D3 = 1;        
  144.                   D4 = 0;
  145.                 }
  146.           break;
  147.          
  148.           case 2:                             //4分鐘后  led_run_stage =2
  149.             if( led_switch_stage == 0 )        // switch 0-1
  150.                 {
  151.                   D1 = 0;
  152.                   D2 = 0;
  153.                   D3 = 0;        
  154.                   D4 = 1;
  155.                 }
  156.                 else if( led_switch_stage == 1 )
  157.                 {
  158.                   D1 = 0;
  159.                   D2 = 0;
  160.                   D3 = 1;        
  161.                   D4 = 0;
  162.                 }
  163.           break;
  164.          
  165.           case 3:                          //6分鐘后  led_run_stage =3
  166.             if( led_switch_stage == 0 )         // switch 0-1
  167.                 {
  168.                   D1 = 0;
  169.                   D2 = 0;
  170.                   D3 = 0;        
  171.                   D4 = 0;
  172.                 }
  173.                 else if( led_switch_stage == 1 )
  174.                 {
  175.                   D1 = 0;
  176.                   D2 = 0;
  177.                   D3 = 0;        
  178.                   D4 = 1;
  179.                 }
  180.           break;
  181.         }
  182.   }
  183. }

  184. void mian()
  185. {
  186.     ParamInitFunc();            //充電參數初始化
  187. POWER_INITIAL();        //系統初始化
  188.     PWM1_INITIAL();       //初始化PWM
  189.     TIMER0_INITIAL();    //初始化定時器0
  190.      GIE = 1;                  //開中斷
  191.      T0IE = 1;               //打開定時器0
  192.     while(1)
  193.     {
  194.         MCLRWDT();                  //清看門狗
  195.          if(CH) //接充電口 高電平
  196.          {
  197.                     if(!MM)// 充電中
  198.                         {

  199.                                 LED_WorkFunc();

  200.                         }
  201.                         else // 充滿電
  202.                         {
  203.                                    D1=0;
  204.                                    D2=0;
  205.                                    D3=0;
  206.                                    D4=0;
  207.                         }
  208.             
  209.          }   
  210.          else   //充電 拔除
  211.          {
  212.                                 D1=1;
  213.                                 D2=1;
  214.                                 D3=1;
  215.                                 D4=1;
  216.          }
  217.             
  218.     }

  219. }
復制代碼

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

使用道具 舉報

沙發
ID:609524 發表于 2022-6-13 21:07 | 只看該作者
通過按鍵改變定時的時間
回復

使用道具 舉報

板凳
ID:99525 發表于 2022-6-13 23:18 | 只看該作者
加按鍵進行調節或者用串口命令調節
回復

使用道具 舉報

地板
ID:1005692 發表于 2022-6-14 09:50 | 只看該作者
雪玉寐影 發表于 2022-6-13 23:18
加按鍵進行調節或者用串口命令調節

我這個功能是模擬充電....沒有其他多余動作的
回復

使用道具 舉報

5#
ID:161164 發表于 2022-6-14 11:35 | 只看該作者
輝芒微 發表于 2022-6-14 09:50
我這個功能是模擬充電....沒有其他多余動作的

"任意定時時間 比如說2分鐘,8分鐘,16分鐘"
你這時間是什么?
是led_run_stage_time_count_2的比較值
還是led_run_stage從0到3走一次的時間?
回復

使用道具 舉報

6#
ID:1005692 發表于 2022-6-14 15:33 | 只看該作者
lkc8210 發表于 2022-6-14 11:35
"任意定時時間 比如說2分鐘,8分鐘,16分鐘"
你這時間是什么?
是led_run_stage_time_count_2的比較值
...

跑 led_run_stage從0到3  的時間
回復

使用道具 舉報

7#
ID:213173 發表于 2022-6-14 21:43 | 只看該作者
輝芒微 發表于 2022-6-14 09:50
我這個功能是模擬充電....沒有其他多余動作的

用時間模擬ADC結果控制進度條。給你一個程序構架,變量按需自行調整。
  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char       

  4. uchar code table[]={0xff,0xfe,0xfc,0xf8,0xf0};

  5. uchar num,min;
  6. bit flag;

  7. void InitTimer0(void)//50毫秒@12.000MHz
  8. {
  9.     TMOD = 0x01;
  10.     TH0 = 0x3C;
  11.     TL0 = 0xB0;
  12.     EA = 1;
  13.     ET0 = 1;
  14.     TR0 = 1;
  15. }

  16. void main(void)
  17. {
  18.         uchar i=0,j;
  19.         InitTimer0();
  20.         while(1)
  21.         {
  22.                 if(flag)//周期250ms       
  23.                 {
  24.                         flag=0;
  25.                         if(min<2)      {P1=table[i];j=0;}
  26.                         else if(min<4) {P1=table[i];j=1;}
  27.                         else if(min<6) {P1=table[i];j=2;}
  28.                         else if(min<8) {P1=table[i];j=3;}
  29.                         else if(min>=8){P1=table[i];j=4;}
  30.                         i++;
  31.                         if(i>4)i=j;
  32.                 }
  33.         }
  34. }

  35. void Timer0Interrupt(void) interrupt 1
  36. {
  37.         static char        i;
  38.         TH0 = 0x3C;
  39.         TL0 = 0xB0;
  40.         i++;
  41.         if(i>=5)//250ms
  42.         {
  43.                 i=0;
  44.                 flag=1;
  45.                 if(++num>=240)//分鐘
  46.                 {
  47.                         num=0;
  48.                         if(min<8)
  49.                                 min++;
  50.                 }
  51.         }
  52. }
復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚韩 | 国产精品一区二区av | 亚洲精品在线播放 | 成人精品一区二区三区 | 欧美激情综合五月色丁香小说 | 男人天堂999 | 天天操 夜夜操 | 国产99小视频 | 国产 日韩 欧美 在线 | 成人亚洲精品久久久久软件 | 特一级毛片 | 国产精品观看 | 天天综合久久 | 欧美视频xxx| 欧美日韩一 | 久久久久亚洲 | 欧美性久久 | 成人美女免费网站视频 | 国产一区二区三区在线免费 | 亚洲精品18| 不卡一区二区三区四区 | 综合精品 | 精品久久视频 | 黄篇网址 | 天天操夜夜操免费视频 | 男女羞羞视频在线观看 | 国产精品一区二区三区久久久 | 99视频精品| 国产精品海角社区在线观看 | av影音资源 | 欧美一二三四成人免费视频 | 国产中文字幕亚洲 | www.青青草| 欧美日韩电影在线 | 国产高清视频一区二区 | 天天狠狠 | 中文字幕一区二区三区在线观看 | 欧美一区视频 | 日本精品一区二区三区在线观看视频 | 国产小视频精品 | 国产精品精品视频一区二区三区 |