📄 menu_implement.lis
字号:
.module Menu_Implement.c
.area text(rom, con, rel)
0000 .dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
.area data(ram, con, rel)
0000 .dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
0000 _s_pMenuRoot:
0000 .blkw 1
.area idata
0000 0000 .word _g_Menus
.area data(ram, con, rel)
0002 .dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
0002 .dbstruct 0 13 Menu_Item
0002 .dbfield 0 String pc
0002 .dbfield 2 bIfEnable c
0002 .dbfield 3 fnTask pfV
0002 .dbfield 5 pParent pkS[Menu_Item]
0002 .dbfield 7 pChild pkS[Menu_Item]
0002 .dbfield 9 pPreviouse pkS[Menu_Item]
0002 .dbfield 11 pNext pkS[Menu_Item]
0002 .dbend
0002 _s_pCurrentMenuItem:
0002 .blkb 2
.area idata
0002 0000 .word 0
.area data(ram, con, rel)
0004 .dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
0004 _s_pDISPMenuItem:
0004 .blkb 2
.area idata
0004 0000 .word 0
.area data(ram, con, rel)
0006 .dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
0006 _s_cIdleTimeCounter:
0006 .blkb 1
.area idata
0006 00 .byte 0
.area data(ram, con, rel)
0007 .dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
.area text(rom, con, rel)
0000 .dbfile O:\2007全国电子设计大赛\键盘显示模块\Menu_Implement.c
0000 .dbfunc e Menu_Process_INIT _Menu_Process_INIT fV
.even
0000 _Menu_Process_INIT::
0000 .dbline -1
0000 .dbline 84
0000 ; /***********************************************************
0000 ; * 函数库说明:菜单驱动函数库 *
0000 ; * 版本: v1.00 *
0000 ; * 作者: 王卓然 *
0000 ; * 创建日期: 2007年9月02日 *
0000 ; * -------------------------------------------------------- *
0000 ; * [支 持 库] *
0000 ; * 支持库名称: *
0000 ; * 需要版本: *
0000 ; * 声明库说明: *
0000 ; * -------------------------------------------------------- *
0000 ; * [版本更新] *
0000 ; * 修改: *
0000 ; * 修改日期: *
0000 ; * 版本: *
0000 ; * -------------------------------------------------------- *
0000 ; * [版本历史] *
0000 ; * -------------------------------------------------------- *
0000 ; * [使用说明] *
0000 ; ***********************************************************/
0000 ;
0000 ; /********************
0000 ; * 头 文 件 配 置 区 *
0000 ; ********************/
0000 ; # include "RD_MacroAndConst.h"
0000 ; # include "Menu_Config.h"
0000 ; # include "Menu_Implement.h"
0000 ; # include "LIB_Config.h"
0000 ; # include "PF_Config.h"
0000 ;
0000 ; /********************
0000 ; * 系 统 宏 定 义 *
0000 ; ********************/
0000 ;
0000 ; /*------------------*
0000 ; * 常 数 宏 定 义 *
0000 ; *------------------*/
0000 ;
0000 ; /*------------------*
0000 ; * 动 作 宏 定 义 *
0000 ; *------------------*/
0000 ;
0000 ; /********************
0000 ; * 用户变量类型定义 *
0000 ; ********************/
0000 ;
0000 ; /********************
0000 ; * 结构体定义区 *
0000 ; ********************/
0000 ;
0000 ; /********************
0000 ; * 模块函数声明区 *
0000 ; ********************/
0000 ; static void Show_Menu(const MENU_ITEM *pStart,uint8 cHandPOS);
0000 ; static void Show_Welcome(void);
0000 ;
0000 ; /********************
0000 ; * 全局函数声明区 *
0000 ; ********************/
0000 ; BOOL PROC_Menu(void);
0000 ; void Menu_Process_INIT(void);
0000 ;
0000 ; /********************
0000 ; * 模块变量声明区 *
0000 ; ********************/
0000 ; static const MENU_ITEM *s_pMenuRoot = &g_Menus[0];
0000 ;
0000 ; static const MENU_ITEM *s_pCurrentMenuItem = NULL;
0000 ; static const MENU_ITEM *s_pDISPMenuItem = NULL;
0000 ; static uint8 s_cIdleTimeCounter = 0;
0000 ;
0000 ; /********************
0000 ; * 全局变量声明区 *
0000 ; ********************/
0000 ;
0000 ;
0000 ; /***********************************************************
0000 ; * 函数说明:目录处理模块初始化函数 *
0000 ; * 输入: 无 *
0000 ; * 输出: 无 *
0000 ; * 调用函数:无 *
0000 ; ***********************************************************/
0000 ; void Menu_Process_INIT(void)
0000 ; {
0000 .dbline 85
0000 ; s_pCurrentMenuItem = s_pMenuRoot;
0000 20900000 lds R2,_s_pMenuRoot
0004 30900100 lds R3,_s_pMenuRoot+1
0008 30920300 sts _s_pCurrentMenuItem+1,R3
000C 20920200 sts _s_pCurrentMenuItem,R2
0010 .dbline 86
0010 ; s_pDISPMenuItem = s_pMenuRoot;
0010 30920500 sts _s_pDISPMenuItem+1,R3
0014 20920400 sts _s_pDISPMenuItem,R2
0018 .dbline 87
0018 ; s_cIdleTimeCounter = 10;
0018 8AE0 ldi R24,10
001A 80930600 sts _s_cIdleTimeCounter,R24
001E .dbline -2
001E L1:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc s Show_Welcome _Show_Welcome fV
.even
0020 _Show_Welcome:
0020 2397 sbiw R28,3
0022 .dbline -1
0022 .dbline 97
0022 ; }
0022 ;
0022 ; /***********************************************************
0022 ; * 函数说明:欢迎信息显示函数 *
0022 ; * 输入: 无 *
0022 ; * 输出: 无 *
0022 ; * 调用函数:无 *
0022 ; ***********************************************************/
0022 ; static void Show_Welcome(void)
0022 ; {
0022 .dbline 98
0022 ; Flash("[",' ',1,1);
0022 81E0 ldi R24,1
0024 8A83 std y+2,R24
0026 8883 std y+0,R24
0028 20E2 ldi R18,32
002A 00E0 ldi R16,<L3
002C 10E0 ldi R17,>L3
002E 0E940000 xcall _Flash
0032 .dbline 99
0032 ; Flash("]",' ',16,1);
0032 81E0 ldi R24,1
0034 8A83 std y+2,R24
0036 80E1 ldi R24,16
0038 8883 std y+0,R24
003A 20E2 ldi R18,32
003C 00E0 ldi R16,<L4
003E 10E0 ldi R17,>L4
0040 0E940000 xcall _Flash
0044 .dbline 100
0044 ; RunString("National Undergradute Electronic Design Contest 2008 Dare to Create & Enjoy! ",1,2,15);
0044 8FE0 ldi R24,15
0046 8A83 std y+2,R24
0048 82E0 ldi R24,2
004A 8883 std y+0,R24
004C 21E0 ldi R18,1
004E 00E0 ldi R16,<L5
0050 10E0 ldi R17,>L5
0052 0E940000 xcall _RunString
0056 .dbline 101
0056 ; Flash("PRESS ANY KEY...",' ',1,2);
0056 82E0 ldi R24,2
0058 8A83 std y+2,R24
005A 81E0 ldi R24,1
005C 8883 std y+0,R24
005E 20E2 ldi R18,32
0060 00E0 ldi R16,<L6
0062 10E0 ldi R17,>L6
0064 0E940000 xcall _Flash
0068 .dbline -2
0068 L2:
0068 .dbline 0 ; func end
0068 2396 adiw R28,3
006A 0895 ret
006C .dbend
006C .dbfunc e PROC_Menu _PROC_Menu fc
.even
006C _PROC_Menu::
006C 0E940000 xcall push_xgset300C
0070 2397 sbiw R28,3
0072 .dbline -1
0072 .dbline 111
0072 ; }
0072 ;
0072 ; /***********************************************************
0072 ; * 函数说明:目录处理函数 *
0072 ; * 输入: 无 *
0072 ; * 输出: 无 *
0072 ; * 调用函数:无 *
0072 ; ***********************************************************/
0072 ; BOOL PROC_Menu(void)
0072 ; {
0072 .dbline 112
0072 ; if (!(g_wSystemTimer & 0x03ff))
0072 80910000 lds R24,_g_wSystemTimer
0076 90910100 lds R25,_g_wSystemTimer+1
007A 9370 andi R25,3
007C 8030 cpi R24,0
007E 8907 cpc R24,R25
0080 29F4 brne L8
0082 X0:
0082 .dbline 113
0082 ; {
0082 .dbline 114
0082 ; s_cIdleTimeCounter++;
0082 80910600 lds R24,_s_cIdleTimeCounter
0086 8F5F subi R24,255 ; addi 1
0088 80930600 sts _s_cIdleTimeCounter,R24
008C .dbline 115
008C ; }
008C L8:
008C .dbline 117
008C ;
008C ; if (s_cIdleTimeCounter >= 10)
008C 80910600 lds R24,_s_cIdleTimeCounter
0090 8A30 cpi R24,10
0092 B8F0 brlo L10
0094 X1:
0094 .dbline 118
0094 ; {
0094 .dbline 119
0094 ; s_cIdleTimeCounter = 10;
0094 8AE0 ldi R24,10
0096 80930600 sts _s_cIdleTimeCounter,R24
009A .dbline 121
009A ;
009A ; Show_Welcome();
009A C2DF xcall _Show_Welcome
009C .dbline 122
009C ; if (Get_Key_Code())
009C 0E940000 xcall _Get_Key_Code
00A0 0023 tst R16
00A2 69F0 breq L12
00A4 X2:
00A4 .dbline 123
00A4 ; {
00A4 .dbline 124
00A4 ; CLS
00A4 0E940000 xcall _LCDWaitForReady
00A8 .dbline 124
00A8 01E0 ldi R16,1
00AA 0E940000 xcall _LCDSendCommand
00AE .dbline 124
00AE 0E940000 xcall _LCDWaitForReady
00B2 .dbline 124
00B2 02E0 ldi R16,2
00B4 0E940000 xcall _LCDSendCommand
00B8 .dbline 125
00B8 ; s_cIdleTimeCounter = 0;
00B8 2224 clr R2
00BA 20920600 sts _s_cIdleTimeCounter,R2
00BE .dbline 126
00BE ; }
00BE L12:
00BE .dbline 127
00BE ; return TRUE;
00BE 01E0 ldi R16,1
00C0 66C1 xjmp L7
00C2 L10:
00C2 .dbline 130
00C2 ; }
00C2 ;
00C2 ; if ((s_pDISPMenuItem == NULL) || (s_pCurrentMenuItem == NULL))
00C2 20900400 lds R2,_s_pDISPMenuItem
00C6 30900500 lds R3,_s_pDISPMenuItem+1
00CA 2220 tst R2
00CC 11F4 brne X3
00CE 3320 tst R3
00D0 41F0 breq L16
00D2 X3:
00D2 20900200 lds R2,_s_pCurrentMenuItem
00D6 30900300 lds R3,_s_pCurrentMenuItem+1
00DA 2220 tst R2
00DC 11F5 brne L14
00DE 3320 tst R3
00E0 01F5 brne L14
00E2 X4:
00E2 L16:
00E2 .dbline 131
00E2 ; {
00E2 .dbline 133
00E2 ; //容错处理
00E2 ; if (s_pDISPMenuItem != NULL)
00E2 20900400 lds R2,_s_pDISPMenuItem
00E6 30900500 lds R3,_s_pDISPMenuItem+1
00EA 2220 tst R2
00EC 11F4 brne X5
00EE 3320 tst R3
00F0 29F0 breq L17
00F2 X5:
00F2 .dbline 134
00F2 ; {
00F2 .dbline 135
00F2 ; s_pCurrentMenuItem = s_pDISPMenuItem;
00F2 30920300 sts _s_pCurrentMenuItem+1,R3
00F6 20920200 sts _s_pCurrentMenuItem,R2
00FA .dbline 136
00FA ; }
00FA 13C0 xjmp L18
00FC L17:
00FC .dbline 137
00FC ; else if (s_pCurrentMenuItem != NULL)
00FC 20900200 lds R2,_s_pCurrentMenuItem
0100 30900300 lds R3,_s_pCurrentMenuItem+1
0104 2220 tst R2
0106 11F4 brne X6
0108 3320 tst R3
010A 29F0 breq L19
010C X6:
010C .dbline 138
010C ; {
010C .dbline 139
010C ; s_pDISPMenuItem = s_pCurrentMenuItem;
010C 30920500 sts _s_pDISPMenuItem+1,R3
0110 20920400 sts _s_pDISPMenuItem,R2
0114 .dbline 140
0114 ; }
0114 06C0 xjmp L20
0116 L19:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -