📄 menu_implement.s
字号:
.module Menu_Implement.c
.area text(rom, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
_s_pMenuRoot:
.blkw 1
.area idata
.word _g_Menus
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
.dbstruct 0 13 Menu_Item
.dbfield 0 String pc
.dbfield 2 bIfEnable c
.dbfield 3 fnTask pfV
.dbfield 5 pParent pkS[Menu_Item]
.dbfield 7 pChild pkS[Menu_Item]
.dbfield 9 pPreviouse pkS[Menu_Item]
.dbfield 11 pNext pkS[Menu_Item]
.dbend
_s_pCurrentMenuItem:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
_s_pDISPMenuItem:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
_s_cIdleTimeCounter:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
.area text(rom, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
.dbfunc e Menu_Process_INIT _Menu_Process_INIT fV
.even
_Menu_Process_INIT::
.dbline -1
.dbline 84
; /***********************************************************
; * 函数库说明:菜单驱动函数库 *
; * 版本: v1.00 *
; * 作者: 王卓然 *
; * 创建日期: 2007年9月02日 *
; * -------------------------------------------------------- *
; * [支 持 库] *
; * 支持库名称: *
; * 需要版本: *
; * 声明库说明: *
; * -------------------------------------------------------- *
; * [版本更新] *
; * 修改: *
; * 修改日期: *
; * 版本: *
; * -------------------------------------------------------- *
; * [版本历史] *
; * -------------------------------------------------------- *
; * [使用说明] *
; ***********************************************************/
;
; /********************
; * 头 文 件 配 置 区 *
; ********************/
; # include "RD_MacroAndConst.h"
; # include "Menu_Config.h"
; # include "Menu_Implement.h"
; # include "LIB_Config.h"
; # include "PF_Config.h"
;
; /********************
; * 系 统 宏 定 义 *
; ********************/
;
; /*------------------*
; * 常 数 宏 定 义 *
; *------------------*/
;
; /*------------------*
; * 动 作 宏 定 义 *
; *------------------*/
;
; /********************
; * 用户变量类型定义 *
; ********************/
;
; /********************
; * 结构体定义区 *
; ********************/
;
; /********************
; * 模块函数声明区 *
; ********************/
; static void Show_Menu(const MENU_ITEM *pStart,uint8 cHandPOS);
; static void Show_Welcome(void);
;
; /********************
; * 全局函数声明区 *
; ********************/
; BOOL PROC_Menu(void);
; void Menu_Process_INIT(void);
;
; /********************
; * 模块变量声明区 *
; ********************/
; static const MENU_ITEM *s_pMenuRoot = &g_Menus[0];
;
; static const MENU_ITEM *s_pCurrentMenuItem = NULL;
; static const MENU_ITEM *s_pDISPMenuItem = NULL;
; static uint8 s_cIdleTimeCounter = 0;
;
; /********************
; * 全局变量声明区 *
; ********************/
;
;
; /***********************************************************
; * 函数说明:目录处理模块初始化函数 *
; * 输入: 无 *
; * 输出: 无 *
; * 调用函数:无 *
; ***********************************************************/
; void Menu_Process_INIT(void)
; {
.dbline 85
; s_pCurrentMenuItem = s_pMenuRoot;
lds R2,_s_pMenuRoot
lds R3,_s_pMenuRoot+1
sts _s_pCurrentMenuItem+1,R3
sts _s_pCurrentMenuItem,R2
.dbline 86
; s_pDISPMenuItem = s_pMenuRoot;
sts _s_pDISPMenuItem+1,R3
sts _s_pDISPMenuItem,R2
.dbline 87
; s_cIdleTimeCounter = 10;
ldi R24,10
sts _s_cIdleTimeCounter,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc s Show_Welcome _Show_Welcome fV
.even
_Show_Welcome:
sbiw R28,3
.dbline -1
.dbline 97
; }
;
; /***********************************************************
; * 函数说明:欢迎信息显示函数 *
; * 输入: 无 *
; * 输出: 无 *
; * 调用函数:无 *
; ***********************************************************/
; static void Show_Welcome(void)
; {
.dbline 98
; Flash("[",' ',1,1);
ldi R24,1
std y+2,R24
std y+0,R24
ldi R18,32
ldi R16,<L3
ldi R17,>L3
xcall _Flash
.dbline 99
; Flash("]",' ',16,1);
ldi R24,1
std y+2,R24
ldi R24,16
std y+0,R24
ldi R18,32
ldi R16,<L4
ldi R17,>L4
xcall _Flash
.dbline 100
; RunString("National Undergradute Electronic Design Contest 2008 Dare to Create & Enjoy! ",1,2,15);
ldi R24,15
std y+2,R24
ldi R24,2
std y+0,R24
ldi R18,1
ldi R16,<L5
ldi R17,>L5
xcall _RunString
.dbline 101
; Flash("PRESS ANY KEY...",' ',1,2);
ldi R24,2
std y+2,R24
ldi R24,1
std y+0,R24
ldi R18,32
ldi R16,<L6
ldi R17,>L6
xcall _Flash
.dbline -2
L2:
.dbline 0 ; func end
adiw R28,3
ret
.dbend
.dbfunc e PROC_Menu _PROC_Menu fc
.even
_PROC_Menu::
xcall push_xgset300C
sbiw R28,3
.dbline -1
.dbline 111
; }
;
; /***********************************************************
; * 函数说明:目录处理函数 *
; * 输入: 无 *
; * 输出: 无 *
; * 调用函数:无 *
; ***********************************************************/
; BOOL PROC_Menu(void)
; {
.dbline 112
; if (!(g_wSystemTimer & 0x03ff))
lds R24,_g_wSystemTimer
lds R25,_g_wSystemTimer+1
andi R25,3
cpi R24,0
cpc R24,R25
brne L8
X0:
.dbline 113
; {
.dbline 114
; s_cIdleTimeCounter++;
lds R24,_s_cIdleTimeCounter
subi R24,255 ; addi 1
sts _s_cIdleTimeCounter,R24
.dbline 115
; }
L8:
.dbline 117
;
; if (s_cIdleTimeCounter >= 10)
lds R24,_s_cIdleTimeCounter
cpi R24,10
brlo L10
X1:
.dbline 118
; {
.dbline 119
; s_cIdleTimeCounter = 10;
ldi R24,10
sts _s_cIdleTimeCounter,R24
.dbline 121
;
; Show_Welcome();
xcall _Show_Welcome
.dbline 122
; if (Get_Key_Code())
xcall _Get_Key_Code
tst R16
breq L12
X2:
.dbline 123
; {
.dbline 124
; CLS
xcall _LCDWaitForReady
.dbline 124
ldi R16,1
xcall _LCDSendCommand
.dbline 124
xcall _LCDWaitForReady
.dbline 124
ldi R16,2
xcall _LCDSendCommand
.dbline 125
; s_cIdleTimeCounter = 0;
clr R2
sts _s_cIdleTimeCounter,R2
.dbline 126
; }
L12:
.dbline 127
; return TRUE;
ldi R16,1
xjmp L7
L10:
.dbline 130
; }
;
; if ((s_pDISPMenuItem == NULL) || (s_pCurrentMenuItem == NULL))
lds R2,_s_pDISPMenuItem
lds R3,_s_pDISPMenuItem+1
tst R2
brne X3
tst R3
breq L16
X3:
lds R2,_s_pCurrentMenuItem
lds R3,_s_pCurrentMenuItem+1
tst R2
brne L14
tst R3
brne L14
X4:
L16:
.dbline 131
; {
.dbline 133
; //容错处理
; if (s_pDISPMenuItem != NULL)
lds R2,_s_pDISPMenuItem
lds R3,_s_pDISPMenuItem+1
tst R2
brne X5
tst R3
breq L17
X5:
.dbline 134
; {
.dbline 135
; s_pCurrentMenuItem = s_pDISPMenuItem;
sts _s_pCurrentMenuItem+1,R3
sts _s_pCurrentMenuItem,R2
.dbline 136
; }
xjmp L18
L17:
.dbline 137
; else if (s_pCurrentMenuItem != NULL)
lds R2,_s_pCurrentMenuItem
lds R3,_s_pCurrentMenuItem+1
tst R2
brne X6
tst R3
breq L19
X6:
.dbline 138
; {
.dbline 139
; s_pDISPMenuItem = s_pCurrentMenuItem;
sts _s_pDISPMenuItem+1,R3
sts _s_pDISPMenuItem,R2
.dbline 140
; }
xjmp L20
L19:
.dbline 142
; else
; {
.dbline 144
; //错误处理函数
; Show_Menu(NULL,1);
ldi R18,1
clr R16
clr R17
xcall _Show_Menu
.dbline 145
; return TRUE;
ldi R16,1
xjmp L7
L20:
L18:
.dbline 147
; }
; }
L14:
.dbline 149
;
; if (s_pDISPMenuItem == s_pCurrentMenuItem)
lds R2,_s_pCurrentMenuItem
lds R3,_s_pCurrentMenuItem+1
lds R4,_s_pDISPMenuItem
lds R5,_s_pDISPMenuItem+1
cp R4,R2
cpc R5,R3
brne L21
X7:
.dbline 150
; {
.dbline 151
; Show_Menu(s_pDISPMenuItem,1);
ldi R18,1
movw R16,R4
xcall _Show_Menu
.dbline 152
; }
xjmp L22
L21:
.dbline 154
; else
; {
.dbline 155
; Show_Menu(s_pDISPMenuItem,2);
ldi R18,2
lds R16,_s_pDISPMenuItem
lds R17,_s_pDISPMenuItem+1
xcall _Show_Menu
.dbline 156
; }
L22:
.dbline 158
;
; if (Get_Key_Code())
xcall _Get_Key_Code
tst R16
brne X26
xjmp L23
X26:
X8:
.dbline 159
; {
.dbline 161
; //检测普通按键
; s_cIdleTimeCounter = 0;
clr R2
sts _s_cIdleTimeCounter,R2
.dbline 162
; CLS
xcall _LCDWaitForReady
.dbline 162
ldi R16,1
xcall _LCDSendCommand
.dbline 162
xcall _LCDWaitForReady
.dbline 162
ldi R16,2
xcall _LCDSendCommand
.dbline 163
; switch (g_cReturnKeyNum)
lds R20,_g_cReturnKeyNum
cpi R20,1
breq L28
X9:
cpi R20,4
brne X27
xjmp L49
X27:
X10:
cpi R20,5
brne X28
xjmp L40
X28:
X11:
cpi R20,6
brne X29
xjmp L40
X29:
X12:
cpi R20,9
brne X30
xjmp L33
X30:
X13:
cpi R20,1
brsh X31
xjmp L26
X31:
X14:
L52:
cpi R20,19
brne X32
xjmp L40
X32:
X15:
xjmp L26
L28:
.dbline 166
; {
; case KEY_UP:
; if (s_pDISPMenuItem == s_pCurrentMenuItem)
lds R2,_s_pCurrentMenuItem
lds R3,_s_pCurrentMenuItem+1
lds R4,_s_pDISPMenuItem
lds R5,_s_pDISPMenuItem+1
cp R4,R2
cpc R5,R3
brne L29
X16:
.dbline 167
; {
.dbline 168
; if (s_pCurrentMenuItem->pPreviouse != NULL)
movw R30,R2
adiw R30,9
lpm R2,Z+
lpm R3,Z
tst R2
brne X17
tst R3
brne X33
xjmp L26
X33:
X17:
.dbline 169
; {
.dbline 170
; s_pCurrentMenuItem = s_pCurrentMenuItem->pPreviouse;
lds R30,_s_pCurrentMenuItem
lds R31,_s_pCurrentMenuItem+1
adiw R30,9
lpm R2,Z+
lpm R3,Z
sts _s_pCurrentMenuItem+1,R3
sts _s_pCurrentMenuItem,R2
.dbline 171
; s_pDISPMenuItem = s_pCurrentMenuItem;
sts _s_pDISPMenuItem+1,R3
sts _s_pDISPMenuItem,R2
.dbline 172
; }
.dbline 173
; }
xjmp L26
L29:
.dbline 175
; else
; {
.dbline 176
; s_pCurrentMenuItem = s_pDISPMenuItem;
lds R2,_s_pDISPMenuItem
lds R3,_s_pDISPMenuItem+1
sts _s_pCurrentMenuItem+1,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -