微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 红绿灯的倒计时器,绿闪时候怎么倒计时呢,请大家给提提意见

红绿灯的倒计时器,绿闪时候怎么倒计时呢,请大家给提提意见

时间:10-02 整理:3721RD 点击:
红绿灯的倒计时器,绿闪时候怎么倒计时呢,大家给提提意见,我说的是自学习式倒计时器。

红绿灯状态在程序上用状态机来写。在绿灯闪烁的时候就算进入一个新的状态了。比如4S,那这个状态就停留4S后进入下一个状态。
至于闪灯,则在显示程序上处理一下就可以了。首先识别这个状态需要闪灯。然后打个比方每0.5S对变量Flash进行++,显示上判别
if(Flash%2 == 1)
    显示绿灯
else
    熄灭绿灯
大致就是这样的。

我想了解这一块的程序,绿闪时候程序怎么计时呢,绿灯亮0.5秒,灭0.5秒,倒计时器也跟着闪烁。

小编能分享个采用51系列搞的带数显的红绿灯程序吗  

    多的就不贴了,以前倒是写过交通灯的,只是现在看来我实在不好意思把以前的代码贴出来了。就找以前中的一段涉及到闪烁的贴出来吧。
    过段时间如果有时间了,我再写一个交通灯的小项目代码,开源出来,到时候@你哈~

  1. void display_update(void)//更新显示缓存
  2. {//50ms
  3.         red_1    = 0;
  4.         yellow_1 = 0;
  5.         green_1  = 0;
  6.         red_2    = 0;
  7.         yellow_2 = 0;
  8.         green_2  = 0;
  9.         if( ++shan >200 )
  10.                 shan = 0;
  11.         if( work_state == TIME_DX_GE )
  12.         {
  13.                 time = time_red;
  14.                 red_1 = 1;
  15.                 green_2 = 1;
  16.                 return;               
  17.         }
  18.         if( work_state == TIME_DX_SHI )
  19.         {
  20.                 time = time_red;
  21.                 red_1 = 1;
  22.                 green_2 = 1;
  23.                 return;               
  24.         }
  25.         if( work_state == TIME_NB_GE )
  26.         {
  27.                 time = time_green;
  28.                 red_2 = 1;
  29.                 green_1 = 1;
  30.                 return;
  31.         }
  32.         if( work_state == TIME_NB_SHI )
  33.         {
  34.                 time = time_green;
  35.                 red_2 = 1;
  36.                 green_1 = 1;
  37.                 return;
  38.         }
  39.         if( work_state == TIME_DELAY_GE )
  40.         {
  41.                 time = time_yellow;
  42.                 yellow_1 = 1;
  43.                 yellow_2 = 1;
  44.                 return;
  45.         }
  46.         if( work_state == DX )
  47.         {
  48.                 green_2 = 1;
  49.                 red_1 = 1;               
  50.         }
  51.         if( (work_state == DELAY) )
  52.         {
  53.                 green_2 = 1;
  54.                 red_1 = 1;
  55.                 if( shan%2 < 1 )
  56.                 {       
  57.                         yellow_1 = 0;
  58.                         yellow_2 = 1;
  59.                 }                                       
  60.         }
  61.         if( work_state == NB )
  62.         {
  63.                 green_1 = 1;
  64.                 red_2 = 1;       
  65.         }
  66.         if( (work_state == DELAY1) )
  67.         {
  68.                 green_1 = 1;
  69.                 red_2 = 1;
  70.                 if( shan%2 < 1 )
  71.                 {       
  72.                         yellow_1 = 1;
  73.                         yellow_2 = 0;
  74.                 }                                       
  75.         }
  76.         if( time_1s < 100 )
  77.                 return;
  78.         time_1s = 0;
  79.         time--;                       
  80. }

复制代码

还能说什么 谢了            

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top