设为首页 加入收藏

TOP

一种灵活的嵌入式软件架构(四)
2014-11-24 03:26:55 】 浏览:1466
Tags:灵活 嵌入式 软件 架构
lect + 1; } /************************************************************************* * 函数原型: * 功能描述: * 入口参数: * 出口参数: * 返 回 值: *************************************************************************/ void WndDrawMenu(void) { int i; char buf[17]; const char *pmn = pMenuStr + menuTop * 16; DispClr(); for (i=0; i<4; i++) { if (menuTop + i == menuLine) break; memcpy(buf, pmn, 16); buf[16] = '\0'; if (menuSelect == menuTop + i) DispSetStyle(DISP_POSITION | DISP_REVERSE | DISP_7x9); else DispSetStyle(DISP_POSITION | DISP_NORMAL | DISP_7x9); DispString(0, i * 2, buf); pmn += 16; } } /************************************************************************* * 函数原型: * 功能描述: * 入口参数: * 出口参数: * 返 回 值: *************************************************************************/ long WndGetPaseword(int x, int y, char *psw, int len, long qevent) { int pin = 0; long keyevt; char key; char buf[20]; memset(buf, '_', len); buf[len] = '\0'; PSW_INPUT_LOOP: DispString(x, y, buf); keyevt = delay_and_wait_key(0, EXIT_KEY_ALL, 0); if (keyevt == qevent) { psw[0] = '\0'; return keyevt; } switch (keyevt) { case EXIT_KEY_0: key = '0'; break; case EXIT_KEY_1: key = '1'; break; case EXIT_KEY_2: key = '2'; break; case EXIT_KEY_3: key = '3'; break; case EXIT_KEY_4: key = '4'; break; case EXIT_KEY_5: key = '5'; break; case EXIT_KEY_6: key = '6'; break; case EXIT_KEY_7: key = '7'; break; case EXIT_KEY_8: key = '8'; break; case EXIT_KEY_9: key = '9'; break; case EXIT_KEY_COMM: if (pin != 0) { buf[--pin] = '_'; } goto PSW_INPUT_LOOP; break; case EXIT_KEY_ENTER: psw[pin] = 0; return 0; default: goto PSW_INPUT_LOOP; } if (pin != len) { psw[pin] = key; buf[pin] = '*'; pin++; } goto PSW_INPUT_LOOP; }

在软件设计时,如果添加界面和对应的按键处理,很灵活,只需要新添加一个文件就可以了,文件的内容,只需要实现OnPain和对应的OnKey

#include "PageMenu.h"


/*=====================================================
=	
=====================================================*/
const char mainMenuTab[] = /*
1234567890123456*/"\
1. 现场采集     \
2. 数据上传     \
3. 存储状态查询 \
4. 时间设置     \
5. 对比度设置   \
6. 恢复出厂设置 \
7. 关于         ";

/*=====================================================
=	
=====================================================*/
void PageMenuOnPain(void);
void WndMenuOnKey(short key);

const TypePage pageMenu = {PageMenuOnPain, WndMenuOnKey};

/*************************************************************************
* 函数原型:
* 功能描述:
* 入口参数:
* 出口参数:
* 返 回 值:
*************************************************************************/
void PageMenuOnPain(void)
{
	WndMenuInit(mainMenuTab, 7);
}

/*************************************************************************
* 函数原型:
* 功能描述:
* 入口参数:
* 出口参数:
* 返 回 值:
*************************************************************************/
void WndMenuOnKey(short key)
{
	int res;
	
	switch (key)
	{
		case KEY_F1:
		case KEY_ENTER:
			res = WndMenuGetSelet();
			switch (res)
			{
				case 1:
					WndPageSet(&pageSimp);
					break;
				case 2:
					WndPageSet(&pagePclink);
					break;
				case 3:
					WndPageSet(&pageInquire);
					break;
				case 4:
					WndPageSet(&pageRtc);
					break;
				case 5:
					WndPageSet(&pageGray);
					break;
				case 6:
					SPageInit();
					WndPageSet(&pageMenu, 1);
					break;
				case 7:
					WndPageSet(&pageAbout);
					break;
			}
			break;
		case KEY_F2:
		case KEY_F3:
			WndPageSet(&pageMain);
			break;
		case KEY_1:
			WndPageSet(&pageSimp);
			break;
		case KEY_2:
			WndPageSet(&pagePclink);
			break;
		case KEY_3:
			WndPageSet(&pageInquire);
			break;
		case KEY_4:
			WndPageSet(&pageRtc);
			break;
		case KEY_5:
			WndPageSet(&pageGray);
			break;
		case KEY_6:
			SPageInit();
			WndPageSet(&pageMenu, 1);
			break;
		case KEY_7:
			WndPageSet(&pageAbout);
			break;
		case KEY_UP:
			WndMenuSelet(-1);
			break;
		case KEY_DOWN:
			WndMenuSelet(1);
			break;
		case KEY_POWER:
			WndPageSet(&pagePower);
			break;
	}
}

pageMain,pageAbout,pageRtc,pagePclink等文件,他们的结构很类似。都是实现了OnPaint和OnKey函数。
如:pagePclink.c文件内容:
实现了PagePclinkOnPaint和PagePclinOnKey函数.

CommPclink函数是自己想要实现的功能,可以自己定义。

#include "pagePclink.h"

/*=====================================================
=	
=====================================================*/
void PagePclinkOnPaint(void);
void PagePclinOnKey(short key);

const TypePage pagePclink = {PagePclinkOnPaint, PagePclinOnKey};

/*************************************************************************
* 函数原型:
* 功能描述:
* 入口参数:
* 出口参数:
* 返 回 值:
*************************************************************************/
void PagePclink
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇设计模式(4) 原型模式(Prototype) 下一篇Java基础-面向对象(封装、继承、..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目