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

📄 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	600		      //定义用户任务0的堆栈长度

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

#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	TaskADStk [TaskStkLengh];	      //定义用户任务0的堆栈

uint32  BJ=10;
uint32  zhuanshu;
uint8   a=0;

void 	Task0(void *pdata);			      //Task0 任务0
void 	TaskPJ(void *pdata);		      //PJ任务
void 	TaskAD(void *pdata);		      //KEY1任务

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



/*********************************************************************************************************
**                            Task0 任务0
********************************************************************************************************/

void Task0	(void *pdata)
{
	pdata = pdata;
	TargetInit ();
	PINSEL2= 0x00000000; 
	IO1DIR = 0x00000000;
	IO0DIR = 0xffffffff;                                  
 
    IO0DIR  = (IO0DIR|LED1|LED2|LED3|BEEP)&(~AD4);         // 设置IO0DIR|LED1|LED2|LED3|BEEP为输出口
    IO0SET  = LED1|LED2|LED3|BEEP;                         // 初始化蜂鸣器不响,LED不亮
    
    PINSEL1 = 1<<18 ;                                      // 设置P0.25连接到AD0.4同时将其它的口设为GPIO口
   
    /* 进行ADC模块设置 */                      
    ADCR = 
	        (1 << 4)                        |   // 选择通道0
	        ((Fpclk / 1000000 - 1) << 8)	|	// CLKDIV=Fpclk/1000000-1,转换时钟为1MHz
			(0 << 16)						|	// BURST=0,软件控制转换操作
			(0 << 17)						|	// CLKS=0, 使用11clock转换
			(1 << 21)						|  	// PDN=1,正常工作模式
			(0 << 22)						|  	// TEST1:0=00,正常工作模式
			(1 << 24)                       |
			(0 << 27);						 	// 直接启动ADC转换时,此位无效
    
    Mybox=OSMboxCreate((void*)0);
    
    GUI_Initialize();                           // 初始化LCM
    GUI_SetColor(1, 0);                         // 设置前景色和背景色
    
    OSTaskCreate (TaskPJ,(void *)0, &TaskPJStk[TaskStkLengh - 1], 3);	
    OSTaskCreate (TaskAD,(void *)0, &TaskADStk[TaskStkLengh - 1], 5);	
	while (1)
	{
		OSTimeDly(10);
	}
}
   
/*********************************************************************************************************
**                                           TaskPJ
                                     等待消息,并改变PWM占空比
********************************************************************************************************/

void TaskPJ(void *pdata)
{
   uint8  err;
   uint32  i,baocun=90;
   pdata = pdata;
    
   while(1)
   {
    
     zhuanshu=*(uint32*)OSMboxPend(Mybox,0,&err);
     if((zhuanshu>=(baocun+2)))
     {
       IO0SET=  0x90000000;                                      
       OSTimeDlyHMSM(0,0,0,BJ);   
 
       for(i=0;i<(((zhuanshu-baocun)*1000)/1875);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;   
        }
       baocun=zhuanshu;
       
     }
    if((zhuanshu<=(baocun-2)))
     {
       IO0SET=  0x90000000;                                      
       OSTimeDlyHMSM(0,0,0,BJ);   
      if((baocun-zhuanshu)<360)
      { 
       for(i=0;i<(((baocun-zhuanshu)*1000)/1875);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;   
        }
      }
       baocun=zhuanshu; 
       
     }
   }   
}	
void TaskAD(void *pdata)
{
  
     uint32 ADC_Data;
     
     char   s[8];
     pdata = pdata;
     while(1)
     {
       ADC_Data = ADDR;		                        
       ADCR|=(1 << 24);	
       while((ADDR&0x80000000)==0);               
       ADCR|=(1 << 24);	           			
       while ((ADDR & 0x80000000) == 0);
       ADC_Data = ADDR;
       ADC_Data = (ADC_Data >> 6) & 0x3ff;
       ADC_Data = (ADC_Data*360)/1024;
       sprintf(s,"%4d",ADC_Data);
       GUI_PutString(0,0,s); 
       OSTimeDlyHMSM(0,0,0,200);   
       OSMboxPost(Mybox,(void*)&ADC_Data);
     }    
}               	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

⌨️ 快捷键说明

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