📄 display.s
字号:
.dbline 412
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L97:
.dbline 413
L90:
.dbline 401
inc R12
L92:
.dbline 401
cp R12,R22
brsh X4
xjmp L89
X4:
.dbline 414
; }
; SetPageCol(uPage+1,uCol);
ldd R18,y+1
ldd R16,y+2
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 415
; for(j=0;j<width;j++)
clr R12
xjmp L101
L98:
.dbline 416
; {
.dbline 417
; SetPageCol(uPage+1,uCol+j);
ldd R18,y+1
add R18,R12
ldd R16,y+2
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 419
;
; ch_r=ASC_16[k].Msk[j];
ldi R24,17
mul R24,R20
movw R2,R0
ldi R24,<_ASC_16+1
ldi R25,>_ASC_16+1
add R2,R24
adc R3,R25
mov R30,R12
clr R31
add R30,R2
adc R31,R3
lpm R10,Z
.dbline 420
; ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j];
ldi R24,17
mul R24,R20
movw R2,R0
ldi R24,<_ASC_16+1
ldi R25,>_ASC_16+1
add R2,R24
adc R3,R25
mov R30,R12
clr R31
adiw R30,8
add R30,R2
adc R31,R3
lpm R14,Z
.dbline 421
; ch_r=ch_r>>4;
mov R24,R10
swap R24
andi R24,#0x0F
mov R10,R24
.dbline 422
; ch_w=ch_w<<4;
mov R24,R14
andi R24,#0x0F
swap R24
mov R14,R24
.dbline 423
; ch_w|=ch_r;
or R14,R10
.dbline 424
; SetPageCol(uPage+1,uCol+j);
ldd R18,y+1
add R18,R12
ldd R16,y+2
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 425
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
ldd R24,y+1
add R24,R12
cpi R24,64
brsh L104
.dbline 425
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L105
L104:
.dbline 426
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L105:
.dbline 427
L99:
.dbline 415
inc R12
L101:
.dbline 415
cp R12,R22
brsh X5
xjmp L98
X5:
.dbline 428
; }
; }
L72:
.dbline 429
; }
L64:
.dbline 430
; SetPageCol(uPage,uCol+width);
ldd R18,y+1
add R18,R22
ldd R16,y+2
xcall _SetPageCol
.dbline -2
.dbline 431
; }
L57:
adiw R28,3
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r width 22 c
.dbsym r len 22 c
.dbsym l uPage 2 c
.dbsym r ch_r 10 c
.dbsym l uCol 1 c
.dbsym r ch_w 14 c
.dbsym r k 20 c
.dbsym r j 12 c
.dbsym r c 10 c
.dbend
.dbfunc e disp_hz _disp_hz fV
; uPage -> y+1
; ch_r -> R22
; k -> R10
; uCol -> R12
; ch_w -> R14
; j -> R20
; hz -> R20,R21
.even
_disp_hz::
xcall push_gset5
movw R20,R16
sbiw R28,2
.dbline -1
.dbline 435
;
;
; void disp_hz(unsigned char *hz)
; {
.dbline 437
; unsigned char k,j,uPage,uCol,ch_r,ch_w;
; uPage = GetPage();
xcall _GetPage
std y+1,R16
.dbline 438
; uCol = GetCol();
xcall _GetCol
mov R12,R16
.dbline 439
; for(k=0;k<sizeof(GB_16)/sizeof(GB_16[0]);k++)
clr R10
xjmp L110
L107:
.dbline 440
; {
.dbline 441
; if(hz[0] == GB_16[k].Index[0] && hz[1] == GB_16[k].Index[1])
ldi R24,26
mul R24,R10
movw R2,R0
ldi R24,<_GB_16
ldi R25,>_GB_16
movw R30,R2
add R30,R24
adc R31,R25
lpm R30,Z
movw R26,R20
ld R4,x
cp R4,R30
brne L111
ldi R24,<_GB_16+1
ldi R25,>_GB_16+1
movw R30,R2
add R30,R24
adc R31,R25
lpm R30,Z
adiw R26,1
ld R2,x
cp R2,R30
brne L111
.dbline 442
; break;
xjmp L109
L111:
.dbline 443
L108:
.dbline 439
inc R10
L110:
.dbline 439
mov R24,R10
cpi R24,18
brlo L107
L109:
.dbline 445
; }
;
; if(CurOffset==1)
lds R24,_CurOffset
cpi R24,1
breq X6
xjmp L114
X6:
.dbline 446
; {
.dbline 447
; for(j=0;j<ASC_HZ_WIDTH;j++)
clr R20
xjmp L119
L116:
.dbline 448
; {
.dbline 449
; SetPageCol(uPage,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
xcall _SetPageCol
.dbline 450
; ch_w=GB_16[k].Msk[j];
ldi R24,26
mul R24,R10
movw R2,R0
ldi R24,<_GB_16+2
ldi R25,>_GB_16+2
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
lpm R14,Z
.dbline 451
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
mov R24,R12
add R24,R20
cpi R24,64
brsh L121
.dbline 451
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L122
L121:
.dbline 452
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L122:
.dbline 453
L117:
.dbline 447
inc R20
L119:
.dbline 447
cpi R20,12
brlo L116
.dbline 454
; }
; SetPageCol(uPage+1,uCol);
mov R18,R12
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 456
;
; for(j=0;j<ASC_HZ_WIDTH;j++)
clr R20
xjmp L126
L123:
.dbline 457
; {
.dbline 458
; SetPageCol(uPage+1,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 459
; if(uCol+j<64) ch_r=read_LCD(LEFT);
mov R24,R12
add R24,R20
cpi R24,64
brsh L127
.dbline 459
clr R16
xcall _read_LCD
mov R22,R16
xjmp L128
L127:
.dbline 460
; else ch_r=read_LCD(RIGHT);
ldi R16,1
xcall _read_LCD
mov R22,R16
L128:
.dbline 461
; ch_r&=0xf0;
andi R22,240
.dbline 462
; ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j]&0x0f;
ldi R24,26
mul R24,R10
movw R2,R0
ldi R24,<_GB_16+2
ldi R25,>_GB_16+2
add R2,R24
adc R3,R25
mov R30,R20
clr R31
adiw R30,12
add R30,R2
adc R31,R3
lpm R30,Z
andi R30,15
mov R14,R30
.dbline 463
; ch_w|=ch_r;
or R14,R22
.dbline 464
; SetPageCol(uPage+1,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 465
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
mov R24,R12
add R24,R20
cpi R24,64
brsh L130
.dbline 465
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L131
L130:
.dbline 466
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L131:
.dbline 467
L124:
.dbline 456
inc R20
L126:
.dbline 456
cpi R20,12
brsh X7
xjmp L123
X7:
.dbline 468
; }
; SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
mov R18,R12
subi R18,244 ; addi 12
ldd R16,y+1
xcall _SetPageCol
.dbline 469
; }
xjmp L115
L114:
.dbline 472
;
; else //汉字上半部是写半个字节
; {
.dbline 473
; for(j=0;j<ASC_HZ_WIDTH;j++)
clr R20
xjmp L135
L132:
.dbline 474
; {
.dbline 475
; SetPageCol(uPage,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
xcall _SetPageCol
.dbline 476
; if(uCol+j<64) ch_r=read_LCD(LEFT);
mov R24,R12
add R24,R20
cpi R24,64
brsh L136
.dbline 476
clr R16
xcall _read_LCD
mov R22,R16
xjmp L137
L136:
.dbline 477
; else ch_r=read_LCD(RIGHT);
ldi R16,1
xcall _read_LCD
mov R22,R16
L137:
.dbline 478
; ch_r&=0x0f;
andi R22,15
.dbline 479
; ch_w=GB_16[k].Msk[j];
ldi R24,26
mul R24,R10
movw R2,R0
ldi R24,<_GB_16+2
ldi R25,>_GB_16+2
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
lpm R14,Z
.dbline 480
; ch_w=ch_w<<4;
mov R24,R14
andi R24,#0x0F
swap R24
mov R14,R24
.dbline 481
; ch_w|=ch_r;
or R14,R22
.dbline 482
; SetPageCol(uPage,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
xcall _SetPageCol
.dbline 483
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
mov R24,R12
add R24,R20
cpi R24,64
brsh L139
.dbline 483
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L140
L139:
.dbline 484
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L140:
.dbline 485
L133:
.dbline 473
inc R20
L135:
.dbline 473
cpi R20,12
brsh X8
xjmp L132
X8:
.dbline 486
; }
; SetPageCol(uPage+1,uCol);
mov R18,R12
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 487
; for(j=0;j<ASC_HZ_WIDTH;j++)
clr R20
xjmp L144
L141:
.dbline 488
; {
.dbline 489
; SetPageCol(uPage+1,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 491
;
; ch_r=GB_16[k].Msk[j];
ldi R24,26
mul R24,R10
movw R2,R0
ldi R24,<_GB_16+2
ldi R25,>_GB_16+2
add R2,R24
adc R3,R25
mov R30,R20
clr R31
add R30,R2
adc R31,R3
lpm R22,Z
.dbline 492
; ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j];
ldi R24,26
mul R24,R10
movw R2,R0
ldi R24,<_GB_16+2
ldi R25,>_GB_16+2
add R2,R24
adc R3,R25
mov R30,R20
clr R31
adiw R30,12
add R30,R2
adc R31,R3
lpm R14,Z
.dbline 493
; ch_r=ch_r>>4;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 494
; ch_w=ch_w<<4;
mov R24,R14
andi R24,#0x0F
swap R24
mov R14,R24
.dbline 495
; ch_w|=ch_r;
or R14,R22
.dbline 496
; SetPageCol(uPage+1,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 497
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
mov R24,R12
add R24,R20
cpi R24,64
brsh L147
.dbline 497
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L148
L147:
.dbline 498
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L148:
.dbline 499
L142:
.dbline 487
inc R20
L144:
.dbline 487
cpi R20,12
brsh X9
xjmp L141
X9:
.dbline 500
mov R18,R12
subi R18,244 ; addi 12
ldd R16,y+1
xcall _SetPageCol
.dbline 501
L115:
.dbline -2
.dbline 502
; }
; SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
; }
; }
L106:
adiw R28,2
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l uPage 1 c
.dbsym r ch_r 22 c
.dbsym r k 10 c
.dbsym r uCol 12 c
.dbsym r ch_w 14 c
.dbsym r j 20 c
.dbsym r hz 20 pc
.dbend
.dbfunc e disp_str _disp_str fV
; i -> R20
; p -> R22,R23
.even
_disp_str::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 505
;
; void disp_str(unsigned char *p)
; {
.dbline 506
; unsigned char i=0;
clr R20
xjmp L151
L150:
.dbline 508
; while(p[i]>0)
; {
.dbline 509
; if(p[i] < 128)
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R24,z+0
cpi R24,128
brsh L153
.dbline 510
; { /* ASCII */
.dbline 511
; disp_ch(p[i]);
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R16,z+0
xcall _disp_ch
.dbline 512
; }
xjmp L154
L153:
.dbline 514
; else
; { /* 中文 */
.dbline 515
; disp_hz(&p[i]);
mov R16,R20
clr R17
add R16,R22
adc R17,R23
xcall _disp_hz
.dbline 516
; i++;
inc R20
.dbline 517
; }
L154:
.dbline 518
inc R20
.dbline 519
L151:
.dbline 507
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R2,z+0
clr R3
cp R3,R2
brlo L150
.dbline -2
.dbline 520
; i++;
; }
; }
L149:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r p 22 pc
.dbend
.dbfunc e pixel _pixel fV
; ch -> R22,R23
; y -> R20,R21
; flag -> R10
; yy -> R14
; xx -> R12
.even
_pixel::
xcall push_gset5
mov R14,R18
mov R12,R16
sbiw R28,1
ldd R10,y+11
.dbline -1
.dbline 527
;
; /*************************************/
; /* 绘点函数 */
; /*************************************/
; /* XX--(0-128) YY--(0-63) FLAG=1绘点 FLAG=0 清点 */
; void pixel(unsigned char xx,unsigned char yy,unsigned char flag)
; {
.dbline 529
; unsigned int y,ch;
; ch=yy%8; //余数
ldi R18,8
ldi R19,0
mov R16,R14
clr R17
xcall mod16s
movw R22,R16
.dbline 531
;
; y=1;
ldi R20,1
ldi R21,0
.dbline 532
; for(;ch!=0;)
xjmp L159
L156:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -