ba_wang_mao 发表于 2010-12-1 15:03:08

请教傻孩子:ucos/ii中,指示灯(熄灭、点亮、闪烁)三种状态,具体该如何实现?

1、指示灯可能有三种状态

       状态1: 指示灯一直熄灭   (例如:状态1 = 压力 < 10MPa 时,指示灯一直熄灭)
       状态2: 指示灯一直闪烁   (例如:状态2 = 压力 > 50MPa 时,指示灯一直闪烁)
       状态3: 指示灯一直点亮   (例如:状态3 =10MPa < 压力 < 50MPa 时,指示灯一直点亮)



   一般的程序中对于指示灯闪烁是如下解决的:
            (1)、 创建一个任务
            (2)、首先点亮指示灯
            (3)、 然后延时50ms,
            (4)、 然后熄灭指示灯
            (5)、 然后延时50ms,


       2、但是对于这种“多状态”的指示灯,如何用代码实现?


       3、在实际应用中,可能有很多这种“多状态”指示灯,难道要在同一个任务中实现吗?


      请教傻孩子赐教!

marx 发表于 2010-12-1 15:34:59

让检测压力的task发message。

ba_wang_mao 发表于 2010-12-1 16:37:03

回复【1楼】marx ●█〓
让检测压力的task发message。
-----------------------------------------------------------------------

   假如:实际工程中有50个指示灯,不可能定义50个任务,分别给每个指示灯发送消息吧!

Gorgon_Meducer 发表于 2010-12-3 09:51:15

用一个任务,在这个任务里面写三个状态机,对应三个灯。或者你写一个LED引擎,用一个状态极搞定所有。

ba_wang_mao 发表于 2010-12-3 18:03:06

1、当这个任务只针对1个指示灯(指示灯1有三种状态),可以如下写代码

   task_led()
   {

       while (1)
       {
            // 指示灯1有三种状态
             switch (led1_status)
             {
                  case 0:         //状态1
                      LED_OFF();// 指示灯熄灭
                      break;
                  case 1:         //状态2
                      LED_ON();// 指示灯点亮
                      break;
                  case 2:         //状态3
                      LED_ON();// 指示灯点亮
                      延时50ms;
                      LED_OFF();// 指示灯熄灭
                      延时50ms;
                      break;
                }
                延时50ms;
         }

   }


2、当这个任务针对2个指示灯(指示灯1有三种状态,指示灯2有二种状态),如何写代码?
      请指教!

AVR_DIY 发表于 2010-12-6 11:35:07

回复【4楼】ba_wang_mao

1、当这个任务只针对1个指示灯(指示灯1有三种状态),可以如下写代码
   task_led()
   {
       while (1)
       {
            // 指示灯1有三种状态
             switch (led1_status)
             {
                  case 0:         //状态1
                      led_off();// 指示灯熄灭
                      break;
                  case 1:         //状态2
                      led_on();// 指示灯点亮
                      break;
      ......
-----------------------------------------------------------------------

task_led()
   {

       while (1)
       {
            // 指示灯1有三种状态
             for(i=0;i<LedNum;i++)
            {
             switch (ledN_status)
             {
                  case 0:         //状态1
                      LED_OFF();// 指示灯熄灭
                      break;
                  case 1:         //状态2
                      LED_ON();// 指示灯点亮
                      break;
                  case 2:         //状态3
                      LED_ON();// 指示灯点亮
                      延时50ms;
                      LED_OFF();// 指示灯熄灭
                      延时50ms;
                      break;
                }
            }
                延时50ms;
         }

   }

ba_wang_mao 发表于 2010-12-6 16:50:45

太感谢了!。

ba_wang_mao 发表于 2010-12-6 16:55:34

INT8U ledN_status;

task_led()
   {

       while (1)
       {
            // 指示灯1有三种状态
             for(i=0;i<LedNum;i++)
            {
             switch (ledN_status)
             {
                  case 0:         //状态1 = 熄灭
                      LED_OFF();// 指示灯熄灭
                      break;
                  case 1:         //状态2 = 指示灯常亮
                      LED_ON();// 指示灯点亮
                      break;
                  case 2:         //状态3 = 指示灯闪烁
                      LED_ON();// 指示灯点亮
                      延时50ms;
                      LED_OFF();// 指示灯熄灭
                      延时50ms;
                      break;
                }
            }
                延时50ms;
         }

   }
页: [1]
查看完整版本: 请教傻孩子:ucos/ii中,指示灯(熄灭、点亮、闪烁)三种状态,具体该如何实现?