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

📄 12864.lst

📁 ICCAVR编写128*64液晶程序测试已经通过
💻 LST
📖 第 1 页 / 共 5 页
字号:
    04E1 DD72      RCALL	_read_LCD
    04E2 2F60      MOV	R22,R16
(0364)          ch_r&=0xf0;
    04E3 7F60      ANDI	R22,0xF0
(0365)          ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j]&0x0f;
    04E4 E18A      LDI	R24,0x1A
    04E5 9D8A      MUL	R24,R10
    04E6 0110      MOVW	R2,R0
    04E7 E584      LDI	R24,0x54
    04E8 E092      LDI	R25,2
    04E9 0E28      ADD	R2,R24
    04EA 1E39      ADC	R3,R25
    04EB 2FE4      MOV	R30,R20
    04EC 27FF      CLR	R31
    04ED 963C      ADIW	R30,0xC
    04EE 0DE2      ADD	R30,R2
    04EF 1DF3      ADC	R31,R3
    04F0 91E4      LPM	R30,0(Z)
    04F1 70EF      ANDI	R30,0xF
    04F2 2EEE      MOV	R14,R30
(0366)          ch_w|=ch_r;
    04F3 2AE6      OR	R14,R22
(0367)          SetPageCol(uPage+1,uCol+j);
    04F4 2D2C      MOV	R18,R12
    04F5 0F24      ADD	R18,R20
    04F6 8109      LDD	R16,Y+1
    04F7 5F0F      SUBI	R16,0xFF
    04F8 DE1F      RCALL	_SetPageCol
(0368)          if(uCol+j<64)
    04F9 2D8C      MOV	R24,R12
    04FA 0F84      ADD	R24,R20
    04FB 3480      CPI	R24,0x40
    04FC F428      BCC	0x0502
(0369)             write_LCD(LEFT,DATA,ch_w);
    04FD 82E8      STD	Y+0,R14
    04FE E021      LDI	R18,1
    04FF 2700      CLR	R16
    0500 DD36      RCALL	_write_LCD
    0501 C004      RJMP	0x0506
(0370)          else
(0371)             write_LCD(RIGHT,DATA,ch_w);
    0502 82E8      STD	Y+0,R14
    0503 E021      LDI	R18,1
    0504 E001      LDI	R16,1
    0505 DD31      RCALL	_write_LCD
    0506 9543      INC	R20
    0507 304C      CPI	R20,0xC
    0508 F408      BCC	0x050A
    0509 CFC9      RJMP	0x04D3
(0372)       }
(0373)       SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
    050A 2D2C      MOV	R18,R12
    050B 5F24      SUBI	R18,0xF4
    050C 8109      LDD	R16,Y+1
    050D DE0A      RCALL	_SetPageCol
(0374)    }
    050E C07F      RJMP	0x058E
(0375) 
(0376)    else //汉字上半部是写半个字节
(0377)    {
(0378)       for(j=0;j<ASC_HZ_WIDTH;j++)
    050F 2744      CLR	R20
    0510 C033      RJMP	0x0544
(0379)       {
(0380)          SetPageCol(uPage,uCol+j);
    0511 2D2C      MOV	R18,R12
    0512 0F24      ADD	R18,R20
    0513 8109      LDD	R16,Y+1
    0514 DE03      RCALL	_SetPageCol
(0381)          if(uCol+j<64)
    0515 2D8C      MOV	R24,R12
    0516 0F84      ADD	R24,R20
    0517 3480      CPI	R24,0x40
    0518 F420      BCC	0x051D
(0382)             ch_r=read_LCD(LEFT);
    0519 2700      CLR	R16
    051A DD39      RCALL	_read_LCD
    051B 2F60      MOV	R22,R16
    051C C003      RJMP	0x0520
(0383)          else ch_r=read_LCD(RIGHT);
    051D E001      LDI	R16,1
    051E DD35      RCALL	_read_LCD
    051F 2F60      MOV	R22,R16
(0384)          ch_r&=0x0f;
    0520 706F      ANDI	R22,0xF
(0385)          ch_w=GB_16[k].Msk[j];
    0521 E18A      LDI	R24,0x1A
    0522 9D8A      MUL	R24,R10
    0523 0110      MOVW	R2,R0
    0524 E584      LDI	R24,0x54
    0525 E092      LDI	R25,2
    0526 0E28      ADD	R2,R24
    0527 1E39      ADC	R3,R25
    0528 2FE4      MOV	R30,R20
    0529 27FF      CLR	R31
    052A 0DE2      ADD	R30,R2
    052B 1DF3      ADC	R31,R3
    052C 90E4      LPM	R14,0(Z)
(0386)          ch_w=ch_w<<4;
    052D 2D8E      MOV	R24,R14
    052E 708F      ANDI	R24,0xF
    052F 9582      SWAP	R24
    0530 2EE8      MOV	R14,R24
(0387)          ch_w|=ch_r;
    0531 2AE6      OR	R14,R22
(0388)          SetPageCol(uPage,uCol+j);
    0532 2D2C      MOV	R18,R12
    0533 0F24      ADD	R18,R20
    0534 8109      LDD	R16,Y+1
    0535 DDE2      RCALL	_SetPageCol
(0389)          if(uCol+j<64)
    0536 2D8C      MOV	R24,R12
    0537 0F84      ADD	R24,R20
    0538 3480      CPI	R24,0x40
    0539 F428      BCC	0x053F
(0390)             write_LCD(LEFT,DATA,ch_w);
    053A 82E8      STD	Y+0,R14
    053B E021      LDI	R18,1
    053C 2700      CLR	R16
    053D DCF9      RCALL	_write_LCD
    053E C004      RJMP	0x0543
(0391)          else
(0392)             write_LCD(RIGHT,DATA,ch_w);
    053F 82E8      STD	Y+0,R14
    0540 E021      LDI	R18,1
    0541 E001      LDI	R16,1
    0542 DCF4      RCALL	_write_LCD
    0543 9543      INC	R20
    0544 304C      CPI	R20,0xC
    0545 F408      BCC	0x0547
    0546 CFCA      RJMP	0x0511
(0393)       }
(0394)       SetPageCol(uPage+1,uCol);
    0547 2D2C      MOV	R18,R12
    0548 8109      LDD	R16,Y+1
    0549 5F0F      SUBI	R16,0xFF
    054A DDCD      RCALL	_SetPageCol
(0395)       for(j=0;j<ASC_HZ_WIDTH;j++)
    054B 2744      CLR	R20
    054C C03A      RJMP	0x0587
(0396)       {
(0397)          SetPageCol(uPage+1,uCol+j);
    054D 2D2C      MOV	R18,R12
    054E 0F24      ADD	R18,R20
    054F 8109      LDD	R16,Y+1
    0550 5F0F      SUBI	R16,0xFF
    0551 DDC6      RCALL	_SetPageCol
(0398) 
(0399)          ch_r=GB_16[k].Msk[j];
    0552 E18A      LDI	R24,0x1A
    0553 9D8A      MUL	R24,R10
    0554 0110      MOVW	R2,R0
    0555 E584      LDI	R24,0x54
    0556 E092      LDI	R25,2
    0557 0E28      ADD	R2,R24
    0558 1E39      ADC	R3,R25
    0559 2FE4      MOV	R30,R20
    055A 27FF      CLR	R31
    055B 0DE2      ADD	R30,R2
    055C 1DF3      ADC	R31,R3
    055D 9164      LPM	R22,0(Z)
(0400)          ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j];
    055E E18A      LDI	R24,0x1A
    055F 9D8A      MUL	R24,R10
    0560 0110      MOVW	R2,R0
    0561 E584      LDI	R24,0x54
    0562 E092      LDI	R25,2
    0563 0E28      ADD	R2,R24
    0564 1E39      ADC	R3,R25
    0565 2FE4      MOV	R30,R20
    0566 27FF      CLR	R31
    0567 963C      ADIW	R30,0xC
    0568 0DE2      ADD	R30,R2
    0569 1DF3      ADC	R31,R3
    056A 90E4      LPM	R14,0(Z)
(0401)          ch_r=ch_r>>4;
    056B 2F86      MOV	R24,R22
    056C 9582      SWAP	R24
    056D 708F      ANDI	R24,0xF
    056E 2F68      MOV	R22,R24
(0402)          ch_w=ch_w<<4;
    056F 2D8E      MOV	R24,R14
    0570 708F      ANDI	R24,0xF
    0571 9582      SWAP	R24
    0572 2EE8      MOV	R14,R24
(0403)          ch_w|=ch_r;
    0573 2AE6      OR	R14,R22
(0404)          SetPageCol(uPage+1,uCol+j);
    0574 2D2C      MOV	R18,R12
    0575 0F24      ADD	R18,R20
    0576 8109      LDD	R16,Y+1
    0577 5F0F      SUBI	R16,0xFF
    0578 DD9F      RCALL	_SetPageCol
(0405)          if(uCol+j<64)
    0579 2D8C      MOV	R24,R12
    057A 0F84      ADD	R24,R20
    057B 3480      CPI	R24,0x40
    057C F428      BCC	0x0582
(0406)             write_LCD(LEFT,DATA,ch_w);
    057D 82E8      STD	Y+0,R14
    057E E021      LDI	R18,1
    057F 2700      CLR	R16
    0580 DCB6      RCALL	_write_LCD
    0581 C004      RJMP	0x0586
(0407)          else
(0408)             write_LCD(RIGHT,DATA,ch_w);
    0582 82E8      STD	Y+0,R14
    0583 E021      LDI	R18,1
    0584 E001      LDI	R16,1
    0585 DCB1      RCALL	_write_LCD
    0586 9543      INC	R20
    0587 304C      CPI	R20,0xC
    0588 F408      BCC	0x058A
    0589 CFC3      RJMP	0x054D
(0409)       }
(0410)       SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
    058A 2D2C      MOV	R18,R12
    058B 5F24      SUBI	R18,0xF4
    058C 8109      LDD	R16,Y+1
    058D DD8A      RCALL	_SetPageCol
