📄 main.c
字号:
; 宽×高(像素) : 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 + -