⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu_implement.lis

📁 LCD1602键盘显示模块实例
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .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 + -