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

📄 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	512  //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 [512];	//定义用户任务蜂鸣器任务的堆栈

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  *Sem3;//定义信号量


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;             
    Sem=OSSemCreate(0);                         // 创建信号量Sem
    Sem1=OSSemCreate(0);                        // 创建信号量Sem1
    //Sem3=OSSemCreate(0);                        // 创建信号量Sem1
    OSTaskCreate (TaskBeep,(void *)0, &TaskBeepStk[TaskStkLengh - 1], 3);	 //创建蜂鸣器任务 
    OSTaskCreate (TaskKey,(void *)0, &TaskKeyStk[TaskStkLengh - 1], 4);	 //创建蜂鸣器任务  
    while(1)
      {
         OSSemPend(Sem,0,&err);
        /* if((IO0PIN&LED1)==0)
              IO0SET=LED1;
         else IO0CLR=LED1;*/
         
         IO0CLR=LED1;                
         OSTimeDlyHMSM(0,0,3,0);     
         IO0SET=LED1;               
         OSTimeDlyHMSM(0,0,3,0); 
      }
      
}                                                                     
	                                                                         
		
/*********************************************************************************************************
**                            TaskBeep任务Beep  优先级为 7
********************************************************************************************************/      
void  TaskBeep(void *pdata) 
{   
    uint8  err;
    pdata=pdata;  
    while(1)
      {   
         OSSemPend(Sem1,0,&err);
         IO0CLR=LED2;                
         OSTimeDlyHMSM(0,0,1,0);     
         IO0SET=LED2;               
         OSTimeDlyHMSM(0,0,1,0);     
          
      } 
}

void  Timer1_Exception(void)

{ 
    while(1);
   
}


/*********************************************************************************************************
**                            TaskKey 任务Key 	优先级为2
********************************************************************************************************/
void TaskKey	(void *pdata)
{   
    uint8  key,err;
	pdata = pdata;
			   		
	while (1)
	{  
	    key=keyin();
	    switch(key)
	      {
	         case   KEY_OK1:
	               
	                OSSemPost(Sem);               //发送信号量
	                OSSemPost(Sem1);           //先响
	                //OSSemPend(Sem3,0,&err);       //挂起的任务也能接受信号量,也能不断加一
	           break;
	         case   KEY_LEFT:
	      
	                
	         
	         
	           break;
	         case   KEY_RIGHT:
	         
	         
	         
	         
	           break;
	        
	         case   KEY_OK:
	         
	         
	         
	         
	          break;
	          
	        default:
              break;
          }
	         
		OSTimeDly(2);
	}
}















⌨️ 快捷键说明

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