我想实现以下功能:三个按键控制三个圆环在OLED屏上显示,按一个按键显示相应大小的环。但是我的程序每运行一次只有一个按键可以实现,另外两个不管用。跪求高手指点!!!!
//开始任务
void TaskStart(void * pdata)
{
pdata = pdata;
OS_ENTER_CRITICAL();
OSTaskCreate(Taskhuanshu, (void * )0, (OS_STK *)&TASK_huanshu_STK[huanshu_STK_SIZE-1], huanshu_TASK_Prio+1);
OSTaskCreate(Taskkeycontrol, (void * )0, (OS_STK *)&TASK_keycontrol_STK[keycontrol_STK_SIZE-1], keycontrol_TASK_Prio);
yx=OSMboxCreate((void *)0);
OSTaskSuspend(START_TASK_Prio); //suspend but not delete
OS_EXIT_CRITICAL();
}
//任务1
//环显示
void Taskhuanshu(void *pdata)
{ char *rasm;
INT8U err;
u16 dat;
rasm=(char *)OSMboxPend(yx,0,&err);
dat=*rasm;
for( ;;)
{ if(KEY_Scan()==1||KEY_Scan()==2||KEY_Scan()==3)
{ OSTaskSuspend (huanshu_TASK_Prio);
}
switch(dat)
{
case 0:
OLED_ShowString(78,3,"1");
Draw_Circle(60,40,15);
OLED_Refresh_Gram();
OSTimeDlyHMSM(0,0,0,100);
OLED_Fill(37,17,83,63,0);
OLED_Refresh_Gram();
case 1:
OLED_ShowString(78,3,"2");
Draw_Circle(60,40,19);
OLED_Refresh_Gram();
OSTimeDlyHMSM(0,0,0,10);
case 2:
OLED_ShowString(78,3,"3");
Draw_Circle(60,40,23);
OLED_Refresh_Gram();
OSTimeDlyHMSM(0,0,0,10);
}
rasm=(char *)OSMboxAccept(yx);
if(rasm!=(void *)0)
dat=*rasm;
}
}
//任务2
//按键控制
void Taskkeycontrol(void *pdata)
{ char rasm;
for(; ;)
{ OLED_ShowString(0,0,"huanshu :");
OLED_Refresh_Gram();
while(1)
{if(KEY_Scan()==1)
{rasm=0;
OSTaskResume (huanshu_TASK_Prio);
OSMboxPostOpt(yx,(void *)&rasm,OS_POST_OPT_BROADCAST);
}
else if(KEY_Scan()==2)
{ OSTaskResume (huanshu_TASK_Prio);
rasm=1;
OSMboxPostOpt(yx,(void *)&rasm,OS_POST_OPT_BROADCAST);}
else if(KEY_Scan()==3)
{ OSTaskResume (huanshu_TASK_Prio);
rasm=2;
OSMboxPostOpt(yx,(void *)&rasm,OS_POST_OPT_BROADCAST); } }
}
} |