📄 lcd.s
字号:
; SetPageCol(uPage+1,uCol);
ldd R18,y+1
ldd R16,y+2
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 313
; for(j=0;j<width;j++)
clr R12
xjmp L97
L94:
.dbline 314
; {
.dbline 315
; SetPageCol(uPage+1,uCol+j);
ldd R18,y+1
add R18,R12
ldd R16,y+2
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 317
;
; 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 318
; 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 319
; ch_r=ch_r>>4;
mov R24,R10
swap R24
andi R24,#0x0F
mov R10,R24
.dbline 320
; ch_w=ch_w<<4;
mov R24,R14
andi R24,#0x0F
swap R24
mov R14,R24
.dbline 321
; ch_w|=ch_r;
or R14,R10
.dbline 322
; SetPageCol(uPage+1,uCol+j);
ldd R18,y+1
add R18,R12
ldd R16,y+2
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 323
; if(uCol+j<64)
ldd R24,y+1
add R24,R12
cpi R24,64
brsh L100
.dbline 324
; write_LCD(LEFT,DATA,ch_w);
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L101
L100:
.dbline 326
; else
; write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L101:
.dbline 327
L95:
.dbline 313
inc R12
L97:
.dbline 313
cp R12,R22
brsh X5
xjmp L94
X5:
.dbline 328
; }
; }
L68:
.dbline 329
; }
L60:
.dbline 330
; SetPageCol(uPage,uCol+width);
ldd R18,y+1
add R18,R22
ldd R16,y+2
xcall _SetPageCol
.dbline -2
L53:
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 336
; }
;
;
; //---------------汉字显示函数------------------
; void disp_hz(unsigned char *hz)
; {
.dbline 338
; unsigned char k,j,uPage,uCol,ch_r,ch_w;
; uPage = GetPage();
xcall _GetPage
std y+1,R16
.dbline 339
; uCol = GetCol();
xcall _GetCol
mov R12,R16
.dbline 340
; for(k=0;k<sizeof(GB_16)/sizeof(GB_16[0]);k++)
clr R10
xjmp L106
L103:
.dbline 341
; {
.dbline 342
; 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 L107
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 L107
.dbline 343
; break;
xjmp L105
L107:
.dbline 344
L104:
.dbline 340
inc R10
L106:
.dbline 340
mov R24,R10
cpi R24,12
brlo L103
L105:
.dbline 346
; }
;
; if(CurOffset==1)
lds R24,_CurOffset
cpi R24,1
breq X6
xjmp L110
X6:
.dbline 347
; {
.dbline 348
; for(j=0;j<ASC_HZ_WIDTH;j++)
clr R20
xjmp L115
L112:
.dbline 349
; {
.dbline 350
; SetPageCol(uPage,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
xcall _SetPageCol
.dbline 351
; 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 352
; if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
mov R24,R12
add R24,R20
cpi R24,64
brsh L117
.dbline 352
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L118
L117:
.dbline 353
; else write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L118:
.dbline 354
L113:
.dbline 348
inc R20
L115:
.dbline 348
cpi R20,12
brlo L112
.dbline 355
; }
; SetPageCol(uPage+1,uCol);
mov R18,R12
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 357
;
; for(j=0;j<ASC_HZ_WIDTH;j++)
clr R20
xjmp L122
L119:
.dbline 358
; {
.dbline 359
; SetPageCol(uPage+1,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 360
; if(uCol+j<64)
mov R24,R12
add R24,R20
cpi R24,64
brsh L123
.dbline 361
; ch_r=read_LCD(LEFT);
clr R16
xcall _read_LCD
mov R22,R16
xjmp L124
L123:
.dbline 363
; else
; ch_r=read_LCD(RIGHT);
ldi R16,1
xcall _read_LCD
mov R22,R16
L124:
.dbline 364
; ch_r&=0xf0;
andi R22,240
.dbline 365
; 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 366
; ch_w|=ch_r;
or R14,R22
.dbline 367
; SetPageCol(uPage+1,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 368
; if(uCol+j<64)
mov R24,R12
add R24,R20
cpi R24,64
brsh L126
.dbline 369
; write_LCD(LEFT,DATA,ch_w);
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L127
L126:
.dbline 371
; else
; write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L127:
.dbline 372
L120:
.dbline 357
inc R20
L122:
.dbline 357
cpi R20,12
brsh X7
xjmp L119
X7:
.dbline 373
; }
; SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
mov R18,R12
subi R18,244 ; addi 12
ldd R16,y+1
xcall _SetPageCol
.dbline 374
; }
xjmp L111
L110:
.dbline 377
;
; else //汉字上半部是写半个字节
; {
.dbline 378
; for(j=0;j<ASC_HZ_WIDTH;j++)
clr R20
xjmp L131
L128:
.dbline 379
; {
.dbline 380
; SetPageCol(uPage,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
xcall _SetPageCol
.dbline 381
; if(uCol+j<64)
mov R24,R12
add R24,R20
cpi R24,64
brsh L132
.dbline 382
; ch_r=read_LCD(LEFT);
clr R16
xcall _read_LCD
mov R22,R16
xjmp L133
L132:
.dbline 383
; else ch_r=read_LCD(RIGHT);
ldi R16,1
xcall _read_LCD
mov R22,R16
L133:
.dbline 384
; ch_r&=0x0f;
andi R22,15
.dbline 385
; 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 386
; ch_w=ch_w<<4;
mov R24,R14
andi R24,#0x0F
swap R24
mov R14,R24
.dbline 387
; ch_w|=ch_r;
or R14,R22
.dbline 388
; SetPageCol(uPage,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
xcall _SetPageCol
.dbline 389
; if(uCol+j<64)
mov R24,R12
add R24,R20
cpi R24,64
brsh L135
.dbline 390
; write_LCD(LEFT,DATA,ch_w);
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L136
L135:
.dbline 392
; else
; write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L136:
.dbline 393
L129:
.dbline 378
inc R20
L131:
.dbline 378
cpi R20,12
brsh X8
xjmp L128
X8:
.dbline 394
; }
; SetPageCol(uPage+1,uCol);
mov R18,R12
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 395
; for(j=0;j<ASC_HZ_WIDTH;j++)
clr R20
xjmp L140
L137:
.dbline 396
; {
.dbline 397
; SetPageCol(uPage+1,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 399
;
; 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 400
; 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 401
; ch_r=ch_r>>4;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 402
; ch_w=ch_w<<4;
mov R24,R14
andi R24,#0x0F
swap R24
mov R14,R24
.dbline 403
; ch_w|=ch_r;
or R14,R22
.dbline 404
; SetPageCol(uPage+1,uCol+j);
mov R18,R12
add R18,R20
ldd R16,y+1
subi R16,255 ; addi 1
xcall _SetPageCol
.dbline 405
; if(uCol+j<64)
mov R24,R12
add R24,R20
cpi R24,64
brsh L143
.dbline 406
; write_LCD(LEFT,DATA,ch_w);
std y+0,R14
ldi R18,1
clr R16
xcall _write_LCD
xjmp L144
L143:
.dbline 408
; else
; write_LCD(RIGHT,DATA,ch_w);
std y+0,R14
ldi R18,1
ldi R16,1
xcall _write_LCD
L144:
.dbline 409
L138:
.dbline 395
inc R20
L140:
.dbline 395
cpi R20,12
brsh X9
xjmp L137
X9:
.dbline 410
mov R18,R12
subi R18,244 ; addi 12
ldd R16,y+1
xcall _SetPageCol
.dbline 411
L111:
.dbline -2
L102:
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 417
; }
; SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
; }
; }
;
;
; //-----------字符串显示函数----------------
; void disp_str(unsigned char *p)
; {
.dbline 418
; unsigned char i=0;
clr R20
xjmp L147
L146:
.dbline 420
; while(p[i]>0)
; {
.dbline 421
; if(p[i] < 128)
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R24,z+0
cpi R24,128
brsh L149
.dbline 422
; { /* ASCII */
.dbline 423
; disp_char(p[i]);
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R16,z+0
xcall _disp_char
.dbline 424
; }
xjmp L150
L149:
.dbline 426
; else
; { /* 中文 */
.dbline 427
; disp_hz(&p[i]);
mov R16,R20
clr R17
add R16,R22
adc R17,R23
xcall _disp_hz
.dbline 428
; i++;
inc R20
.dbline 429
; }
L150:
.dbline 430
inc R20
.dbline 431
L147:
.dbline 419
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R2,z+0
clr R3
cp R3,R2
brlo L146
.dbline -2
L145:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r p 22 pc
.dbend
.dbfunc e GUI_Point _GUI_Point fV
; y -> R22,R23
; ch -> R20,R21
; flag -> R10
; yy -> R14
; xx -> R12
.even
_GUI_Point::
xcall push_gset5
mov R14,R18
mov R12,R16
sbiw R28,1
ldd R10,y+11
.dbline -1
.dbline 438
; i++;
; }
; }
;
;
; //-------------------绘点函数----------------------------------
; //XX--(0-128) YY--(0-63) FLAG=1绘点 FLAG=0 清点
; void GUI_Point(unsigned char xx,unsigned char yy,unsigned char flag)
; {
.dbline 440
; unsigned int y,ch;
; ch=yy%8; //余数
ldi R18,8
ldi R19,0
mov R16,R14
clr R17
xcall mod16s
movw R20,R16
.dbline 442
;
; y=1;
ldi R22,1
ldi R23,0
.dbline 443
; for(;ch!=0;)
xjmp L155
L152:
.dbline 444
.dbline 445
ldi R16,2
ldi R17,0
movw R18,R22
xcall empy16s
movw R22,R16
.dbline 446
subi R20,1
sbci R21,0
.dbline 447
L153:
.dbline 443
L155:
.dbline 443
cpi R20,0
cpc R20,R21
brne L152
X10:
.dbline 448
; {
; y=y*2;
; ch--;
; }
; if(xx<64)
mov R24,R12
cpi R24,64
brsh L156
.dbline 449
; {
.dbline 450
; set_page_L(yy/8);
mov R16,R14
lsr R16
lsr R16
lsr R16
xcall _set_page_L
.dbline 451
; set_col_addr_L(xx);
mov R16,R12
xcall _set_col_addr_L
.dbline 452
; ch=read_LCD(LEFT);
clr R16
xcall _read_LCD
mov R20,R16
clr R21
.dbline 453
; set_col_addr_L(xx);
mov R16,R12
xcall _set_col_addr_L
.dbline 454
; if(flag)
tst R10
breq L158
.dbline 455
; write_LCD(LEFT,DATA,ch|y);
movw R2,R20
or R2,R22
or R3,R23
std y+0,R2
ldi R18,1
clr R16
xcall _write_LCD
xjmp L157
L158:
.dbline 457
; else
; write_LCD(LEFT,DATA,ch&(~y));
movw R2,R22
com R2
com R3
movw R4,R20
and R4,R2
and R5,R3
std y+0,R4
ldi R18,1
clr R16
xcall _write_LCD
.dbline 458
; }
xjmp L157
L156:
.dbline 460
; else
; {
.dbline 461
; set_page_R(yy/8);
mov R16,R14
lsr R16
lsr R16
lsr R16
xcall _set_page_R
.dbline 462
; set_col_addr_R(xx-64);
mov R16,R12
subi R16,64
xcall _set_col_addr_R
.dbline 463
; ch=read_LCD(RIGHT);
ldi R16,1
xcall _read_LCD
mov R20,R16
clr R21
.dbline 464
; set_col_addr_R(xx-64);
mov R16,R12
subi R16,64
xcall _set_col_addr_R
.dbline 465
; if(flag)
tst R10
breq L160
.dbline 466
; write_LCD(RIGHT,DATA,ch|y);
movw R2,R20
or R2,R22
or R3,R23
std y+0,R2
ldi R18,1
ldi R16,1
xcall _write_LCD
xjmp L161
L160:
.dbline 468
; else
; write_LCD(RIGHT,DATA,ch&(~y));
movw R2,R22
com R2
com R3
movw R4,R20
and R4,R2
and R5,R3
std y+0,R4
ldi R18,1
ldi R16,1
xcall _write_LCD
L161:
.dbline 469
L157:
.dbline -2
L151:
adiw R28,1
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r y 22 i
.dbsym r ch 20 i
.dbsym r flag 10 c
.dbsym r yy 14 c
.dbsym r xx 12 c
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\12864-ICC\lcd.c
_CurCol::
.blkb 1
.dbsym e CurCol _CurCol c
_CurPage::
.blkb 1
.dbsym e CurPage _CurPage c
_CurRow::
.blkb 1
.dbsym e CurRow _CurRow c
_CurOffset::
.blkb 1
.dbsym e CurOffset _CurOffset c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -