⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.lis

📁 ICCAVR编写128*64液晶程序测试已经通过
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -