📄 avr.lst
字号:
1197 EC8A LDI R24,0xCA
1198 940E4571 CALL 0x4571
(0021) ItemNum=(*BarMenu).TextNum ;
(0022) DispItem=(*BarMenu).Text ;
(0023)
(0024) //用户的初始化代码请放在这里
(0025)
(0026) //显示按键对应的文字提示,1-->"选择"
(0027) GUI_DispStringAt(*(Tip[language].Text+1),1,LCD_YSIZE-14);
(0028) //显示按键对应的文字提示,0-->"退出"
(0029) GUI_DispStringAt(*(Tip[language].Text+4),LCD_XSIZE-24,LCD_YSIZE-14);
(0030)
(0031) //公共初始化部分
(0032) BarMenuInit();
119A D246 RCALL _BarMenuInit
119B 9621 ADIW R28,1
119C 9508 RET
_DispMenuParaUp:
119D 940E43BD CALL push_gset1
119F 9721 SBIW R28,1
11A0 940E4A2A CALL 0x4A2A
(0033) }
(0034)
(0035) /*
(0036) *****************************************************************************
(0037) 菜单使用例程
(0038) 0.Jump2Menu + FlashMode_AutoInit/FlashMode_ManualInit
(0039) 跳转到任意菜单,FlashMode_AutoInit-->在BarMenuInit函数中执行PUSH;
(0040) FlashMode_ManualInit-->子菜单的Init函数中PUSH,看例子:DispMenuLanguageInit
(0041) 1.PUSH + POP
(0042) 执行一些功能,并使用LCD后,回到原有界面,回到原有界面--包括反显位置都恢复
(0043) 2.Jump2Menu(SelfMenuIndex,FlashMode_ReFlash);
(0044) 执行一些功能,并使用LCD后,执行如上调用,回到原有界面--包括反显位置都恢复
(0045) 3.POP
(0046) 执行一些功能,并使用LCD后,回到上层菜单,恢复上层界面
(0047) 4.Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
(0048) 执行一定功能后,但不占用LCD的话,直接界面不动
(0049)
(0050) *****************************************************************************
(0051) */
(0052) void DispMenuParaUp()
(0053) {
(0054) switch(Item)
11A2 F099 BEQ 0x11B6
11A3 3041 CPI R20,1
11A4 E0E0 LDI R30,0
11A5 075E CPC R21,R30
11A6 F0C1 BEQ 0x11BF
11A7 3042 CPI R20,2
11A8 E0E0 LDI R30,0
11A9 075E CPC R21,R30
11AA F0E1 BEQ 0x11C7
11AB 3043 CPI R20,3
11AC E0E0 LDI R30,0
11AD 075E CPC R21,R30
11AE F409 BNE 0x11B0
11AF C021 RJMP 0x11D1
11B0 3044 CPI R20,4
11B1 E0E0 LDI R30,0
11B2 075E CPC R21,R30
11B3 F409 BNE 0x11B5
11B4 C023 RJMP 0x11D8
11B5 C027 RJMP 0x11DD
(0055) {
(0056) case 0 :
(0057) {
(0058) //Jump2Menu
(0059) GUI_Clear();
11B6 940E490F CALL 0x490F
(0060) GUI_DispStringAt("Do Something \nthen Back to \nTop Menu!",0,0);
11B8 EC0F LDI R16,0xCF
11B9 940E49BB CALL 0x49BB
(0061) GUI_Delay(5000);
(0062) Jump2Menu(MenuTopIndex,FlashMode_AutoInit);
11BB E021 LDI R18,1
11BC 2700 CLR R16
11BD DE6E RCALL _Jump2Menu
(0063) break ;
11BE C022 RJMP 0x11E1
(0064) }
(0065) case 1 :
(0066) {
(0067) //PUSH -->POP
(0068) PUSH();
11BF D199 RCALL _PUSH
11C0 940E490F CALL 0x490F
(0069) GUI_Clear();
(0070) GUI_DispStringAt("Do Something \nthen Back to \nThis Menu!",0,0);
11C2 EA08 LDI R16,0xA8
11C3 940E49BB CALL 0x49BB
(0071) GUI_Delay(5000);
(0072) POP();
11C5 D1BB RCALL _POP
(0073) break ;
11C6 C01A RJMP 0x11E1
(0074) }
(0075) case 2 :
(0076) {
(0077) //ReFlash = 1
(0078) GUI_Clear();
11C7 940E490F CALL 0x490F
(0079) GUI_DispStringAt("Do Something \nthen Back to \nThis Menu!",0,0);
11C9 EA08 LDI R16,0xA8
11CA 940E49BB CALL 0x49BB
(0080) GUI_Delay(5000);
(0081) Jump2Menu(SelfMenuIndex,FlashMode_ReFlash);
11CC E023 LDI R18,3
11CD 940E4664 CALL 0x4664
11CF DE5C RCALL _Jump2Menu
(0082) break ;
11D0 C010 RJMP 0x11E1
(0083) }
(0084) case 3 :
(0085) {
(0086) //POP
(0087) GUI_Clear();
11D1 940E490F CALL 0x490F
(0088) GUI_DispStringAt("Do Something \nthen Back to \nFather Menu!",0,0);
11D3 E70F LDI R16,0x7F
11D4 940E49BB CALL 0x49BB
(0089) GUI_Delay(5000);
(0090) POP();
11D6 D1AA RCALL _POP
(0091) break ;
11D7 C009 RJMP 0x11E1
(0092) }
(0093) case 4 :
(0094) {
(0095) //No ReFlash
(0096) //No Action Here!
(0097) //Or The Action no need the LCD Disp
(0098) Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
11D8 2722 CLR R18
11D9 940E4664 CALL 0x4664
11DB DE50 RCALL _Jump2Menu
(0099) break ;
11DC C004 RJMP 0x11E1
(0100) }
(0101) default :
(0102) {
(0103) Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
11DD 2722 CLR R18
11DE 940E4664 CALL 0x4664
11E0 DE4B RCALL _Jump2Menu
(0104) return ;
11E1 9621 ADIW R28,1
11E2 940E43C0 CALL pop_gset1
11E4 9508 RET
(0105) }
(0106) }
(0107) }
(0108) void DispMenuParaDown()
(0109) {
(0110) POP();
_DispMenuParaDown:
11E5 D19B RCALL _POP
11E6 9508 RET
(0111) }
(0112)
(0113) void DispMenuParaLeft()
(0114) {
(0115) BarMenuLeft();
_DispMenuParaLeft:
11E7 D264 RCALL _BarMenuLeft
11E8 9508 RET
(0116) }
(0117) void DispMenuParaRight()
(0118) {
(0119) BarMenuRight();
_DispMenuParaRight:
11E9 D2F4 RCALL _BarMenuRight
11EA 9508 RET
_DispMenuSetupInit:
11EB 9721 SBIW R28,1
FILE: E:\电子制作\FAT_SD_MENU\MENU\MenuSetup.c
(0001) /******************************************************************************
(0002) * MenuSetup.C - "设置"菜单 菜单函数使用模版
(0003) ******************************************************************************/
(0004) #include "MenuSetup.h"
(0005)
(0006)
(0007) //设置
(0008) void DispMenuSetupInit()
(0009) {
(0010) GUI_Clear();
11EC 940E3AAD CALL _GUI_Clear
11EE 940E4699 CALL 0x4699
(0011) //--------------------
(0012) //切换Bar显示内容
(0013) //---------------------
(0014) BarMenu=&MenuSetup[language];
11F0 0110 MOVW R2,R0
11F1 EE88 LDI R24,0xE8
11F2 E098 LDI R25,0x8
11F3 0E28 ADD R2,R24
11F4 1E39 ADC R3,R25
11F5 923008DE STS BarMenu+1,R3
11F7 922008DD STS BarMenu,R2
(0015) ItemNum=(*BarMenu).TextNum ;
11F9 01F1 MOVW R30,R2
11FA 9632 ADIW R30,2
11FB 91E4 LPM R30,0(Z)
11FC 93E008E3 STS ItemNum,R30
(0016) DispItem=(*BarMenu).Text ;
11FE 01F1 MOVW R30,R2
11FF 9005 LPM R0,Z+
1200 9014 LPM R1,0(Z)
1201 01F0 MOVW R30,R0
1202 93F008E0 STS DispItem+1,R31
1204 93E008DF STS DispItem,R30
(0017)
(0018) //用户的初始化代码请放在这里
(0019)
(0020) //显示按键对应的文字提示,1-->"选择"
(0021) GUI_DispStringAt(*(Tip[language].Text+1),0,LCD_YSIZE-14);
1206 E386 LDI R24,0x36
1207 8388 STD Y+0,R24
1208 2722 CLR R18
1209 940E45B1 CALL 0x45B1
(0022) //显示按键对应的文字提示,0-->"退出"
(0023) GUI_DispStringAt(*(Tip[language].Text+4),LCD_XSIZE-24,LCD_YSIZE-14);
(0024)
(0025) BarMenuInit();//公共初始化部分
120B D1D5 RCALL _BarMenuInit
120C 9621 ADIW R28,1
120D 9508 RET
(0026) }
(0027)
(0028) /*
(0029) *****************************************************************************
(0030) 菜单使用例程
(0031) 0.Jump2Menu + FlashMode_AutoInit/FlashMode_ManualInit
(0032) 跳转到任意菜单,FlashMode_AutoInit-->在BarMenuInit函数中执行PUSH;
(0033) FlashMode_ManualInit-->子菜单的Init函数中PUSH,看例子:DispMenuLanguageInit
(0034) 1.PUSH + POP
(0035) 执行一些功能,并使用LCD后,回到原有界面,回到原有界面--包括反显位置都恢复
(0036) 2.Jump2Menu(SelfMenuIndex,FlashMode_ReFlash);
(0037) 执行一些功能,并使用LCD后,执行如上调用,回到原有界面--包括反显位置都恢复
(0038) 3.POP
(0039) 执行一些功能,并使用LCD后,回到上层菜单,恢复上层界面
(0040) 4.Jump2Menu(SelfMenuIndex,FlashMode_NoAction);
(0041) 执行一定功能后,但不占用LCD的话,直接界面不动
(0042)
(0043) *****************************************************************************
(0044) */
(0045) void DispMenuSetupDown(void)
(0046) {
(0047) POP();
_DispMenuSetupDown:
120E D172 RCALL _POP
120F 9508 RET
(0048) }
(0049)
(0050) void DispMenuSetupLeft(void)
(0051) {
(0052) BarMenuLeft();
_DispMenuSetupLeft:
1210 D23B RCALL _BarMenuLeft
1211 9508 RET
(0053) }
(0054)
(0055) void DispMenuSetupRight(void)
(0056) {
(0057) BarMenuRight();
_DispMenuSetupRight:
1212 D2CB RCALL _BarMenuRight
1213 9508 RET
_DispMenuSetupUp:
1214 940E43BD CALL push_gset1
1216 9725 SBIW R28,5
1217 940E4A2A CALL 0x4A2A
(0058) }
(0059)
(0060) void DispMenuSetupUp(void)
(0061) {
(0062) switch(Item)
1219 F081 BEQ 0x122A
121A 3041 CPI R20,1
121B E0E0 LDI R30,0
121C 075E CPC R21,R30
121D F409 BNE 0x121F
121E C038 RJMP 0x1257
121F 3042 CPI R20,2
1220 E0E0 LDI R30,0
1221 075E CPC R21,R30
1222 F409 BNE 0x1224
1223 C03B RJMP 0x125F
1224 3043 CPI R20,3
1225 E0E0 LDI R30,0
1226 075E CPC R21,R30
1227 F409 BNE 0x1229
1228 C040 RJMP 0x1269
1229 C046 RJMP 0x1270
(0063) {
(0064) case 0 ://时间设置选项
(0065) {
(0066) PUSH();
122A D12E RCALL _PUSH
122B 940E49A7 CALL 0x49A7
(0067) GUI_Clear();
122D 2022 TST R2
122E F451 BNE 0x1239
122F 940E4921 CALL 0x4921
(0068) if(language == CH)
1231 2422 CLR R2
1232 8228 STD Y+0,R2
1233 2722 CLR R18
1234 E60A LDI R16,0x6A
1235 E015 LDI R17,5
1236 940E3D5C CALL _GUI_DispStringAtBar
(0069) GUI_DispStringAtBar("时间设置",0,0,LCD_XSIZE,GUI_TA_HCENTER);
(0070) else
1238 C009 RJMP 0x1242
1239 940E4921 CALL 0x4921
123B 2422 CLR R2
123C 8228 STD Y+0,R2
123D 2722 CLR R18
123E E50C LDI R16,0x5C
123F E015 LDI R17,5
1240 940E3D5C CALL _GUI_DispStringAtBar
(0071) GUI_DispStringAtBar("Time Settings",0,0,LCD_XSIZE,GUI_TA_HCENTER);
(0072)
(0073) //显示按键对应的文字提示,1-->"确定"
1242 E386 LDI R24,0x36
1243 8388 STD Y+0,R24
1244 E021 LDI R18,1
1245 940E45DA CALL 0x45DA
1247 8104 LDD R16,Z+4
1248 8115 LDD R17,Z+5
1249 940E3C92 CALL _GUI_DispStringAt
(0074) GUI_DispStringAt(*(Tip[language].Text+2),1,LCD_YSIZE-14);
(0075) //显示按键对应的文字提示,0-->"退出"
124B E386 LDI R24,0x36
124C 8388 STD Y+0,R24
124D E429 LDI R18,0x49
124E 940E45DA CALL 0x45DA
1250 8500 LDD R16,Z+8
1251 8511 LDD R17,Z+9
1252 940E3C92 CALL _GUI_DispStringAt
(0076) GUI_DispStringAt(*(Tip[language].Text+4),LCD_XSIZE-24,LCD_YSIZE-14);
(0077)
1254 D027 RCALL _Time_Settings
(0078) Time_Settings();//时间设置函数
(0079) POP();//返回到父菜单
(0080) break ;
(0081) }
(0082) case 1 :
(0083) {
1255 D12B RCALL _POP
1256 C021 RJMP 0x1278
1257 D101 RCALL _PUSH
(0084) //PUSH -->POP
(0085) PUSH();
1258 940E490F CALL 0x490F
125A E305 LDI R16,0x35
(0086) GUI_Clear();
(0087) GUI_DispStringAt("Do Something \nthen Back to \nThis Menu!",0,0);
125B 940E4A9B CALL 0x4A9B
(0088) GUI_Delay(10000);
125D D123 RCALL _POP
125E C019 RJMP 0x1278
(0089) POP();
(0090) break ;
(0091) }
(0092) case 2 :
(0093) {
(0094) //ReFlash = 1
125F 940E490F CALL 0x490F
1261 E305 LDI R16,0x35
(0095) GUI_Clear();
(0096) GUI_DispStringAt("Do Something \nthen Back to \nThis Menu!",0,0);
1262 940E4A9B CALL 0x4A9B
1264 E023 LDI R18,3
1265 940E4664 CALL 0x4664
(0097) GUI_Delay(10000);
1267 DDC4 RCALL _Jump2Menu
1268 C00F RJMP 0x1278
(0098) Jump2Menu(SelfMenuIndex,FlashMode_ReFlash);
(0099) break ;
(0100) }
(0101) case 3 :
(0102) {
(0103) //POP
1269 940E490F CALL 0x490F
126B E00C LDI R16,0xC
(0104) GUI_Clear();
(0105) GUI_DispStringAt("Do
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -