📄 main.c
字号:
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 + -