(0411)    }
    058E 9622      ADIW	R28,2
    058F 940E1809  CALL	pop_gset5
    0591 9508      RET
_disp_str:
  i                    --> R20
  p                    --> R22
    0592 940E1812  CALL	push_gset2
    0594 01B8      MOVW	R22,R16
(0412) }
(0413) 
(0414) 
(0415) //-----------字符串显示函数----------------
(0416) void disp_str(unsigned char *p)
(0417) {
(0418)    unsigned char i=0;
    0595 2744      CLR	R20
    0596 C015      RJMP	0x05AC
(0419)    while(p[i]>0)
(0420)    {
(0421)       if(p[i] < 128)
    0597 2FE4      MOV	R30,R20
    0598 27FF      CLR	R31
    0599 0FE6      ADD	R30,R22
    059A 1FF7      ADC	R31,R23
    059B 8180      LDD	R24,Z+0
    059C 3880      CPI	R24,0x80
    059D F438      BCC	0x05A5
(0422)       {	/* ASCII */
(0423)          disp_char(p[i]);
    059E 2FE4      MOV	R30,R20
    059F 27FF      CLR	R31
    05A0 0FE6      ADD	R30,R22
    05A1 1FF7      ADC	R31,R23
    05A2 8100      LDD	R16,Z+0
    05A3 DDC7      RCALL	_disp_char
(0424)       }
    05A4 C006      RJMP	0x05AB
(0425)       else
(0426)       {	/* 中文 */
(0427)          disp_hz(&p[i]);
    05A5 2F04      MOV	R16,R20
    05A6 2711      CLR	R17
    05A7 0F06      ADD	R16,R22
    05A8 1F17      ADC	R17,R23
    05A9 DED6      RCALL	_disp_hz
(0428)          i++;
    05AA 9543      INC	R20
(0429)       }
(0430)       i++;
    05AB 9543      INC	R20
    05AC 2FE4      MOV	R30,R20
    05AD 27FF      CLR	R31
    05AE 0FE6      ADD	R30,R22
    05AF 1FF7      ADC	R31,R23
    05B0 8020      LDD	R2,Z+0
    05B1 2433      CLR	R3
    05B2 1432      CP	R3,R2
    05B3 F318      BCS	0x0597
    05B4 940E1800  CALL	pop_gset2
    05B6 9508      RET
_GUI_Point:
  y                    --> R22
  ch                   --> R20
  flag                 --> R10
  yy                   --> R14
  xx                   --> R12
    05B7 940E180C  CALL	push_gset5
    05B9 2EE2      MOV	R14,R18
    05BA 2EC0      MOV	R12,R16
    05BB 9721      SBIW	R28,1
    05BC 84AB      LDD	R10,Y+11
(0431)    }
(0432) }
(0433) 
(0434) 
(0435) //-------------------绘点函数----------------------------------              
(0436) //XX--(0-128) YY--(0-63) FLAG=1绘点   FLAG=0 清点
(0437) void GUI_Point(unsigned char xx,unsigned char yy,unsigned char flag)
(0438) {
(0439)    unsigned int y,ch;
(0440)    ch=yy%8;  //余数
    05BD E028      LDI	R18,0x8
    05BE E030      LDI	R19,0
    05BF 2D0E      MOV	R16,R14
    05C0 2711      CLR	R17
    05C1 940E1786  CALL	mod16s
    05C3 01A8      MOVW	R20,R16
(0441) 
(0442)    y=1;
    05C4 E061      LDI	R22,1
    05C5 E070      LDI	R23,0
(0443)    for(;ch!=0;)
    05C6 C008      RJMP	0x05CF
(0444)    {
(0445)       y=y*2;
    05C7 E002      LDI	R16,2
    05C8 E010      LDI	R17,0
    05C9 019B      MOVW	R18,R22
    05CA 940E17C0  CALL	empy16s
    05CC 01B8      MOVW	R22,R16
(0446)       ch--;
    05CD 5041      SUBI	R20,1
    05CE 4050      SBCI	R21,0
    05CF 3040      CPI	R20,0
    05D0 0745      CPC	R20,R21
    05D1 F7A9      BNE	0x05C7
(0447)    }
(0448)    if(xx<64)
    05D2 2D8C      MOV	R24,R12
    05D3 3480      CPI	R24,0x40
    05D4 F510      BCC	0x05F7
(0449)    {
(0450)       set_page_L(yy/8);
    05D5 2D0E      MOV	R16,R14
    05D6 9506      LSR	R16
    05D7 9506      LSR	R16
    05D8 9506      LSR	R16
    05D9 DCC2      RCALL	_set_page_L
(0451)       set_col_addr_L(xx);
    05DA 2D0C      MOV	R16,R12
    05DB DCDC      RCALL	_set_col_addr_L
(0452)       ch=read_LCD(LEFT);
    05DC 2700      CLR	R16
    05DD DC76      RCALL	_read_LCD
    05DE 2F40      MOV	R20,R16
    05DF 2755      CLR	R21
(0453)       set_col_addr_L(xx);
    05E0 2D0C      MOV	R16,R12
    05E1 DCD6      RCALL	_set_col_addr_L
(0454)       if(flag)
    05E2 20AA      TST	R10
    05E3 F041      BEQ	0x05EC
(0455)          write_LCD(LEFT,DATA,ch|y);
    05E4 011A      MOVW	R2,R20
    05E5 2A26      OR	R2,R22
    05E6 2A37      OR	R3,R23
    05E7 8228      STD	Y+0,R2
    05E8 E021      LDI	R18,1
    05E9 2700      CLR	R16
    05EA DC4C      RCALL	_write_LCD
    05EB C02E      RJMP	0x061A
(0456)       else
(0457)          write_LCD(LEFT,DATA,ch&(~y));
    05EC 011B      MOVW	R2,R22
    05ED 9420      COM	R2
    05EE 9430      COM	R3
    05EF 012A      MOVW	R4,R20
    05F0 2042      AND	R4,R2
    05F1 2053      AND	R5,R3
    05F2 8248      STD	Y+0,R4
    05F3 E021      LDI	R18,1
    05F4 2700      CLR	R16
    05F5 DC41      RCALL	_write_LCD
(0458)    }
    05F6 C023      RJMP	0x061A
(0459)    else
(0460)    {
(0461)       set_page_R(yy/8);
    05F7 2D0E      MOV	R16,R14
    05F8 9506      LSR	R16
    05F9 9506      LSR	R16
    05FA 9506      LSR	R16
    05FB DCAE      RCALL	_set_page_R
(0462)       set_col_addr_R(xx-64);
    05FC 2D0C      MOV	R16,R12
    05FD 5400      SUBI	R16,0x40
    05FE DCC7      RCALL	_set_col_addr_R
(0463)       ch=read_LCD(RIGHT);
    05FF E001      LDI	R16,1
    0600 DC53      RCALL	_read_LCD
    0601 2F40      MOV	R20,R16
    0602 2755      CLR	R21
(0464)       set_col_addr_R(xx-64);
    0603 2D0C      MOV	R16,R12
    0604 5400      SUBI	R16,0x40
    0605 DCC0      RCALL	_set_col_addr_R
(0465)       if(flag)
    0606 20AA      TST	R10
    0607 F041      BEQ	0x0610
(0466)          write_LCD(RIGHT,DATA,ch|y);
    0608 011A      MOVW	R2,R20
    0609 2A26      OR	R2,R22
    060A 2A37      OR	R3,R23
    060B 8228      STD	Y+0,R2
    060C E021      LDI	R18,1
    060D E001      LDI	R16,1
    060E DC28      RCALL	_write_LCD
    060F C00A      RJMP	0x061A
(0467)       else
(0468)          write_LCD(RIGHT,DATA,ch&(~y));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -