📄 lcd.lis
字号:
02FE L45:
02FE L46:
02FE .dbline 236
02FE ; }
02FE ; SetPageCol(page,ucol);
02FE 262F mov R18,R22
0300 042F mov R16,R20
0302 B0DF xcall _SetPageCol
0304 .dbline -2
0304 L44:
0304 0E940000 xcall pop_gset2
0308 .dbline 0 ; func end
0308 0895 ret
030A .dbsym r page 20 c
030A .dbsym r ucol 22 c
030A .dbsym r urow 20 c
030A .dbend
030A .dbfunc e disp_char _disp_char fV
030A ; width -> R22
030A ; len -> R22
030A ; uPage -> y+2
030A ; ch_r -> R10
030A ; uCol -> y+1
030A ; ch_w -> R14
030A ; k -> R20
030A ; j -> R12
030A ; c -> R10
.even
030A _disp_char::
030A 0E940000 xcall push_gset5
030E A02E mov R10,R16
0310 2397 sbiw R28,3
0312 .dbline -1
0312 .dbline 242
0312 ; }
0312 ;
0312 ;
0312 ; //----------------字符显示函数------------------
0312 ; void disp_char(unsigned char c)
0312 ; {
0312 .dbline 246
0312 ; unsigned char k,j,uPage,uCol,ch_r,ch_w;
0312 ; unsigned char width;
0312 ; unsigned char len;
0312 ; uPage = GetPage();
0312 A2DF xcall _GetPage
0314 0A83 std y+2,R16
0316 .dbline 247
0316 ; uCol = GetCol();
0316 A3DF xcall _GetCol
0318 0983 std y+1,R16
031A .dbline 248
031A ; len=sizeof(ASC_16)/sizeof(ASC_16[0]);
031A 6EE1 ldi R22,30
031C .dbline 249
031C ; for(k=0;k<len;k++)
031C 4427 clr R20
031E 0CC0 xjmp L57
0320 L54:
0320 .dbline 250
0320 ; {
0320 .dbline 251
0320 ; if(c == ASC_16[k].Index[0] )
0320 81E1 ldi R24,17
0322 849F mul R24,R20
0324 F001 movw R30,R0
0326 80E0 ldi R24,<_ASC_16
0328 90E0 ldi R25,>_ASC_16
032A E80F add R30,R24
032C F91F adc R31,R25
032E E491 lpm R30,Z
0330 AE16 cp R10,R30
0332 09F4 brne L58
0334 .dbline 252
0334 ; break;
0334 03C0 xjmp L56
0336 L58:
0336 .dbline 253
0336 L55:
0336 .dbline 249
0336 4395 inc R20
0338 L57:
0338 .dbline 249
0338 4617 cp R20,R22
033A 90F3 brlo L54
033C L56:
033C .dbline 254
033C ; }
033C ; if(k<len)
033C 4617 cp R20,R22
033E 08F0 brlo X1
0340 F1C0 xjmp L60
0342 X1:
0342 .dbline 255
0342 ; {
0342 .dbline 256
0342 ; if(c=='-'||c==':')
0342 8A2D mov R24,R10
0344 8D32 cpi R24,45
0346 11F0 breq L64
0348 8A33 cpi R24,58
034A 11F4 brne L62
034C L64:
034C .dbline 257
034C ; width=ASC_CHR_WIDTH-2;
034C 66E0 ldi R22,6
034E 06C0 xjmp L63
0350 L62:
0350 .dbline 258
0350 ; else if(c=='|')
0350 8A2D mov R24,R10
0352 8C37 cpi R24,124
0354 11F4 brne L65
0356 .dbline 259
0356 ; width=ASC_HZ_WIDTH-ASC_CHR_WIDTH;
0356 64E0 ldi R22,4
0358 01C0 xjmp L66
035A L65:
035A .dbline 261
035A ; else
035A ; width=ASC_CHR_WIDTH;
035A 68E0 ldi R22,8
035C L66:
035C L63:
035C .dbline 263
035C ;
035C ; if(CurOffset==1) //下半部是写半个字节
035C 80910300 lds R24,_CurOffset
0360 8130 cpi R24,1
0362 09F0 breq X2
0364 62C0 xjmp L67
0366 X2:
0366 .dbline 264
0366 ; {
0366 .dbline 265
0366 ; for(j=0;j<width;j++)
0366 CC24 clr R12
0368 1EC0 xjmp L72
036A L69:
036A .dbline 266
036A ; {
036A .dbline 267
036A ; SetPageCol(uPage,uCol+j);
036A 2981 ldd R18,y+1
036C 2C0D add R18,R12
036E 0A81 ldd R16,y+2
0370 79DF xcall _SetPageCol
0372 .dbline 268
0372 ; ch_w=ASC_16[k].Msk[j];
0372 81E1 ldi R24,17
0374 849F mul R24,R20
0376 1001 movw R2,R0
0378 80E0 ldi R24,<_ASC_16+1
037A 90E0 ldi R25,>_ASC_16+1
037C 280E add R2,R24
037E 391E adc R3,R25
0380 EC2D mov R30,R12
0382 FF27 clr R31
0384 E20D add R30,R2
0386 F31D adc R31,R3
0388 E490 lpm R14,Z
038A .dbline 269
038A ; if(uCol+j<64)
038A 8981 ldd R24,y+1
038C 8C0D add R24,R12
038E 8034 cpi R24,64
0390 28F4 brsh L74
0392 .dbline 270
0392 ; write_LCD(LEFT,DATA,ch_w);
0392 E882 std y+0,R14
0394 21E0 ldi R18,1
0396 0027 clr R16
0398 84DE xcall _write_LCD
039A 04C0 xjmp L75
039C L74:
039C .dbline 272
039C ; else
039C ; write_LCD(RIGHT,DATA,ch_w);
039C E882 std y+0,R14
039E 21E0 ldi R18,1
03A0 01E0 ldi R16,1
03A2 7FDE xcall _write_LCD
03A4 L75:
03A4 .dbline 273
03A4 L70:
03A4 .dbline 265
03A4 C394 inc R12
03A6 L72:
03A6 .dbline 265
03A6 C616 cp R12,R22
03A8 00F3 brlo L69
03AA .dbline 274
03AA ; }
03AA ; SetPageCol(uPage+1,uCol);
03AA 2981 ldd R18,y+1
03AC 0A81 ldd R16,y+2
03AE 0F5F subi R16,255 ; addi 1
03B0 59DF xcall _SetPageCol
03B2 .dbline 276
03B2 ;
03B2 ; for(j=0;j<width;j++)
03B2 CC24 clr R12
03B4 36C0 xjmp L79
03B6 L76:
03B6 .dbline 277
03B6 ; {
03B6 .dbline 278
03B6 ; SetPageCol(uPage+1,uCol+j);
03B6 2981 ldd R18,y+1
03B8 2C0D add R18,R12
03BA 0A81 ldd R16,y+2
03BC 0F5F subi R16,255 ; addi 1
03BE 52DF xcall _SetPageCol
03C0 .dbline 279
03C0 ; if(uCol+j<64)
03C0 8981 ldd R24,y+1
03C2 8C0D add R24,R12
03C4 8034 cpi R24,64
03C6 20F4 brsh L80
03C8 .dbline 280
03C8 ; ch_r=read_LCD(LEFT);
03C8 0027 clr R16
03CA 88DE xcall _read_LCD
03CC A02E mov R10,R16
03CE 03C0 xjmp L81
03D0 L80:
03D0 .dbline 282
03D0 ; else
03D0 ; ch_r=read_LCD(RIGHT);
03D0 01E0 ldi R16,1
03D2 84DE xcall _read_LCD
03D4 A02E mov R10,R16
03D6 L81:
03D6 .dbline 283
03D6 ; ch_r&=0xf0;
03D6 8A2D mov R24,R10
03D8 807F andi R24,240
03DA A82E mov R10,R24
03DC .dbline 284
03DC ; ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j]&0x0f;
03DC 81E1 ldi R24,17
03DE 849F mul R24,R20
03E0 1001 movw R2,R0
03E2 80E0 ldi R24,<_ASC_16+1
03E4 90E0 ldi R25,>_ASC_16+1
03E6 280E add R2,R24
03E8 391E adc R3,R25
03EA EC2D mov R30,R12
03EC FF27 clr R31
03EE 3896 adiw R30,8
03F0 E20D add R30,R2
03F2 F31D adc R31,R3
03F4 E491 lpm R30,Z
03F6 EF70 andi R30,15
03F8 EE2E mov R14,R30
03FA .dbline 285
03FA ; ch_w|=ch_r;
03FA EA28 or R14,R10
03FC .dbline 286
03FC ; SetPageCol(uPage+1,uCol+j);
03FC 2981 ldd R18,y+1
03FE 2C0D add R18,R12
0400 0A81 ldd R16,y+2
0402 0F5F subi R16,255 ; addi 1
0404 2FDF xcall _SetPageCol
0406 .dbline 287
0406 ; if(uCol+j<64)
0406 8981 ldd R24,y+1
0408 8C0D add R24,R12
040A 8034 cpi R24,64
040C 28F4 brsh L83
040E .dbline 288
040E ; write_LCD(LEFT,DATA,ch_w);
040E E882 std y+0,R14
0410 21E0 ldi R18,1
0412 0027 clr R16
0414 46DE xcall _write_LCD
0416 04C0 xjmp L84
0418 L83:
0418 .dbline 290
0418 ; else
0418 ; write_LCD(RIGHT,DATA,ch_w);
0418 E882 std y+0,R14
041A 21E0 ldi R18,1
041C 01E0 ldi R16,1
041E 41DE xcall _write_LCD
0420 L84:
0420 .dbline 291
0420 L77:
0420 .dbline 276
0420 C394 inc R12
0422 L79:
0422 .dbline 276
0422 C616 cp R12,R22
0424 08F4 brsh X3
0426 C7CF xjmp L76
0428 X3:
0428 .dbline 292
0428 ; }
0428 ; }
0428 7DC0 xjmp L68
042A L67:
042A .dbline 294
042A ; else //上半部是写半个字节
042A ; {
042A .dbline 295
042A ; for(j=0;j<width;j++)
042A CC24 clr R12
042C 35C0 xjmp L88
042E L85:
042E .dbline 296
042E ; {
042E .dbline 297
042E ; SetPageCol(uPage,uCol+j);
042E 2981 ldd R18,y+1
0430 2C0D add R18,R12
0432 0A81 ldd R16,y+2
0434 17DF xcall _SetPageCol
0436 .dbline 298
0436 ; if(uCol+j<64)
0436 8981 ldd R24,y+1
0438 8C0D add R24,R12
043A 8034 cpi R24,64
043C 20F4 brsh L89
043E .dbline 299
043E ; ch_r=read_LCD(LEFT);
043E 0027 clr R16
0440 4DDE xcall _read_LCD
0442 A02E mov R10,R16
0444 03C0 xjmp L90
0446 L89:
0446 .dbline 301
0446 ; else
0446 ; ch_r=read_LCD(RIGHT);
0446 01E0 ldi R16,1
0448 49DE xcall _read_LCD
044A A02E mov R10,R16
044C L90:
044C .dbline 302
044C ; ch_r&=0x0f;
044C 8A2D mov R24,R10
044E 8F70 andi R24,15
0450 A82E mov R10,R24
0452 .dbline 303
0452 ; ch_w=ASC_16[k].Msk[j];
0452 81E1 ldi R24,17
0454 849F mul R24,R20
0456 1001 movw R2,R0
0458 80E0 ldi R24,<_ASC_16+1
045A 90E0 ldi R25,>_ASC_16+1
045C 280E add R2,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -