📄 main.c
字号:
void Task0 (void *pdata)
{
pdata = pdata;
TargetInit ();
PINSEL2= 0x00000000;
IO1DIR = 0x00000000;
PINSEL1= 0x00000000;
IO0DIR = 0xffffffff;
IO0DIR = IO0DIR|LED1|LED2|LED3|BEEP; // 设置IO0DIR|LED1|LED2|LED3|BEEP为输出口
IO0SET = LED1|LED2|LED3|BEEP; // 初始化蜂鸣器不响,LED不亮
Mybox=OSMboxCreate((void*)0);
GUI_Initialize(); // 初始化LCM
GUI_SetColor(1, 0); // 设置前景色和背景色
OSTaskCreate (TaskKEY1,(void *)0, &TaskKEY1Stk[TaskStkLengh - 1], 4);
OSTaskCreate (TaskDisp,(void *)0, &TaskDispStk[TaskStkLengh - 1], 8); // 创建显示任务
ReMsgQeue=OSQCreate(&MsgQeueTb[0],100); // 创建消息队列最多可以存放100条消息
while (1)
{
OSTimeDly(50);
}
}
/*********************************************************************************************************
** TaskPJ
等待消息,并改变PWM占空比
********************************************************************************************************/
void TaskPJ(void *pdata)
{
uint32 i,zhuanxiang=0;
uint32 zhuanshu,zhuansu,*pt;
pt= (uint32*)pdata;
zhuansu=pt[0];
zhuanshu=pt[1];
zhuanxiang=pt[2];
if(zhuanxiang==0)
{
for(i=0;i<(((zhuanshu*1000)/1873));i++)
{
if(((a+1)%2)==1)
IO0CLR = ((tab1[a]^tab1[a+1])&0x0000000f)<<28;
else
IO0SET = ((tab1[a]^tab1[a+1])&0x0000000f)<<28;
a++;
OSTimeDlyHMSM(0,0,0,zhuansu);
if(a==8)a=0;
}
}
else
{
for(i=0;i<((zhuanshu*1000)/1873);i++)
{
if(((a+1)%2)==1)
IO0CLR = ((tab2[a]^tab2[a+1])&0x0000000f)<<28;
else
IO0SET = ((tab2[a]^tab2[a+1])&0x0000000f)<<28;
a++;
OSTimeDlyHMSM(0,0,0,zhuansu);
if(a==8)a=0;
}
}
OSTaskDel(OS_PRIO_SELF);
}
/*********************************************************************************************************
** TaskKEY1
查询按键,向TaskPWM发送改变后的消息
********************************************************************************************************/
void TaskKEY1(void *pdata)
{
uint8 key,i=0,dangqian,arr[4],err,jishu,flag,jishu1,flag1;
uint32 zhuansu=8,zhuanshu=720,cond[3];
pdata = pdata;
while (1)
{
key=keyin();
switch(dangqian+1)
{
case 1: //设置转速
switch(key)
{
case 1:
arr[0]=1;
jishu++;if(jishu==10)jishu=0;
arr[1]=jishu;
OSQPost(ReMsgQeue,(void*)arr);
break;
case 2:
arr[0]=2;
OSQPost(ReMsgQeue,(void*)arr);
break;
case 3:
arr[0]=3;
flag=!flag;
arr[1]=flag;
OSQPost(ReMsgQeue,(void*)arr);
break;
case 4:
arr[0]=4;
dangqian++;
if(dangqian==4)dangqian=0;
OSQPost(ReMsgQeue,(void*)arr);
break;
default:
break;
}
break;
case 2: // 设置转动的位移
switch(key)
{
case 1:
arr[0]=5;
jishu1++;if(jishu1==10)jishu1=0;
arr[1]=jishu1;
OSQPost(ReMsgQeue,(void*)arr);
break;
case 2:
arr[0]=6;
OSQPost(ReMsgQeue,(void*)arr);
break;
case 3:
arr[0]=7;
flag1=!flag1;
arr[1]=flag1;
OSQPost(ReMsgQeue,(void*)arr);
break;
case 4:
arr[0]=4;
dangqian++;
if(dangqian==4)dangqian=0;
OSQPost(ReMsgQeue,(void*)arr);
break;
default:
break;
}
break;
case 3: // 转向控制
if(key==3)
{
i=~i;
arr[0]=8;
arr[1]=i;
OSQPost(ReMsgQeue,(void*)arr);
}
if(key==4)
{
arr[0]=4;
dangqian++;
if(dangqian==4)dangqian=0;
OSQPost(ReMsgQeue,(void*)arr);
}
break;
case 4: // 启动控制
if(key==3)
{
OS_ENTER_CRITICAL();
zhuansu = Dispnum[0]*1000+Dispnum[1]*100+Dispnum[2]*10+Dispnum[3]; // 速度
zhuanshu = Dispnum1[0]*100+Dispnum1[1]*10+Dispnum1[2]; // 位移
OS_EXIT_CRITICAL();
cond[0] = zhuansu;
cond[1] = zhuanshu;
cond[2] = (uint32)i;
OSTaskCreate (TaskPJ,(void *)cond, &TaskPJStk[TaskStkLengh - 1], 2); // 创建电机启动任务
}
if(key==4)
{
arr[0]=4;
dangqian++;
if(dangqian==4)dangqian=0;
OSQPost(ReMsgQeue,(void*)arr);
}
break;
}
OSTimeDly(20);
}
}
/*********************************************************************************************************
** TaskKEY1
查询按键,向TaskPWM发送改变后的消息
********************************************************************************************************/
void TaskDisp(void *pdata)
{
uint8 i,err,Index=0,xiougai=0,clr=0,dangqian=0,zhuanxiang,x=0,y;
uint8 coord=0,coord1=7;
uint8 *pt;
uint8 shuz=0;
pdata = pdata;
Dispnum[0]=0;
Dispnum[1]=0;
Dispnum[2]=0;
Dispnum[3]=8;
Dispnum1[0]=7;
Dispnum1[1]=2;
Dispnum1[2]=0;
GUI_LoadPic1(0,0,*(num+Dispnum[0]),5,8);
for(i=1;i<4;i++)
GUI_LoadPic(5*i,0,*(num+Dispnum[i]),5,8);
for(i=0;i<3;i++)
GUI_LoadPic(5*i+30,0,*(num+Dispnum1[i]),5,8);
GUI_LoadPic1(0,45,*(hanzi+0),24,14);
for(i=1;i<4;i++)
GUI_LoadPic(32*i,45,*(hanzi+i),24,14);
while (1)
{
pt=(uint8*)OSQPend(ReMsgQeue,0,&err); //等待一条短消息
switch(pt[0])
{
case 1:
Dispnum[coord]=pt[1];
break;
case 2:
coord++;
if(coord==4)coord=0;
break;
case 3:
if(pt[1])
coord=0;
else
coord=7;
break;
case 4:
dangqian++;
if(dangqian==4)dangqian=0;
break;
case 5:
Dispnum1[coord1]=pt[1];
break;
case 6:
coord1++;
if(coord1==4)coord1=0;
break;
case 7:
if(pt[1])
coord1=0;
else
coord1=7;
break;
case 8:
zhuanxiang=pt[1];
break;
case 9:
break;
default:
break;
}
if(zhuanxiang==0)
GUI_LoadPic(100,0,zhengzhuan,24,14);
else
GUI_LoadPic(100,0,fanzhuan,24,14);
if(!clr)
{
for(i=0;i<4;i++)
{
if(i==coord)
GUI_LoadPic1(5*i,0,*(num+Dispnum[i]),5,8);
else
GUI_LoadPic(5*i,0,*(num+Dispnum[i]),5,8);
}
for(i=0;i<4;i++)
{
if(i==dangqian)
GUI_LoadPic1(32*i,45,*(hanzi+i),24,14);
else
GUI_LoadPic(32*i,45,*(hanzi+i),24,14);
}
for(i=0;i<3;i++)
{
if(i==coord1)
GUI_LoadPic1(5*i+30,0,*(num+Dispnum1[i]),5,8);
else
GUI_LoadPic(5*i+30,0,*(num+Dispnum1[i]),5,8);
}
}
else
{
GUI_ClearSCR();
clr=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -