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

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


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

uint8 const  M[]=  //冒号显示,点阵字体为2X7
{
  0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0
};

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


#define	TaskStkLengh	512		        // 定义用户任务0的堆栈长度
OS_STK	TaskKeyStk[TaskStkLengh];		// 定义用户任务0的堆栈
OS_STK	TaskDispStk[TaskStkLengh];		// 定义用户任务0的堆栈
void 	TaskDisp(void *pdata);			// Task0 任务0
void 	TaskKey(void *pdata);			// Task0 任务0

//OS_EVENT  *Mbox;
OS_EVENT  *Sem;
uint32  times;

/****************************************************************************
* 名称: main()
* 功能: 初始化uC/OS-II操作系统,建立第一个任务,然后启动系统。
****************************************************************************/
int main(void)
{
	OSInit ();																										
	OSTaskCreate (TaskKey,(void *)0, &TaskKeyStk[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) break;
         }
         return(key);
        }
      }
      return(4);
}


/*********************************************************************************************************
**                            TaskKey 任务Key 	优先级为2
********************************************************************************************************/
void TaskKey	(void *pdata)
{   
    uint8  key;	
	pdata = pdata;
	TargetInit ();
	GUI_Initialize();                                     // 初始化LCD
    GUI_SetColor(1, 0);                                   // 设置前景色和背景色
	OSTaskCreate (TaskDisp,(void *)0, &TaskDispStk[TaskStkLengh - 1], 4);	//创建显示任务	
	//Mbox=OSMboxCreate((void*)0);         //创建消息邮箱	
	Sem=OSSemCreate(0);   		
	while (1)
	{  
	    key=keyin();
	    switch(key)
	      {
	         case   KEY_OK1:
	                
	                 //OSMboxPost(Mbox,(void*)1);  //发送按键消息 
	                 OSSemPost(Sem); 
	           break;
	         case   KEY_LEFT:
	                
	            
	                
	         
	           break;
	         case   KEY_RIGHT:
	         
	          
	             
	         
	           break;
	        
	         case   KEY_OK:
	         
	         
	         
	         
	          break;
	          
	        default:
              break;
          }
	         
		OSTimeDly(2);
	}
}




/*********************************************************************************************************
**                            Task0 任务0
** 功能:使用ZLG/GUI,在屏幕上同时显示多个"Hello ZLG/GUI!"字符串
********************************************************************************************************/
void TaskDisp(void *pdata)
{  
     uint8  i,err;
     uint32 TIME,bak,shuz[6];
	 pdata = pdata;
	
	while (1)
	{   
	   OSSemPend(Sem,0,&err);
	   //OSMboxPend(Mbox,0,&err);   
	   OS_ENTER_CRITICAL();//关中断
	   TIME=times;
	   OS_EXIT_CRITICAL(); //开中断
       bak=(TIME>>16)&0x1F;                              // 获取小时
       shuz[0]=bak/10;
       shuz[1]=bak%10;
       bak=(times>>8)&0x3F;                               // 获取分钟
       shuz[2]=bak/10;
       shuz[3]=bak%10;
       bak=times&0x3F;                                    // 获取秒
       shuz[4]=bak/10;
       shuz[5]=bak%10;
     
       
       for(i=0;i<2;i++)
       GUI_LoadPic(5*i,0,*(num+shuz[i]),5,8);             //显示小时
       GUI_PutString(11,0,":");                           //显示冒号
       for(i=2;i<4;i++)
       GUI_LoadPic(5*i+7,0,*(num+shuz[i]),5,8);           //显示分钟  
       GUI_PutString(28,0,":");                             //显示冒号
       for(i=4;i<6;i++)
       GUI_LoadPic(5*i+14,0,*(num+shuz[i]),5,8);          //显示秒
                                           
	}
}
   
/*********************************************************************************************************
**                                      RTC中断
********************************************************************************************************/
void  RTC_Exception(void)
{   
    OS_ENTER_CRITICAL();     //关中断
    ILR=0x03;                //清除中断标志
    VICVectAddr=0;           //通知中断已经结束
    times=CTIME0;
    OS_EXIT_CRITICAL();      //开中断
}
   
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

⌨️ 快捷键说明

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