📄 menu.lis
字号:
.module menu.c
.area text(rom, con, rel)
0000 .dbfile G:\IccPro\mega128_lcd\ZLG_GUI\menu.c
0000 .dbfunc e GUI_MMenuDraw _GUI_MMenuDraw fc
0000 ; i -> R20
0000 ; xx -> R22
0000 ; mwin -> R10,R11
0000 ; men -> R12,R13
.even
0000 _GUI_MMenuDraw::
0000 0E940000 xcall push_gset4
0004 6801 movw R12,R16
0006 2397 sbiw R28,3
0008 .dbline -1
0008 .dbline 19
0008 ; /****************************************************************************************
0008 ; * 文件名:MENU.C
0008 ; * 功能:菜单显示及操作(下拉式菜单)。
0008 ; * 作者:黄绍斌
0008 ; * 日期:2004.02.26
0008 ; * 备注:使用GUI_SetBackColor()函数设置显示颜色及背景色。
0008 ; ****************************************************************************************/
0008 ; #include "config.h"
0008 ;
0008 ;
0008 ; #if GUI_MenuDown_EN==1
0008 ; /****************************************************************************
0008 ; * 名称:GUI_MMenuDraw()
0008 ; * 功能:显示主菜单,加上边框。
0008 ; * 入口参数:men 主菜单句柄
0008 ; * 出口参数:返回0表示操作失败,返回1表示操作成功
0008 ; ****************************************************************************/
0008 ; uint8 GUI_MMenuDraw(MMENU *men)
0008 ; { WINDOWS *mwin;
0008 .dbline 24
0008 ; uint8 i;
0008 ; uint8 xx;
0008 ;
0008 ; /* 参数过滤 */
0008 ; if( (men->no)==0 ) return(0);
0008 F601 movw R30,R12
000A 2280 ldd R2,z+2
000C 2220 tst R2
000E 11F4 brne L8
0010 .dbline 24
0010 0027 clr R16
0012 70C0 xjmp L7
0014 L8:
0014 .dbline 26
0014 ;
0014 ; mwin = men->win; // 取得窗口句柄
0014 F601 movw R30,R12
0016 A080 ldd R10,z+0
0018 B180 ldd R11,z+1
001A .dbline 28
001A ; /* 判断是否可以显示主菜单 */
001A ; if( (mwin->hight)<50 ) return(0);
001A F501 movw R30,R10
001C 8681 ldd R24,z+6
001E 9781 ldd R25,z+7
0020 8233 cpi R24,50
0022 E0E0 ldi R30,0
0024 9E07 cpc R25,R30
0026 10F4 brsh L10
0028 .dbline 28
0028 0027 clr R16
002A 64C0 xjmp L7
002C L10:
002C .dbline 29
002C ; if( (mwin->with)<50 ) return(0);
002C F501 movw R30,R10
002E 8481 ldd R24,z+4
0030 9581 ldd R25,z+5
0032 8233 cpi R24,50
0034 E0E0 ldi R30,0
0036 9E07 cpc R25,R30
0038 10F4 brsh L12
003A .dbline 29
003A 0027 clr R16
003C 5BC0 xjmp L7
003E L12:
003E .dbline 32
003E ;
003E ; /* 画菜单条,并显示菜主单 */
003E ; GUI_HLine(mwin->x, mwin->y + 22, mwin->x + mwin->with - 1, disp_color);
003E 20900000 lds R2,_disp_color
0042 2A82 std y+2,R2
0044 F501 movw R30,R10
0046 2080 ldd R2,z+0
0048 3180 ldd R3,z+1
004A 4480 ldd R4,z+4
004C 5580 ldd R5,z+5
004E C101 movw R24,R2
0050 840D add R24,R4
0052 951D adc R25,R5
0054 0197 sbiw R24,1
0056 9983 std y+1,R25
0058 8883 std y+0,R24
005A F501 movw R30,R10
005C 2281 ldd R18,z+2
005E 3381 ldd R19,z+3
0060 2A5E subi R18,234 ; offset = 22
0062 3F4F sbci R19,255
0064 8101 movw R16,R2
0066 0E940000 xcall _GUI_HLine
006A .dbline 34
006A ;
006A ; xx = mwin->x;
006A F501 movw R30,R10
006C 6081 ldd R22,z+0
006E .dbline 35
006E ; for(i=0; i<(men->no); i++)
006E 4427 clr R20
0070 3BC0 xjmp L17
0072 L14:
0072 .dbline 36
0072 ; { if( (xx+MMENU_WIDTH) > (mwin->x + mwin->with) ) return(0);
0072 .dbline 36
0072 F501 movw R30,R10
0074 2480 ldd R2,z+4
0076 3580 ldd R3,z+5
0078 F501 movw R30,R10
007A 4080 ldd R4,z+0
007C 5180 ldd R5,z+1
007E 420C add R4,R2
0080 531C adc R5,R3
0082 862F mov R24,R22
0084 9927 clr R25
0086 8296 adiw R24,34
0088 4816 cp R4,R24
008A 5906 cpc R5,R25
008C 10F4 brsh L18
008E .dbline 36
008E 0027 clr R16
0090 31C0 xjmp L7
0092 L18:
0092 .dbline 38
0092 84E0 ldi R24,4
0094 8A83 std y+2,R24
0096 82E0 ldi R24,2
0098 849F mul R24,R20
009A F001 movw R30,R0
009C C601 movw R24,R12
009E 0396 adiw R24,3
00A0 E80F add R30,R24
00A2 F91F adc R31,R25
00A4 2080 ldd R2,z+0
00A6 3180 ldd R3,z+1
00A8 3982 std y+1,R3
00AA 2882 std y+0,R2
00AC F501 movw R30,R10
00AE 2281 ldd R18,z+2
00B0 3381 ldd R19,z+3
00B2 225F subi R18,242 ; offset = 14
00B4 3F4F sbci R19,255
00B6 062F mov R16,R22
00B8 1127 clr R17
00BA 0E5F subi R16,254 ; offset = 2
00BC 1F4F sbci R17,255
00BE 0E940000 xcall _GUI_PutNoStr
00C2 .dbline 39
00C2 6E5D subi R22,222 ; addi 34
00C4 .dbline 40
00C4 20900000 lds R2,_disp_color
00C8 2A82 std y+2,R2
00CA F501 movw R30,R10
00CC 2280 ldd R2,z+2
00CE 3380 ldd R3,z+3
00D0 C101 movw R24,R2
00D2 4696 adiw R24,22
00D4 9983 std y+1,R25
00D6 8883 std y+0,R24
00D8 9101 movw R18,R2
00DA 245F subi R18,244 ; offset = 12
00DC 3F4F sbci R19,255
00DE 062F mov R16,R22
00E0 1127 clr R17
00E2 0E940000 xcall _GUI_RLine
00E6 .dbline 41
00E6 L15:
00E6 .dbline 35
00E6 4395 inc R20
00E8 L17:
00E8 .dbline 35
00E8 F601 movw R30,R12
00EA 2280 ldd R2,z+2
00EC 4215 cp R20,R2
00EE 08F4 brsh X0
00F0 C0CF xjmp L14
00F2 X0:
00F2 .dbline 43
00F2 ;
00F2 ; GUI_PutNoStr(xx+2, mwin->y + 14, men->str[i], 4); // 书写主菜单文字
00F2 ; xx += MMENU_WIDTH;
00F2 ; GUI_RLine(xx, mwin->y + 12, mwin->y + 22, disp_color); // 显示主菜单分界线
00F2 ; }
00F2 ;
00F2 ; return(1);
00F2 01E0 ldi R16,1
00F4 .dbline -2
00F4 L7:
00F4 2396 adiw R28,3
00F6 0E940000 xcall pop_gset4
00FA .dbline 0 ; func end
00FA 0895 ret
00FC .dbsym r i 20 c
00FC .dbsym r xx 22 c
00FC .dbsym r mwin 10 pX
00FC .dbsym r men 12 pX
00FC .dbend
00FC .dbfunc e GUI_MMenuSelect _GUI_MMenuSelect fV
00FC ; xx -> R20
00FC ; mwin -> R22,R23
00FC ; no -> R20
00FC ; men -> R22,R23
.even
00FC _GUI_MMenuSelect::
00FC 0E940000 xcall push_gset2
0100 422F mov R20,R18
0102 B801 movw R22,R16
0104 2397 sbiw R28,3
0106 .dbline -1
0106 .dbline 55
0106 ; }
0106 ;
0106 ;
0106 ; /****************************************************************************
0106 ; * 名称:GUI_MMenuSelect()
0106 ; * 功能:当前主菜单,加下划线,表示当前主菜单。
0106 ; * 入口参数:men 主菜单句柄
0106 ; * no 所选的主菜单项
0106 ; * 出口参数:无
0106 ; ****************************************************************************/
0106 ; void GUI_MMenuSelect(MMENU *men, uint8 no)
0106 ; { WINDOWS *mwin;
0106 .dbline 59
0106 ; uint8 xx;
0106 ;
0106 ; /* 参数过滤 */
0106 ; if( (men->no)==0 ) return;
0106 FB01 movw R30,R22
0108 2280 ldd R2,z+2
010A 2220 tst R2
010C 09F4 brne L21
010E .dbline 59
010E 33C0 xjmp L20
0110 L21:
0110 .dbline 60
0110 ; if( no>(men->no) ) return;
0110 FB01 movw R30,R22
0112 2280 ldd R2,z+2
0114 2416 cp R2,R20
0116 08F4 brsh L23
0118 .dbline 60
0118 2EC0 xjmp L20
011A L23:
011A .dbline 62
011A ;
011A ; mwin = men->win; // 取得窗口句柄
011A FB01 movw R30,R22
011C 6081 ldd R22,z+0
011E 7181 ldd R23,z+1
0120 .dbline 64
0120 ; /* 判断是否可以显示主菜单 */
0120 ; if( (mwin->hight)<50 ) return;
0120 FB01 movw R30,R22
0122 8681 ldd R24,z+6
0124 9781 ldd R25,z+7
0126 8233 cpi R24,50
0128 E0E0 ldi R30,0
012A 9E07 cpc R25,R30
012C 08F4 brsh L25
012E .dbline 64
012E 23C0 xjmp L20
0130 L25:
0130 .dbline 65
0130 ; if( (mwin->with)<50 ) return;
0130 FB01 movw R30,R22
0132 8481 ldd R24,z+4
0134 9581 ldd R25,z+5
0136 8233 cpi R24,50
0138 E0E0 ldi R30,0
013A 9E07 cpc R25,R30
013C 08F4 brsh L27
013E .dbline 65
013E 1BC0 xjmp L20
0140 L27:
0140 .dbline 68
0140 ;
0140 ; /* 显示下划线 */
0140 ; xx = mwin->x + no*MMENU_WIDTH;
0140 82E2 ldi R24,34
0142 849F mul R24,R20
0144 FB01 movw R30,R22
0146 4081 ldd R20,z+0
0148 400D add R20,R0
014A 511D adc R21,R1
014C .dbline 69
014C ; GUI_HLine(xx+1, mwin->y + 22-1, xx+MMENU_WIDTH- 1, disp_color);
014C 20900000 lds R2,_disp_color
0150 2A82 std y+2,R2
0152 842F mov R24,R20
0154 9927 clr R25
0156 8296 adiw R24,34
0158 0197 sbiw R24,1
015A 9983 std y+1,R25
015C 8883 std y+0,R24
015E 2281 ldd R18,z+2
0160 3381 ldd R19,z+3
0162 2A5E subi R18,234 ; offset = 22
0164 3F4F sbci R19,255
0166 2150 subi R18,1
0168 3040 sbci R19,0
016A 042F mov R16,R20
016C 1127 clr R17
016E 0F5F subi R16,255 ; offset = 1
0170 1F4F sbci R17,255
0172 0E940000 xcall _GUI_HLine
0176 .dbline -2
0176 L20:
0176 2396 adiw R28,3
0178 0E940000 xcall pop_gset2
017C .dbline 0 ; func end
017C 0895 ret
017E .dbsym r xx 20 c
017E .dbsym r mwin 22 pX
017E .dbsym r no 20 c
017E .dbsym r men 22 pX
017E .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -