⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tranf.txt

📁 在Uc/os系统下实现交通灯四个方向的智能控制
💻 TXT
字号:
/************************Test*************************************/
#include "includes.h"
#define  TASK_STK_SIZE   512				//任务堆栈长度
char *s1="light  green ";
char *s2="light   red  ";
char *s3="light  yellow";
char *s4="the  traffic  control  system";
char  *s5="             ";
char *s6="slowly  cross to east          ";
char *s7="slowly  cross  to  west        ";
char *s8="slowly  cross  to  north       ";
char *s9="slowly  cross  to  south       ";
char *s10="the car  cross  to east   wait";
char *s11="the car  cross  to west   wait";
char *s12="the car  cross  to north  wait";
char *s13="the car  cross  to south  wait";
char  *s14="please  cross  to  left slowly";
char *s15="                               ";
//char  *s16="please  input  a  number :";
BOOLEAN ac_key;
//INT8U err;
//INT8U y=0;						//字符显示位置
INT16S   key;						//用于退出的键
INT8U  n;
//INT16U  m;
//OS_EVENT *Fun_Semp;
OS_STK   StartTaskStk[TASK_STK_SIZE];			//定义任务堆栈区
OS_STK  Task1Stk[TASK_STK_SIZE];//东西为绿,南北为红
OS_STK  Task2Stk[TASK_STK_SIZE];//东西为黄,南北为红
OS_STK  Task3Stk[TASK_STK_SIZE];//东西为红,南北为绿
OS_STK  Task4Stk[TASK_STK_SIZE];//南北为黄,东西为红
//INT16U  Fun(INT16U  x);//统计车辆数目
//INT16U  Fun1(INT16U  x);
void  StartTask(void *pdata);				//声明起始任务
void  Task1(void *pdata);				//声明任务
void  Task2(void *pdata);				//声明任务
void  Task3(void *pdata);				//声明任务
void  Task4(void *pdata);				//声明任务
/************************主函数*********************************/
void  main (void)
{
   			//定义信号量
    OSInit();						//初始化uCOS_II
 ac_key=1;// Fun_Semp=OSSemCreate(0);
    PC_DOSSaveReturn( );				//保存Dos环境
    PC_VectSet(uCOS, OSCtxSw);				//安装uCOS_II中断
    
		
    OSTaskCreate(StartTask,				//创建任务StartTask
	(void*)0,					//给任务传递参数
	&StartTaskStk[TASK_STK_SIZE - 1],		//设置任务堆栈栈顶
	0);						//使任务的优先级别为0
//	PC_DispStr(1,16,
		      //   Fun1,
		      // DISP_BGND_BLACK+DISP_FGND_WHITE );
	
	//scanf("%d",&m);
	

OSStart();
}
/***********************任务StartTask*******************************/
void  StartTask (void *pdata)
{
#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);		//设置uCOS_II时钟频率
    OS_EXIT_CRITICAL( );

    OSStatInit( );				//初始化统计任务
    OSTaskCreate(Task1,			//创建任务
		(void*)0,			//给任务传递参数
		&Task1Stk[TASK_STK_SIZE - 1],	//设置任务堆栈栈顶
		1);				//使任务的优先级别
    OSTaskCreate(Task2,			//创建任务
		(void*)0,			//给任务传递参数
		&Task2Stk[TASK_STK_SIZE - 1],	//设置任务堆栈栈顶
		2);				//使任务的优先级别
   OSTaskCreate(Task3,			//创建任务
		(void*)0,			//给任务传递参数
		&Task3Stk[TASK_STK_SIZE - 1],	//设置任务堆栈栈顶
	    3);				//使任务的优先级别
   OSTaskCreate(Task4,			//创建任务
		(void*)0,			//给任务传递参数
		&Task4Stk[TASK_STK_SIZE - 1],	//设置任务堆栈栈顶
	    4);				//使任务的优先级别
    for (;;) 
    {
      PC_DispStr(20,0,
		         s4,
		       DISP_BGND_BLACK+DISP_FGND_WHITE );
		
		
		
		//如果按下Esc键则退出uCOS_II
		if (PC_GetKey(&key) == TRUE) 
		{
            if (key == 0x1B) 
	    	{
                PC_DOSReturn( );
            }
        }
        OSTimeDlyHMSM(0, 0, 3, 0);	//等待3秒
    }
}
/************************任务Task1*******************************/
void  Task1 (void *pdata)
{
#if OS_CRITICAL_METHOD == 3
    OS_CPU_SR  cpu_sr;
#endif
    pdata = pdata;
  
    for (;;) 
    { // OSSemPend(Fun_Semp,0,&err);		//请求信号量
          if(ac_key)
		 {
      ac_key=FALSE;
	    PC_DispStr(25,2,
		s2,
		DISP_BGND_BLACK+DISP_FGND_RED );
		PC_DispStr(25,3,
		s13,
		DISP_BGND_BLACK+DISP_FGND_RED );//向南行的等
		PC_DispStr(25,4,
		s15,
		DISP_BGND_BLACK+DISP_FGND_RED );//???????????????????

		 PC_DispStr(25,12,
		s2,
		DISP_BGND_BLACK+DISP_FGND_RED);
		  PC_DispStr(25,13,
		s12,
		DISP_BGND_BLACK+DISP_FGND_RED);//向北行的等
		  PC_DispStr(25,14,
		s15,
		DISP_BGND_BLACK+DISP_FGND_RED);//?????????????????
		  PC_DispStr(1,7,
		s1,
		DISP_BGND_BLACK+DISP_FGND_GREEN );
		  PC_DispStr(1,8,
		s6,
		DISP_BGND_BLACK+DISP_FGND_GREEN );//过西向东
		  PC_DispStr(1,9,
		s14,
		DISP_BGND_BLACK+DISP_FGND_GREEN );//左转
		   PC_DispStr(50,7,
		s1,
		DISP_BGND_BLACK+DISP_FGND_GREEN );
		   PC_DispStr(50,8,
		s7,
		DISP_BGND_BLACK+DISP_FGND_GREEN );//过东向西
		   PC_DispStr(50,9,
		s14,
		DISP_BGND_BLACK+DISP_FGND_GREEN );//左转
		   OSTimeDlyHMSM(0, 0,10, 0);		//等待200毫秒
		   ac_key=TRUE;
         
		  }
        OSTimeDlyHMSM(0, 0,0, 200);
    }
}
/************************任务Task2******************************/
void  Task2 (void *pdata)
{
#if OS_CRITICAL_METHOD == 3
    OS_CPU_SR  cpu_sr;
#endif
    pdata = pdata;
  
    for (;;) 
    {  //OSSemPend(Fun_Semp,0,&err);		//请求信号量
       if(ac_key)
		  {
       ac_key=FALSE;
       
	    PC_DispStr(25,2,
		s2,
		DISP_BGND_BLACK+DISP_FGND_RED );
		//PC_DispStr(25,3,
		//s13,
	//	DISP_BGND_BLACK+DISP_FGND_RED );//向南行的等

		 PC_DispStr(25,12,
		s2,
		DISP_BGND_BLACK+DISP_FGND_RED );
		// PC_DispStr(25,13,
		//s12,
		//DISP_BGND_BLACK+DISP_FGND_RED);//向北行的等
		 //可在此添加任务5显示车辆数目
		for( n=3;n>0;n--) 
		{

		PC_DispStr(1,7,s3,DISP_BGND_BLACK+DISP_FGND_YELLOW );
		
		PC_DispStr(50,7,s3,DISP_BGND_BLACK+DISP_FGND_YELLOW );
		OSTimeDlyHMSM(0, 0,0, 500); 	
		PC_DispStr(1,7,s5,DISP_BGND_BLACK+DISP_FGND_YELLOW );
		
		PC_DispStr(50,7,s5,DISP_BGND_BLACK+DISP_FGND_YELLOW );
		OSTimeDlyHMSM(0, 0,0,500); 	
        }
       //OSTimeDlyHMSM(0, 0,3, 0);  
    ac_key=TRUE;
	}
        OSTimeDlyHMSM(0, 0,0, 200);		//等待200毫秒
    }
}
/************************Task3**************************************/
void  Task3 (void *pdata)
{
#if OS_CRITICAL_METHOD == 3
    OS_CPU_SR  cpu_sr;
#endif
    pdata = pdata;
  
    for (;;) 
    { // OSSemPend(Fun_Semp,0,&err);		//请求信号量

       if(ac_key)
		  {
      ac_key=FALSE;
	    PC_DispStr(25,2,
		s1,
		DISP_BGND_BLACK+DISP_FGND_GREEN );
		PC_DispStr(25,3,
		s9,
		DISP_BGND_BLACK+DISP_FGND_GREEN );//过北向南
		PC_DispStr(25,4,
		s14,
		DISP_BGND_BLACK+DISP_FGND_GREEN );//左转
		 PC_DispStr(25,12,
		s1,
		DISP_BGND_BLACK+DISP_FGND_GREEN );
		 PC_DispStr(25,13,
		s8,
		DISP_BGND_BLACK+DISP_FGND_GREEN );//过南向北
		 PC_DispStr(25,14,
		s14,
		DISP_BGND_BLACK+DISP_FGND_GREEN );//左转
		  PC_DispStr(1,7,
		s2,
		DISP_BGND_BLACK+DISP_FGND_RED );
		  PC_DispStr(1,8,
		s10,
		DISP_BGND_BLACK+DISP_FGND_RED );//向东行的等
		  PC_DispStr(1,9,
		s15,
		DISP_BGND_BLACK+DISP_FGND_GREEN );//????????????????????????????????
		   PC_DispStr(50,7,
		s2,
		DISP_BGND_BLACK+DISP_FGND_RED );
		   PC_DispStr(50,8,
		s11,
		DISP_BGND_BLACK+DISP_FGND_RED );//向西行的等
		   PC_DispStr(50,9,
		s15,
		DISP_BGND_BLACK+DISP_FGND_GREEN );//????????????????????????????????????
         OSTimeDlyHMSM(0, 0,10, 0);
      ac_key=TRUE;
		}
        OSTimeDlyHMSM(0, 0,0, 200);		//等待200毫秒
    }
}
/************************任务Task4******************************/
void  Task4 (void *pdata)
{
#if OS_CRITICAL_METHOD == 3
    OS_CPU_SR  cpu_sr;
#endif
    pdata = pdata;
  
    for (;;) 
    { // OSSemPend(Fun_Semp,0,&err);		//请求信号量

      if(ac_key)
		 {
      ac_key=FALSE;
	   PC_DispStr(1,7,
		s2,
		DISP_BGND_BLACK+DISP_FGND_RED );
	   //PC_DispStr(1,8,
		//s10,
		//DISP_BGND_BLACK+DISP_FGND_RED );//向东行的等
		   PC_DispStr(50,7,
		s2,
		DISP_BGND_BLACK+DISP_FGND_RED );
		   //PC_DispStr(50,8,
		//s11,
		//DISP_BGND_BLACK+DISP_FGND_RED );//向西行的等
		   //可在此添加任务6显示车辆数目
	  for(n=3;n>0;n--)
	  {
	    PC_DispStr(25,2,
		s3,
		DISP_BGND_BLACK+DISP_FGND_YELLOW );
		 PC_DispStr(25,12,
		s3,
		DISP_BGND_BLACK+DISP_FGND_YELLOW );
		 OSTimeDlyHMSM(0, 0,0, 500);
		 PC_DispStr(25,2,
		s5,
		DISP_BGND_BLACK+DISP_FGND_YELLOW );
		 PC_DispStr(25,12,
		s5,
		DISP_BGND_BLACK+DISP_FGND_YELLOW );
         OSTimeDlyHMSM(0, 0,0, 500);

	  }
		 // PC_DispStr(1,5,
	//	s2,
	//	DISP_BGND_BLACK+DISP_FGND_RED );
		 //  PC_DispStr(50,5,
	//	s2,
		//DISP_BGND_BLACK+DISP_FGND_RED );
         //OSTimeDlyHMSM(0, 0,3, 0);
      ac_key=TRUE;
		}
        OSTimeDlyHMSM(0, 0,0, 200);		//等待200毫秒
    }
}
/************************Fun1**************************************/

//INT16U  Fun1(INT16U  x)
//{
//	printf("%c\n",s16);
  // printf("%d\n",m);
//}
/**************************end***********************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -