LCD12864 多级菜单
更新时间:2023-12-08 10:45:01 阅读量: 教育文库 文档下载
首先定义一个菜单结构
typedef struct menu//定义一个菜单
{
u8 range_from,range_to; //当前显示的项开始及结束序号 u8 itemCount;//项目总数 u8 selected;//当前选择项 u8 *menuItems[17];//菜单项目 struct menu **subMenus;//子菜单
struct menu *parent;//上级菜单 ,如果是顶级则为null void (**func)();//选择相应项按确定键后执行的函数 }Menu;
Menu MainMenu = { //定义主菜单
0,3,4,0,//默认显示0-3项,总共4项,当前选择第0项 {
\设置1 \\x10\ \设置2 \\x10\ \输入指令发送 \ \查询 \\x10\ }
};
Menu searchMenu = {//查询菜单 0,3,6,0,
{
\记帐记录明细 \ \未采集记录数 \ \设备机号 \ \本机IP地址 \ \记录空间大小 \ \软件版本 \ }
};
Menu *currentMenu;//当前的菜单
用于显示菜单项
void display(u8 line) //显示菜单项并设置选中的项反白 { int i;
line = 3-(currentMenu->range_to-line); Lcd_Fill(0x00); for(i = 0;i<4;i++) {
Lcd_Disp(i+1,0,currentMenu->menuItems[i+currentMenu->range_from]); }
highlight(0,line,8,255);//反白显示指定行 }
void func(void) {
printf(\}
初始化菜单: void initMenu() {
MainMenu.subMenus = malloc(sizeof(&MainMenu)*4);
MainMenu.subMenus[0] = NULL;//第1到3项没有子菜单置null,选择后程序会调用func中相应项中的函数
MainMenu.subMenus[1] = NULL;
MainMenu.subMenus[2] = NULL;
MainMenu.subMenus[3] = &searchMenu;//第四项查询有子菜单 MainMenu.func = malloc(sizeof(&func)*4); MainMenu.func[0] = NULL;
MainMenu.func[1] = NULL;
MainMenu.func[2] = &func;//当选择了并按了确定,会执行func函数 MainMenu.func[3] = NULL;
MainMenu.parent = NULL;//表示是顶级菜单
searchMenu.subMenus = malloc(sizeof(&searchMenu)*6);
searchMenu.subMenus[0] = searchMenu.subMenus[1] = searchMenu.subMenus[2] = searchMenu.subMenus[3] = searchMenu.subMenus[4] = searchMenu.subMenus[5] = NULL;
searchMenu.func = malloc(sizeof(&printf)*6);
searchMenu.func[0] = searchMenu.func[2] = searchMenu.func[2] =
searchMenu.func[3] = searchMenu.func[4] = searchMenu.func[5] = NULL;
searchMenu.parent = &MainMenu;//上一级菜单是MainMenu.进入查询子菜单后按返回键,将会显示这个菜单 项
currentMenu = &MainMenu; } main
int main(void) {
delay_init(); uart_init(9600); Lcd_Init(); KEY_Init(); initMenu();
display(currentMenu->selected); while(1) {
key = KEY_Scan(); if(key == 0) {
delay_ms(10); continue; }
printf(\ switch(key) {
case 12://向上
if(currentMenu->selected == 0)//到了第一项 break; else {
currentMenu->selected--;
if(currentMenu->selected < currentMenu->range_from)//更新显示的区域 {
currentMenu->range_from = currentMenu->selected; currentMenu->range_to = currentMenu->range_from+3; }
display(currentMenu->selected); break; }
case 8://向下
if(currentMenu->selected == currentMenu->itemCount-1) break; else {
currentMenu->selected++;
if(currentMenu->selected>currentMenu->range_to)
{
currentMenu->range_to = currentMenu->selected; currentMenu->range_from = currentMenu->range_to-3; }
display(currentMenu->selected); break;
}
case 4://Enter键 {
if(currentMenu->subMenus[currentMenu->selected] !=NULL) {
currentMenu = currentMenu->subMenus[currentMenu->selected]; display(0); } else {
if(currentMenu->func[currentMenu->selected] != NULL) {
currentMenu->func[currentMenu->selected]();//执行相应的函数 display(currentMenu->selected);//返回后恢复原来的菜单状态 } } break; }
case 3://返回键
{
if(currentMenu->parent!=NULL)//父菜单不为空,将显示父菜单 {
currentMenu = currentMenu->parent; display(currentMenu->selected); } break; } default: break; }
delay_ms(10); }
}
void Lcd_Disp(unsigned char x,unsigned char y,unsigned char *s) {
Lcd_Write_Cmd(0x30); //进入标准模式 LCD_Set_XY(x,y); while (*s) {
Lcd_Write_Data(*s); s++; }
Lcd_Write_Cmd(0x36); //返回图形模式 }
void highlight(uchar x,uchar y,uchar width,u8 mode) //反白,X值为0-7,Y值为0-3,width为行反白格数 {
uchar i,j,flag=0x00; if(y>1) {
flag=0x08; y=y-2; }
Lcd_Write_Cmd(0x34); //写数据时,关闭图形显示,且打开扩展指令集 for(i=0;i<16;i++) {
Lcd_Write_Cmd(0x80+(y<<4)+i); Lcd_Write_Cmd(0x80+flag+x); for(j=0;j Lcd_Write_Data(mode); Lcd_Write_Data(mode); } } Lcd_Write_Cmd(0x36); //写完数据,开图形显示 }
正在阅读:
LCD12864 多级菜单12-08
高中教师先进事迹材料01-06
2021年交通协警工作心得体会文本08-08
法律作为社会控制主要手段正当性06-03
中考课外文言文阅读及答案Microsoft Word 文档06-10
交通运输部关于废止一批政策性文件的决定交办发〔2016〕95号04-05
参加婚礼日记03-17
6_音位和音位归纳03-18
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 多级
- LCD12864
- 菜单
- 2018上海市中考语文二模试题说明文阅读汇编(15区全)
- Hippo信号通路简介
- 钢筋保护层厚度检测方法 100分
- 省二VB笔试样卷(1)
- 2017-2018学年高中数学选修1-2教师用书:第2章 2-1-2 演绎推理 含答案 精品
- 中国水纯化设备行业市场分析与发展趋势研究报告(2014-2019)
- 乐清市“退二进三”土地出让金补缴方案
- 2015年12月统考大学语文复习试题
- 成本考核管理办法-初稿
- 130道图形推理题让你彻底成功!公务员!
- 浪潮考试题
- 《工程热力学》之 复习思考
- 天煌THSRZ V1.3软件使用说明
- 2013年全国新课标2卷高考语文试题及答案
- 初中课外文言文7篇(原文+题目+答案+译文)
- 华中科技大学生理学考博试题汇总带答案版
- 经理的困惑案例分析
- 国际经济法试题
- 市公安局视频监控系统解决方案平安城市建设 - 图文
- 八年级u2必备词组及句子辅导