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

📄 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"

// 定义串口模式设置的数据结构
typedef struct UartMode
{
	uint8 datab;	// 字长度 5/6/7/8
	uint8 stopb;	// 停止位 1/2
	uint8 parity;	// 奇偶校验 0-无校验, 1-奇校验, 2-偶校验
}UARTMODE;

#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)

uint32    Samp[100];                 //保存采样结果的数组液晶上显示的点
uint32    Samp1[100];                //保存采样结果的数组上位机上显示的数据
uint32    count;                     //采样计数器


#define	TaskStkLengh	128 //Define the Task0 stack length 定义用户任务0的堆栈长度
 
//OS_STK	TaskUartStk [TaskStkLengh];	//定义用户任务串行发送任务的堆栈
OS_STK	TaskKeyStk [TaskStkLengh];	//定义用户任务按键任务的堆栈
//OS_STK	TaskSampStk [512];	//定义用户任务采样任务的堆栈
OS_STK	TaskLEDStk [TaskStkLengh];	//定义用户任务LED显示任务的堆栈
OS_STK	TaskBeepStk [128];	//定义用户任务蜂鸣器任务的堆栈

//void 	TaskUart(void *pdata);		//声明串行发送任务优先级为7
void 	TaskKey(void *pdata);		//声明按键任务优先级为2
//void 	TaskSamp(void *pdata);		//声明采样任务优先级为5
void 	TaskLED(void *pdata);		//声明LED显示任务优先级为8
void 	TaskBeep(void *pdata);		//声明蜂鸣器任务优先级为3
uint8   keyin	(void);
//OS_EVENT  *Sem;//定义信号量
//OS_EVENT  *Sem1;//定义信号量
//OS_EVENT  *S;//定义信号量
//OS_FLAG_GRP *FLAGW;

void  synch(void);

OS_EVENT  *Mybox;
#define    total   3


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) break;
         }
         return(key);
        }
      }
      return(4);
}
int main (void)
{
    GUI_Initialize();         // 初始化LCM
    GUI_SetColor(1, 0);       // 设置前景色和背景色
	OSInit (); 
	OSTaskCreate (TaskLED,(void *)0, &TaskLEDStk[TaskStkLengh - 1], 5);	 //创建LED任务    
    																											
	OSStart (); 
	return 0;															
}

/*********************************************************************************************************
**                       TaskLED 任务LED  任务的优先级为   7
********************************************************************************************************/
void TaskLED	(void *pdata)
{   
    uint8  err;
    char    s[20];
    pdata=pdata;
    TargetInit ();                              // 目标板初始化
    PINSEL2 = 0x00000000;                       // 设置四个按键的口线为输入状态p1.16~p1.19
    IO1DIR  = 0x00000000;
    PINSEL1 = 1<<28 ;                           // 设置P0.30连接到AD0.3同时将其它的口设为GPIO口
    IO0DIR  = IO0DIR|LED1|LED2|LED3|BEEP;       // 设置IO0DIR|LED1|LED2|LED3|BEEP为输出口
    IO0SET  = LED1|LED2|LED3|BEEP;
    Mybox=OSMboxCreate((void*)0);   
    count=0;         
    //FLAGW=OSFlagCreate(0,&err);
    OSTaskCreate (TaskBeep,(void *)0, &TaskBeepStk[TaskStkLengh - 1], 3);	 //创建蜂鸣器任务 
    OSTaskCreate (TaskKey,(void *)0, &TaskKeyStk[TaskStkLengh - 1], 4);	     //创建蜂鸣器任务  
    while(1)
      {
         OSTimeDlyHMSM(0,0,2,0);  
         IO0CLR=LED2;                
         //OSTimeDlyHMSM(0,0,2,0);     
         //IO0SET=LED2;
         //OSTimeDlyHMSM(0,0,2,0);
         synch();               
         
      }
      
}                                                                     
	                                                                         
		
/*********************************************************************************************************
**                            TaskBeep任务Beep  优先级为 7
********************************************************************************************************/      
void  TaskBeep(void *pdata) 
{   
    uint8  err;
    pdata=pdata;  
    while(1)
      {   
         IO0CLR=LED3;
         IO0CLR=LED1;                
         //OSTimeDlyHMSM(0,0,2,0);     
         //IO0SET=BEEP;               
         //OSTimeDlyHMSM(0,0,2,0);
         synch(); 
         IO0SET=LED3;
         OSTimeDlyHMSM(0,0,5,0);        
      } 
}

void  Timer1_Exception(void)

{ 
    while(1);
   
}


/*********************************************************************************************************
**                            TaskKey 任务Key 	优先级为2
********************************************************************************************************/
void TaskKey	(void *pdata)
{   
    uint8  key,err;
    static  i=0;	
	pdata = pdata;
		   		
	while (1)
	{  
	    key=keyin();
	    switch(key)
	      {
	         case   KEY_OK1:
	                 synch();
	           break;
	         case   KEY_LEFT:
	                
	            
	                
	         
	           break;
	         case   KEY_RIGHT:
	         
	          
	             
	         
	           break;
	        
	         case   KEY_OK:
	         
	         
	         
	         
	          break;
	          
	        default:
              break;
          }
	         
		OSTimeDly(2);
	}
}



void synch(void)
{
   uint8  err;
   OS_ENTER_CRITICAL();
   if(count==total-1)
     {
         count=0;
         OS_EXIT_CRITICAL();
         OSMboxPostOpt(Mybox,(void*)1,OS_POST_OPT_BROADCAST);
     }
   else
     {
         count++;
         OS_EXIT_CRITICAL();
         OSMboxPend(Mybox,0,&err);
     }
}
      











⌨️ 快捷键说明

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