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

📄 menu_implement.s

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