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

📄 main.c

📁 UCOS-2.rar
💻 C
📖 第 1 页 / 共 3 页
字号:
;  宽×高(像素) : 18×32
------------------------------------------------------------------------------*/
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x02,0x00,0x00,0x10,0x01,0x00,0xFD,0xF8,
  0x7F,0xF8,0x20,0x10,0x44,0x48,0x21,0x10,
  0x8A,0x90,0x21,0x10,0x29,0x10,0x79,0x10,
  0x2A,0x28,0x49,0x10,0x0C,0x28,0xC9,0xFC,
  0x77,0xE0,0x48,0x04,0x02,0x00,0x4B,0xF4,
  0x22,0x10,0x78,0x04,0x22,0x10,0x48,0x04,
  0x22,0x10,0x40,0x28,0x3F,0xF0,0x00,0x10,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 
 
};


 uint8  FONT5x7ASCII_1[][8] = {
/* 0 */
 {
   _XXX____,
   X___X___,
   X___X___,
   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_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<<19)
#define    IO_KEYALL  (IO_KEY2|IO_KEY3|IO_KEY4)

#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) 
{   
    
    uint32 times;
    uint8  bak,shuz[6],a=1;
    uint32 s2;
    static uint32  a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,i=0;
    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,*(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);             //显示秒
       
       
       
       //
       OSTaskSuspend(4);
       OSTaskSuspend(2);
       //OSTimeDly(5);
       while(a)

⌨️ 快捷键说明

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