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

📄 main.c

📁 基于LPC2134的在ucos2操作系统下的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
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 + -