📄 test.c
字号:
/******************************Test*******************************/
#include "includes.h"
#define TASK_STK_SIZE 512 //任务堆栈长度
OS_STK MyTaskStk[TASK_STK_SIZE]; //定义任务堆栈区
OS_STK YouTaskStk[TASK_STK_SIZE]; //定义任务堆栈区
OS_STK InPutTaskStk[TASK_STK_SIZE]; //定义任务堆栈区
INT16S key; //用于退出uCOS_II的键
INT8U x=0,y=0; //字符显示位置
INT8U row=0,column=0,round=60;
void MyTask(void *data); //声明任务
void YouTask(void *data); //声明任务
void InPutTask(void *data);
void drawstreet();
/************************主函数*********************************/
void main (void)
{
char* s_M="M"; //定义要显示的字符
OSInit( ); //初始化uCOS_II
PC_DOSSaveReturn( ); //保存Dos环境
PC_VectSet(uCOS, OSCtxSw); //安装uCOS_II中断
drawstreet();
OSTaskCreate(
MyTask, //创建任务MyTask
s_M, //给任务传递参数
&MyTaskStk[TASK_STK_SIZE - 1], //设置任务堆栈栈顶指针
0 //任务的优先级别为0
);
OSTaskCreate(
InPutTask, //创建任务MyTask
(void *)0, //给任务传递参数
&InPutTaskStk[TASK_STK_SIZE - 1], //设置任务堆栈栈顶指针
4 //任务的优先级别为0
);
OSStart( ); //启动多任务管理
}
void drawstreet(){
row=0;
column=0;
while(row<10){
PC_DispChar(row, 10, //显示字符的位置
'-',
DISP_BGND_BLACK+DISP_FGND_WHITE );
PC_DispChar(row+20, 10, //显示字符的位置
'-',
DISP_BGND_BLACK+DISP_FGND_WHITE );
PC_DispChar(row, 15, //显示字符的位置
'-',
DISP_BGND_BLACK+DISP_FGND_WHITE );
PC_DispChar(row+20, 15, //显示字符的位置
'-',
DISP_BGND_BLACK+DISP_FGND_WHITE );
row=row+1;
}
while(column<10){
PC_DispChar(10, column, //显示字符的位置
'|',
DISP_BGND_BLACK+DISP_FGND_WHITE );
PC_DispChar(10, column+15, //显示字符的位置
'|',
DISP_BGND_BLACK+DISP_FGND_WHITE );
PC_DispChar(20, column, //显示字符的位置
'|',
DISP_BGND_BLACK+DISP_FGND_WHITE );
PC_DispChar(20, column+15, //显示字符的位置
'|',
DISP_BGND_BLACK+DISP_FGND_WHITE );
column=column+1;
}
}
/*******************任务MyTask**********************************/
void MyTask (void *pdata)
{
x=round; //定义要显示的字符
OSTaskDel(2);
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
pdata = pdata;
OS_ENTER_CRITICAL( );
PC_VectSet(0x08, OSTickISR); //安装时钟中断向量
PC_SetTickRate(OS_TICKS_PER_SEC); //设置时钟频率
OS_EXIT_CRITICAL( );
OSStatInit( ); //初始化统计任务
PC_DispChar(10, 12, //显示字符的位置
'G',
DISP_BGND_BLACK+DISP_FGND_GREEN );
PC_DispChar(14, 9, //显示字符的位置
'R',
DISP_BGND_BLACK+DISP_FGND_RED );
for (;;)
{
if (x==0)
{
gotoxy(11,14);
printf("0");
gotoxy(15,11);
printf("0");
PC_DispChar(10, 12, //显示字符的位置
'R',
DISP_BGND_BLACK+DISP_FGND_RED );
PC_DispChar(14, 9, //显示字符的位置
'R',
DISP_BGND_BLACK+DISP_FGND_RED );
OSTimeDlyHMSM(0, 0, 3, 0); //等待3秒
OSTaskCreate(
YouTask, //创建任务MyTask
(void *)0, //给任务传递参数
&YouTaskStk[TASK_STK_SIZE - 1], //设置任务堆栈栈顶指针
2 // MyTask的优先级别为2
);
}
if(x<10){
gotoxy(12,14);
printf("%c",' ');
gotoxy(16,11);
printf("%c",' ');
}
if(x<100){
gotoxy(13,14);
printf("%c",' ');
gotoxy(16,11);
printf("%c",' ');
}
gotoxy(11,14);
printf("%d",x);
gotoxy(15,11);
printf("%d",x);
x--;
OSTimeDlyHMSM(0, 0, 1, 0); //等待3秒
}
}
/************************任务YouTask******************************/
void YouTask (void *pdata)
{
x=round;
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
pdata = pdata;
OSTaskDel(0);
PC_DispChar(10, 12, //显示字符的位置
'R',
DISP_BGND_BLACK+DISP_FGND_RED );
PC_DispChar(14, 9, //显示字符的位置
'G',
DISP_BGND_BLACK+DISP_FGND_GREEN );
for (;;)
{
if(x==0){
gotoxy(11,14);
printf("0");
gotoxy(15,11);
printf("0");
PC_DispChar(10, 12, //显示字符的位置
'R',
DISP_BGND_BLACK+DISP_FGND_RED );
PC_DispChar(14, 9, //显示字符的位置
'R',
DISP_BGND_BLACK+DISP_FGND_RED );
OSTimeDlyHMSM(0, 0, 3, 0); //等待3秒
OSTaskCreate(
MyTask, //创建任务MyTask
(void *)0, //给任务传递参数
&MyTaskStk[TASK_STK_SIZE - 1], //设置任务堆栈栈顶指针
0 // MyTask的优先级别为2
);
}
if(x<10){
gotoxy(12,14);
printf("%c",' ');
gotoxy(16,11);
printf("%c",' ');
}
if(x<100){
gotoxy(13,14);
printf("%c",' ');
gotoxy(16,11);
printf("%c",' ');
}
gotoxy(11,14);
printf("%d",x);
gotoxy(15,11);
printf("%d",x);
x--;
OSTimeDlyHMSM(0, 0, 1, 0); //等待1秒
}
}
void InPutTask (void *pdata){
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
char* s1 = "10";
char* s_G="G";
char* s_R="R"; //定义要显示的字符
/*用于计算的变量*/
INT8U key,lastkey;
INT8U err;
char temp[5];
INT32U sum=0;
int times=0;
pdata = pdata;
/*显示字符串,学号姓名等*/
PC_DispStr(0,0,"0543042055_TangGang",DISP_FGND_LIGHT_RED);
PC_DispStr(0,1,"Please input a number:",DISP_FGND_LIGHT_GRAY);
for (;;){
if (PC_GetKey(&key)==TRUE){
if(key==0x1B)PC_DOSReturn(); //如果按下Esc键则退出uCOS_II,恢复Dos环境
/*数字处理,以及Backspace键的处理*/
if(key>47&&key<58&×<3||key==8){
if(times==0){
PC_DispStr(24,1," ",DISP_FGND_LIGHT_GRAY);
PC_DispStr(29,1," ",DISP_FGND_LIGHT_GRAY);
PC_DispStr(44,17," ",DISP_FGND_LIGHT_GRAY);
}
if(key!=8){
++times;
PC_DispChar(24+times,1,key,DISP_FGND_LIGHT_GRAY);
sum=sum*10+key-48;
lastkey=key;
}
if(key==8&×>0){
PC_DispChar(24+times,1,' ',DISP_FGND_LIGHT_GRAY);
sum=(sum-lastkey+48)/10;
times-=1;
}
}
}
/*输入回车后处理,判断值是否在范围内*/
if (key == 13){
if(times==0){
PC_DispStr(24,2," ",DISP_FGND_LIGHT_GRAY);
}
/*不在范围内的处理*/
if ( sum < 20 || sum > 120){
PC_DispStr(10,2,"Please input a number between 20 and 120",DISP_FGND_LIGHT_GRAY);
}
/*在范围内的处理*/
else{
round=sum;
}
}
}
}
/************************End************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -