📄 3510i.s
字号:
.dbline 559
; {
.dbline 560
; if(get_bit((*c)[row+12],line))
ldi R16,1
mov R17,R12
xcall lsl8
mov R30,R10
clr R31
movw R26,R28
subi R26,58 ; addi 198
sbci R27,255
ld R0,x+
ld R1,x
add R30,R0
adc R31,R1
adiw R30,12
lpm R30,Z
and R30,R16
breq L139
.dbline 561
; temp[row][line+8]=LCD_PenColor;
ldi R24,16
mul R24,R10
movw R2,R0
movw R24,R28
add R2,R24
adc R3,R25
mov R30,R12
clr R31
adiw R30,8
add R30,R2
adc R31,R3
lds R2,_LCD_PenColor
std z+0,R2
xjmp L140
L139:
.dbline 563
; else
; temp[row][line+8]=LCD_BGColor;
ldi R24,16
mul R24,R10
movw R2,R0
movw R24,R28
add R2,R24
adc R3,R25
mov R30,R12
clr R31
adiw R30,8
add R30,R2
adc R31,R3
lds R2,_LCD_BGColor
std z+0,R2
L140:
.dbline 564
L136:
.dbline 558
inc R12
L138:
.dbline 558
mov R24,R12
cpi R24,8
brsh X4
xjmp L135
X4:
.dbline 565
L132:
.dbline 556
inc R10
L134:
.dbline 556
mov R24,R10
cpi R24,12
brsh X5
xjmp L131
X5:
.dbline 566
; }
; }
; LCD_SendCommand(0x2a); //column address set
ldi R16,42
xcall _LCD_SendCommand
.dbline 567
; LCD_SendData(x);
movw R30,R28
subi R30,56 ; addi 200
sbci R31,255
ldd R16,z+0
xcall _LCD_SendData
.dbline 568
; LCD_SendData(x+11);
movw R30,R28
subi R30,56 ; addi 200
sbci R31,255
ldd R16,z+0
subi R16,245 ; addi 11
xcall _LCD_SendData
.dbline 569
; LCD_DataOver();
sbi 0x18,4
.dbline 571
;
; LCD_SendCommand(0x2b); //page address set
ldi R16,43
xcall _LCD_SendCommand
.dbline 572
; LCD_SendData(y);
mov R16,R14
xcall _LCD_SendData
.dbline 573
; LCD_SendData(y+15);
mov R16,R14
subi R16,241 ; addi 15
xcall _LCD_SendData
.dbline 574
; LCD_DataOver();
sbi 0x18,4
.dbline 576
;
; LCD_SendCommand(0x2c);
ldi R16,44
xcall _LCD_SendCommand
.dbline 577
; for(row=0;row<16;row++)
clr R10
xjmp L144
L141:
.dbline 578
; for(line=0;line<12;line++)
clr R12
xjmp L148
L145:
.dbline 579
ldi R24,16
mul R24,R12
movw R2,R0
movw R24,R28
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
ldd R16,z+0
xcall _LCD_SendData
L146:
.dbline 578
inc R12
L148:
.dbline 578
mov R24,R12
cpi R24,12
brlo L145
L142:
.dbline 577
inc R10
L144:
.dbline 577
mov R24,R10
cpi R24,16
brlo L141
.dbline 580
; LCD_SendData(temp[line][row]);
; LCD_DataOver();
sbi 0x18,4
.dbline -2
L120:
adiw R28,63
adiw R28,63
adiw R28,63
adiw R28,3 ; offset = 192
xcall pop_gset5x
adiw R28,4
.dbline 0 ; func end
ret
.dbsym l temp 0 A[192:12:16]c
.dbsym r row 10 c
.dbsym r line 12 c
.dbsym r y 14 c
.dbsym l x 200 c
.dbsym l c 198 pA[24:24]kc
.dbend
.dbfunc e LCD_WriteChineseString _LCD_WriteChineseString fV
; i -> R10
; y -> R12
; x -> R14
; num -> y+7
; c -> R2,R3
.even
_LCD_WriteChineseString::
st -y,r19
st -y,r18
xcall push_gset5x
movw R2,R16
sbiw R28,1
ldd R14,y+9
ldd R12,y+11
.dbline -1
.dbline 583
; }
; void LCD_WriteChineseString(const uchar (*c)[24], uchar num, uchar x, uchar y)
; {
.dbline 585
; uchar i;
; for(i=0;i<num;i++)
clr R10
xjmp L153
L150:
.dbline 586
; {
.dbline 587
; LCD_WriteChineseChar(c, x, y);
std y+0,R12
mov R18,R14
movw R16,R2
push R16
push R17
xcall _LCD_WriteChineseChar
pop R3
pop R2
.dbline 588
; c++;
movw R24,R2
adiw R24,24
movw R2,R24
.dbline 589
; x+=12;
mov R24,R14
subi R24,244 ; addi 12
mov R14,R24
.dbline 590
; if(x>=96)
cpi R24,96
brlo L154
.dbline 591
; {
.dbline 592
; x=0;
clr R14
.dbline 593
; y+=13;//行与行之间空一搁
mov R24,R12
subi R24,243 ; addi 13
mov R12,R24
.dbline 594
; if(y>=62)
cpi R24,62
brlo L156
.dbline 595
; y=0;
clr R12
L156:
.dbline 596
; }
L154:
.dbline 597
L151:
.dbline 585
inc R10
L153:
.dbline 585
ldd R0,y+7
cp R10,R0
brlo L150
.dbline -2
L149:
adiw R28,1
xcall pop_gset5x
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r i 10 c
.dbsym r y 12 c
.dbsym r x 14 c
.dbsym l num 7 c
.dbsym r c 2 pA[24:24]kc
.dbend
.dbfunc e LCD_EraseBlock _LCD_EraseBlock fV
; y -> R10
; x -> R14
; y2 -> R12
; x2 -> y+10
; y1 -> R14
; x1 -> y+6
.even
_LCD_EraseBlock::
xcall push_arg4
xcall push_gset5x
mov R14,R18
ldd R12,y+12
.dbline -1
.dbline 600
; }
; }
; void LCD_EraseBlock(uchar x1,uchar y1, uchar x2, uchar y2)
; {
.dbline 602
; uchar x, y;
; LCD_SendCommand(0x2a); //column address set
ldi R16,42
xcall _LCD_SendCommand
.dbline 603
; LCD_SendData(x1);
ldd R16,y+6
xcall _LCD_SendData
.dbline 604
; LCD_SendData(x2);
ldd R16,y+10
xcall _LCD_SendData
.dbline 605
; LCD_DataOver();
sbi 0x18,4
.dbline 607
;
; LCD_SendCommand(0x2b); //page address set
ldi R16,43
xcall _LCD_SendCommand
.dbline 608
; LCD_SendData(y1);
mov R16,R14
xcall _LCD_SendData
.dbline 609
; LCD_SendData(y2);
mov R16,R12
xcall _LCD_SendData
.dbline 610
; LCD_DataOver();
sbi 0x18,4
.dbline 612
;
; LCD_SendCommand(0x2c); //memory write
ldi R16,44
xcall _LCD_SendCommand
.dbline 613
; for(y = y1; y <= y2; y ++)
mov R10,R14
xjmp L162
L159:
.dbline 614
; for(x = x1; x <= x2; x ++)
ldd R14,y+6
xjmp L166
L163:
.dbline 615
lds R16,_LCD_BGColor
xcall _LCD_SendData
L164:
.dbline 614
inc R14
L166:
.dbline 614
ldd R0,y+10
cp R0,R14
brsh L163
L160:
.dbline 613
inc R10
L162:
.dbline 613
cp R12,R10
brsh L159
.dbline 616
; LCD_SendData(LCD_BGColor);
; LCD_DataOver();
sbi 0x18,4
.dbline -2
L158:
xcall pop_gset5x
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r y 10 c
.dbsym r x 14 c
.dbsym r y2 12 c
.dbsym l x2 10 c
.dbsym r y1 14 c
.dbsym l x1 6 c
.dbend
.dbfunc e LCD_DrawPoint _LCD_DrawPoint fV
; y -> R10
; x -> R12
.even
_LCD_DrawPoint::
xcall push_gset4x
mov R10,R18
mov R12,R16
.dbline -1
.dbline 619
; }
; void LCD_DrawPoint(uchar x, uchar y)
; {
.dbline 620
; LCD_SendCommand(0x2a); //column address set
ldi R16,42
xcall _LCD_SendCommand
.dbline 621
; LCD_SendData(x);
mov R16,R12
xcall _LCD_SendData
.dbline 622
; LCD_SendData(x);
mov R16,R12
xcall _LCD_SendData
.dbline 623
; LCD_DataOver();
sbi 0x18,4
.dbline 625
;
; LCD_SendCommand(0x2b); //page address set
ldi R16,43
xcall _LCD_SendCommand
.dbline 626
; LCD_SendData(y);
mov R16,R10
xcall _LCD_SendData
.dbline 627
; LCD_SendData(y);
mov R16,R10
xcall _LCD_SendData
.dbline 628
; LCD_DataOver();
sbi 0x18,4
.dbline 630
;
; LCD_SendCommand(0x2c); //memory write
ldi R16,44
xcall _LCD_SendCommand
.dbline 631
; LCD_SendData(LCD_PenColor);
lds R16,_LCD_PenColor
xcall _LCD_SendData
.dbline 632
; LCD_DataOver();
sbi 0x18,4
.dbline -2
L167:
xcall pop_gset4x
.dbline 0 ; func end
ret
.dbsym r y 10 c
.dbsym r x 12 c
.dbend
.dbfunc e LCD_DrawLine _LCD_DrawLine fV
; t -> R10
; y -> R12
; x -> R14
; y2 -> y+12
; x2 -> y+10
; y1 -> y+8
; x1 -> y+6
.even
_LCD_DrawLine::
xcall push_arg4
xcall push_gset5x
.dbline -1
.dbline 636
; }
;
; void LCD_DrawLine(uchar x1, uchar y1, uchar x2, uchar y2)
; {
.dbline 638
; uchar x, y, t;
; if((x1 == x2) && (y1 == y2))
ldd R0,y+6
ldd R16,y+10
cp R0,R16
brne L169
ldd R0,y+8
ldd R16,y+12
cp R0,R16
brne L169
.dbline 639
; LCD_DrawPoint(x1, y1);
mov R18,R0
ldd R16,y+6
xcall _LCD_DrawPoint
xjmp L170
L169:
.dbline 640
; else if(fabs(y2 - y1) > fabs(x2 - x1))
ldd R2,y+8
clr R3
ldd R16,y+12
clr R17
sub R16,R2
sbc R17,R3
xcall int2fp
xcall _fabs
movw R2,R16
movw R4,R18
ldd R6,y+6
clr R7
ldd R16,y+10
clr R17
sub R16,R6
sbc R17,R7
xcall int2fp
push R2
push R3
push R4
push R5
xcall _fabs
pop R5
pop R4
pop R3
pop R2
st -y,R19
st -y,R18
st -y,R17
st -y,R16
st -y,R5
st -y,R4
st -y,R3
st -y,R2
xcall cmp32f
brge L171
.dbline 641
; {
.dbline 642
; if(y1 > y2)
ldd R0,y+12
ldd R16,y+8
cp R0,R16
brsh L173
.dbline 643
; {
.dbline 644
; t = y1;
mov R10,R16
.dbline 645
; y1 = y2;
std y+8,R0
.dbline 646
; y2 = t;
std y+12,R10
.dbline 647
; t = x1;
ldd R10,y+6
.dbline 648
; x1 = x2;
ldd R0,y+10
std y+6,R0
.dbline 649
; x2 = t;
std y+10,R10
.dbline 650
; }
L173:
.dbline 651
; for(y = y1; y <= y2; y ++)
ldd R12,y+8
xjmp L178
L175:
.dbline 652
.dbline 653
ldd R2,y+10
ldd R0,y+6
sub R2,R0
mov R3,R12
ldd R0,y+8
sub R3,R0
mul R3,R2
mov R16,R0
ldd R17,y+12
ldd R0,y+8
sub R17,R0
xcall div8u
mov R14,R16
ldd R0,y+6
add R14,R0
.dbline 654
mov R18,R12
mov R16,R14
xcall _LCD_DrawPoint
.dbline 655
L176:
.dbline 651
inc R12
L178:
.dbline 651
ldd R0,y+12
cp R0,R12
brsh L175
.dbline 656
; {
; x = (y - y1) * (x2 - x1) / (y2 - y1) + x1;
; LCD_DrawPoint(x, y);
; }
; }
xjmp L172
L171:
.dbline 658
; else
; {
.dbline 659
; if(x1 > x2)
ldd R0,y+10
ldd R16,y+6
cp R0,R16
brsh L179
.dbline 660
; {
.dbline 661
; t = y1;
ldd R10,y+8
.dbline 662
; y1 = y2;
ldd R0,y+12
std y+8,R0
.dbline 663
; y2 = t;
std y+12,R10
.dbline 664
; t = x1;
ldd R10,y+6
.dbline 665
; x1 = x2;
ldd R0,y+10
std y+6,R0
.dbline 666
; x2 = t;
std y+10,R10
.dbline 667
; }
L179:
.dbline 668
; for(x = x1; x <= x2; x ++)
ldd R14,y+6
xjmp L184
L181:
.dbline 669
.dbline 670
ldd R2,y+12
ldd R0,y+8
sub R2,R0
mov R3,R14
ldd R0,y+6
sub R3,R0
mul R3,R2
mov R16,R0
ldd R17,y+10
ldd R0,y+6
sub R17,R0
xcall div8u
mov R12,R16
ldd R0,y+8
add R12,R0
.dbline 671
mov R18,R12
mov R16,R14
xcall _LCD_DrawPoint
.dbline 672
L182:
.dbline 668
inc R14
L184:
.dbline 668
ldd R0,y+10
cp R0,R14
brsh L181
.dbline 673
; {
; y = (x - x1) * (y2 - y1) / (x2 - x1) + y1;
; LCD_DrawPoint(x, y);
; }
; }
L172:
L170:
.dbline -2
L168:
xcall pop_gset5x
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r t 10 c
.dbsym r y 12 c
.dbsym r x 14 c
.dbsym l y2 12 c
.dbsym l x2 10 c
.dbsym l y1 8 c
.dbsym l x1 6 c
.dbend
.dbfunc e LCD_DrawRectangle _LCD_DrawRectangle fV
; y2 -> R12
; x2 -> y+9
; y1 -> R14
; x1 -> R10
.even
_LCD_DrawRectangle::
xcall push_gset5x
mov R14,R18
mov R10,R16
sbiw R28,3
ldd R12,y+11
.dbline -1
.dbline 677
; }
;
; void LCD_DrawRectangle(uchar x1, uchar y1, uchar x2, uchar y2)
; {
.dbline 678
; LCD_DrawLine(x1, y1, x2, y1);
std y+2,R14
ldd R0,y+9
std y+0,R0
mov R18,R14
mov R16,R10
xcall _LCD_DrawLine
.dbline 679
; LCD_DrawLine(x2, y1, x2, y2);
std y+2,R12
ldd R0,y+9
std y+0,R0
mov R18,R14
mov R16,R0
xcall _LCD_DrawLine
.dbline 680
; LCD_DrawLine(x2, y2, x1, y2);
std y+2,R12
std y+0,R10
mov R18,R12
ldd R16,y+9
xcall _LCD_DrawLine
.dbline 681
; LCD_DrawLine(x1, y2, x1, y1);
std y+2,R14
std y+0,R10
mov R18,R12
mov R16,R10
xcall _LCD_DrawLine
.dbline -2
L185:
adiw R28,3
xcall pop_gset5x
.dbline 0 ; func end
ret
.dbsym r y2 12 c
.dbsym l x2 9 c
.dbsym r y1 14 c
.dbsym r x1 10 c
.dbend
.area bss(ram, con, rel)
.dbfile D:\StudyRoom\学习AVR\3510测试ICC版\3510i.c
_LCD_PenColor::
.blkb 1
.dbsym e LCD_PenColor _LCD_PenColor c
_LCD_BGColor::
.blkb 1
.dbsym e LCD_BGColor _LCD_BGColor c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -