📄 ks0108.s
字号:
; ch_w=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 R14,Z
.dbline 423
; ch_w=ch_w<<4;
mov R24,R14
andi R24,#0x0F
swap R24
mov R14,R24
.dbline 424
; ch_w|=ch_r;
or R14,R10
.dbline 425
; SetPageCol(uPage,uCol+j);
ldd R18,y+1
add R18,R12
ldd R16,y+2
xcall _SetPageCol
.dbline 426
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
ldd R24,y+1
add R24,R12
cpi R24,64
brsh L96
.dbline 426
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L97
L96:
.dbline 427
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L97:
.dbline 428
L90:
.dbline 416
inc R12
L92:
.dbline 416
cp R12,R22
brsh X4
xjmp L89
X4:
.dbline 429
; }
; SetPageCol(uPage+1,uCol);
ldd R18,y+1
ldd R16,y+2
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 430
; for(j=0;j<width;j++)
clr R12
xjmp L101
L98:
.dbline 431
; {
.dbline 432
; SetPageCol(uPage+1,uCol+j);
ldd R18,y+1
add R18,R12
ldd R16,y+2
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 434
;
; 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 435
; 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 436
; ch_r=ch_r>>4;
mov R24,R10
swap R24
andi R24,#0x0F
mov R10,R24
.dbline 437
; ch_w=ch_w<<4;
mov R24,R14
andi R24,#0x0F
swap R24
mov R14,R24
.dbline 438
; ch_w|=ch_r;
or R14,R10
.dbline 439
; SetPageCol(uPage+1,uCol+j);
ldd R18,y+1
add R18,R12
ldd R16,y+2
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 440
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
ldd R24,y+1
add R24,R12
cpi R24,64
brsh L104
.dbline 440
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L105
L104:
.dbline 441
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L105:
.dbline 442
L99:
.dbline 430
inc R12
L101:
.dbline 430
cp R12,R22
brsh X5
xjmp L98
X5:
.dbline 443
; }
; }
L72:
.dbline 444
; }
L64:
.dbline 445
; SetPageCol(uPage,uCol+width);
ldd R18,y+1
add R18,R22
ldd R16,y+2
xcall _SetPageCol
.dbline -2
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 450
; }
;
;
; void disp_hz(unsigned char *hz)
; {
.dbline 452
; unsigned char k,j,uPage,uCol,ch_r,ch_w;
; uPage = GetPage();
xcall _GetPage
std y+1,R16
.dbline 453
; uCol = GetCol();
xcall _GetCol
mov R12,R16
.dbline 454
; for(k=0;k<sizeof(GB_16)/sizeof(GB_16[0]);k++)
clr R10
xjmp L110
L107:
.dbline 455
; {
.dbline 456
; 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 457
; break;
xjmp L109
L111:
.dbline 458
L108:
.dbline 454
inc R10
L110:
.dbline 454
mov R24,R10
cpi R24,18
brlo L107
L109:
.dbline 460
; }
;
; if(CurOffset==1)
lds R24,_CurOffset
cpi R24,1
breq X6
xjmp L114
X6:
.dbline 461
; {
.dbline 462
; for(j=0;j<ASC_HZ_WIDTH;j++)
clr R20
xjmp L119
L116:
.dbline 463
; {
.dbline 464
; SetPageCol(uPage,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
xcall _SetPageCol
.dbline 465
; 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 466
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
mov R24,R12
add R24,R20
cpi R24,64
brsh L121
.dbline 466
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L122
L121:
.dbline 467
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L122:
.dbline 468
L117:
.dbline 462
inc R20
L119:
.dbline 462
cpi R20,12
brlo L116
.dbline 469
; }
; SetPageCol(uPage+1,uCol);
mov R18,R12
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 471
;
; for(j=0;j<ASC_HZ_WIDTH;j++)
clr R20
xjmp L126
L123:
.dbline 472
; {
.dbline 473
; SetPageCol(uPage+1,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 474
; if(uCol+j<64) ch_r=read_LCD(LEFT);
mov R24,R12
add R24,R20
cpi R24,64
brsh L127
.dbline 474
clr R16
xcall _read_LCD
mov R22,R16
xjmp L128
L127:
.dbline 475
; else ch_r=read_LCD(RIGHT);
ldi R16,1
xcall _read_LCD
mov R22,R16
L128:
.dbline 476
; ch_r&=0xf0;
andi R22,240
.dbline 477
; 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 478
; ch_w|=ch_r;
or R14,R22
.dbline 479
; SetPageCol(uPage+1,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 480
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
mov R24,R12
add R24,R20
cpi R24,64
brsh L130
.dbline 480
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L131
L130:
.dbline 481
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L131:
.dbline 482
L124:
.dbline 471
inc R20
L126:
.dbline 471
cpi R20,12
brsh X7
xjmp L123
X7:
.dbline 483
; }
; SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
mov R18,R12
subi R18,244 ; addi 12
ldd R16,y+1
xcall _SetPageCol
.dbline 484
; }
xjmp L115
L114:
.dbline 487
;
; else //汉字上半部是写半个字节
; {
.dbline 488
; for(j=0;j<ASC_HZ_WIDTH;j++)
clr R20
xjmp L135
L132:
.dbline 489
; {
.dbline 490
; SetPageCol(uPage,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
xcall _SetPageCol
.dbline 491
; if(uCol+j<64) ch_r=read_LCD(LEFT);
mov R24,R12
add R24,R20
cpi R24,64
brsh L136
.dbline 491
clr R16
xcall _read_LCD
mov R22,R16
xjmp L137
L136:
.dbline 492
; else ch_r=read_LCD(RIGHT);
ldi R16,1
xcall _read_LCD
mov R22,R16
L137:
.dbline 493
; ch_r&=0x0f;
andi R22,15
.dbline 494
; 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 495
; ch_w=ch_w<<4;
mov R24,R14
andi R24,#0x0F
swap R24
mov R14,R24
.dbline 496
; ch_w|=ch_r;
or R14,R22
.dbline 497
; SetPageCol(uPage,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
xcall _SetPageCol
.dbline 498
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
mov R24,R12
add R24,R20
cpi R24,64
brsh L139
.dbline 498
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L140
L139:
.dbline 499
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L140:
.dbline 500
L133:
.dbline 488
inc R20
L135:
.dbline 488
cpi R20,12
brsh X8
xjmp L132
X8:
.dbline 501
; }
; SetPageCol(uPage+1,uCol);
mov R18,R12
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 502
; for(j=0;j<ASC_HZ_WIDTH;j++)
clr R20
xjmp L144
L141:
.dbline 503
; {
.dbline 504
; SetPageCol(uPage+1,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 506
;
; 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 507
; 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 508
; ch_r=ch_r>>4;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 509
; ch_w=ch_w<<4;
mov R24,R14
andi R24,#0x0F
swap R24
mov R14,R24
.dbline 510
; ch_w|=ch_r;
or R14,R22
.dbline 511
; SetPageCol(uPage+1,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 512
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
mov R24,R12
add R24,R20
cpi R24,64
brsh L147
.dbline 512
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L148
L147:
.dbline 513
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L148:
.dbline 514
L142:
.dbline 502
inc R20
L144:
.dbline 502
cpi R20,12
brsh X9
xjmp L141
X9:
.dbline 515
mov R18,R12
subi R18,244 ; addi 12
ldd R16,y+1
xcall _SetPageCol
.dbline 516
L115:
.dbline -2
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 520
; }
; SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
; }
; }
;
; void disp_str(unsigned char *p)
; {
.dbline 521
; unsigned char i=0;
clr R20
xjmp L151
L150:
.dbline 523
; while(p[i]>0)
; {
.dbline 524
; 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 525
; { /* ASCII */
.dbline 526
; disp_ch(p[i]);
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R16,z+0
xcall _disp_ch
.dbline 527
; }
xjmp L154
L153:
.dbline 529
; else
; { /* 中文 */
.dbline 530
; disp_hz(&p[i]);
mov R16,R20
clr R17
add R16,R22
adc R17,R23
xcall _disp_hz
.dbline 531
; i++;
inc R20
.dbline 532
; }
L154:
.dbline 533
inc R20
.dbline 534
L151:
.dbline 522
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R2,z+0
clr R3
cp R3,R2
brlo L150
.dbline -2
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -