📄 main.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"
/* 按键消息邮箱 */
OS_EVENT *KeyMbox = NULL; // 按键消息邮箱 (直接使用其msg指针保存为按键值)
/* 定义8个图标结构变量 */
MENUICO mainmenu[8];
/* 按键值定义 */
#define KEY_LEFT 1
#define KEY_RIGHT 2
#define KEY_OK 4
#define TaskStkLengh 64 //Define the Task0 stack length 定义用户任务0的堆栈长度
OS_STK TaskStk0[TaskStkLengh]; //Define the Task0 stack 定义用户任务0的堆栈
OS_STK TaskStk1[TaskStkLengh];
OS_STK TaskStk2[TaskStkLengh];
OS_STK TaskStk3[TaskStkLengh];
OS_STK RTC_Stk[TaskStkLengh];
void Task0(void *pdata); //Task0 任务0 (图形显示)
void Task1(void *pdata) ;
void Task2(void *pdata);
void Task3(void *pdata);
void RTC_TASK(void *pdata) ;
/****************************************************************************
* 名称: main()
* 功能: 初始化uC/OS-II操作系统,建立第一个任务,建立一个消息邮箱,
* 然后启动系统。
****************************************************************************/
int main(void)
{
OSInit ();
TargetInit();
OSTaskCreate (Task0,(void *)0,&TaskStk0[TaskStkLengh-1],3);
OSTaskCreate (Task1,(void *)0,&TaskStk1[TaskStkLengh-1],6) ;
OSTaskCreate (Task2,(void *)0,&TaskStk2[TaskStkLengh-1],4) ;
OSTaskCreate (Task3,(void *)0,&TaskStk3[TaskStkLengh-1],5) ;
OSTaskCreate (RTC_TASK,(void *)0,&RTC_Stk[TaskStkLengh-1],7) ;
KeyMbox = OSMboxCreate(NULL); // 建立一个邮箱,用于传递按键消息
AD_INIT();
OSStart ();
return 0;
}
/* 定义三个图标菜单的显示位置 */
#define ICO1_X 7
#define ICO1_Y 14
#define ICO2_X (ICO1_X + 20)
#define ICO2_Y ICO1_Y
#define ICO3_X (ICO2_X + 20)
#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[start].title = "A";
mainmenu[start+1].title = "B";
mainmenu[start+2].title = "C";
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; // 屏幕显示的第一个图标菜单序号
static uint8 s_select = 0; // 当前所选择的图标菜单序号
uint8 s_disp_sta = 0; // 需要更新显示标志
void *key;
uint8 err;
// 显示当前选择菜单
DrawSelectMenuIco(s_menu_start, s_select, 1);
while(1)
{
OSTimeDly(10);
/* 若更新了选择的菜单项,则调用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++; // 选择项右移
if((s_select-s_menu_start) > 2)
{ s_menu_start++;
}
s_disp_sta = 1; // 需要更新显示
}
break;
case KEY_OK:
return(s_select); // 确定,返回所选菜单序号
default:
break;
} // end of switch(key)...
} // end of while(1)...
}
/****************************************************************************
* 名称: DemoMessage()
* 功能: 显示一个消息框(包含OK和CANCEL两个命令按钮),显示消息
* 为"Hello,ZLG/GUI",然后等待按键输入。
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void DemoMessage(void)
{ uint8 select;
uint8 *key;
uint8 err;
WINDOWS message;
message.x = 4; // 设置窗口位置和大小
message.y = 4;
message.with = 80;
message.hight = 40;
message.title = (uint8 *) "Demo"; // 窗口标题
message.state = (uint8 *) 0;
GUI_WindowsDraw(&message); // 显示对话框窗口
//GUI_PutString(8, 15, "Hello,"); // 显示对话框的消息"Hello,ZLG/GUI"
//GUI_PutString(8, 30, "ZLG/GUI!");
select = 0;
while(1)
{ if(select==0)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -