main.c

来自「UCOS-2.rar」· C语言 代码 · 共 298 行

C
298
字号
/****************************************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[11][16]={    //0~9十个数字,字体点阵为8X16

{0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,
 0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00},


{0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,
 0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00},


{0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,
 0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00},


{0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,
 0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00},


{0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,
 0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00},


{0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,
 0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00},


{0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,
 0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00},


{0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,
 0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00},


{0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,
 0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00},


{0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,
 0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00},


{0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00}};

uint8  M[]=  //冒号显示,点阵字体为8X16
{
  0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00
};
const   uint32 key=1<<16;
#define	TaskStkLengh	512		    //定义用户任务0的堆栈长度
OS_STK	TaskKeyStk[TaskStkLengh];		//定义用户任务0的堆栈
OS_STK	TaskDispStk[TaskStkLengh];		//定义用户任务0的堆栈
void 	TaskKey(void *pdata);	    //Task0 任务0
void 	TaskDisp(void *pdata);	    //Task0 任务0
//OS_EVENT   *Mbox;
/****************************************************************************
* 名称: main()
* 功能: 初始化uC/OS-II操作系统,建立第一个任务,然后启动系统。
****************************************************************************/
int main(void)
{
	OSInit ();																										
	OSTaskCreate (TaskKey,(void *)0, &TaskKeyStk[TaskStkLengh - 1], 2);		
	OSStart ();
	return 0;															
}




/*********************************************************************************************************
**                            Task0 任务0
** 功能:使用ZLG/GUI,在屏幕上同时显示多个"Hello ZLG/GUI!"字符串
********************************************************************************************************/
void TaskKey(void *pdata)
{  
    uint32 s2;
    static uint32  a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,i=0;
	pdata = pdata;
	PINSEL2= 0x00000000; 
    IO1DIR = 0x00000000;
	TargetInit ();
	GUI_Initialize();                                     // 初始化LCD
    OSTaskCreate (TaskDisp,(void *)0, &TaskDispStk[TaskStkLengh - 1], 4);
    //Mbox=OSMboxCreate((void*)0);
    
    
    		
	while (1)
	{      
       
       if((IO1PIN&key)==0)
	     {
	        OSTimeDly(OS_TICKS_PER_SEC/50);
	        if((IO1PIN&key)==0)
	          {
	             while((IO1PIN&key)==0)OSTimeDly(1);
	             i=i+1;    
	          }
	     }
       if(i==0) OSTimeDly(OS_TICKS_PER_SEC/50);
       
       if(i==1) {CCR=0x00;OSTaskSuspend(4);} 
       if(i==2) 
        {  
           for(s2=0;s2<400;s2++)   
             {
                if((IO1PIN&key)==0)
	             {
	               OSTimeDly(OS_TICKS_PER_SEC/50);
	               if((IO1PIN&key)==0)
	                {
	                  while((IO1PIN&key)==0)OSTimeDly(OS_TICKS_PER_SEC/500);
	                  a1=a1+1;
	                }
	             }
           
               GUI_LoadPic1(0,0,*(num+a1),8,16);             //反白显示小时第一位
               if(a1==3)a1=0;
            }
          i=3; 
       }
   
      if(i==3) 
       { 
           GUI_LoadPic(0,0,*(num+a1),8,16);                  //恢复显示小时第一位
           for(s2=0;s2<400;s2++)   
             {
               if((IO1PIN&key)==0)
	            {
	              OSTimeDly(OS_TICKS_PER_SEC/50);
	              if((IO1PIN&key)==0)
	                {
	                  while((IO1PIN&key)==0)OSTimeDly(OS_TICKS_PER_SEC/500);
	                  a2=a2+1;
	                }
	            }
               GUI_LoadPic1(8,0,*(num+a2),8,16);             //反白显示小时第二位
               if(a2==10)a2=0;
             }
          i=4;
      }
      
     if(i==4)// disp1(0,0,1,0,0,0);
        {   
           GUI_LoadPic(8,0,*(num+a2),8,16);                  //恢复显示小时第二位
           for(s2=0;s2<600;s2++)   
            {
               if((IO1PIN&key)==0)
	             {
	               OSTimeDly(OS_TICKS_PER_SEC/50);
	               if((IO1PIN&key)==0)
	                 {
	                   while((IO1PIN&key)==0)OSTimeDly(OS_TICKS_PER_SEC/500);
	                   a3=a3+1;
	                 }
	             }
               GUI_LoadPic1(24,0,*(num+a3),8,16);      //反白显示分钟第一位  
               if(a3==6)a3=0;
        
           }
         i=5; 
       }
    if(i==5) 
       {  
          GUI_LoadPic(24,0,*(num+a3),8,16);            //恢复显示分钟第一位  
          for(s2=0;s2<400;s2++)   
           {
              if((IO1PIN&key)==0)
	           {
	              OSTimeDly(OS_TICKS_PER_SEC/50);
	              if((IO1PIN&key)==0)
	               {
	                 while((IO1PIN&key)==0)OSTimeDly(OS_TICKS_PER_SEC/500);
	                 a4=a4+1;
	               }
	           }
              GUI_LoadPic1(32,0,*(num+a4),8,16);         //反白显示分钟第二位 
              if(a4==10)a4=0;
         }
         i=6;
      }
  if(i==6)
      {  
           GUI_LoadPic(32,0,*(num+a4),8,16);               //恢复显示分钟第二位 
          for(s2=0;s2<600;s2++)   
            {
               if((IO1PIN&key)==0)
	             {
	                OSTimeDly(OS_TICKS_PER_SEC/50);
	                if((IO1PIN&key)==0)
	                 {
	                   while((IO1PIN&key)==0)OSTimeDly(OS_TICKS_PER_SEC/500);;
	                   a5=a5+1;
	                 }
	             }
              GUI_LoadPic1(48,0,*(num+a5),8,16);         //反白显示秒第一位
              if(a5==6)a5=0;
           }
         i=7;
      }
  if(i==7)
     {  
         GUI_LoadPic(48,0,*(num+a5),8,16);              //恢复显示秒第一位
         for(s2=0;s2<800;s2++)   
           {
               if((IO1PIN&key)==0)
	            {
	               OSTimeDly(OS_TICKS_PER_SEC/50);
	               if((IO1PIN&key)==0)
	                 {
	                    while((IO1PIN&key)==0) OSTimeDly(OS_TICKS_PER_SEC/500);;
	                    a6=a6+1;
	                 }
	            }
            GUI_LoadPic1(56,0,*(num+a6),8,16);         //反白显示秒的第二位  
            if(a6==10)a6=0;
         }  
    GUI_LoadPic(56,0,*(num+a6),8,16);                  //恢复显示秒的第二位   
    i=0;OSTaskResume(4);
    HOUR  = a1*10+a2;
	MIN   = a3*10+a4;
	SEC   = a5*10+a6; 
    CCR=0x01; 
  }
 }
}
   
/*********************************************************************************************************
**                            
********************************************************************************************************/
void TaskDisp(void *pdata)
{  
    uint32 times;
    uint8  bak,shuz[6];
	pdata = pdata;
	TargetInit ();
	GUI_Initialize();                                     // 初始化LCD
    GUI_SetColor(1, 0);                                   // 设置前景色和背景色
	while (1)
	{      
	   times=CTIME0;
       bak=(times>>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;
       
       GUI_LoadPic(0,0,*(num+shuz[0]),8,16);              //显示小时
       GUI_LoadPic(9,0,*(num+shuz[1]),8,16);              //显示小时
       
       GUI_LoadPic(16,0,*(num+10),8,16);                  //显示冒号
       
       
       GUI_LoadPic(24,0,*(num+shuz[2]),8,16);             //显示分钟  
       GUI_LoadPic(32,0,*(num+shuz[3]),8,16);             //显示分钟 
        
       GUI_LoadPic(40,0,*(num+10),8,16);                  //显示冒号
      
       GUI_LoadPic(48,0,*(num+shuz[4]),8,16);             //显示秒
       GUI_LoadPic(56,0,*(num+shuz[5]),8,16);             //显示秒    
                                            
	}
}
   

⌨️ 快捷键说明

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