?? traffic.c
字號:
#include"includes.h"
#define task_stk_size 512
OS_STK taskstartstk[task_stk_size];
OS_STK task1stk[task_stk_size];
OS_STK task2stk[task_stk_size];
OS_STK keybroadtaskstr[task_stk_size];
OS_STK timestk[task_stk_size];
void taskstart(void *);
void task1(void *);//創建任務1來控制南北通道的信號燈
void task2(void *);//創建任務2來控制東西通道的信號燈
void keybroadtask(void *);//創建鍵盤任務來控制南北通道的信號燈
void timetask(void*);//創建時間任務來管理顯示時間
void windowsdispinit(void);
OS_EVENT *sem1,*sem2;
int time,time1;
INT8U *s,*s1,*s2;
INT8U err;
void main()
{
OSInit();
PC_DOSSaveReturn();
PC_VectSet(uCOS,OSCtxSw);
OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
windowsdispinit();
sem1=OSSemCreate(1);
sem2=OSSemCreate(1);
OSTaskCreate(taskstart, (void*)0, &taskstartstk[task_stk_size-1], 0);
OSStart();
}
void taskstart(void *pdata)
{
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
INT16S key;int time3;
pdata=pdata;
OSSemPend(sem1,0,&err);
OSSemPend(sem2,0,&err);
OSTaskCreate(task1, (void*)0, &task1stk[task_stk_size-1], 1);
OSTaskCreate(task2, (void*)0, &task2stk[task_stk_size-1], 2);
OSTaskCreate(timetask, (void*)0, ×tk[task_stk_size-1], 3);
PC_DispStr(3,2," ",DISP_BGND_BLACK);
PC_DispStr(7,2," ",DISP_BGND_BLACK);
PC_DispStr(11,2," ",DISP_BGND_BLACK);
PC_DispStr(67,2," ",DISP_BGND_BLACK);
PC_DispStr(71,2," ",DISP_BGND_BLACK);
PC_DispStr(75,2," ",DISP_BGND_BLACK);
PC_DispStr(20,12,"please press 'ENTER' key to start!",DISP_FGND_BLUE+DISP_BLINK);
for(;;)
{
if(PC_GetKey(&key)==TRUE)
{
if(key==0xD)
{
PC_DispStr(20,12," ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPost(sem1);
OSSemPost(sem2);
break;
}
}
}
for(;;)
{
if(PC_GetKey(&key)==TRUE)
{
if(key==0x20)
{
time3=20;
OSTaskDel(1);
OSTaskDel(2);
OSTaskDel(3);
PC_DispStr(3,2," ",DISP_BGND_BLACK);
PC_DispStr(7,2," ",DISP_BGND_BLACK);
PC_DispStr(11,2," ",DISP_BGND_BLACK);
PC_DispStr(67,2," ",DISP_BGND_BLACK);
PC_DispStr(71,2," ",DISP_BGND_BLACK);
PC_DispStr(75,2," ",DISP_BGND_BLACK);
PC_DispStr(20,20," ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(60,20," ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
while(time3>0)
{
sprintf(s2, "%1d",time3);
PC_DispStr(40,20,s2,DISP_FGND_YELLOW+DISP_BLINK);
OSTimeDlyHMSM(0,0,1,0);
time3--;
}
PC_DispStr(40,20," ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
sem1=OSSemCreate(1);
sem2=OSSemCreate(1);
OSTaskCreate(task1, (void*)0, &task1stk[task_stk_size-1], 1);
OSTaskCreate(task2, (void*)0, &task2stk[task_stk_size-1], 2);
OSTaskCreate(timetask, (void*)0, ×tk[task_stk_size-1], 3);
}
if(key==0x1B)
{
PC_DOSReturn();
}
}
OSTimeDlyHMSM(0,0,0,20);
}
}
void task1(void *pdata)
{
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
int count=0,flag=0;
time=60;
pdata=pdata;
for(;;)
{
if(time==60&&flag==0)//控制綠燈顯示
{
OSSemPend(sem1,0,&err);
PC_DispStr(7,2," ",DISP_BGND_BLACK);
PC_DispStr(11,2," ",DISP_BGND_BLACK);
while(count<60)
{
PC_DispStr(3,2," ",DISP_BGND_GREEN) ;
OSTimeDlyHMSM(0,0,1,0);
count++;
}
OSSemPost(sem1);
flag=1;
count=0;
}
else if(time==60&&flag==1)//控制黃燈顯示
{
OSSemPend(sem1,0,&err);
PC_DispStr(3,2," ",DISP_BGND_BLACK);
PC_DispStr(11,2," ",DISP_BGND_BLACK);
while(count<3)
{
PC_DispStr(7,2," ",DISP_BGND_PURPLE);
OSTimeDlyHMSM(0,0,1,0);
count++;
}
count=0;
OSSemPost(sem1);
}
else if(time==57&&flag==1)//控制紅燈顯示
{
OSSemPend(sem1,0,&err);
PC_DispStr(3,2," ",DISP_BGND_BLACK) ;
PC_DispStr(7,2," ",DISP_BGND_BLACK);
while(count<57)
{
PC_DispStr(11,2," ",DISP_BGND_RED);
OSTimeDlyHMSM(0,0,1,0);
count++;
}
flag=0;
count=0;
OSSemPost(sem1);
}
OSTimeDlyHMSM(0,0,0,20);
}
}
void task2(void *pdata)
{
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
int count2=0,flag2=0;
time1=60;
pdata=pdata;
for(;;)
{
if(time1==60&&flag2==1)//控制綠燈顯示
{
OSSemPend(sem2,0,&err);
PC_DispStr(71,2," ",DISP_BGND_BLACK);
PC_DispStr(75,2," ",DISP_BGND_BLACK);
while(count2<60)
{
PC_DispStr(67,2," ",DISP_BGND_GREEN) ;
OSTimeDlyHMSM(0,0,1,0);
count2++;
}
OSSemPost(sem2);
flag2=0;
count2=0;
}
else if(time1==3&&flag2==0)//控制黃燈顯示
{
OSSemPend(sem2,0,&err);
PC_DispStr(67,2," ",DISP_BGND_BLACK);
PC_DispStr(75,2," ",DISP_BGND_BLACK);
while(count2<3)
{
PC_DispStr(71,2," ",DISP_BGND_PURPLE);
OSTimeDlyHMSM(0,0,1,0);
count2++;
}
count2=0;
flag2=1;
OSSemPost(sem2);
}
else if(time1==60&&flag2==0)//控制紅燈顯示
{
OSSemPend(sem2,0,&err);
PC_DispStr(67,2," ",DISP_BGND_BLACK) ;
PC_DispStr(71,2," ",DISP_BGND_BLACK);
while(count2<57)
{
PC_DispStr(75,2," ",DISP_BGND_RED);
OSTimeDlyHMSM(0,0,1,0);
count2++;
}
count2=0;
OSSemPost(sem2);
}
OSTimeDlyHMSM(0,0,0,20);
}
}
void timetask(void *pdata)
{
for(;;)
{
if(time==0&&time1==0)
{
time=60;
time1=60;
}
sprintf(s, "%1d",time);
PC_DispStr(20,20,s,DISP_FGND_YELLOW+DISP_BLINK);
sprintf(s1, "%1d",time1);
PC_DispStr(60,20,s1,DISP_FGND_YELLOW+DISP_BLINK);
OSTimeDlyHMSM(0,0,1,0);
time--;
time1--;
}
}
void windowsdispinit (void)
{
PC_DispStr( 0, 0, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 1, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 2, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 3, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 4, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 5, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 6, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 7, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 8, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 9, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 10, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 11, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 12, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 13, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 14, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 15, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 16, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 17, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 18, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 19, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 20, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 21, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 22, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 23, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 24, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -