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

📄 main.c

📁 基于LPC2134的在ucos2操作系统下的源代码
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
#include "stdlib.h"

#define	 TaskStkLengh	512		      //定义用户任务0的堆栈长度

#define   LED1         1<<21
#define   LED2         1<<22
#define   LED3         1<<23

#define   BEEP         1<<25

#define   KEY_OK1      0
#define	  KEY_LEFT     1
#define	  KEY_RIGHT    2
#define	  KEY_OK       3

#define   IO_KEY1    (1<<16)
#define   IO_KEY2    (1<<17)
#define   IO_KEY3    (1<<18)
#define   IO_KEY4    (1<<19)
#define   IO_KEYALL  (IO_KEY1|IO_KEY2|IO_KEY3|IO_KEY4)



uint8  tab1[9]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
uint8  tab2[9]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
 
OS_STK	TaskStk[TaskStkLengh];		      // 定义用户任务0的堆栈
OS_STK	TaskPJStk[TaskStkLengh];          // 定义用户任务0的堆栈
OS_STK	TaskKEY1Stk[TaskStkLengh];	      // 定义用户任务0的堆栈
OS_STK	TaskDisplyStk[TaskStkLengh];	      // 定义用户任务0的堆栈

uint32  BJ=8;
uint32  zhuanshu=720;
uint8   a=0;

void 	Task0(void *pdata);			      // Task0 任务0
void 	TaskPJ(void *pdata);		      // PJ任务
void 	TaskKEY1(void *pdata);		      // KEY1任务
void 	TaskDisply(void *pdata);		  // Disply任务

OS_EVENT   *Mybox;
int main (void)
{
	OSInit ();																								
	OSTaskCreate (Task0,(void *)0, &TaskStk[TaskStkLengh - 1], 2);		
	OSStart ();
	return 0;															
}

 uint8 keyin	(void)
{
     uint32  i;
     uint32  io_dat;
     uint8   key;
     if((IO1PIN&IO_KEYALL)!=IO_KEYALL)
      {
        OSTimeDly(2);
        io_dat=IO1PIN;
        if((io_dat&IO_KEYALL)!=IO_KEYALL)
        { 
         if((io_dat&IO_KEY1)==0)key=KEY_OK1;
         if((io_dat&IO_KEY2)==0)key=KEY_LEFT;
         if((io_dat&IO_KEY3)==0)key=KEY_RIGHT; 
         if((io_dat&IO_KEY4)==0)key=KEY_OK;
         for(i=0;i<100000000;i++)
         {
           if((IO1PIN&IO_KEYALL)==IO_KEYALL)
           {
             OSTimeDlyHMSM(0,0,0,20);
             if((IO1PIN&IO_KEYALL)==IO_KEYALL) 
             break;
           }
         }
         return(key);
        }
      }
      return(4);
} 
void  jia1   (void)
{

   uint32   j;
   IO0SET=  0x90000000;                                      
   OSTimeDlyHMSM(0,0,0,200); 
     
   for(j=0;j<((zhuanshu*1000)/1873);j++)
   { 
        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,200-j); 
        if(a==8)a=0; 
   }
}
void  jia2   (void)
{

   uint32   j;
   IO0SET=  0x90000000;                                      
   OSTimeDlyHMSM(0,0,0,200); 
     
   for(j=0;j<((zhuanshu*1000)/1873);j++)
   { 
        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,200-j); 
        if(a==8)a=0; 
   }
}
void  jiasu1   (void)
{

   uint32   i,j;
   
   IO0SET=  0x90000000;                                      
   OSTimeDlyHMSM(0,0,0,200); 
     
   for(j=0;j<25;j++)
   {
     for(i=0;i<2;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,200-j*8); 
        if(a==8)a=0; 
      }
   }
}
void  jiasu2   (void)
{

   uint32   i,j;
   
   IO0SET=  0x90000000;                                      
   OSTimeDlyHMSM(0,0,0,200); 
     
   for(j=0;j<25;j++)
   {
     for(i=0;i<2;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,200-j*8); 
        if(a==8)a=0; 
      }
   }
}

   
void  jiangsu1   (void)
{

   uint32   i,j;
   for(j=0;j<25;j++)
   {
     for(i=0;i<2;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,8+j*8); 
        if(a==8)a=0; 
      }
   }
}     

void  jiangsu2  (void)
{

   uint32   i,j;
   for(j=0;j<25;j++)
   {
     for(i=0;i<2;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,8+j*8); 
        if(a==8)a=0; 
      }
   }
}     
/*********************************************************************************************************
**                            Task0 任务0
********************************************************************************************************/

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 (TaskPJ,(void *)0, &TaskPJStk[TaskStkLengh - 1], 3);	
    OSTaskCreate (TaskKEY1,(void *)0, &TaskKEY1Stk[TaskStkLengh - 1], 4);
    
	while (1)
	{
		OSTimeDly(10);
	}
}
   
/*********************************************************************************************************
**                                           TaskPJ
                                     等待消息,并改变PWM占空比
********************************************************************************************************/

void TaskPJ(void *pdata)
{
   uint8  err;
   uint32  i,zhuanxiang=0;
   pdata = pdata;
    
   while(1)
   {
    
     zhuanxiang=*(uint32*)OSMboxPend(Mybox,0,&err);
     if(zhuanxiang==0)
      {
      
         if(((zhuanshu*1000)/1873)<=200)
           jia1();
         if(((zhuanshu*1000)/1873)>200)
         {
           jiasu1();
           for(i=0;i<(((zhuanshu*1000)/1873)-100);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,BJ); 
              if(a==8)a=0; 
           }
           jiangsu1();
         }
      }
    else
    
     {
       if(((zhuanshu*1000)/1873)<=200)
          jia2();
       if(((zhuanshu*1000)/1873)>200)
       {
         jiasu2(); 
         for(i=0;i<((zhuanshu*1000)/1873)-100;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,BJ); 
            if(a==8)a=0; 
          }
        
        jiangsu2();     
      }
     
    }	
 }
}
	
/*********************************************************************************************************
**                                           TaskKEY1
                                     查询按键,向TaskPWM发送改变后的消息
********************************************************************************************************/
	
void TaskKEY1(void *pdata)
{
   uint8  key,i=1;
   uint32 zhuanxiang=0;
   char s[8];
   pdata = pdata;	
   while (1)
	{  
	    key=keyin();
	    switch(key)
	      {
	         case   KEY_OK1:                             //转速
	               
	           break;
	         case   KEY_LEFT:                            //转向
	                zhuanxiang=~zhuanxiang;
	                OSMboxPost(Mybox,(void*)&zhuanxiang);
	           break;
	         case   KEY_RIGHT:                           //位移
	                  zhuanshu=zhuanshu+50;
	                if(zhuanshu>10800)
	                  zhuanshu=10800;
	               
	                sprintf(s,"%4d",zhuanshu);
                    GUI_PutString(0,16,s); 
	               
	           break;
	        
	         case   KEY_OK:                              //启停
	                zhuanshu=zhuanshu-50;
	                
	                if(zhuanshu<=10)
	                  i=10; 
	                sprintf(s,"%4d",zhuanshu);
                    GUI_PutString(0,16,s); 
	         
	         
	          break;
	          
	        default:
              break;
          }
	         
		OSTimeDly(2);
	}
	
	  
}	
/*********************************************************************************************************
**                                           TaskKEY1
                                     查询按键,向TaskPWM发送改变后的消息
********************************************************************************************************/	
void TaskDisply(void *pdata)
{
   uint8  key,i=1;
   uint32 zhuanxiang=0;
   char s[8];
   pdata = pdata;	
   while (1)
	{  
	}
}
	    
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

⌨️ 快捷键说明

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