打印

响应古版号召,贴上一段菜单与界面的程序~~~(再添几个工

[复制链接]
10658|69
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
原野之狼|  楼主 | 2007-9-13 18:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨儿个为了练习一下贴图,在此版发了一个俺做得产品的界面图。
承蒙古版厚爱,现贴上菜单与界面部分的源码。
小狼俺去年才毕业,造诣尚浅,混迹与21IC BBS一年有余,受到许多朋友支持与帮助,受益匪浅,感激不尽!
现贴此拙作,希望对于新手有所帮助。
小狼俺乐于与众网友分享一些快乐与痛苦。

源码下载:
https://bbs.21ic.com/upfiles/img/20079/2007914144218555.rar

为了方便阅读,我做了一个SOURCE INSIGHT排版后的PDF版本,可惜太大传不上来,有需要的朋友可以EMAIL给我。
声明:代码质量不高,仅供学习之用!

效果图片如下:

启动界面
 

主界面
 

工作时界面
 

菜单
 

设置界面


在规划界面时很实用很简单的工具




在编辑源码时很棒的工具


画框图和流程图时很不错的工具

相关帖子

沙发
原野之狼|  楼主 | 2007-9-13 18:16 | 只看该作者

占座1

/************************************************************ 
    FileName: Gui.h

    Author:胡贵    

    Version :V1.0      

    Date: 2007.9.13

    Description: 
        用于GUI的一些底层代码,只是部分功能,
        还需要完善

    History: 

      <author>      <time>      <version >      <desc> 


************************************************************/ 

#ifndef _GUI_H_
#define _GUI_H_

#include "comm.h"
#include "ds1302.h"

#define X_PIXEL 128
#define Y_PIXEL 64


#define X_PIXEL_NUMBER 3
#define Y_PIXEL_NUMBER 5

struct GUI_RECT
{
    UINT8 x0;
    UINT8 x1;
    UINT8 y0;
    UINT8 y1;
};

struct Text
{
    UINT8 code* *p_Content;
/*#if TextProperty
    UINT8 X_Distance;
    UINT8 L_Margin;
    UINT8 R_Margin;
    UINT8 zimu_X_X;
#endif*/
};


struct GUI_BUTTON
{
    UINT8 *p_HZ_STR;
    UINT8 x;
    UINT8 y;
    UINT8 dx;
    UINT8 dy;
};


struct StpLabelBlk_YMD
{
    struct Time *p_Time;
    struct Time Time_Temp;
    UINT8 Location_Cur_Crt;
    UINT8 x;
    UINT8 y;
};

struct StpLabelBlk_Int
{
    UINT16 *p_Dat;
    UINT8 Location_Cur_Crt;
    UINT8 n_Bit;
    UINT16 Dat_Temp;
    UINT8 x;
    UINT8 y;
};

//逻辑开关量设置页数据结构
struct StpLabelBlk_Logic
{
    UINT8 *p_Dat;
    UINT8 Dat_Temp;
    UINT8 x;
    UINT8 y;
    UINT8 Location_Cur_Crt;
};


/*The base GUI function declaration*/
void GUI_DrawPixel(UINT8 x,UINT8 y);
void GUI_DrawHLine(UINT8 x0,UINT8 x1,UINT8 y);
void GUI_DrawHLine_(UINT8 x0,UINT8 x1,UINT8 y);
void GUI_DrawVLine(UINT8 y0,UINT8 y1,UINT8 x);
void GUI_DrawRect(UINT8 x0,UINT8 x1,UINT8 y0,UINT8 y1);
UINT8 code* GetCharPointer(UINT8 character);
void GUI_DispChars(UINT8 *p_Char,UINT8 x,UINT8 y);
void GUI_DispLine(struct Text *p_Text,UINT8 n_Disp,struct GUI_RECT *p_Rect);
void GUI_DisIntData(INT16 dat,UINT8 x,UINT8 y,UINT8 *formate);
void GUI_DisFloatData(FLP32 dat,UINT8 x,UINT8 y,UINT8 *formate);

void GUI_InvertRect(UINT8 x0,UINT8 x1,UINT8 y0,UINT8 y1);
void GUI_ClearRect(UINT8 x0,UINT8 x1,UINT8 y0,UINT8 y1);


void ZK_To_Bitmap(UINT8 code* zk,UINT8 row,UINT8 col,UINT8* p_Bitmap);
void RegionInsertInDisBuffer(struct GUI_RECT* rect,UINT8* p_Content);
//UINT8 code* GetCharPointer(UINT8 character);


UINT16 get_hz_const(UINT8 *p);
UINT8 Generate_HZ_Group(UINT8 *p,UINT8 code **HZ_Group);
UINT8  GUI_DispLine_(UINT8 *p_HZ_Str,UINT8 x,UINT8 y);
void GUI_DrawArrow(UINT8 up_down);
void GUI_ClearAll(void);



void Gui_CharacterStyle_Set7_4(void);
void Gui_CharacterStyle_Set12_6(void);



void GUI_DrawButton(struct GUI_BUTTON *p_btn, UINT8 *p_HZ_Str,UINT8 x,UINT8 y,UINT8 dx,UINT8 dy);
void GUI_ButtonClick(struct GUI_BUTTON *p_btn);
void GUI_ButtonRelease(struct GUI_BUTTON *p_btn);
void GUI_ClearPixel(UINT8 x,UINT8 y);


void CreateStpLabel_YMD(UINT8 *p_HZ_Str,UINT8 x_HZ,UINT8 y_HZ,struct Time *p_T, UINT8 x_T,UINT8 y_T,UINT8 flag);
void OnOK_YMD(UINT8 flag);
void OnPre_YMD(UINT8 flag);
void OnNxt_YMD(UINT8 flag);

void CreateStpLable_Logic(UINT8 *p_HZ_Str,UINT8 *p_Logic,UINT8 x_HZ,UINT8 y_HZ,UINT8 x_dat,UINT8 y_Dat);
void OnOK_Logic(void);
void OnPre_Logic(void);
void OnNxt_Logic(void);
void OnCancle_Logic(void);

void CreateStpLabel_Int(UINT8 *p_HZ_Str,UINT8 x_HZ,UINT8 y_HZ,UINT16 *p_Int, UINT8 x_Dat,UINT8 y_Dat,UINT8 n_Int);
//UINT8 GetBCD_At(UINT16 dat,UINT8 n_Bit,UINT8 Location_Bit);
signed char GetBCD_At(UINT16 dat,UINT8 n_Bit,UINT8 Location_Bit);
void OnOk_Int(void);
void OnPre_Int(void);
void OnNxt_Int(void);
void OnCancle_Int(void);

#endif

使用特权

评论回复
板凳
原野之狼|  楼主 | 2007-9-13 18:18 | 只看该作者

占座3

/************************************************************ 
    FileName: menu.h

    Author:胡贵    

    Version :V1.0      

    Date: 2007.9.13

    Description: 
        菜单
    History: 

      <author>      <time>      <version >      <desc> 


************************************************************/ 

#ifndef _MENU_H_
#define _MENU_H_
#include "comm.h"

//按键响应处理模式
//BASE_ONLY -------只有基本模式
//EXP_ONLY---------只有扩展模式
//BASE_EXP--------基本模式和扩展模式
#define KEY1_BASE_ONLY 0x0001//0b0000000000000001
#define KEY2_BASE_ONLY 0x0010//0b0000000000010000
#define KEY3_BASE_ONLY 0x0100//0b0000000100000000
#define KEY4_BASE_ONLY 0x1000//0b0001000000000000
#define KEY1_EXP_ONLY 0x0002//0b0000000000000010
#define KEY2_EXP_ONLY 0x0020//0b0000000000100000
#define KEY3_EXP_ONLY 0x0200//0b0000001000000000
#define KEY4_EXP_ONLY 0x2000//0b0010000000000000
#define KEY1_BASE_EXP 0x0004//0b0000000000000100
#define KEY2_BASE_EXP 0x0040//0b0000000001000001
#define KEY3_BASE_EXP 0x0400//0b0000010000000000
#define KEY4_BASE_EXP 0x4000//0b0100000000000000

//typedef 
struct  _exp_fun_
{
    void (*p_Btn1Serv)(void);
    void (*p_Btn2Serv)(void);
    void (*p_Btn3Serv)(void);
    void (*p_Btn4Serv)(void);
};
//EXP_FUN;

//菜单结构体
struct _menu_{
    UINT8 Index;//菜单索引
    UINT8 KeyOkIndex;//按下OK转向的菜单项索引
    UINT8 KeyPreIndex;//按下PRE转向的菜单项索引
    UINT8 KeyNextIndex;//按下NEXT转向的菜单项索引
    UINT8 KeyCancleIndex;//按下CANCLE转向的菜单项索引
    UINT8 *p_Text;
    UINT16 ExcuteMode;// 1111 1111

    void (*p_Btn1Serv)(void );//按键1扩展
    void (*p_Btn2Serv)(void );//按键2扩展
    void (*p_Btn3Serv)(void );//按键3扩展
    void (*p_Btn4Serv)(void );//按键4扩展
};//MENU;


/*
#define TXT_LINE1_X_LOCATION 12
#define TXT_LINE1_Y_LOCATION 14
#define TXT_LINE2_X_LOCATION 12
#define TXT_LINE2_Y_LOCATION 28
#define TXT_LINE3_X_LOCATION 12
#define TXT_LINE3_Y_LOCATION 42
*/


#define MENU_TXT_X_COORDINATE 20//菜单文本X 方向的基址
#define MENU_TXT_Y_COORDINATE 16//菜单文本Y 方向的基址
#define MENU_TXT_Y_SPACE 13//菜单文本Y方向的间距

//菜单项文字
#define TXT0 0X00
#define TXT1 "请输入系统密码"
#define TXT2 "数据存储管理"
#define TXT3 "数据打印管理"
#define TXT4 "系统时间设置"
#define TXT5 "系统项管理"
#define TXT6 "测试数据查询"
#define TXT7 "清除所选数据"
#define TXT8 "清除全部数据"
#define TXT9 "打印模式设置"
#define TXT10 "打印所选数据"
#define TXT11 "打印全部数据"
#define TXT12 "年月日设置"
#define TXT13 "时分秒设置"
#define TXT14 "待机时间设置"
#define TXT15 "修改系统密码"
#define TXT16 "看看系统信息"
#define TXT17 "恢复出厂设置"
#define TXT18 "请输入索引号"
#define TXT19 "请输入索引号"
#define TXT20 "清除全部数据"
#define TXT21 "确认自动打印"
#define TXT22 "请输入索引号"
#define TXT23 "确认打印全部数据"
#define TXT24 "请输入年月日"
#define TXT25 "请输入时分秒"
#define TXT26 "请输入待机时间"
#define TXT27 "请输入新密码"
#define TXT28 "欢迎使用"
#define TXT29 "确认复位"



void DrawMenu(UINT8 index);
void MenuServer(UINT8 key);
void CursorLocationPush(UINT8 CursorLocation);
UINT8 CursorLocationPop(void);
void ExpFunRefreshMainInterface(void);


void ExpFunYYMMDDCreat(void);
void ExpFunHHMMSSCreat(void);
void ExpFunHHMMSSOnOk(void);
void ExpFunYYMMDDOnOk(void);
void ExpFunHHMMSSOnPre(void);
void ExpFunYYMMDDOnPre(void);
void ExpFunHHMMSSOnNxt(void);
void ExpFunYYMMDDOnNxt(void);
void ExpFunTimeSetEsc(void);

void ExpFunBtnRedraw1(void);
void ExpFunBtnRedraw2(void);
void ExpFunBtnRedraw3(void);
void ExpFunBtnRedraw4(void);
void ExpFunBtnRedraw5(void);
void ExpFunBtnRedraw6(void);

void ExpFunEnterSetMode(void);

void ExpFunNop(void);
void ExpFunSysInfoBack(void);
void ExpFunSysReset(void);
void ExpFunSysInfoEnter(void);
void ExpFunSysInfoOk(void);

#define ExpFunCodeSetQuit ExpFunSysInfoBack
#define ExpFunTimeSetEsc ExpFunSysInfoBack
#define ExpFunSysResetQuit ExpFunSysInfoBack
#define ExpFunTimeSetForSleepQuit ExpFunSysInfoBack
#define ExpFunTimeSetForSleepPre OnPre_Int
#define ExpFunCodeSetPre OnPre_Int
#define ExpFunTimeSetForSleepNxt OnNxt_Int
#define ExpFunCodeSetNxt OnNxt_Int

void ExpFunCodeSetEnter(void);
void ExpFunTimeSetForSleepEnter(void);
void ExpFunCodeSetOnOk(void);
//#define ExpFunTimeSetForSleepOnOk ExpFunCodeSetOnOk
void ExpFunTimeSetForSleepOnOk(void);

#define ExpFunDataSearchQuit ExpFunSysInfoBack
#define ExpFunDataClearAllQuit ExpFunSysInfoBack
#define ExpFunDataClearSelectQuit ExpFunSysInfoBack
#define ExpFunDataPrintModeSetQuit ExpFunSysInfoBack
#define ExpFunDataPrintSelectQuit ExpFunSysInfoBack

void ExpFunDataSearchEnter(void);
void ExpFunDataClearSelEnter(void);
void ExpFunDataSearchOnPre(void);
void ExpFunDataClearSelOnPre(void);
void ExpFunDataSearchOnOk(void);
void ExpFunDataClearSelOnOk(void);
#define ExpFunDataSearchOnNxt OnNxt_Int
#define ExpFunDataClearSelOnNxt OnNxt_Int

void ExpFunDataClearAllEnter(void);
void ExpFunDataClearSelEnter(void);

#define ExpFunDataPrintSelOnPre ExpFunDataSearchOnPre
#define ExpFunDataPrintSelOnNxt ExpFunDataSearchOnNxt
void ExpFunDataPrintSelOnOk(void);
#define ExpFunDataPrintSelEnter ExpFunDataClearSelEnter
void ExpFunDataPrintAllEnter();
#define ExpFunDataPrintAllQuit ExpFunSysInfoBack
void ExpFunDataClearAllOnOk(void);

void ExpFunDataPrintAllOnOk(void);
void ExpFunDataPrintAllOnPre(void);
void ExpFunPrintModeSetEnter(void);
void ExpFunPrintModeSetOnOk(void);
#define ExpFunPrintModeSetOnPre OnPre_Logic
#define ExpFunPrintModeSetOnNxt OnNxt_Logic


void ExpFunMainOnPre(void);
void ExpFunMainOnNxt(void);
void ExpFunMainOnQuit(void);
void ExpFunSysResetEnter(void);
void ExpFunCodeCheckEnter(void);
void ExpFunCodeCheckOnOk(void);
#define ExpFunCodeCheckOnPre OnPre_Int
#define ExpFunCodeCheckOnNxt OnNxt_Int
#endif

使用特权

评论回复
地板
原野之狼|  楼主 | 2007-9-13 18:18 | 只看该作者

占座4

/************************************************************ 
    FileName: menu.c 

    Author:胡贵    

    Version :V1.0      

    Date: 2007.9.13

    Description: 
        菜单
    History: 

      <author>      <time>      <version >      <desc> 


************************************************************/ 

#include "includes.h"

#include "global_variable.h"


/********************************************************************
    UINT8 Index;//菜单索引
    UINT8 KeyOkIndex;//按下OK转向的菜单项索引
    UINT8 KeyPreIndex;//按下PRE转向的菜单项索引
    UINT8 KeyNextIndex;//按下NEXT转向的菜单项索引
    UINT8 KeyCancleIndex;//按下CANCLE转向的菜单项索引

    UINT8 ExcuteMode;//0x01:base only 0x02:special only 0x03:base%special

    EXP_FUN *p_ExpFun;
***********************************************************************/

//菜单结构表格
struct _menu_ code MenuTable[30]=
//MENU MenuTable[]=
{
    {0,    1,    0,    0,    0,    TXT0,    KEY1_EXP_ONLY|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_EXP_ONLY,
        ExpFunCodeCheckEnter,    ExpFunMainOnPre,        ExpFunMainOnNxt,        ExpFunMainOnQuit},    

    {1,    2,    0,    0,    0,    TXT1,    KEY1_EXP_ONLY|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_EXP_ONLY,
    ExpFunCodeCheckOnOk,    ExpFunCodeCheckOnPre,    ExpFunCodeCheckOnNxt,    ExpFunRefreshMainInterface},    

    {2,    6,    0,    3,    0,    TXT2,    KEY1_BASE_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_EXP_ONLY,
    NULL,                    NULL,                    NULL,                    ExpFunRefreshMainInterface},    

    {3,    9,    2,    4,    0,    TXT3,    KEY1_BASE_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_EXP_ONLY,
    NULL,                    NULL,                    NULL,                    ExpFunRefreshMainInterface},    

    {4,    12,    3,    5,    0,    TXT4,    KEY1_BASE_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_EXP_ONLY,
    NULL,                    NULL,                    NULL,                    ExpFunRefreshMainInterface},    

    {5,    14,    4,    0,    0,    TXT5,    KEY1_BASE_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_EXP_ONLY,
    NULL,                    NULL,                    NULL,                    ExpFunRefreshMainInterface},    

    {6,    18,    0,    7,    2,    TXT6,    KEY1_EXP_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_BASE_ONLY,
    ExpFunDataSearchEnter,    NULL,                    NULL,                    NULL},    

    {7,    19,    6,    8,    2,    TXT7,    KEY1_EXP_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_BASE_ONLY,
    ExpFunDataClearSelEnter,    NULL,                    NULL,                    NULL},    

    {8,    20,    7,    0,    2,    TXT8,    KEY1_EXP_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_BASE_ONLY,
    ExpFunDataClearAllEnter,    NULL,                NULL,                NULL},    

    {9,    21,    0,    10,    3,    TXT9,    KEY1_EXP_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_BASE_ONLY,    
    ExpFunPrintModeSetEnter,                    NULL,                    NULL,                    NULL},    

    {10,    22,    9,    11,    3,    TXT10,    KEY1_EXP_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_BASE_ONLY,
    ExpFunDataPrintSelEnter,    NULL,                    NULL,                    NULL},    

    {11,    23,    10,    0,    3,    TXT11,    KEY1_EXP_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_BASE_ONLY,
    ExpFunDataPrintAllEnter,                    NULL,                    NULL,                    NULL},    

    {12,    24,    0,    13,    4,    TXT12,    KEY1_EXP_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_BASE_ONLY,
    ExpFunYYMMDDCreat,    NULL,                    NULL,                    NULL},    

    {13,    25,    12,    0,    4,    TXT13,    KEY1_EXP_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_BASE_ONLY,
    ExpFunHHMMSSCreat,    NULL,                    NULL,                    NULL},    

    {14,    26,    0,    15,    5,    TXT14,    KEY1_EXP_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_BASE_ONLY,
    ExpFunTimeSetForSleepEnter,NULL,                    NULL,                    NULL},    

    {15,    27,    14,    16,    5,    TXT15,    KEY1_EXP_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_BASE_ONLY,
    ExpFunCodeSetEnter,    NULL,                    NULL,                    NULL},    

    {16,    28,    15,    17,    5,    TXT16,    KEY1_EXP_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_BASE_ONLY,
    ExpFunSysInfoEnter,        NULL,                    NULL,                    NULL},    

    {17,    29,    16,    0,    5,    TXT17,    KEY1_EXP_ONLY|KEY2_BASE_ONLY|KEY3_BASE_ONLY|KEY4_BASE_ONLY,
    ExpFunSysResetEnter,        NULL,                    NULL,                    NULL},    

    {18,    18,    0,    0,    6,    TXT18,    KEY1_EXP_ONLY|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_BASE_EXP,    
    ExpFunDataSearchOnOk,    ExpFunDataSearchOnPre,ExpFunDataSearchOnNxt,    ExpFunDataSearchQuit},    

    {19,    19,    0,    0,    7,    TXT19,    KEY1_EXP_ONLY|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_BASE_EXP,
    ExpFunDataClearSelOnOk,ExpFunDataClearSelOnPre,ExpFunDataClearSelOnNxt,    ExpFunDataClearSelectQuit},    

    {20,    8,    0,    0,    8,    TXT20,    KEY1_EXP_ONLY|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_BASE_EXP,
    ExpFunDataClearAllOnOk,    ExpFunNop,                    ExpFunNop,                    ExpFunDataClearAllQuit},    

    {21,    9,    0,    0,    9,    TXT21,    KEY1_BASE_EXP|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_BASE_EXP,
    ExpFunPrintModeSetOnOk,                    ExpFunPrintModeSetOnPre,        ExpFunPrintModeSetOnNxt,                    ExpFunDataPrintModeSetQuit},    

    {22,    22,    0,    0,    10,    TXT22,    KEY1_EXP_ONLY|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_BASE_EXP,
    ExpFunDataPrintSelOnOk,    ExpFunDataPrintSelOnPre,    ExpFunDataPrintSelOnNxt,    ExpFunDataPrintSelectQuit},    

    {23,    11,    0,    0,    11,    TXT23,    KEY1_EXP_ONLY|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_BASE_EXP,    
    ExpFunDataPrintAllOnOk,    ExpFunDataPrintAllOnPre,ExpFunNop,                ExpFunDataPrintAllQuit},    

    {24,    12,    0,    0,    12,    TXT24,    KEY1_BASE_EXP|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_BASE_EXP,
    ExpFunYYMMDDOnOk,    ExpFunYYMMDDOnPre,    ExpFunYYMMDDOnNxt,    ExpFunTimeSetEsc},    

    {25,    13,    0,    0,    13,    TXT25,    KEY1_BASE_EXP|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_BASE_EXP,    
    ExpFunHHMMSSOnOk,    ExpFunHHMMSSOnPre,    ExpFunHHMMSSOnNxt,    ExpFunTimeSetEsc},    

    {26,    14,    0,    0,    14,    TXT26,    KEY1_BASE_EXP|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_BASE_EXP,
    ExpFunTimeSetForSleepOnOk,ExpFunTimeSetForSleepPre,    ExpFunTimeSetForSleepNxt,    ExpFunTimeSetForSleepQuit},    

    {27,    15,    0,    0,    15,    TXT27,    KEY1_BASE_EXP|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_BASE_EXP,
    ExpFunCodeSetOnOk,        ExpFunCodeSetPre,        ExpFunCodeSetNxt,        ExpFunCodeSetQuit},    

    {28,    16,    0,    0,    16,    TXT28,    KEY1_BASE_EXP|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_BASE_EXP,    
    ExpFunSysInfoOk,        ExpFunNop,                ExpFunNop,                ExpFunSysInfoBack},    

    {29,    29,    0,    0,    17,    TXT29,    KEY1_EXP_ONLY|KEY2_EXP_ONLY|KEY3_EXP_ONLY|KEY4_BASE_EXP,    
    ExpFunSysReset,            ExpFunNop,                ExpFunNop,                ExpFunSysResetQuit},    
};



//UINT8 FocusIndex=0;
//UINT8 xdata CursorLocation=0;//base to 0

//UINT8 xdata IndexStack[10]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
//UINT8 *xdata p_Stack=IndexStack;


/*********************************************************************
    Description:光标位置入栈
    
    Input:
        CursorLocation:光标位置,基于0
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void CursorLocationPush(UINT8 CursorLocation)
{
    *p_Stack++=CursorLocation;
}


/*********************************************************************
    Description:光标位置出栈
    
    Input:
        CursorLocation:光标位置,基于0
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
UINT8 CursorLocationPop(void)
{
    UINT8 tmp;

    tmp=*(--p_Stack);
    *p_Stack=0xff;
    
    return tmp;
}


/*********************************************************************
    Description:绘制菜单项
    
    Input:
        index:菜单编号
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void DrawMenu(UINT8 index)
{
    UINT8 IndexTmp[3],    TextLen[3];
    UINT8 i;

    i=sizeof(struct _menu_);
    
    switch(CursorLocation)
    {
        case 0:
        {
            IndexTmp[0]=index;
            IndexTmp[1]=MenuTable[index].KeyNextIndex;
            if(IndexTmp[1])
                IndexTmp[2]=MenuTable[IndexTmp][1]].KeyNextIndex;
            else
                IndexTmp[2]=0x00;
        }
            break;
        case 1:
        {
            IndexTmp[0]=MenuTable[index].KeyPreIndex;
            IndexTmp[1]=index;
            IndexTmp[2]=MenuTable[index].KeyNextIndex;
        }
            break;
        case 2:
        {
            IndexTmp[2]=index;
            IndexTmp[1]=MenuTable[index].KeyPreIndex;
            if(IndexTmp[1])
                IndexTmp[0]=MenuTable[IndexTmp][1]].KeyPreIndex;
            else
                IndexTmp[0]=0x00;
        }
            break;
    }

    if(IndexTmp[0] || IndexTmp[1] || IndexTmp[2])
    {

        GUI_ClearRect(0,     127,     0,     46);
//        GUI_ClearRect(0,     127,     0,     46);
        
        /*GUI_DrawHLine(1,     100,     0);
        GUI_DrawVLine(0,     10,     1);    
        GUI_DrawHLine(2,     64,     44);
        GUI_DrawHLine(14,     92,     45);
        GUI_DrawHLine(30,     125,     46);
        GUI_DrawVLine(0,     15,     123);
        GUI_DrawVLine(4,     22,     124);
        GUI_DrawVLine(8,     32,     125);*/

        GUI_DrawRect(1,     125,     0,     44);
        GUI_DrawHLine(2,     126,     45);
        GUI_DrawVLine(1,     45,     126);
        
        for(i=0;i<3;i++)
        {
            if(IndexTmp)
                TextLen=GUI_DispLine_(MenuTable[IndexTmp]].p_Text,     
                MENU_TXT_X_COORDINATE,     
                MENU_TXT_Y_COORDINATE+i*MENU_TXT_Y_SPACE);
        }

        GUI_InvertRect(MENU_TXT_X_COORDINATE-1,     
            MENU_TXT_X_COORDINATE+12*TextLen[CursorLocation],     
            MENU_TXT_Y_COORDINATE+MENU_TXT_Y_SPACE*CursorLocation-12,     
            MENU_TXT_Y_COORDINATE+MENU_TXT_Y_SPACE*CursorLocation);

        //GUI_InvertRect(1,     83,     0,     46);
        
        Display();
    }
}


/*********************************************************************
    Description:菜单上下行
    
    Input:
        key:按键消息
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void MenuServer(UINT8 key)
{
    EXTERN_INT1_DISABLE;
    switch (key)
    {
        case KEY_SET:
        {
            switch(MenuTable[FocusIndex].ExcuteMode&0x000f)
            {
                case KEY1_BASE_ONLY:
                {
                    FocusIndex=MenuTable[FocusIndex].KeyOkIndex;
                    CursorLocationPush(CursorLocation);
                    CursorLocation=0;
                    DrawMenu(FocusIndex);
                }
                    break;
                case KEY1_EXP_ONLY:
                {
                    (*MenuTable[FocusIndex].p_Btn1Serv)();
                }
                    break;
                case KEY1_BASE_EXP:
                {
                    (*MenuTable[FocusIndex].p_Btn1Serv)();
                    FocusIndex=MenuTable[FocusIndex].KeyOkIndex;
                    //CursorLocationPush(CursorLocation);
                    //CursorLocation=0;
                    DrawMenu(FocusIndex);
                }
                    break;
            }
        }
            break;
        case KEY_PRE:
        {
            switch(MenuTable[FocusIndex].ExcuteMode&0x00f0)
            {
                case KEY2_BASE_ONLY:
                {
                    if(MenuTable[FocusIndex].KeyPreIndex)
                        FocusIndex=MenuTable[FocusIndex].KeyPreIndex;
                    CursorLocation--;
                    if(CursorLocation==255)
                        CursorLocation=0;
                    DrawMenu(FocusIndex);
                }
                    break;
                case KEY2_EXP_ONLY:
                {
                    (*MenuTable[FocusIndex].p_Btn2Serv)();
                }
                    break;
                case KEY2_BASE_EXP:
                {
                    (*MenuTable[FocusIndex].p_Btn2Serv)();
                    if(MenuTable[FocusIndex].KeyPreIndex)
                        FocusIndex=MenuTable[FocusIndex].KeyPreIndex;
                    CursorLocation--;
                    if(CursorLocation==255)
                        CursorLocation=0;
                    DrawMenu(FocusIndex);
        
                }
                    break;
            }
        }
            break;
        case KEY_NXT:
        {
            switch(MenuTable[FocusIndex].ExcuteMode&0x0f00)
            {
                case KEY3_BASE_ONLY:
                {
                    if(MenuTable[FocusIndex].KeyNextIndex)
                    {
                        FocusIndex=MenuTable[FocusIndex].KeyNextIndex;
                        CursorLocation++;
                    }
                    if(CursorLocation==3)
                        CursorLocation=2;
                    DrawMenu(FocusIndex);
                }
                    break;
                case KEY3_EXP_ONLY:
                {
                    (*MenuTable[FocusIndex].p_Btn3Serv)();

                }
                    break;
                case KEY3_BASE_EXP:
                {
                    (*MenuTable[FocusIndex].p_Btn3Serv)();
                    if(MenuTable[FocusIndex].KeyNextIndex)
                    {
                        FocusIndex=MenuTable[FocusIndex].KeyNextIndex;
                        CursorLocation++;
                    }
                    if(CursorLocation==3)
                        CursorLocation=2;
                    DrawMenu(FocusIndex);        
                }
                    break;
            }
        }
            break;
        case KEY_ESC:
        {
            switch(MenuTable[FocusIndex].ExcuteMode&0xf000)
            {
                case KEY4_BASE_ONLY:
                {
                    FocusIndex=MenuTable[FocusIndex].KeyCancleIndex;
                    CursorLocation=CursorLocationPop();
                    DrawMenu(FocusIndex);
                }
                    break;
                case KEY4_EXP_ONLY:
                {
                    (*MenuTable[FocusIndex].p_Btn4Serv)();

                }
                    break;
                case KEY4_BASE_EXP:
                {
                    (*MenuTable[FocusIndex].p_Btn4Serv)();
                    FocusIndex=MenuTable[FocusIndex].KeyCancleIndex;
                    CursorLocation=CursorLocationPop();
                    DrawMenu(FocusIndex);

                }
                    break;
            }            
        }
            break;
    }
    EXTERN_INT1_ENABLE;
}


/*********************************************************************
    Description:重绘主界面
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunRefreshMainInterface(void)
{
    FlagIdleMode=1;
    FocusIndex=MenuTable[FocusIndex].KeyCancleIndex;
    CursorLocation=CursorLocationPop();
    DrawManiInterface();
    DrawFlash(1);
    ExperimentStep=1;
    TIMER0_START;
}


/*********************************************************************
    Description:创建设置年月日的标签
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunYYMMDDCreat(void)
{
    CursorLocationPush(CursorLocation);
    FocusIndex=MenuTable[FocusIndex].KeyOkIndex;
    CreateStpLabel_YMD(MenuTable[FocusIndex].p_Text, 
        32, 
        20, 
        &SystemTime, 
        44, 
        40, 
        1);
    ExpFunBtnRedraw3();
    Display();
}


/*********************************************************************
    Description:创建设置时分秒的标签
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunHHMMSSCreat(void)
{
    CursorLocationPush(CursorLocation);
    FocusIndex=MenuTable[FocusIndex].KeyOkIndex;
    CreateStpLabel_YMD(MenuTable[FocusIndex].p_Text, 
        32, 
        20, 
        &SystemTime, 
        44, 
        40, 
        0);
    ExpFunBtnRedraw3();
    Display();
}


/*******************************************************************

the following functions are the response of key when in the time setup

*******************************************************************/
void ExpFunHHMMSSOnOk(void)
{
    OnOK_YMD(0);
    CursorLocation=CursorLocationPop();
    ExpFunBtnRedraw2();
}

void ExpFunYYMMDDOnOk(void)
{
    OnOK_YMD(1);
    CursorLocation=CursorLocationPop();
    ExpFunBtnRedraw2();
}

void ExpFunHHMMSSOnPre(void)
{
    OnPre_YMD(0);
    Display();
}

void ExpFunYYMMDDOnPre(void)
{
    OnPre_YMD(1);
    Display();
}

void ExpFunHHMMSSOnNxt(void)
{
    OnNxt_YMD(0);
//    CursorLocation=CursorLocationPop();
    Display();
}

void ExpFunYYMMDDOnNxt(void)
{
    OnNxt_YMD(1);
    Display();
}


/*******************************************************************

the following function ---------->redraw button

********************************************************************/


/*********************************************************************
    Description:重绘按钮
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunBtnRedraw1(void)
{
    GUI_DrawButton(&btn1, "设置", 4, 62, 27, 15);
    GUI_DrawButton(&btn2, "测试", 35, 62, 27, 15);
    GUI_DrawButton(&btn3, "复位", 66, 62, 27, 15);
    GUI_DrawButton(&btn4, "打印", 97, 62, 27, 15);
}

void ExpFunBtnRedraw2(void)
{
    GUI_DrawButton(&btn1, "确定", 4, 62, 27, 15);
    GUI_DrawButton(&btn2, "向上", 35, 62, 27, 15);
    GUI_DrawButton(&btn3, "向下", 66, 62, 27, 15);
    GUI_DrawButton(&btn4, "退出", 97, 62, 27, 15);
}

void ExpFunBtnRedraw3(void)
{
    GUI_DrawButton(&btn1, "确定", 4, 62, 27, 15);
    GUI_DrawButton(&btn2, "增加", 35, 62, 27, 15);
    GUI_DrawButton(&btn3, "移位", 66, 62, 27, 15);
    GUI_DrawButton(&btn4, "退出", 97, 62, 27, 15);
}


void ExpFunBtnRedraw4(void)
{
    GUI_DrawButton(&btn1, "确定", 4, 62, 27, 15);
    GUI_DrawButton(&btn2, "向左", 35, 62, 27, 15);
    GUI_DrawButton(&btn3, "向右", 66, 62, 27, 15);
    GUI_DrawButton(&btn4, "退出", 97, 62, 27, 15);
}

void ExpFunBtnRedraw5(void)
{
    GUI_DrawButton(&btn1, "确定", 4, 62, 27, 15);
    GUI_DrawButton(&btn2, "空空", 35, 62, 27, 15);
    GUI_DrawButton(&btn3, "空空", 66, 62, 27, 15);
    GUI_DrawButton(&btn4, "退出", 97, 62, 27, 15);
}

void ExpFunBtnRedraw6(void)
{
    GUI_DrawButton(&btn1, "确定", 4, 62, 27, 15);
    GUI_DrawButton(&btn2, "终止", 35, 62, 27, 15);
    GUI_DrawButton(&btn3, "空空", 66, 62, 27, 15);
    GUI_DrawButton(&btn4, "退出", 97, 62, 27, 15);
}


/*********************************************************************
    Description:进入设置
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunEnterSetMode(void)
{
    TIMER0_CLOSE;
    FlagTimeRefresh=0;
    ExpFunBtnRedraw2();
    CursorLocationPush(CursorLocation);
}


/*********************************************************************
    Description:空函数
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunNop(void)
{

}


/*********************************************************************
    Description:系统参数查看返回
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunSysInfoBack(void)
{
    //CursorLocation=CursorLocationPop();
    ExpFunBtnRedraw2();
}


/*********************************************************************
    Description:进入查看系统参数
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunSysInfoEnter(void)
{
    CursorLocationPush(CursorLocation);
    FocusIndex=MenuTable[FocusIndex].KeyOkIndex;
    GUI_ClearRect(2,     124, 1, 43);
    GUI_DispLine_(MenuTable[FocusIndex].p_Text, 40, 30);
    ExpFunBtnRedraw5();
    Display();
}


/*********************************************************************
    Description:系统复位
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunSysReset(void)
{
    SysPara.FlagNewMachine=0xff;
    FlashPacketSysWr(&SysPara);
    (*((void (*)(void))(0)))();
}


/*********************************************************************
    Description:系统参数查看响应OK键
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunSysInfoOk(void)
{
    CursorLocation=CursorLocationPop();
    ExpFunBtnRedraw2();
}


/*********************************************************************
    Description:进入密码设置
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunCodeSetEnter(void)
{
    CursorLocationPush(CursorLocation);
    FocusIndex=MenuTable[FocusIndex].KeyOkIndex;
    GUI_ClearRect(2,     124, 1, 43);
    Gui_CharacterStyle_Set12_6();
//    DataSetTmp=0;
    CreateStpLabel_Int(MenuTable[FocusIndex].p_Text, 28,20,&SysPara.SysCode,51,40,4);
    ExpFunBtnRedraw3();
    Display();
}


/*********************************************************************
    Description:进入待机时间设置
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunTimeSetForSleepEnter(void)
{
    CursorLocationPush(CursorLocation);
    FocusIndex=MenuTable[FocusIndex].KeyOkIndex;
    GUI_ClearRect(2,     124, 1, 43);
    Gui_CharacterStyle_Set12_6();
    CreateStpLabel_Int(MenuTable[FocusIndex].p_Text, 23,20,&SysPara.TimeForSleep,51,40,4);
    ExpFunBtnRedraw3();
    Display();
}


/*********************************************************************
    Description:密码设置OK
    
    Input:
    
    Output:

    Return:

    Gloable:    

    Calls:

    Called By:

    Others:

    Modify Record:
    
*********************************************************************/
void ExpFunCodeSetOnOk(void)
{
    struct StpLabelBlk_Int *pTmp;

    pTmp=(struct StpLabelBlk_Int *)p_S_L_B;

    OnOk_Int();

    //to add:para store function
    SysPara.SysCode=pTmp->Dat_Temp;
    FlashPacketSysWr(&S

使用特权

评论回复
5
原野之狼|  楼主 | 2007-9-13 18:19 | 只看该作者

好像还是不够

使用特权

评论回复
6
原野之狼|  楼主 | 2007-9-13 18:27 | 只看该作者

行了,俺贴完了~~~

使用特权

评论回复
7
ketp| | 2007-9-13 21:40 | 只看该作者

发一份看看 谢谢

ketp@163.com

使用特权

评论回复
8
jxyhome| | 2007-9-13 21:47 | 只看该作者

学习了,有空实践下

最近写了个汉字转unicode的代码,从linux内核里面扣出来的,用的是查表的方式,可以将汉字/数字/字符串内码转换成unicode码,用ARM平台上的,有空可以多交流。

使用特权

评论回复
9
mamalihui| | 2007-9-14 09:00 | 只看该作者

发一份给我看看,谢谢了

mxd921@yahoo.com.cn

使用特权

评论回复
10
原野之狼|  楼主 | 2007-9-14 09:08 | 只看该作者

re:jxyhome

兄弟你这东西比较高深啊。。。

unicode码和汉字机内码有区别不?

使用特权

评论回复
11
liandao| | 2007-9-14 14:35 | 只看该作者

建议上传个代码包

也省得你一个一个的回复向你索要代码的Email。
呵呵。

使用特权

评论回复
12
音乐乐乐| | 2007-9-14 14:45 | 只看该作者

快给穿条裤子啊,匠人睡着了?

使用特权

评论回复
13
computer00| | 2007-9-14 15:10 | 只看该作者

呵呵,我在我的硬盘MP3里面有个刚好倒过来的,unicode转GB

用的是二分查表法,速度很快的。就是那个数组巨大...

使用特权

评论回复
14
古道热肠| | 2007-9-14 15:12 | 只看该作者

是该派送裤子。

  共享精神值得嘉奖,程序风格尚可,值得新手学习。

使用特权

评论回复
15
一朝成名| | 2007-9-14 16:07 | 只看该作者

LZ不错 有项目做

把我给闲的发慌了

没事就看看书........郁闷...........

最近看看ARM   

还没打通任督二脉............

使用特权

评论回复
16
wjy1107| | 2007-9-14 16:19 | 只看该作者

good!very good!

使用特权

评论回复
17
古道热肠| | 2007-9-14 16:27 | 只看该作者

哈哈,18楼的朋友出国了

  回来都讲洋文。

使用特权

评论回复
18
原野之狼|  楼主 | 2007-9-14 16:48 | 只看该作者

洋文俺也会~~~

thanks
very very thanks
hehe~~~

使用特权

评论回复
19
huangqi412| | 2007-9-14 18:52 | 只看该作者

强烈建议lz打包

使用特权

评论回复
20
cjf512| | 2007-9-14 20:15 | 只看该作者

你好!

我的EMAIL:
bj_led@163.com
谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

187

主题

8547

帖子

280

粉丝