?? 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 + -