请教傻孩子:ucos/ii中,指示灯(熄灭、点亮、闪烁)三种状态,具体该如何实现?
1、指示灯可能有三种状态状态1: 指示灯一直熄灭 (例如:状态1 = 压力 < 10MPa 时,指示灯一直熄灭)
状态2: 指示灯一直闪烁 (例如:状态2 = 压力 > 50MPa 时,指示灯一直闪烁)
状态3: 指示灯一直点亮 (例如:状态3 =10MPa < 压力 < 50MPa 时,指示灯一直点亮)
一般的程序中对于指示灯闪烁是如下解决的:
(1)、 创建一个任务
(2)、首先点亮指示灯
(3)、 然后延时50ms,
(4)、 然后熄灭指示灯
(5)、 然后延时50ms,
2、但是对于这种“多状态”的指示灯,如何用代码实现?
3、在实际应用中,可能有很多这种“多状态”指示灯,难道要在同一个任务中实现吗?
请教傻孩子赐教! 让检测压力的task发message。 回复【1楼】marx ●█〓
让检测压力的task发message。
-----------------------------------------------------------------------
假如:实际工程中有50个指示灯,不可能定义50个任务,分别给每个指示灯发送消息吧! 用一个任务,在这个任务里面写三个状态机,对应三个灯。或者你写一个LED引擎,用一个状态极搞定所有。 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有二种状态),如何写代码?
请指教! 回复【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;
}
} 太感谢了!。 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]