📄 gui12864.s
字号:
std y+8,R24
.dbline 199
; draw_x2++;
ldd R24,y+4
ldd R25,y+5
adiw R24,1
std y+5,R25
std y+4,R24
.dbline 200
; draw_x3--;
ldd R24,y+10
ldd R25,y+11
sbiw R24,1
std y+11,R25
std y+10,R24
.dbline 201
; draw_y4++;
ldd R24,y+6
ldd R25,y+7
adiw R24,1
std y+7,R25
std y+6,R24
.dbline 202
; draw_y5++;
movw R24,R10
adiw R24,1
movw R10,R24
.dbline 203
; draw_y6--;
ldd R24,y+12
ldd R25,y+13
sbiw R24,1
std y+13,R25
std y+12,R24
.dbline 204
; draw_y7--;
movw R24,R12
sbiw R24,1
movw R12,R24
.dbline 207
;
; /* 要判断当前点是否在有效范围内 */
; LcdDisplayDot(draw_x0, draw_y0, color);
ldd R2,y+42
clr R3
std y+1,R3
std y+0,R2
ldd R18,y+14
ldd R19,y+15
ldd R16,y+2
ldd R17,y+3
xcall _LcdDisplayDot
.dbline 208
; LcdDisplayDot(draw_x1, draw_y1, color);
ldd R2,y+42
clr R3
std y+1,R3
std y+0,R2
ldd R18,y+22
ldd R19,y+23
ldd R16,y+8
ldd R17,y+9
xcall _LcdDisplayDot
.dbline 209
; LcdDisplayDot(draw_x2, draw_y2, color);
ldd R2,y+42
clr R3
std y+1,R3
std y+0,R2
ldd R18,y+16
ldd R19,y+17
ldd R16,y+4
ldd R17,y+5
xcall _LcdDisplayDot
.dbline 210
; LcdDisplayDot(draw_x3, draw_y3, color);
ldd R2,y+42
clr R3
std y+1,R3
std y+0,R2
ldd R18,y+24
ldd R19,y+25
ldd R16,y+10
ldd R17,y+11
xcall _LcdDisplayDot
.dbline 211
; LcdDisplayDot(draw_x4, draw_y4, color);
ldd R2,y+42
clr R3
std y+1,R3
std y+0,R2
ldd R18,y+6
ldd R19,y+7
ldd R16,y+18
ldd R17,y+19
xcall _LcdDisplayDot
.dbline 212
; LcdDisplayDot(draw_x5, draw_y5, color);
ldd R2,y+42
clr R3
std y+1,R3
std y+0,R2
movw R18,R10
ldd R16,y+20
ldd R17,y+21
xcall _LcdDisplayDot
.dbline 213
; LcdDisplayDot(draw_x6, draw_y6, color);
ldd R2,y+42
clr R3
std y+1,R3
std y+0,R2
ldd R18,y+12
ldd R19,y+13
ldd R16,y+26
ldd R17,y+27
xcall _LcdDisplayDot
.dbline 214
; LcdDisplayDot(draw_x7, draw_y7, color);
ldd R2,y+42
clr R3
std y+1,R3
std y+0,R2
movw R18,R12
ldd R16,y+28
ldd R17,y+29
xcall _LcdDisplayDot
.dbline 215
; }
L40:
.dbline 175
cp R20,R22
cpc R21,R23
brge X18
xjmp L39
X18:
X17:
.dbline -2
L34:
.dbline 0 ; func end
adiw R28,30
xjmp pop_xgsetF0FC
.dbsym l draw_x7 28 I
.dbsym l draw_x6 26 I
.dbsym l draw_y3 24 I
.dbsym l draw_y1 22 I
.dbsym l draw_x5 20 I
.dbsym l draw_x4 18 I
.dbsym l draw_y2 16 I
.dbsym l draw_y0 14 I
.dbsym r di 14 I
.dbsym r yy 22 I
.dbsym r draw_y7 12 I
.dbsym l draw_y6 12 I
.dbsym l draw_x3 10 I
.dbsym l draw_x1 8 I
.dbsym r draw_y5 10 I
.dbsym l draw_y4 6 I
.dbsym l draw_x2 4 I
.dbsym l draw_x0 2 I
.dbsym r xx 20 I
.dbsym l color 42 c
.dbsym r r 22 c
.dbsym r y0 10 c
.dbsym r x0 12 c
.dbend
.dbfunc e GuiDrawSquare _GuiDrawSquare fV
; color -> R20
; y1 -> R14
; x1 -> R10
; y0 -> R12
; x0 -> R22
.even
_GuiDrawSquare::
xcall push_xgsetF0FC
mov R12,R18
mov R22,R16
sbiw R28,5
ldd R10,y+15
ldd R14,y+17
ldd R20,y+19
.dbline -1
.dbline 230
; }
;
; /*****************************************
; * FUNCTION NAME: GuiDrawSquare
; * DESCRIPTION: Draw Square
; * (x0,y0)----------------------------
; * | |
; * | |
; * | |
; * | |
; * | |
; * -----------------------------(x1,y1)
; /*****************************************/
; void GuiDrawSquare(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char color)
; {
.dbline 231
; GuiDrawLine(x0, y0, x0, y1, color);
std y+4,R20
std y+2,R14
std y+0,R22
mov R18,R12
mov R16,R22
xcall _GuiDrawLine
.dbline 232
; GuiDrawLine(x0, y0, x1, y0, color);
std y+4,R20
std y+2,R12
std y+0,R10
mov R18,R12
mov R16,R22
xcall _GuiDrawLine
.dbline 233
; GuiDrawLine(x0, y1, x1, y1, color);
std y+4,R20
std y+2,R14
std y+0,R10
mov R18,R14
mov R16,R22
xcall _GuiDrawLine
.dbline 234
; GuiDrawLine(x1, y0, x1, y1, color);
std y+4,R20
std y+2,R14
std y+0,R10
mov R18,R12
mov R16,R10
xcall _GuiDrawLine
.dbline -2
L44:
.dbline 0 ; func end
adiw R28,5
xjmp pop_xgsetF0FC
.dbsym r color 20 c
.dbsym r y1 14 c
.dbsym r x1 10 c
.dbsym r y0 12 c
.dbsym r x0 22 c
.dbend
.dbfunc e GuiDisCharF3 _GuiDisCharF3 fV
; offset -> R10
; temp -> R20
; color -> y+12
; data -> R12
; y -> R14
; x -> R10
.even
_GuiDisCharF3::
xcall push_xgset30FC
mov R14,R18
mov R10,R16
sbiw R28,2
ldd R12,y+10
.dbline -1
.dbline 248
; }
;
; /*****************************************
; * FUNCTION NAME: GuiDisCharF3
; * DESCRIPTION: Display ASCII Char
; * ---------------------------->
; * | x(0-20)
; * |
; * | y(0-7)
; * |
; * |
; /*****************************************/
; void GuiDisCharF3(unsigned char x,unsigned char y,unsigned char data,unsigned char color)
; {
.dbline 250
; unsigned char temp,offset;
; offset = x * 6; /* Display Place */
ldi R24,6
mul R24,R10
mov R10,R0
.dbline 251
; for(temp=0; temp<6; temp++)
clr R20
xjmp L49
L46:
.dbline 252
; {
.dbline 253
; if(color == 0)
ldd R0,y+12
tst R0
brne L50
X19:
.dbline 254
; LcdDisplaySeg(y,offset+temp,~font6x8[data-32][temp]);
ldi R24,6
mul R24,R12
movw R2,R0
ldi R24,<_font6x8-192
ldi R25,>_font6x8-192
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
elpm R2,Z
clr R3
com R2
com R3
std y+1,R3
std y+0,R2
mov R2,R20
clr R3
mov R18,R10
clr R19
add R18,R2
adc R19,R3
mov R16,R14
clr R17
xcall _LcdDisplaySeg
xjmp L51
L50:
.dbline 256
; else
; LcdDisplaySeg(y,offset+temp,font6x8[data-32][temp]);
ldi R24,6
mul R24,R12
movw R2,R0
ldi R24,<_font6x8-192
ldi R25,>_font6x8-192
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
elpm R2,Z
clr R3
std y+1,R3
std y+0,R2
mov R2,R20
clr R3
mov R18,R10
clr R19
add R18,R2
adc R19,R3
mov R16,R14
clr R17
xcall _LcdDisplaySeg
L51:
.dbline 257
; }
L47:
.dbline 251
inc R20
L49:
.dbline 251
cpi R20,6
brsh X21
xjmp L46
X21:
X20:
.dbline -2
L45:
.dbline 0 ; func end
adiw R28,2
xjmp pop_xgset30FC
.dbsym r offset 10 c
.dbsym r temp 20 c
.dbsym l color 12 c
.dbsym r data 12 c
.dbsym r y 14 c
.dbsym r x 10 c
.dbend
.dbfunc e GuiDisStringF3 _GuiDisStringF3 fV
; color -> y+11
; p -> R10,R11
; y0 -> R12
; x0 -> R20
.even
_GuiDisStringF3::
xcall push_xgset303C
mov R12,R18
mov R20,R16
sbiw R28,3
ldd R10,y+9
ldd R11,y+10
.dbline -1
.dbline 273
; }
;
; /*****************************************
; * FUNCTION NAME: GuiDisStringF3
; * DESCRIPTION: Display ASCII String
; * (x0,y0) display start place
; * Auto Change Line...
; * ---------------------------->
; * | x(0-20)
; * |
; * | y(0-7)
; * |
; * |
; /*****************************************/
; void GuiDisStringF3(unsigned char x0,unsigned char y0,unsigned char *p,unsigned char color)
; {
xjmp L56
L55:
.dbline 275
; while(*p != 0x00)
; {
.dbline 276
; if(x0 == 21)
cpi R20,21
brne L58
X22:
.dbline 277
; {
.dbline 278
; x0 = 0;
clr R20
.dbline 279
; y0 = y0+1;
inc R12
.dbline 280
; }
L58:
.dbline 281
; GuiDisCharF3(x0,y0,*(p++),color);
ldd R0,y+11
std y+2,R0
movw R30,R10
ld R2,Z+
movw R10,R30
std y+0,R2
mov R18,R12
mov R16,R20
xcall _GuiDisCharF3
.dbline 282
; x0++;
inc R20
.dbline 283
; }
L56:
.dbline 274
movw R30,R10
ldd R2,z+0
tst R2
brne L55
X23:
.dbline -2
L54:
.dbline 0 ; func end
adiw R28,3
xjmp pop_xgset303C
.dbsym l color 11 c
.dbsym r p 10 pc
.dbsym r y0 12 c
.dbsym r x0 20 c
.dbend
.dbfunc e GuiDisLogo _GuiDisLogo fV
; y -> R10
; count -> R20,R21
; x -> R22
; color -> R12
.even
_GuiDisLogo::
xcall push_xgsetF03C
mov R12,R16
sbiw R28,2
.dbline -1
.dbline 292
; }
;
; /*****************************************
; * FUNCTION NAME: GuiDisLogo
; * DESCRIPTION: Display One Full Screen
; * Picture 128X64...
; /*****************************************/
; void GuiDisLogo(unsigned char color)
; {
.dbline 293
; unsigned char x=0,y=0;
clr R22
.dbline 293
clr R10
.dbline 294
; unsigned int count=0;
clr R20
clr R21
.dbline 295
; for(count=0;count<128*8;count++)
xjmp L64
L61:
.dbline 296
; {
.dbline 297
; if(x ==128)
cpi R22,128
brne L65
X24:
.dbline 298
; {
.dbline 299
; x = 0;
clr R22
.dbline 300
; y = y +1;
inc R10
.dbline 301
; }
L65:
.dbline 302
; if(color == 0)
tst R12
brne L67
X25:
.dbline 303
; LcdDisplaySeg(y,x,~startlogo[count]);
ldi R24,<_startlogo
ldi R25,>_startlogo
movw R30,R20
add R30,R24
adc R31,R25
elpm R2,Z
clr R3
com R2
com R3
std y+1,R3
std y+0,R2
mov R18,R22
clr R19
mov R16,R10
clr R17
xcall _LcdDisplaySeg
xjmp L68
L67:
.dbline 305
; else
; LcdDisplaySeg(y,x,startlogo[count]);
ldi R24,<_startlogo
ldi R25,>_startlogo
movw R30,R20
add R30,R24
adc R31,R25
elpm R2,Z
clr R3
std y+1,R3
std y+0,R2
mov R18,R22
clr R19
mov R16,R10
clr R17
xcall _LcdDisplaySeg
L68:
.dbline 306
; x++;
inc R22
.dbline 307
; }
L62:
.dbline 295
subi R20,255 ; offset = 1
sbci R21,255
L64:
.dbline 295
cpi R20,0
ldi R30,4
cpc R21,R30
brlo L61
X26:
.dbline -2
L60:
.dbline 0 ; func end
adiw R28,2
xjmp pop_xgsetF03C
.dbsym r y 10 c
.dbsym r count 20 i
.dbsym r x 22 c
.dbsym r color 12 c
.dbend
.dbfunc e GuiDisRoolStringF3 _GuiDisRoolStringF3 fV
; temp3 -> <dead>
; a -> <dead>
; n -> <dead>
; totallength -> R14,R15
; dislength -> y+4
; i -> R10,R11
; textlength -> y+2
; temp2 -> R22,R23
; step -> R20,R21
; temp1 -> R12,R13
; color -> <dead>
; p -> y+22
; y -> y+20
; x1 -> y+18
; x0 -> y+16
.even
_GuiDisRoolStringF3::
xcall push_arg4
xcall push_xgsetF0FC
sbiw R28,6
.dbline -1
.dbline 321
; }
;
; /****************************************************
; * FUNCTION NAME: GuiDisRoolStringF3
; * DESCRIPTION: Display One Line With Left Rolling
; * ---------------------------->
; * | x(0-127)
; * |
; * | y(0-7)
; * |
; * |
; /****************************************************/
; void GuiDisRoolStringF3(unsigned char x0,unsigned char x1,unsigned char y,unsigned char *p,unsigned char color)
; {
.dbline 322
; unsigned int dislength = x1 - x0 + 1; /* 显示区域的宽度 */
ldd R2,y+16
clr R3
ldd R24,y+18
clr R25
sub R24,R2
sbc R25,R3
adiw R24,1
std y+5,R25
std y+4,R24
.dbline 323
; unsigned int textlength=0; /* 要显示内容的总段数 */
clr R0
clr R1
std y+3,R1
std y+2,R0
.dbline 325
; unsigned int totallength; /* 要移动的总长度 */
; unsigned int step=0; /* 移动长度计数 */
clr R20
clr R21
xjmp L71
L70:
.dbline 331
; unsigned char n; /* 字库字偏移地址 */
; unsigned char a; /* 字库段偏移地址 */
; unsigned int temp1,temp2,temp3;
; unsigned int i;
; while(*(p+textlength) != 0x00) /* 计算显示内容的总段数 */
; {
.dbline 332
; textlength++;
ldd R24,y+2
ldd R25,y+3
adiw R24,1
std y+3,R25
std y+2,R24
.dbline 333
; }
L71:
.dbline 330
ldd R30,y+2
ldd R31,y+3
ldd R0,y+22
ldd R1,y+23
add R30,R0
adc R31,R1
ldd R2,z+0
tst R2
brne L70
X27:
.dbline 334
; textlength = textlength*6;
ldi R16,6
ldi R17,0
ldd R18,y+2
ldd R19,y+3
xcall empy16s
std y+3,R17
std y+2,R16
.dbline 335
; totallength = dislength + textlength; /* 计算总移显示内容的长度 */
ldd R14,y+4
ldd R15,y+5
movw R0,R16
add R14,R16
adc R15,R17
.dbline 336
; for(i=0; i<totallength; i++)
clr R10
clr R11
xjmp L76
L73:
.dbline 337
; {
.dbline 338
; step++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 339
; if(step <= dislength)
ldd R0,y+4
ldd R1,y+5
cp R0,R20
cpc R1,R21
brsh X36
xjmp L77
X36:
X28:
.dbline 340
; {
.dbline 341
; for(temp1=0; temp1<step; temp1++)
clr R12
clr R13
xjmp L82
L79:
.dbline 342
; {
.dbline 343
; if((temp1 +1) > textlength)
movw R24,R12
adiw R24,1
ldd R0,y+2
ldd R1,y+3
cp R0,R24
cpc R1,R25
brsh L83
X29:
.dbline 344
; {
.dbline 345
; LcdDisplaySeg(y,x1+1-step+temp1,0x00);
clr R2
clr R3
std y+1,R3
std y+0,R2
ldd R18,y+18
clr R19
subi R18,255 ; offset = 1
sbci R19,255
sub R18,R20
sbc R19,R21
add R18,R12
adc R19,R13
ldd R16,y+20
clr R17
xcall _LcdDisplaySeg
.dbline 346
; }
xjmp L84
L83:
.dbline 348
; else
; {
.dbline 349
; LcdDisplaySeg(y,x1+1-step+temp1,font6x8[*(p + temp1 / 6) - 32][temp1 % 6]);
ldi R18,6
ldi R19,0
movw R16,R12
xcall div16u
movw R30,R16
ldd R0,y+22
ldd R1,y+23
add R30,R0
adc R31,R1
ldd R2,z+0
ldi R24,6
mul R24,R2
movw R2,R0
ldi R24,<_font6x8-192
ldi R25,>_font6x8-192
add R2,R24
adc R3,R25
ldi R18,6
ldi R19,0
movw R16,R12
xcall mod16u
movw R30,R16
add R30,R2
adc R31,R3
elpm R2,Z
clr R3
std y+1,R3
std y+0,R2
ldd R18,y+18
clr R19
subi R18,255 ; offset = 1
sbci R19,255
sub R18,R20
sbc R19,R21
add R18,R12
adc R19,R13
ldd R16,y+20
clr R17
xcall _LcdDisplaySeg
.dbline 350
; Delay10ms(10);
ldi R16,10
ldi R17,0
xcall _Delay10ms
.dbline 351
; }
L84:
.dbline 352
; }
L80:
.dbline 341
movw R24,R12
adiw R24,1
movw R12,R24
L82:
.dbline 341
cp R12,R20
cpc R13,R21
brsh X37
xjmp L79
X37:
X30:
.dbline 353
; }
xjmp L78
L77:
.dbline 354
; else if(step > textlength)
ldd R0,y+2
ldd R1,y+3
cp R0,R20
cpc R1,R21
brlo X38
xjmp L86
X38:
X31:
.dbline 355
; {
.dbline 356
; temp2 = 0;
clr R22
clr R23
.dbline 357
; for(temp1= step - dislength; temp1<step; temp1++)
movw R12,R20
ldd R0,y+4
ldd R1,y+5
sub R12,R0
sbc R13,R1
xjmp L91
L88:
.dbline 358
; {
.dbline 359
; if((temp1 +1) > textlength)
movw R24,R12
adiw R24,1
ldd R0,y+2
ldd R1,y+3
cp R0,R24
cpc R1,R25
brsh L92
X32:
.dbline 360
; {
.dbline 361
; LcdDisplaySeg(y,x0 + temp2,0x00);
clr R2
clr R3
std y+1,R3
std y+0,R2
ldd R18,y+16
clr R19
add R18,R22
adc R19,R23
ldd R16,y+20
clr R17
xcall _LcdDisplaySeg
.dbline 362
; }
xjmp L93
L92:
.dbline 364
; else
; {
.dbline 365
; LcdDisplaySeg(y,x0 + temp2,font6x8[*(p + temp1 / 6) - 32][temp1 % 6]);
ldi R18,6
ldi R19,0
movw R16,R12
xcall div16u
movw R30,R16
ldd R0,y+22
ldd R1,y+23
add R30,R0
adc R31,R1
ldd R2,z+0
ldi R24,6
mul R24,R2
movw R2,R0
ldi R24,<_font6x8-192
ldi R25,>_font6x8-192
add R2,R24
adc R3,R25
ldi R18,6
ldi R19,0
movw R16,R12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -