📄 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: 黄绍斌
** Created date: 2007-05-25
** Version: 1.0
** Descriptions: 基于ZLG/GUI的多级菜单应用。
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
// 按键定义
#define KEY1 (1<<6) /* P0.6 (上移) */
#define KEY2 (1<<7) /* P0.7 (下移) */
#define KEY3 (1<<8) /* P0.8 (确定) */
#define KEY4 (1<<9) /* P0.9 (退出到最顶层菜单) */
#define KEY_CON (KEY1 | KEY2 | KEY3 | KEY4)
// 声明外部图片资源 (gImage_nokia数组为小端结构,可以一次读16位数据)
extern const uint16 gImage_nokia[];
/****************************************************************************
* 名称:Disp_BkPic()
* 功能:显示背景图片。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void Disp_BkPic(void)
{ uint32 x, y;
uint32 no;
uint16 dat;
TftSetWindow(0,0, 0+141,0+319);
TftSetWrite(0,0);
no = 0;
for(y=0; y<320; y++)
{ for(x=0; x<142; x++)
{ dat = gImage_nokia[no];
TftSendDat(dat);
no++;
}
}
TftSetWindow(0,0, 239,319);
}
/****************************************************************************
* 名称:GetAKey()
* 功能:等待按键,然后返回键值。
* 入口参数:无
* 出口参数:返回按键的键值(KEY_UP、KEY_DOWN、KEY_OK、KEY_ESC)。
****************************************************************************/
uint8 GetAKey(void)
{ uint32 i;
uint8 key;
while(1)
{ while((FIO0PIN&KEY_CON) == KEY_CON);
for(i=0; i<50000; i++); // 软件延时,去抖动(根据系统时钟调整)
// 判断按键是否还有效,即去除假按键
i = FIO0PIN;
if((i&KEY_CON) != KEY_CON) break;
}
/* 查询是哪个按键 */
if((i&KEY1) == 0) key = KEY_UP;
if((i&KEY2) == 0) key = KEY_DOWN;
if((i&KEY3) == 0) key = KEY_OK;
if((i&KEY4) == 0) key = KEY_ESC;
// 等待按键放开
i = FIO0PIN;
while((i&KEY_CON) != KEY_CON)
{ i = FIO0PIN;
}
return(key);
}
/*-- 文字: 功 --*/
/*-- 点阵为:宽x高=13x13 --*/
const uint8 hz1[] =
{ 0x00,0x80,0x00,0x80,0xFC,0x80,0x13,0xF0,0x10,0x90,0x10,0x90,0x10,0x90,0x11,0x10,
0x19,0x10,0xE2,0x10,0x04,0xA0,0x08,0x40,0x00,0x00
};
/*-- 文字: 能 --*/
/*-- 点阵为:宽x高=13x13 --*/
const uint8 hz2[] =
{ 0x11,0x00,0x21,0x20,0x49,0xC0,0xFD,0x10,0x01,0x10,0x78,0xF0,0x49,0x00,0x79,0x20,
0x49,0xC0,0x79,0x10,0x49,0x10,0x58,0xF0,0x00,0x00
};
/*-- 文字: 正 --*/
/*-- 点阵为:宽x高=13x13 --*/
const uint8 hz3[] =
{ 0x00,0x40,0x7F,0xE0,0x02,0x00,0x02,0x00,0x22,0x00,0x22,0x00,0x23,0xE0,0x22,0x00,
0x22,0x00,0x22,0x00,0x22,0x00,0xFF,0xF0,0x00,0x00
};
/*-- 文字: 在 --*/
/*-- 点阵为:宽x高=13x13 --*/
const uint8 hz4[] =
{ 0x04,0x00,0x04,0x20,0xFF,0xF0,0x08,0x00,0x11,0x00,0x21,0x00,0x67,0xE0,0xA1,0x00,
0x21,0x00,0x21,0x00,0x21,0x00,0x2F,0xF0,0x00,0x00
};
/*-- 文字: 建 --*/
/*-- 点阵为:宽x高=13x13 --*/
const uint8 hz5[] =
{ 0x01,0x00,0xF7,0xE0,0x11,0x20,0x2F,0xF0,0x41,0x20,0x77,0xE0,0x11,0x00,0x97,0xE0,
0x51,0x00,0x2F,0xF0,0x51,0x00,0x8F,0xF0,0x00,0x00
};
/*-- 文字: 设 --*/
/*-- 点阵为:宽x高=13x13 --*/
const uint8 hz6[] =
{ 0x43,0xC0,0x22,0x40,0x22,0x40,0x04,0x70,0xE8,0x00,0x27,0xE0,0x24,0x40,0x22,0x80,
0x29,0x00,0x32,0x80,0x24,0x40,0x08,0x30,0x00,0x00
};
/*-- 文字: 中 --*/
/*-- 点阵为:宽x高=13x13 --*/
const uint8 hz7[] =
{ 0x04,0x00,0x04,0x00,0x7F,0xE0,0x44,0x20,0x44,0x20,0x44,0x20,0x7F,0xE0,0x44,0x20,
0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00
};
/*-- 文字: . --*/
/*-- 点阵为:宽x高=13x13 --*/
const uint8 hz8[] =
{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00
};
/* 汉字字模, "功能正在建设中..." */
const uint8 *hz_msg[] =
{ hz1, hz2, hz3, hz4, hz5, hz6, hz7, hz8, hz8, hz8, NULL
};
/****************************************************************************
* 名称:DispCreateMessage()
* 功能:显示"功能正在建设..."的信息窗口。
* 入口参数:title 窗口标题
* 出口参数:无
* 注意:调用本函数前要先清屏。
****************************************************************************/
void DispCreateMessage(uint8 *title)
{ int i;
int x, y;
WINDOWS g_fun_window;
g_fun_window.x = 20;
g_fun_window.y = 60;
g_fun_window.with = 200;
g_fun_window.hight = 170;
g_fun_window.title = title; // 窗口标题
g_fun_window.state = NULL; // 不需要状态栏
GUI_WindowsDraw(&g_fun_window); // 显示对话框窗口
// 显示汉字
x = 40;
y = 120;
for(i=0; i<15; i++)
{ if(hz_msg[i] == NULL) break;
GUI_PutHZ(x, y, (uint8 *)hz_msg[i], 16,13);
x += 16;
}
// 显示按钮
GUI_Button_OK1(100,190);
// 等待按键
GetAKey();
}
/****************************************************************************
* 名称:FUN11_Find()
* 功能:菜单功能函数。 已分配给菜单项 1-->1 。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void FUN11_Find(void)
{ DispCreateMessage((uint8 *)" FUN11_Find.");
}
/****************************************************************************
* 名称:FUN12_Edit()
* 功能:菜单功能函数。 已分配给菜单项 1-->2 。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void FUN12_Edit(void)
{ DispCreateMessage((uint8 *)" FUN12_Edit.");
}
/****************************************************************************
* 名称:FUN21_Rcv()
* 功能:菜单功能函数。 已分配给菜单项 2-->1 。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void FUN21_Rcv(void)
{ DispCreateMessage((uint8 *)" FUN21_Rcv.");
}
/****************************************************************************
* 名称:FUN22_Send()
* 功能:菜单功能函数。 已分配给菜单项 2-->2 。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void FUN22_Send(void)
{ DispCreateMessage((uint8 *)" FUN22_Send.");
}
/****************************************************************************
* 名称:FUN23_Bad()
* 功能:菜单功能函数。 已分配给菜单项 2-->3 。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void FUN23_Bad(void)
{ DispCreateMessage((uint8 *)" FUN23_Bad.");
}
/****************************************************************************
* 名称:FUN32_Disp()
* 功能:菜单功能函数。 已分配给菜单项 3-->2 。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void FUN32_Disp(void)
{ DispCreateMessage((uint8 *)" FUN32_Disp.");
}
/****************************************************************************
* 名称:FUN41_Vk100()
* 功能:菜单功能函数。 已分配给菜单项 4-->1 。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void FUN41_Vk100(void)
{ DispCreateMessage((uint8 *)" FUN41_Vk100.");
}
/****************************************************************************
* 名称:FUN311_Chgt()
* 功能:菜单功能函数。 已分配给菜单项 3-->1-->1 。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void FUN311_Chgt(void)
{ DispCreateMessage((uint8 *)" FUN311_Chgt.");
}
/****************************************************************************
* 名称:FUN312_T12()
* 功能:菜单功能函数。 已分配给菜单项 3-->1-->2 。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void FUN312_T12(void)
{ DispCreateMessage((uint8 *)" FUN312_T12.");
}
/****************************************************************************
* 名称:FUN313_T24()
* 功能:菜单功能函数。 已分配给菜单项 3-->1-->3 。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void FUN313_T24(void)
{ DispCreateMessage((uint8 *)" FUN313_T24.");
}
/****************************************************************************
* 名称:SysInit()
* 功能:系统初始化。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void SysInit(void)
{
SCS |= 0x01; // P0,P1口作快速I/O
// 内部上/下拉电阻,在GPIO作为输入用时有用。当作输出时,输出1就为强输出,输出0也正确输出。
PINSEL0 = 0x00000000;
PINSEL1 = 0x00000000;
FIO0DIR &= 0xFFFFFC3F; // P0.6--0.9为独立按键输入
// 配置MiniBUS
PINSEL6 = 0x00005555; // D0--D7
PINSEL8 = 0x55555555; // A0--A15
PINSEL9 = 0x500A0000; // nOE, nWE, nCS0, nCS1
PCONP = PCONP | (1<<11);
EMCConfig = 0x00; // 小端模式
EMCStaticConfig1 = 0x00; // 8位宽度, 页模式禁止, 片选低电平有效, 不使用延长计时器EMCStaticExtendedWait,
// (而使用EMCStaticWaitRd和EMCStaticWaitWr), 禁止写/读缓冲, 禁止写保护
EMCStaticWaitWen1 = 5; // 片选nCS0到写nWE的延时时间为9clk, 最大可设置为15.
EMCStaticWaitOen1 = 5; // 片选nCS0到输出使能的延时时间为9, 最大可设置为15.
EMCStaticWaitRd1 = 5; // 读访问延时为9, 最大可设置为15.
EMCStaticWaitWr1 = 5; // 写访问延进为9, 最大可设置为31.
EMCControl = 0x01; // EMC使能, 正常地址映射,正常工作模式
// 通过读取EMC_STAT的bit0,判断总线是否已空闲
// 关闭Cache
}
extern MY_MENU MAIN_MENU[5]; // 菜单模板
/****************************************************************************
* 名称:main()
* 功能:使用ZLG/TUI实现3级图标菜单应用。
****************************************************************************/
int main(void)
{
SysInit(); // 初始化I/O
GUI_Initialize(); // 初始化GUI及LCD
GUI_SetColor(BLUE, WHITE); // 设置显示颜色
while(1) GUI_ICOMenuClass3(MAIN_MENU); // 菜单操作
return(0);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -