📄 menu.s
字号:
.dbline 95
; {
.dbline 96
; user_choosen=max_item;
lds R2,_max_item
sts _user_choosen,R2
.dbline 97
; }
L148:
.dbline 98
; refresh=1;
ldi R24,1
sts _refresh,R24
.dbline 99
; user_choosen--;
lds R24,_user_choosen
subi R24,1
sts _user_choosen,R24
.dbline 100
; break;
xjmp L144
L150:
.dbline 102
; case 2: //向下键.
; user_choosen++;
lds R24,_user_choosen
subi R24,255 ; addi 1
sts _user_choosen,R24
.dbline 103
; if(user_choosen==max_item)
lds R2,_max_item
cp R24,R2
brne L151
X37:
.dbline 104
; {
.dbline 105
; user_choosen=0;
clr R2
sts _user_choosen,R2
.dbline 106
; }
L151:
.dbline 107
; refresh=1;
ldi R24,1
sts _refresh,R24
.dbline 108
; break;
xjmp L144
L153:
.dbline 110
; case 3: //确认键.
; if(menu_led[user_choosen].subs!=NULL)
lds R2,_user_choosen
ldi R24,9
mul R24,R2
movw R30,R0
lds R2,_menu_led
lds R3,_menu_led+1
add R30,R2
adc R31,R3
ldd R2,z+3
ldd R3,z+4
tst R2
brne X38
tst R3
breq L154
X38:
.dbline 111
; {
.dbline 112
; (*menu_led[user_choosen].subs)(); //执行函数.
lds R2,_user_choosen
mul R24,R2
movw R30,R0
lds R2,_menu_led
lds R3,_menu_led+1
add R30,R2
adc R31,R3
ldd R26,z+3
ldd R27,z+4
movw R30,R26
xcall xicall
.dbline 113
; }
L154:
.dbline 114
; if(menu_led[user_choosen].children_menus!=NULL)
lds R2,_user_choosen
ldi R24,9
mul R24,R2
movw R30,R0
lds R2,_menu_led
lds R3,_menu_led+1
add R30,R2
adc R31,R3
ldd R2,z+5
ldd R3,z+6
tst R2
brne X39
tst R3
breq L156
X39:
.dbline 115
; {
.dbline 116
; temp_choosen=user_choosen;
lds R2,_user_choosen
sts _temp_choosen,R2
.dbline 117
; menu_led=menu_led[user_choosen].children_menus;
mul R24,R2
movw R30,R0
lds R2,_menu_led
lds R3,_menu_led+1
add R30,R2
adc R31,R3
ldd R2,z+5
ldd R3,z+6
sts _menu_led+1,R3
sts _menu_led,R2
.dbline 118
; user_choosen=0;
clr R2
sts _user_choosen,R2
.dbline 119
; }
L156:
.dbline 120
; refresh=1;
ldi R24,1
sts _refresh,R24
.dbline 121
; break;
xjmp L144
L158:
.dbline 123
; case 4: //返回键.
; if(menu_led[user_choosen].parent_menus!=NULL)
lds R2,_user_choosen
ldi R24,9
mul R24,R2
movw R30,R0
lds R2,_menu_led
lds R3,_menu_led+1
add R30,R2
adc R31,R3
ldd R2,z+7
ldd R3,z+8
tst R2
brne X40
tst R3
breq L159
X40:
.dbline 124
; {
.dbline 125
; menu_led=menu_led[user_choosen].parent_menus;
lds R2,_user_choosen
mul R24,R2
movw R30,R0
lds R2,_menu_led
lds R3,_menu_led+1
add R30,R2
adc R31,R3
ldd R2,z+7
ldd R3,z+8
sts _menu_led+1,R3
sts _menu_led,R2
.dbline 126
; }
L159:
.dbline 127
; refresh=1;
ldi R24,1
sts _refresh,R24
.dbline 128
; break;
.dbline 130
; default:
; break;
L144:
.dbline 132
; }
; if(refresh) //是否需要刷新LCD标志位.
lds R2,_refresh
tst R2
breq L161
X41:
.dbline 133
; {
.dbline 134
; lcd_clr();
xcall _lcd_clr
.dbline 135
; refresh=0;
clr R2
sts _refresh,R2
.dbline 136
; }
L161:
.dbline 137
; led_menu_show();
xcall _led_menu_show
.dbline -2
L142:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbend
.dbfunc e led_menu_show _led_menu_show fV
; n -> R20
.even
_led_menu_show::
xcall push_xgsetF000
sbiw R28,6
.dbline -1
.dbline 141
; }
;
; void led_menu_show(void)
; {
.dbline 143
; uchar n;
; max_item=menu_led->menu_count;
lds R30,_menu_led
lds R31,_menu_led+1
ldd R2,z+0
sts _max_item,R2
.dbline 144
; if (max_item>=3) //菜单项为3则表示为主菜单.
mov R24,R2
cpi R24,3
brlo L164
X44:
.dbline 145
; {
.dbline 146
; for(n=0;n<3;n++)
clr R20
xjmp L169
L166:
.dbline 147
; {
.dbline 149
; /*使同一数组元素图形宽度相同,即取最大的图形宽度,这里取96,在数组赋值时也要注意*/
; draw_bmp(n*2,20,96,0,menu_led[n].display);
ldi R24,9
mul R24,R20
movw R30,R0
lds R2,_menu_led
lds R3,_menu_led+1
add R30,R2
adc R31,R3
ldd R2,z+1
ldd R3,z+2
std y+5,R3
std y+4,R2
clr R2
std y+2,R2
ldi R24,96
std y+0,R24
ldi R18,20
mov R16,R20
lsl R16
xcall _draw_bmp
.dbline 150
; }
L167:
.dbline 146
inc R20
L169:
.dbline 146
cpi R20,3
brlo L166
X45:
.dbline 151
; select_item(user_choosen); //标记出当前菜单项.
lds R16,_user_choosen
xcall _select_item
.dbline 152
; }
xjmp L165
L164:
.dbline 154
; else
; {
.dbline 155
; switch(temp_choosen)
lds R22,_temp_choosen
clr R23
cpi R22,0
cpc R22,R23
breq L173
X46:
cpi R22,1
ldi R30,0
cpc R23,R30
breq L174
X47:
cpi R22,2
ldi R30,0
cpc R23,R30
breq L175
X48:
xjmp L171
L173:
.dbline 158
; {
; case 0:
; draw_bmp(0,20,96,0,blue);
ldi R24,<_blue
ldi R25,>_blue
std y+5,R25
std y+4,R24
clr R2
std y+2,R2
ldi R24,96
std y+0,R24
ldi R18,20
clr R16
xcall _draw_bmp
.dbline 159
; break;
xjmp L171
L174:
.dbline 161
; case 1:
; draw_bmp(0,20,96,0,green);
ldi R24,<_green
ldi R25,>_green
std y+5,R25
std y+4,R24
clr R2
std y+2,R2
ldi R24,96
std y+0,R24
ldi R18,20
clr R16
xcall _draw_bmp
.dbline 162
; break;
xjmp L171
L175:
.dbline 164
; case 2:
; draw_bmp(0,20,96,0,red);
ldi R24,<_red
ldi R25,>_red
std y+5,R25
std y+4,R24
clr R2
std y+2,R2
ldi R24,96
std y+0,R24
ldi R18,20
clr R16
xcall _draw_bmp
.dbline 165
; break;
.dbline 167
; default:
; break;
L171:
.dbline 169
; }
; for(n=0;n<max_item;n++)
clr R20
xjmp L179
L176:
.dbline 170
; {
.dbline 171
; draw_bmp((n+1)*2,20,32,0,menu_led[n].display);
ldi R24,9
mul R24,R20
movw R30,R0
lds R2,_menu_led
lds R3,_menu_led+1
add R30,R2
adc R31,R3
ldd R2,z+1
ldd R3,z+2
std y+5,R3
std y+4,R2
clr R2
std y+2,R2
ldi R24,32
std y+0,R24
ldi R18,20
mov R16,R20
subi R16,255 ; addi 1
lsl R16
xcall _draw_bmp
.dbline 172
; }
L177:
.dbline 169
inc R20
L179:
.dbline 169
lds R2,_max_item
cp R20,R2
brlo L176
X49:
.dbline 173
; select_item(user_choosen+1);
lds R16,_user_choosen
subi R16,255 ; addi 1
xcall _select_item
.dbline 174
; }
L165:
.dbline -2
L163:
.dbline 0 ; func end
adiw R28,6
xjmp pop_xgsetF000
.dbsym r n 20 c
.dbend
.dbfunc e select_item _select_item fV
; n -> R10
.even
_select_item::
st -y,R10
mov R10,R16
sbiw R28,6
.dbline -1
.dbline 178
; }
;
; void select_item(uchar n)
; {
.dbline 179
; draw_bmp(n*2,2,16,0,curflag);
ldi R24,<_curflag
ldi R25,>_curflag
std y+5,R25
std y+4,R24
clr R2
std y+2,R2
ldi R24,16
std y+0,R24
ldi R18,2
mov R16,R10
lsl R16
xcall _draw_bmp
.dbline -2
L180:
.dbline 0 ; func end
adiw R28,6
ld R10,y+
ret
.dbsym r n 10 c
.dbend
.dbfunc e openblue _openblue fV
.even
_openblue::
.dbline -1
.dbline 183
; }
;
; void openblue(void)
; {
.dbline 184
; blueon;
sbi 0x18,5
.dbline 185
; greenoff;
cbi 0x18,6
.dbline 186
; redoff;
cbi 0x18,7
.dbline -2
L181:
.dbline 0 ; func end
ret
.dbend
.dbfunc e opengreen _opengreen fV
.even
_opengreen::
.dbline -1
.dbline 190
; }
;
; void opengreen(void)
; {
.dbline 191
; blueoff;
cbi 0x18,5
.dbline 192
; greenon;
sbi 0x18,6
.dbline 193
; redoff;
cbi 0x18,7
.dbline -2
L182:
.dbline 0 ; func end
ret
.dbend
.dbfunc e openred _openred fV
.even
_openred::
.dbline -1
.dbline 197
; }
;
; void openred(void)
; {
.dbline 198
; blueoff;
cbi 0x18,5
.dbline 199
; greenoff;
cbi 0x18,6
.dbline 200
; redon;
sbi 0x18,7
.dbline -2
L183:
.dbline 0 ; func end
ret
.dbend
.dbfunc e closeblue _closeblue fV
.even
_closeblue::
.dbline -1
.dbline 204
; }
;
; void closeblue(void)
; {
.dbline 205
; blueoff;
cbi 0x18,5
.dbline -2
L184:
.dbline 0 ; func end
ret
.dbend
.dbfunc e closegreen _closegreen fV
.even
_closegreen::
.dbline -1
.dbline 209
; }
;
; void closegreen(void)
; {
.dbline 210
; greenoff;
cbi 0x18,6
.dbline -2
L185:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
sbiw R28,6
.dbline -1
.dbline 221
; }
;
;
;
;
; /*************************************************
; 主程序.
; **************************************************/
;
; void main(void)
; {
.dbline 222
; main_init();
xcall _main_init
.dbline 223
; lcd_init();
xcall _lcd_init
.dbline 224
; lcd_clr();
xcall _lcd_clr
.dbline 225
; draw_bmp(0,0,128,0,xtcsh); //函数调用形式为页,列,宽度,数据指针.
ldi R24,<_xtcsh
ldi R25,>_xtcsh
std y+5,R25
std y+4,R24
clr R2
std y+2,R2
ldi R24,128
std y+0,R24
clr R18
clr R16
xcall _draw_bmp
.dbline 226
; draw_bmp(2,8,72,0,writeby);
ldi R24,<_writeby
ldi R25,>_writeby
std y+5,R25
std y+4,R24
clr R2
std y+2,R2
ldi R24,72
std y+0,R24
ldi R18,8
ldi R16,2
xcall _draw_bmp
.dbline 227
; draw_bmp(4,56,32,1,jiangping);
ldi R24,<_jiangping
ldi R25,>_jiangping
std y+5,R25
std y+4,R24
ldi R24,1
std y+2,R24
ldi R24,32
std y+0,R24
ldi R18,56
ldi R16,4
xcall _draw_bmp
.dbline 229
;
; blueon;
sbi 0x18,5
.dbline 230
; greenon;
sbi 0x18,6
.dbline 231
; redon;
sbi 0x18,7
.dbline 233
;
; delay_ms(3000); //延时3秒.
ldi R16,3000
ldi R17,11
xcall _delay_ms
.dbline 234
; lcd_clr();
xcall _lcd_clr
.dbline 236
;
; blueoff;
cbi 0x18,5
.dbline 237
; greenoff;
cbi 0x18,6
.dbline 238
; redoff;
cbi 0x18,7
.dbline 240
;
; main_menu_initial();
xcall _main_menu_initial
.dbline 241
; blue_menu_initial();
xcall _blue_menu_initial
.dbline 242
; green_menu_initial();
xcall _green_menu_initial
xjmp L188
L187:
.dbline 245
;
; while(1)
; {
.dbline 246
; keyval=get_key(); //读键.
xcall _get_key
sts _keyval,R16
.dbline 247
; led_menu_pro();
xcall _led_menu_pro
.dbline 248
; }
L188:
.dbline 244
xjmp L187
X50:
.dbline -2
L186:
.dbline 0 ; func end
adiw R28,6
ret
.dbend
.area bss(ram, con, rel)
.dbfile F:\diy\LedMenu\menu.c
_temp_choosen::
.blkb 1
.dbfile F:\diy\LedMenu\menu.h
.dbsym e temp_choosen _temp_choosen c
_green_menu::
.blkb 18
.dbsym e green_menu _green_menu A[18:2]S[menu_item]
_blue_menu::
.blkb 18
.dbsym e blue_menu _blue_menu A[18:2]S[menu_item]
_main_menu::
.blkb 36
.dbsym e main_menu _main_menu A[36:4]S[menu_item]
; }
;
;
;
.area func_lit
PL_closegreen: .word `_closegreen
PL_opengreen: .word `_opengreen
PL_closeblue: .word `_closeblue
PL_openblue: .word `_openblue
PL_openred: .word `_openred
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -