📄 1335.s
字号:
; lcd_pixel(x + xc, y - yc, show);
std y+0,R10
ldd R18,y+13
ldd R19,y+14
sub R18,R22
sbc R19,R23
ldd R16,y+11
ldd R17,y+12
add R16,R20
adc R17,R21
xcall _lcd_pixel
.dbline 329
; lcd_pixel(x - xc, y + yc, show);
std y+0,R10
ldd R18,y+13
ldd R19,y+14
add R18,R22
adc R19,R23
ldd R16,y+11
ldd R17,y+12
sub R16,R20
sbc R17,R21
xcall _lcd_pixel
.dbline 330
; lcd_pixel(x - xc, y - yc, show);
std y+0,R10
ldd R18,y+13
ldd R19,y+14
sub R18,R22
sbc R19,R23
ldd R16,y+11
ldd R17,y+12
sub R16,R20
sbc R17,R21
xcall _lcd_pixel
.dbline 331
; lcd_pixel(x + yc, y + xc, show);
std y+0,R10
ldd R18,y+13
ldd R19,y+14
add R18,R20
adc R19,R21
ldd R16,y+11
ldd R17,y+12
add R16,R22
adc R17,R23
xcall _lcd_pixel
.dbline 332
; lcd_pixel(x + yc, y - xc, show);
std y+0,R10
ldd R18,y+13
ldd R19,y+14
sub R18,R20
sbc R19,R21
ldd R16,y+11
ldd R17,y+12
add R16,R22
adc R17,R23
xcall _lcd_pixel
.dbline 333
; lcd_pixel(x - yc, y + xc, show);
std y+0,R10
ldd R18,y+13
ldd R19,y+14
add R18,R20
adc R19,R21
ldd R16,y+11
ldd R17,y+12
sub R16,R22
sbc R17,R23
xcall _lcd_pixel
.dbline 334
; lcd_pixel(x - yc, y - xc, show);
std y+0,R10
ldd R18,y+13
ldd R19,y+14
sub R18,R20
sbc R19,R21
ldd R16,y+11
ldd R17,y+12
sub R16,R22
sbc R17,R23
xcall _lcd_pixel
.dbline 335
; if (p < 0)
movw R24,R12
cpi R24,0
ldi R30,0
cpc R25,R30
brge L63
X12:
.dbline 336
; p += (xc++ << 2) + 6;
movw R2,R20
subi R20,255 ; offset = 1
sbci R21,255
movw R24,R2
lsl R24
rol R25
lsl R24
rol R25
adiw R24,6
add R12,R24
adc R13,R25
xjmp L64
L63:
.dbline 338
; else
; p += ((xc++ - yc--)<<2) + 10;
movw R2,R20
subi R20,255 ; offset = 1
sbci R21,255
movw R14,R22
subi R22,1
sbci R23,0
movw R24,R2
sub R24,R14
sbc R25,R15
lsl R24
rol R25
lsl R24
rol R25
adiw R24,10
add R12,R24
adc R13,R25
L64:
.dbline 339
; }
L61:
.dbline 325
cp R22,R20
cpc R23,R21
brlt X14
xjmp L60
X14:
X13:
.dbline -2
L59:
.dbline 0 ; func end
adiw R28,1
xcall pop_xgsetF0FC
adiw R28,4
ret
.dbsym r p 12 I
.dbsym r yc 22 I
.dbsym r xc 20 I
.dbsym r show 10 c
.dbsym r radius 12 I
.dbsym l y 13 I
.dbsym l x 11 I
.dbend
.dbfunc e lcd_line _lcd_line fV
; stepy -> R12,R13
; stepx -> R14,R15
; dx -> R22,R23
; dy -> R20,R21
; fraction -> R10,R11
; show -> y+19
; y2 -> y+17
; x2 -> y+15
; y1 -> y+13
; x1 -> y+11
.even
_lcd_line::
xcall push_arg4
xcall push_xgsetF0FC
sbiw R28,1
.dbline -1
.dbline 348
; }
;
;
; /***********************************************************************
; Draws a line from x1,y1 go x2,y2. Line can be drawn in any direction.
; Set show to 1 to draw pixel, set to 0 to hide pixel.
; ***********************************************************************/
; void lcd_line(int x1, int y1, int x2, int y2, unsigned char show)
; {
.dbline 349
; int dy = y2 - y1;
ldd R20,y+17
ldd R21,y+18
ldd R0,y+13
ldd R1,y+14
sub R20,R0
sbc R21,R1
.dbline 350
; int dx = x2 - x1;
ldd R22,y+15
ldd R23,y+16
ldd R0,y+11
ldd R1,y+12
sub R22,R0
sbc R23,R1
.dbline 352
; int stepx, stepy, fraction;
; if (dy < 0)
cpi R20,0
ldi R30,0
cpc R21,R30
brge L66
X15:
.dbline 353
; {
.dbline 354
; dy = -dy;
com R20
com R21
subi R20,0xFF
sbci R21,0xFF
.dbline 355
; stepy = -1;
ldi R24,-1
ldi R25,-1
movw R12,R24
.dbline 356
; }
xjmp L67
L66:
.dbline 358
; else
; {
.dbline 359
; stepy = 1;
ldi R24,1
ldi R25,0
movw R12,R24
.dbline 360
; }
L67:
.dbline 361
; if (dx < 0)
cpi R22,0
ldi R30,0
cpc R23,R30
brge L68
X16:
.dbline 362
; {
.dbline 363
; dx = -dx;
com R22
com R23
subi R22,0xFF
sbci R23,0xFF
.dbline 364
; stepx = -1;
ldi R24,-1
ldi R25,-1
movw R14,R24
.dbline 365
; }
xjmp L69
L68:
.dbline 367
; else
; {
.dbline 368
; stepx = 1;
ldi R24,1
ldi R25,0
movw R14,R24
.dbline 369
; }
L69:
.dbline 370
; dy <<= 1;
lsl R20
rol R21
.dbline 371
; dx <<= 1;
lsl R22
rol R23
.dbline 372
; lcd_pixel(x1,y1,show);
ldd R0,y+19
std y+0,R0
ldd R18,y+13
ldd R19,y+14
ldd R16,y+11
ldd R17,y+12
xcall _lcd_pixel
.dbline 373
; if (dx > dy)
cp R20,R22
cpc R21,R23
brge L70
X17:
.dbline 374
; {
.dbline 375
; fraction = dy - (dx >> 1);
movw R2,R22
asr R3
ror R2
movw R10,R20
sub R10,R2
sbc R11,R3
xjmp L73
L72:
.dbline 377
; while (x1 != x2)
; {
.dbline 378
; if (fraction >= 0)
movw R24,R10
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L75
X18:
.dbline 379
; {
.dbline 380
; y1 += stepy;
ldd R0,y+13
ldd R1,y+14
add R0,R12
adc R1,R13
std y+14,R1
std y+13,R0
.dbline 381
; fraction -= dx;
sub R10,R22
sbc R11,R23
.dbline 382
; }
L75:
.dbline 383
; x1 += stepx;
ldd R0,y+11
ldd R1,y+12
add R0,R14
adc R1,R15
std y+12,R1
std y+11,R0
.dbline 384
; fraction += dy;
add R10,R20
adc R11,R21
.dbline 385
; lcd_pixel(x1,y1,show);
ldd R0,y+19
std y+0,R0
ldd R18,y+13
ldd R19,y+14
ldd R16,y+11
ldd R17,y+12
xcall _lcd_pixel
.dbline 386
; }
L73:
.dbline 376
ldd R0,y+11
ldd R1,y+12
ldd R16,y+15
ldd R17,y+16
cp R0,R16
cpc R1,R17
brne L72
X19:
.dbline 387
; }
xjmp L71
L70:
.dbline 389
; else
; {
.dbline 390
; fraction = dx - (dy >> 1);
movw R2,R20
asr R3
ror R2
movw R10,R22
sub R10,R2
sbc R11,R3
xjmp L78
L77:
.dbline 392
; while (y1 != y2)
; {
.dbline 393
; if (fraction >= 0)
movw R24,R10
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L80
X20:
.dbline 394
; {
.dbline 395
; x1 += stepx;
ldd R0,y+11
ldd R1,y+12
add R0,R14
adc R1,R15
std y+12,R1
std y+11,R0
.dbline 396
; fraction -= dy;
sub R10,R20
sbc R11,R21
.dbline 397
; }
L80:
.dbline 398
; y1 += stepy;
ldd R0,y+13
ldd R1,y+14
add R0,R12
adc R1,R13
std y+14,R1
std y+13,R0
.dbline 399
; fraction += dx;
add R10,R22
adc R11,R23
.dbline 400
; lcd_pixel(x1,y1,show);
ldd R0,y+19
std y+0,R0
ldd R18,y+13
ldd R19,y+14
ldd R16,y+11
ldd R17,y+12
xcall _lcd_pixel
.dbline 401
; }
L78:
.dbline 391
ldd R0,y+13
ldd R1,y+14
ldd R16,y+17
ldd R17,y+18
cp R0,R16
cpc R1,R17
brne L77
X21:
.dbline 402
; }
L71:
.dbline -2
L65:
.dbline 0 ; func end
adiw R28,1
xcall pop_xgsetF0FC
adiw R28,4
ret
.dbsym r stepy 12 I
.dbsym r stepx 14 I
.dbsym r dx 22 I
.dbsym r dy 20 I
.dbsym r fraction 10 I
.dbsym l show 19 c
.dbsym l y2 17 I
.dbsym l x2 15 I
.dbsym l y1 13 I
.dbsym l x1 11 I
.dbend
.dbfunc e lcd_chinesechar _lcd_chinesechar fV
; Address -> R20,R21
; high -> R20
; low -> R22
; k -> R10
; i -> R12
; lcd_fanxian -> y+16
; length -> R14
; width -> y+12
; code1 -> y+10
; y -> R20,R21
; x -> R22,R23
.even
_lcd_chinesechar::
xcall push_xgsetF0FC
movw R20,R18
movw R22,R16
ldd R14,y+14
.dbline -1
.dbline 437
; }
;
; /***********************************************************************
; Happy end :-)
; ***********************************************************************/
;
;
; /*
; *******************************************************************************
; *
; *函数名称:void lcd_chinesechar(int x, int y,unsigned char *code1 ,
; unsigned char width,unsigned char length,unsigned char lcd_fanxian)
; *
; *功能: 在指定位置显示一个width*length的汉字
; *
; *变量说明:
; *
; *
; *
; *
; *
; *
; *作者:段胜柱
; *
; *时间:
; ***************************************************************************
; */
;
;
;
;
;
; void lcd_chinesechar(int x, int y,unsigned char const *code1 ,
; unsigned char width,unsigned char length,unsigned char lcd_fanxian)
; {
.dbline 442
; unsigned char i,k;
; int Address;
;
; unsigned char low,high;
; x--;
subi R22,1
sbci R23,0
.dbline 443
; y--;
subi R20,1
sbci R21,0
.dbline 444
; Address = (y * (LCD_X_SIZE/8)) + (x / 8);
ldi R18,8
ldi R19,0
movw R16,R22
xcall div16s
movw R2,R16
ldi R16,40
ldi R17,0
movw R18,R20
xcall empy16s
movw R20,R16
add R20,R2
adc R21,R3
.dbline 445
; low = (unsigned char) (Address & 0x00ff);
mov R22,R20
andi R23,0
.dbline 446
; high = (unsigned char) (((Address & 0xff00) >> 8));
andi R20,0
mov R20,R21
clr R21
.dbline 447
; lcd_write_command(0x4f);
ldi R16,79
xcall _lcd_write_command
.dbline 449
;
; for(k=0;k<width;k++)
clr R10
xjmp L86
L83:
.dbline 450
; {
.dbline 452
;
; lcd_write_command(0x46);
ldi R16,70
xcall _lcd_write_command
.dbline 453
; lcd_write_data(low + k*length);
mul R10,R14
mov R16,R22
add R16,R0
xcall _lcd_write_data
.dbline 454
; lcd_write_data(high);
mov R16,R20
xcall _lcd_write_data
.dbline 455
; lcd_write_command(0x42);
ldi R16,66
xcall _lcd_write_command
.dbline 457
;
; for(i=0;i<length;i++)
clr R12
xjmp L90
L87:
.dbline 458
; {
.dbline 459
; if(lcd_fanxian == 1)
ldd R24,y+16
cpi R24,1
brne L91
X22:
.dbline 460
; {
.dbline 461
; lcd_write_data(~code1[i * width + k]);lcd_delay(20000);
ldd R0,y+12
mul R12,R0
movw R30,R0
mov R2,R10
clr R3
add R30,R2
adc R31,R3
ldd R0,y+10
ldd R1,y+11
add R30,R0
adc R31,R1
elpm R16,Z
com R16
xcall _lcd_write_data
.dbline 461
ldi R16,20000
ldi R17,78
xcall _lcd_delay
.dbline 462
; }
xjmp L92
L91:
.dbline 464
; else
; {
.dbline 466
;
; lcd_write_data(code1[i * width + k]);
ldd R0,y+12
mul R12,R0
movw R30,R0
mov R2,R10
clr R3
add R30,R2
adc R31,R3
ldd R0,y+10
ldd R1,y+11
add R30,R0
adc R31,R1
elpm R16,Z
xcall _lcd_write_data
.dbline 467
; lcd_delay(2000);
ldi R16,2000
ldi R17,7
xcall _lcd_delay
.dbline 468
; }
L92:
.dbline 469
; }
L88:
.dbline 457
inc R12
L90:
.dbline 457
cp R12,R14
brlo L87
X23:
.dbline 470
; }
L84:
.dbline 449
inc R10
L86:
.dbline 449
ldd R0,y+12
cp R10,R0
brsh X25
xjmp L83
X25:
X24:
.dbline -2
L82:
.dbline 0 ; func end
xjmp pop_xgsetF0FC
.dbsym r Address 20 I
.dbsym r high 20 c
.dbsym r low 22 c
.dbsym r k 10 c
.dbsym r i 12 c
.dbsym l lcd_fanxian 16 c
.dbsym r length 14 c
.dbsym l width 12 c
.dbsym l code1 10 pkc
.dbsym r y 20 I
.dbsym r x 22 I
.dbend
.area lit(rom, con, rel)
L58:
.word 0x0,0x4334
L57:
.word 0xf5c3,0x4048
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -