ucos学习实例之消息队列---按键控制LED的亮灭
2013-03-24 20:13
781 查看
OS_EVENT*KeyQEvent; INT8Uerr; INT8U*Qmsg_Key1="Key1"; INT8U*Qmsg_Key2="Key2"; INT8U*Qmsg_Key3="Key3"; INT8U*Qmsg_Key4="Key4";
/****************************************************************************
*名称:staticvoidAppTaskLED(void*p_arg)
*功能:LED任务
*入口参数:无
*出口参数:无
*优先级:5
*调用方法:无
****************************************************************************/
staticvoidAppTaskLED(void*p_arg)
{
INT8U*q_keymsg;
(void)p_arg;
while(1)
{
q_keymsg=(INT8U*)OSQPend(KeyQEvent,10,&err);/*扫描消息队列*/
if(err==OS_NO_ERR)
{
if(q_keymsg==Qmsg_Key2)/*如果按键2被按键,则相应相关处理函数*/
{
LED2_ON();
}
elseif(q_keymsg==Qmsg_Key1)
{
LED1_ON();
}
elseif(q_keymsg==Qmsg_Key3)
{
LED3_ON();
}
elseif(q_keymsg==Qmsg_Key4)
{
LED3_OFF();
LED2_OFF();
LED1_OFF();
}
}
}
}
/****************************************************************************
*名称:staticvoidAppTaskKey(void*pdata)
*功能:按键扫描任务
*入口参数:无
*出口参数:无
*优先级:3
*调用方法:无
****************************************************************************/
staticvoidAppTaskKey(void*pdata)
{
void*Qstart[10];//用户创建消息队列,能够存放10条消息
INT8UKey1State;
INT8UKey2State;
INT8UKey3State;
INT8UKey4State;
INT8Ukey1_release=0;
INT8Ukey2_release=0;
INT8Ukey3_release=0;
INT8Ukey4_release=0;
KeyQEvent=OSQCreate(&Qstart[0],10);
while(1)
{
OSTimeDlyHMSM(0,0,0,50);
Key1State=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5);
Key2State=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2);
Key3State=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3);
Key4State=GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_6);
if(Key1State==0)
{
OSTimeDlyHMSM(0,0,0,20);
Key1State=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5);
if(Key1State==0)
{
key1_release=1;
}
}
if(Key1State==0&&key1_release==1)
{
OSQPost(KeyQEvent,Qmsg_Key1);
key1_release=0;
}
if(Key2State==0)
{
OSTimeDlyHMSM(0,0,0,20);
Key2State=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2);
if(Key2State==0)
{
key2_release=1;
}
}
if(Key2State==0&&key2_release==1)
{
OSQPost(KeyQEvent,Qmsg_Key2);
key2_release=0;
}
if(Key3State==0)
{
OSTimeDlyHMSM(0,0,0,20);
Key3State=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3);
if(Key3State==0)
{
key3_release=1;
}
}
if(Key3State==0&&key3_release==1)
{
OSQPost(KeyQEvent,Qmsg_Key3);
key3_release=0;
}
if(Key4State==0)
{
OSTimeDlyHMSM(0,0,0,20);
Key4State=GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_6);
if(Key4State==0)
{
key4_release=1;
}
}
if(Key4State==0&&key4_release==1)
{
OSQPost(KeyQEvent,Qmsg_Key4);
key4_release=0;
}
}
}
相关文章推荐
- CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)
- arduino学习系列——按键控制LED灯
- ucos-ii学习笔记——消息队列的原理及使用
- ucosiii消息队列实例
- MCU学习3--按键控制LED
- Ucos学习之邮箱与消息队列
- S3C2440学习之GPIO按键控制LED灯
- MCU学习4--利用一个按键控制两个LED与防抖
- FPGA学习之按键控制led
- 嵌入式系统学习(五)-NanoPi2基础实例开发(裸机程序按钮控制LED灯)
- CC2530学习笔记の外部中断——按键控制LED
- UCOS-消息队列(学习笔记)
- ucos-ii学习笔记——消息队列的原理及使用
- C51源代码--用按键控制led走马灯实例
- ucos-II消息队列学习笔记
- 3.STM32中对EXTI_PE5_Config()函数的理解(自定义)之中断控制按键LED
- MQ(消息队列)学习
- ucosII 关于事件控制块,信号量,邮箱,消息队列,自己的理解。
- RabbitMQ (消息队列)专题学习03 Work Queues(工作队列)
- ActiveMQ学习总结(8)——消息队列设计精要