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

📄 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   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 num[10][8]={    //0~9十个数字,字体点阵为5X8

{
  0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70
},

{
  0x20,0xE0,0x20,0x20,0x20,0x20,0x20,0xF8
},


{
  0x70,0x88,0x08,0x10,0x20,0x40,0x80,0xF8
},


{
  0x70,0x88,0x08,0x30,0x08,0x08,0x88,0x70
},

{
  0x08,0x18,0x28,0x48,0x88,0xFC,0x08,0x08 
},

{
  0xF8,0x80,0x80,0xF0,0x08,0x08,0x88,0x70
},

{

  0x30,0x40,0x80,0xF0,0x88,0x88,0x88,0x70
},

{

  0xF8,0x08,0x10,0x10,0x20,0x20,0x40,0x40
},

{

  0x70,0x88,0x88,0x70,0x88,0x88,0x88,0x70
},

{
  0x70,0x88,0x88,0x88,0x78,0x08,0x10,0x60
}};



uint32    ad;                       //保存采样结果的变量

#define	TaskStkLengh	500         //Define the Task0 stack length 定义用户任务0的堆栈长度
 
OS_STK	TaskDispStk [TaskStkLengh];	//Define the Task0 stack 定义用户任务0的堆栈
OS_STK	TaskKeyStk [TaskStkLengh];	//Define the Task0 stack 定义用户任务0的堆栈
OS_STK	TaskSampStk [TaskStkLengh];	//Define the Task0 stack 定义用户任务0的堆栈
OS_STK	TaskLEDStk [TaskStkLengh];	//Define the Task0 stack 定义用户任务0的堆栈

void 	TaskDisp(void *pdata);		//Task0 任务0
void 	TaskKey(void *pdata);		//TaskKey 任务Key
void 	TaskSamp(void *pdata);		//TaskKey 任务Key
void 	TaskLED(void *pdata);		//TaskKey 任务Key

uint8   keyin	(void);

OS_EVENT  *Sem;//定义互斥型信号量

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);
}

void  Disp( uint32  ad)
{
   char    str[20];
   sprintf(str,"%4dmV",ad);
   GUI_PutString(0,0, str);
}


int main (void)
{
    
	OSInit ();																										
	
	OSTaskCreate (TaskKey,(void *)0, &TaskKeyStk[TaskStkLengh - 1], 5);
				
	OSStart ();
	
     
	return 0;															
}

   
/*********************************************************************************************************
**                            TaskKey 任务Key
********************************************************************************************************/
void TaskKey	(void *pdata)
{   
    uint8  key;
	pdata = pdata;
	TargetInit ();
	PINSEL2= 0x00000000;                        //设置四个按键的口线为输入状态
    IO1DIR = 0x00000000;
    
    GUI_Initialize();                           // 初始化LCM
    GUI_SetColor(1, 0);                         // 设置前景色和背景色
    
    Sem=OSSemCreate(0);
    
	PINSEL1= 1<<28 ;                            //设置P0.30连接到AD0.3
	
	IO0DIR = IO0DIR|LED1|LED2|LED3|BEEP;
	IO0SET = LED1|LED2|LED3|BEEP;
	/* 进行ADC模块设置 */                      
	ADCR = 
	        (1 << 3)                        |   // 选择通道3
	        ((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转换时,此位无效
     
	OSTaskCreate (TaskDisp,(void *)0, &TaskDispStk[TaskStkLengh - 1], 6);
	OSTaskCreate(TaskSamp,(void *)0, &TaskSampStk[TaskStkLengh - 1], 3); 
	OSTaskCreate(TaskLED,(void *)0, &TaskLEDStk[TaskStkLengh - 1], 7);  			   		
	while (1)
	{  
	
	  
	    key=keyin();
	    switch(key)
	      {
	         case   KEY_OK1:
	         
	                IO0CLR=BEEP;
	                OSTimeDly(10);
	                IO0SET=BEEP;
	                OSSemPost(Sem);
	             
	           break;
	         case   KEY_LEFT:
	      
	               
	                
	         
	           break;
	         case   KEY_RIGHT:
	         
	         
	         
	         
	           break;
	        
	         case   KEY_OK:
	         
	         
	         
	         
	          break;
	          
	        default:
              break;
          }
	         
		OSTimeDly(2);
	}
}
/*********************************************************************************************************
**                       TaskUart 任务Uart为由按键控制的孤立任务:不和其他任务进行通信,
                         只使用共享资源来获取和输出信息,一般为非周期类的任务,多数为使
                         用按键进行触发。
********************************************************************************************************/

void TaskDisp	(void *pdata)
{   
  
  
  uint8   err;
  uint32  Samp1;
  pdata=pdata;
  
  while(1)
   {
     OSSemPend(Sem,0,&err);                    //等待信号量
     OS_ENTER_CRITICAL();                      //关中断
     Samp1=ad;                                 //读取当前的采样值
     OS_EXIT_CRITICAL();
     GUI_ClearSCR();
     Disp(Samp1);
   }
   
}  
/*********************************************************************************************************
**                            TaskSamp 任务Samp
                             
********************************************************************************************************/

void TaskSamp(void *pdata)
{
  
   uint32 ADC_Data;
   pdata=pdata;
   
   OSTimeDly(OS_TICKS_PER_SEC/10);
   
   ADC_Data=ADDR;
   
   while(1)
     {
       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 *2480/1024;
       ad=ADC_Data;
       OSTimeDly(OS_PRIO_SELF/10);                   //每秒钟采样10次
     }
} 

void  Timer1_Exception(void)
{  
   while(1);
}
    
void TaskLED (void *pdata)

{
   pdata=pdata;
   while(1)
   {
    IO0CLR=LED3;
    OSTimeDly(OS_TICKS_PER_SEC);         //延时,采样周期为1秒
    IO0SET=LED3;
    OSTimeDly(OS_TICKS_PER_SEC);         //延时,采样周期为1秒
   }
}






⌨️ 快捷键说明

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