lcd_m8.s
来自「AVR ICC基于AVR MEGA8单片机的LCD程序!」· S 代码 · 共 3,468 行 · 第 1/3 页
S
3,468 行
clr R3
add R30,R2
adc R31,R3
ldi R24,<_num0_9
ldi R25,>_num0_9
add R30,R24
adc R31,R25
lpm R30,Z
std y+0,R30
mov R18,R10
mov R16,R12
add R16,R2
xcall _w8
.dbline 181
L75:
.dbline 178
inc R20
L77:
.dbline 178
cpi R20,5
brlo L74
.dbline 182
mov R16,R12
subi R16,251 ; addi 5
.dbline -2
L73:
adiw R28,1
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r c 22 c
.dbsym r y 10 c
.dbsym r x 12 c
.dbend
.area lit(rom, con, rel)
L79:
.byte 10
.byte 0,0,0,0
.area text(rom, con, rel)
.dbfile D:\ele\AVR\ICC\LCD\lcd-M8/lcd.h
.dbfunc e dis_5 _dis_5 fc
; ent -> R20
; n -> R22
; lock -> R10
; num -> y+1
; i -> R12
; dat -> R14,R15
; y -> y+18
; x -> y+16
.even
_dis_5::
xcall push_arg4
xcall push_gset5
sbiw R28,6
ldd R14,y+20
ldd R15,y+21
.dbline -1
.dbline 187
.dbline 188
ldi R24,<L79
ldi R25,>L79
movw R30,R28
adiw R30,1
ldi R16,5
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
.dbline 189
clr R22
.dbline 189
clr R10
.dbline 189
ldd R20,y+16
.dbline 190
clr R12
xjmp L83
L80:
.dbline 191
.dbline 192
ldi R18,10
ldi R19,0
movw R16,R14
xcall mod16u
movw R24,R28
adiw R24,1
mov R30,R12
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 193
ldi R18,10
ldi R19,0
movw R16,R14
xcall div16u
movw R14,R16
.dbline 194
L81:
.dbline 190
inc R12
L83:
.dbline 190
mov R24,R12
cpi R24,5
brlo L80
.dbline 195
ldi R24,5
mov R12,R24
xjmp L87
L84:
.dbline 196
.dbline 197
movw R24,R28
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
cp R3,R2
brsh L93
movw R24,R28
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,10
brlo L92
L93:
mov R24,R10
cpi R24,1
brne L88
L92:
.dbline 198
.dbline 199
clr R10
inc R10
.dbline 200
movw R24,R28
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
std y+0,R2
ldd R18,y+18
ldi R24,5
mul R24,R22
ldd R16,y+16
add R16,R0
xcall _dis_num
.dbline 201
inc R22
.dbline 202
subi R20,251 ; addi 5
.dbline 203
L88:
.dbline 204
L85:
.dbline 195
dec R12
L87:
.dbline 195
ldi R24,1
cp R24,R12
brlo L84
.dbline 205
ldd R2,y+1
std y+0,R2
ldd R18,y+18
ldi R24,5
mul R24,R22
ldd R16,y+16
add R16,R0
xcall _dis_num
.dbline 206
mov R16,R20
subi R16,251 ; addi 5
.dbline -2
L78:
adiw R28,6
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r ent 20 c
.dbsym r n 22 c
.dbsym r lock 10 c
.dbsym l num 1 A[5:5]c
.dbsym r i 12 c
.dbsym r dat 14 i
.dbsym l y 18 c
.dbsym l x 16 c
.dbend
.dbfunc e disen _disen fc
; i -> R20
; j -> R14
; ASD -> R10
; y -> R12
; x -> R22
.even
_disen::
xcall push_gset5
mov R12,R18
mov R22,R16
sbiw R28,1
ldd R10,y+11
.dbline -1
.dbline 215
.dbline 217
mov R24,R10
subi R24,32
mov R10,R24
.dbline 218
clr R20
xjmp L99
L96:
.dbline 219
clr R14
xjmp L103
L100:
.dbline 220
.dbline 221
ldi R24,2
mul R24,R10
mov R2,R0
add R2,R20
ldi R24,8
mul R24,R2
movw R2,R0
ldi R24,<_ASCII
ldi R25,>_ASCII
add R2,R24
adc R3,R25
mov R30,R14
clr R31
add R30,R2
adc R31,R3
lpm R30,Z
std y+0,R30
mov R18,R12
add R18,R20
mov R16,R22
add R16,R14
xcall _w8
.dbline 222
L101:
.dbline 219
inc R14
L103:
.dbline 219
mov R24,R14
cpi R24,8
brlo L100
L97:
.dbline 218
inc R20
L99:
.dbline 218
cpi R20,2
brlo L96
.dbline 223
mov R16,R22
subi R16,248 ; addi 8
.dbline -2
L95:
adiw R28,1
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 14 c
.dbsym r ASD 10 c
.dbsym r y 12 c
.dbsym r x 22 c
.dbend
.dbfunc e disen_row _disen_row fc
; n -> R20
; k -> R22
; ASD -> R10,R11
; y -> R12
; x -> R14
.even
_disen_row::
xcall push_gset5
mov R12,R18
mov R14,R16
sbiw R28,1
ldd R10,y+11
ldd R11,y+12
.dbline -1
.dbline 227
.dbline 228
clr R22
xjmp L106
L105:
.dbline 230
.dbline 231
mov R30,R22
clr R31
add R30,R10
adc R31,R11
ldd R2,z+0
std y+0,R2
mov R18,R12
ldi R24,8
mul R24,R22
mov R16,R14
add R16,R0
xcall _disen
mov R20,R16
.dbline 232
inc R22
.dbline 233
L106:
.dbline 229
mov R30,R22
clr R31
add R30,R10
adc R31,R11
ldd R2,z+0
tst R2
brne L105
.dbline 234
mov R16,R20
.dbline -2
L104:
adiw R28,1
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r n 20 c
.dbsym r k 22 c
.dbsym r ASD 10 pc
.dbsym r y 12 c
.dbsym r x 14 c
.dbend
.dbfunc e disnum _disnum fc
; i -> R20
; j -> R22
; ASD -> y+4
; y -> R18
; x -> R16
.even
_disnum::
xcall push_gset2
.dbline -1
.dbline 239
.dbline 241
ldd R24,y+4
subi R24,240 ; addi 16
std y+4,R24
.dbline 242
clr R20
xjmp L112
L109:
.dbline 243
clr R22
xjmp L116
L113:
.dbline 244
.dbline 246
L114:
.dbline 243
inc R22
L116:
.dbline 243
cpi R22,8
brlo L113
L110:
.dbline 242
inc R20
L112:
.dbline 242
cpi R20,2
brlo L109
.dbline 247
subi R16,248 ; addi 8
.dbline -2
L108:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 22 c
.dbsym l ASD 4 c
.dbsym r y 18 c
.dbsym r x 16 c
.dbend
.area lit(rom, con, rel)
L118:
.byte 10
.byte 0,0,0,0
.area text(rom, con, rel)
.dbfile D:\ele\AVR\ICC\LCD\lcd-M8/lcd.h
.dbfunc e dis5 _dis5 fc
; ent -> R20
; n -> R22
; lock -> R10
; num -> y+1
; i -> R12
; dat -> R14,R15
; y -> y+18
; x -> y+16
.even
_dis5::
xcall push_arg4
xcall push_gset5
sbiw R28,6
ldd R14,y+20
ldd R15,y+21
.dbline -1
.dbline 252
.dbline 253
ldi R24,<L118
ldi R25,>L118
movw R30,R28
adiw R30,1
ldi R16,5
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
.dbline 254
clr R22
.dbline 254
clr R10
.dbline 255
clr R12
xjmp L122
L119:
.dbline 256
.dbline 257
ldi R18,10
ldi R19,0
movw R16,R14
xcall mod16u
movw R24,R28
adiw R24,1
mov R30,R12
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 258
ldi R18,10
ldi R19,0
movw R16,R14
xcall div16u
movw R14,R16
.dbline 259
L120:
.dbline 255
inc R12
L122:
.dbline 255
mov R24,R12
cpi R24,5
brlo L119
.dbline 260
ldi R24,5
mov R12,R24
xjmp L126
L123:
.dbline 261
.dbline 262
movw R24,R28
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
cp R3,R2
brsh L132
movw R24,R28
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,10
brlo L131
L132:
mov R24,R10
cpi R24,1
brne L127
L131:
.dbline 263
.dbline 264
clr R10
inc R10
.dbline 265
movw R24,R28
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
std y+0,R2
ldd R18,y+18
ldi R24,8
mul R24,R22
ldd R16,y+16
add R16,R0
xcall _disnum
mov R20,R16
.dbline 266
inc R22
.dbline 267
L127:
.dbline 268
L124:
.dbline 260
dec R12
L126:
.dbline 260
ldi R24,1
cp R24,R12
brlo L123
.dbline 269
ldd R2,y+1
std y+0,R2
ldd R18,y+18
ldi R24,8
mul R24,R22
ldd R16,y+16
add R16,R0
xcall _disnum
mov R20,R16
.dbline 270
.dbline -2
L117:
adiw R28,6
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r ent 20 c
.dbsym r n 22 c
.dbsym r lock 10 c
.dbsym l num 1 A[5:5]c
.dbsym r i 12 c
.dbsym r dat 14 i
.dbsym l y 18 c
.dbsym l x 16 c
.dbend
.dbfunc e dis_hz _dis_hz fc
; t -> y+1
; i -> R20
; hz -> R22,R23
; y -> R10
; x -> R12
.even
_dis_hz::
xcall push_gset4
mov R10,R18
mov R12,R16
sbiw R28,33
ldd R22,y+41
ldd R23,y+42
.dbline -1
.dbline 275
.dbline 278
clr R20
xjmp L138
L135:
.dbline 279
mov R30,R20
clr R31
add R30,R22
adc R31,R23
lpm R30,Z
movw R24,R28
adiw R24,1
mov R26,R20
clr R27
add R26,R24
adc R27,R25
st x,R30
L136:
.dbline 278
inc R20
L138:
.dbline 278
cpi R20,32
brlo L135
.dbline 280
clr R20
xjmp L142
L139:
.dbline 281
movw R24,R28
adiw R24,1
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
std y+0,R2
mov R18,R10
mov R16,R20
add R16,R12
xcall _w8
L140:
.dbline 280
inc R20
L142:
.dbline 280
cpi R20,16
brlo L139
.dbline 282
clr R20
xjmp L146
L143:
.dbline 283
movw R24,R28
adiw R24,17
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
std y+0,R2
mov R18,R10
subi R18,255 ; addi 1
mov R16,R20
add R16,R12
xcall _w8
L144:
.dbline 282
inc R20
L146:
.dbline 282
cpi R20,16
brlo L143
.dbline 284
mov R16,R12
subi R16,240 ; addi 16
.dbline -2
L134:
adiw R28,33
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym l t 1 A[32:32]c
.dbsym r i 20 c
.dbsym r hz 22 pkc
.dbsym r y 10 c
.dbsym r x 12 c
.dbend
.dbfunc e dis_hz_row _dis_hz_row fc
; j -> <dead>
; n -> R20
; i -> R22
; hz -> R10,R11
; row -> R12
; x -> R14
.even
_dis_hz_row::
xcall push_gset5
mov R12,R18
mov R14,R16
sbiw R28,2
ldd R10,y+12
ldd R11,y+13
.dbline -1
.dbline 289
.dbline 290
mov R20,R14
.dbline 291
clr R22
xjmp L152
L149:
.dbline 292
.dbline 293
ldi R24,2
mul R24,R22
movw R30,R0
add R30,R10
adc R31,R11
ldd R2,z+0
ldd R3,z+1
std y+1,R3
std y+0,R2
mov R18,R12
ldi R24,16
mul R24,R22
mov R16,R0
add R16,R14
xcall _dis_hz
.dbline 294
subi R20,240 ; addi 16
.dbline 295
L150:
.dbline 291
inc R22
L152:
.dbline 291
ldi R24,2
mul R24,R22
movw R30,R0
add R30,R10
adc R31,R11
ldd R2,z+0
ldd R3,z+1
tst R2
brne L149
tst R3
brne L149
X1:
.dbline 296
mov R16,R20
.dbline -2
L148:
adiw R28,2
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l j 3 c
.dbsym r n 20 c
.dbsym r i 22 c
.dbsym r hz 10 ppkc
.dbsym r row 12 c
.dbsym r x 14 c
.dbend
.dbfunc e DRAW_DOT _DRAW_DOT fV
; y_date -> R20
; y -> R20
; x -> R22
.even
_DRAW_DOT::
xcall push_gset2
mov R20,R18
mov R22,R16
sbiw R28,1
.dbline -1
.dbline 303
.dbline 305
mov R2,R20
lsr R2
lsr R2
lsr R2
sts _LCD_Y,R2
.dbline 305
ldi R17,8
mov R16,R20
xcall mod8u
mov R20,R16
.dbline 305
ldi R16,1
mov R17,R20
xcall lsl8
mov R20,R16
.dbline 306
sts _LCD_X,R22
.dbline 307
std y+0,R20
lds R18,_LCD_Y
mov R16,R22
xcall _w8
.dbline -2
L153:
adiw R28,1
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r y_date 20 c
.dbsym r y 20 c
.dbsym r x 22 c
.dbend
.dbfunc e read_x _read_x fc
; c -> R20
; line -> R22
; row -> R20
.even
_read_x::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 312
.dbline 314
mov R16,R22
xcall _sety
.dbline 315
mov R16,R20
xcall _setx
.dbline 318
sbi 0x15,0
.dbline 319
sbi 0x15,1
.dbline 321
cbi 0x15,2
.dbline 322
ldi R16,1
ldi R17,0
xcall _del
.dbline 323
sbi 0x15,2
.dbline 324
ldi R16,1
ldi R17,0
xcall _del
.dbline 325
cbi 0x15,2
.dbline 326
ldi R16,1
ldi R17,0
xcall _del
.dbline 328
cbi 0x15,2
.dbline 329
ldi R16,1
ldi R17,0
xcall _del
.dbline 330
sbi 0x15,2
.dbline 331
ldi R16,5
ldi R17,0
xcall _del
.dbline 332
in R20,0x10
.dbline 333
cbi 0x15,2
.dbline 334
ldi R16,1
ldi R17,0
xcall _del
.dbline 336
cbi 0x15,1
.dbline 337
ldi R24,255
out 0x1a,R24
.dbline 338
mov R16,R20
.dbline -2
L154:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r c 20 c
.dbsym r line 22 c
.dbsym r row 20 c
.dbend
.dbfunc e write_p _write_p fV
; c -> R10
; i -> y+7
; y -> R20
; x -> R22
.even
_write_p::
xcall push_gset3
mov R20,R18
mov R22,R16
sbiw R28,1
.dbline -1
.dbline 342
.dbline 345
mov R18,R20
mov R16,R22
clr R17
asr R17
ror R16
asr R17
ror R16
asr R17
ror R16
xcall _read_x
mov R10,R16
.dbline 346
ldd R0,y+7
tst R0
brne L156
.dbline 347
.dbline 348
mov R17,R22
andi R17,7
ldi R16,1
xcall lsl8
mov R2,R16
com R2
and R10,R2
.dbline 349
xjmp L157
L156:
.dbline 350
ldd R24,y+7
cpi R24,1
brne L158
.dbline 351
.dbline 352
mov R17,R22
andi R17,7
ldi R16,1
xcall lsl8
or R10,R16
.dbline 353
xjmp L159
L158:
.dbline 355
.dbline 356
mov R17,R22
andi R17,7
ldi R16,1
xcall lsl8
eor R10,R16
.dbline 357
L159:
L157:
.dbline 358
std y+0,R10
mov R18,R22
clr R19
asr R19
ror R18
asr R19
ror R18
asr R19
ror R18
mov R16,R20
xcall _w8
.dbline -2
L155:
adiw R28,1
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r c 10 c
.dbsym l i 7 c
.dbsym r y 20 c
.dbsym r x 22 c
.dbend
.dbfunc e initlcd _initlcd fV
.even
_initlcd::
.dbline -1
.dbline 363
.dbline 364
sbi 0x15,3
.dbline 364
sbi 0x15,4
.dbline 365
xcall _restlcd
.dbline 366
xcall _lcdoff
.dbline 367
xcall _lcdon
.dbline 368
clr R16
xcall _fromx
.dbline 369
xcall _clrlcd
.dbline -2
L160:
.dbline 0 ; func end
ret
.dbend
.dbfile D:\ele\AVR\ICC\LCD\lcd-M8\LCD_M8.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 14
.dbline 15
clr R2
out 0x1b,R2
.dbline 16
ldi R24,255
out 0x1a,R24
.dbline 17
out 0x18,R2
.dbline 18
out 0x17,R2
.dbline 19
out 0x15,R2
.dbline 20
out 0x14,R24
.dbline 21
out 0x12,R2
.dbline 22
out 0x11,R2
.dbline -2
L161:
.dbline 0 ; func end
ret
.dbend
.dbfunc e watchdog_init _watchdog_init fV
.even
_watchdog_init::
.dbline -1
.dbline 28
.dbline 29
wdr
.dbline 30
ldi R24,12
out 0x21,R24
.dbline -2
L162:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 35
.dbline 37
cli
.dbline 38
xcall _port_init
.dbline 39
xcall _watchdog_init
.dbline 41
clr R2
out 0x35,R2
.dbline 42
out 0x3b,R2
.dbline 43
out 0x39,R2
.dbline 44
sei
.dbline -2
L163:
.dbline 0 ; func end
ret
.dbend
.area lit(rom, con, rel)
L165:
.word _hz_wo
.word _hz_ai
.word _hz_yan
.word _hz_shan
.word _hz_da
.word _hz_xue
.word 0
.area text(rom, con, rel)
.dbfile D:\ele\AVR\ICC\LCD\lcd-M8\LCD_M8.c
.dbfunc e main _main fV
; k -> R20,R21
; i -> R22
; p1 -> y+2
.even
_main::
sbiw R28,16
.dbline -1
.dbline 49
.dbline 52
ldi R24,<L165
ldi R25,>L165
movw R30,R28
adiw R30,2
ldi R16,14
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
.dbline 53
ldi R16,100
ldi R17,0
xcall _delay
.dbline 54
xcall _init_devices
.dbline 56
xcall _initlcd
.dbline 58
ldi R16,1000
ldi R17,3
xcall _delay
xjmp L167
L166:
.dbline 61
.dbline 62
movw R2,R20
subi R20,255 ; offset = 1
sbci R21,255
std y+1,R3
std y+0,R2
clr R18
ldi R16,1
xcall _dis_5
.dbline 63
movw R24,R28
adiw R24,2
std y+1,R25
std y+0,R24
ldi R18,1
ldi R16,16
xcall _dis_hz_row
mov R22,R16
.dbline 64
ldi R24,<L169
ldi R25,>L169
std y+1,R25
std y+0,R24
ldi R18,3
ldi R16,1
xcall _disen_row
.dbline 65
ldi R24,<L170
ldi R25,>L170
std y+1,R25
std y+0,R24
ldi R18,5
ldi R16,8
xcall _dis_en_row
.dbline 68
L167:
.dbline 60
xjmp L166
X2:
.dbline -2
L164:
adiw R28,16
.dbline 0 ; func end
ret
.dbsym r k 20 i
.dbsym r i 22 c
.dbsym l p1 2 A[14:7]pkc
.dbend
.area bss(ram, con, rel)
.dbfile D:\ele\AVR\ICC\LCD\lcd-M8\LCD_M8.c
_LCD_Y::
.blkb 1
.dbfile D:\ele\AVR\ICC\LCD\lcd-M8/lcd.h
.dbsym e LCD_Y _LCD_Y c
_LCD_X::
.blkb 1
.dbsym e LCD_X _LCD_X c
.area data(ram, con, rel)
.dbfile D:\ele\AVR\ICC\LCD\lcd-M8/lcd.h
L170:
.blkb 39
.area idata
.byte 32,'a,'l,'l,32,'p,'e,'r,'i,'p,'h,'e,'r,'a,'l,'s
.byte 32,'a,'r,'e,32,'n,'o,'w,32,'i,'n,'i,'t,'i,'a,'l
.byte 'i,'z,'e,'d,46,46,0
.area data(ram, con, rel)
.dbfile D:\ele\AVR\ICC\LCD\lcd-M8/lcd.h
L169:
.blkb 16
.area idata
.byte 'I,32,'L,'o,'v,'e,32,'Y,'o,'u,32,64,62,45,43,0
.area data(ram, con, rel)
.dbfile D:\ele\AVR\ICC\LCD\lcd-M8/lcd.h
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?