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

📄 main.c

📁 UCOS-2.rar
💻 C
📖 第 1 页 / 共 3 页
字号:
   X___X___,
   X___X___,
   X___X___,
   _XXX____,
   ________}

/* 1 */
 ,{
   __X_____,
   _XX_____,
   __X_____,
   __X_____,
   __X_____,
   __X_____,
   _XXX____,
   ________}

/* 2 */
 ,{
   _XXX____,
   X___X___,
   ____X___,
   __XX____,
   _X______,
   X_______,
   XXXXX___,
   ________}

/* 3 */
 ,{
   _XXX____,
   X___X___,
   ____X___,
   __XX____,
   ____X___,
   X___X___,
   _XXX____,
   ________}

/* 4 */
 ,{
   ___X____,
   __XX____,
   _X_X____,
   X__X____,
   XXXXX___,
   ___X____,
   ___X____,
   ________}

/* 5 */
 ,{
   XXXXX___,
   X_______,
   XXXX____,
   ____X___,
   ____X___,
   X___X___,
   _XXX____,
   ________}

/* 6 */
 ,{
   __XX____,
   _X______,
   X_______,
   XXXX____,
   X___X___,
   X___X___,
   _XXX____,
   ________}

/* 7 */
 ,{
   XXXXX___,
   ____X___,
   ___X____,
   __X_____,
   _X______,
   _X______,
   _X______,
   ________}

/* 8 */
 ,{
   _XXX____,
   X___X___,
   X___X___,
   _XXX____,
   X___X___,
   X___X___,
   _XXX____,
   ________}

/* 9 */
 ,{
   _XXX____,
   X___X___,
   X___X___,
   _XXXX___,
   ____X___,
   ___X____,
   _XX_____,
   ________}

/* ':' 3a */
 ,{
   ________,
   XX______,
   XX______,
   ________,
   XX______,
   XX______,
   ________,
   ________}
   
};





uint8  const  *const  pic_all[][2]=
{
  {menupic1,menuchar1},
  {menupic2,menuchar2},
  {menupic3,menuchar3},
  {menupic4,menuchar4},
  {menupic5,menuchar5},
  {menupic6,menuchar6},
  {menupic7,menuchar7},
  {menupic8,menuchar8}
};
/*按键消息邮箱*/
OS_EVENT   *KeyMbox=NULL;       //按键消息邮箱(直接使用其msg指针保存为按键值)

/*定义8个图标结构变量*/

MENUICO    mainmenu[8];

/*按键定义值*/

#define   KEY_OK1      9
#define	  KEY_LEFT     1
#define	  KEY_RIGHT    3
#define	  KEY_OK       8

#define    IO_KEY1    (1<<16)
#define    IO_KEY2    (1<<17)
#define    IO_KEY3    (1<<18)
#define    IO_KEY4    (1<<25)
#define    IO_KEYALL  (IO_KEY2|IO_KEY3|IO_KEY4|IO_KEY1)

#define	  TaskStkLengh	512		        //定义用户任务0的堆栈长度
OS_STK	  TaskStk0[TaskStkLengh];		//定义用户任务0的堆栈
OS_STK	  TaskStk1[TaskStkLengh];		//定义用户任务1的堆栈
OS_STK	  TaskDispStk[TaskStkLengh];		//定义用户任务0的堆栈
void 	  Task0(void *pdata);			//Task0 任务0(图形显示)
void 	  Task1(void *pdata);			//Task1 任务1(按键输入)
void 	  TaskDisp(void *pdata);	    //Task0 任务0
/****************************************************************************
* 名称: main()
* 功能: 初始化uC/OS-II操作系统,建立第一个任务,然后启动系统。
****************************************************************************/
int main(void)
{
	OSInit ();
	PINSEL2= 0x00000000; 
    IO1DIR = 0x00000000;
    OSTaskCreate(Task1,(void*)0,&TaskStk1[TaskStkLengh-1],2);
    //OSTaskCreate (TaskDisp,(void *)0, &TaskDispStk[TaskStkLengh - 1], 2);																										
	//OSTaskCreate (Task0,(void *)0, &TaskStk0[TaskStkLengh - 1], 4);	
	KeyMbox=OSMboxCreate(NULL);         //建立一个邮箱,用于传递按键消息	
	OSStart ();
	return 0;															
}
/***定义3个图标菜单的显示位置***/
#define	   ICO1_X      7
#define	   ICO1_Y      14
#define	   ICO2_X      (ICO1_X+41)
#define	   ICO2_Y      ICO1_Y
#define	   ICO3_X      (ICO2_X+41)
#define	   ICO3_Y      ICO1_Y

/****************************************************************************
** 名称: DrawSelectMenuIco()
** 功能: 在屏幕上指定位置上显示3个图标菜单,并实现菜单选择显示
** 入口参数: start        显示3个图标菜单的第一个菜单序号
              select       当前所选中的菜单序号
              disp_all     全部更新控制(非0值时,3个图标菜单重新显示)
** 出口参数: 无    
****************************************************************************/

void  DrawSelectMenuIco(uint8  start,uint8  select,uint8  disp_all)
{ 
    static   uint8    s_start_no=255;
    static   uint8    s_select_old=255;
    
    
    
    /***判断是否要全部更新显示***/
    if((s_start_no!=start)||(disp_all!=0))        //需要全部更新
     {
        s_start_no=start;
        s_select_old=select;
        
        
        /***设置图标的显示位置***/
        mainmenu[start].x=ICO1_X;
        mainmenu[start].y=ICO1_Y;
        mainmenu[start+1].x=ICO2_X;
        mainmenu[start+1].y=ICO2_Y;
        mainmenu[start+2].x=ICO3_X;
        mainmenu[start+2].y=ICO3_Y;
        
        
        
        /***设置选择的图标,然后显示图标***/
        mainmenu[start].state=0;
        mainmenu[start+1].state=0;
        mainmenu[start+2].state=0;
        mainmenu[select].state=1;
        GUI_MenuIcoDraw(&mainmenu[start]);
        GUI_MenuIcoDraw(&mainmenu[start+1]);
        GUI_MenuIcoDraw(&mainmenu[start+2]);
     }
     
    else
     {
       /***清除旧的选择***/
       if(s_select_old<8)
        {
          mainmenu[s_select_old].state=0;
          GUI_MenuIcoDraw(&mainmenu[s_select_old]);
          
        }
        
        
       /***设置新的选择***/
       mainmenu[select].state=1;
       GUI_MenuIcoDraw(&mainmenu[select]);
       s_select_old=select;
     }
}
/****************************************************************************
** 名称:     SelectMenuIco()
** 功能:     选择图标菜单。在屏幕上同时显示三个图标菜单,然后等待按键操作,
             当确定选择后,返回所选的菜单序号(0~7)
** 入口参数:无
** 出口参数:返回值即是所选的菜单(序号)
****************************************************************************/
uint8  SelectMenuIco(void)
{  
   static   uint8    s_menu_start=0;             //屏幕显示的第1个图标菜单序号
   static   uint8    s_select=0;                 //当前所选择的图标菜单序号
   
   uint8  s_disp_sta=0;                          //需要更新显示的标志
   void   *key;
   uint8  err;
   
   /*显示当前选择的菜单*/
   DrawSelectMenuIco(s_menu_start,s_select,1);
   while(1)
   { 
     //OSTaskSuspend(3); 
     /*若更新了选择的菜单项,则调用DrawSelectMenuIco显示当前选择菜单*/
     if(s_disp_sta!=0)
     {
       DrawSelectMenuIco(s_menu_start,s_select,0);
       s_disp_sta=0;
     }
     
     /*读取一个按键*/
     key=OSMboxPend(KeyMbox,0,&err);
     
     /*分析按键并作相应的操作*/
     
     switch((int)key)
     {
       case  KEY_LEFT:
           if(s_select!=0)
             {
                s_select--;                //选择项左移
                
                
                /*判断是否需要更新s_menu_start*/
                if(s_select<s_menu_start)
                {
                   s_menu_start=s_select;
                }
                s_disp_sta=1;              //需要更新显示
             }
             break;
      case  KEY_RIGHT:
           if(s_select<7)
             {
                s_select++;                //选择项右移
                
                
                /*判断是否需要更新s_menu_start*/
                if((s_select-s_menu_start)>2)
                {
                   s_menu_start++;
                }
                s_disp_sta=1;              //需要更新显示
             }
             break;
     case  KEY_OK: 
           return(s_select);               //确定,返回所选菜单序号
     default:
           break;
    }
  }
 }
    
void   sh(void) 
{   
    void   *key;
    uint8  err;
    uint32 times;
    uint8  bak,shuz[6];
    static   uint32  yidong=0,jia=0,a0,a1,a2,a3,a4,a5;
    TargetInit ();
       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,sheding,76,19);  
       
       GUI_LoadPic(32,30,*(num+shuz[0]),8,16);              //显示小时
       GUI_LoadPic(40,30,*(num+shuz[1]),8,16);              //显示小时
       
       GUI_LoadPic(48,30,*(num+10),8,16);                  //显示冒号
       
       
       GUI_LoadPic(56,30,*(num+shuz[2]),8,16);             //显示分钟  
       GUI_LoadPic(64,30,*(num+shuz[3]),8,16);             //显示分钟 
        
       GUI_LoadPic(72,30,*(num+10),8,16);                  //显示冒号
      
       GUI_LoadPic(80,30,*(num+shuz[4]),8,16);             //显示秒
       GUI_LoadPic(88,30,*(num+shuz[5]),8,16);             //显示秒
       
       
       a0=shuz[0];
       a1=shuz[1];
       a2=shuz[2];
       a3=shuz[3];
       a4=shuz[4];
       a5=shuz[5];
       //
      // OSTaskSuspend(4);
       OSTaskSuspend(4);
       
       //OSTimeDly(5);
       while(1)
       { 
       
       
         /*读取一个按键*/
         key=OSMboxPend(KeyMbox,0,&err);
         
         
         switch((int)key)
         {
             case  KEY_LEFT:
              {
                switch(yidong)
                 { 
                   case  0:
                     GUI_LoadPic(88,30,*(num+a5),8,16);                 //正常显示第六位
                     GUI_LoadPic1(32,30,*(num+a0),8,16);                 //反白显示第一位
                     break;
                   case  1:
                     GUI_LoadPic(32,30,*(num+a0),8,16);                  //正常显示第一位
                     GUI_LoadPic1(40,30,*(num+a1),8,16);                 //反白显示第二位
                     break;
                   case  2:
                     GUI_LoadPic(40,30,*(num+a1),8,16);                  //正常显示第二位
                     GUI_LoadPic1(56,30,*(num+a2),8,16);                //反白显示第三位
                     break;

⌨️ 快捷键说明

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