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

📄 12864.lst

📁 ICCAVR编写128*64液晶程序测试已经通过
💻 LST
📖 第 1 页 / 共 5 页
字号:
    02A4 2700      CLR	R16
    02A5 DF91      RCALL	_write_LCD
    02A6 9621      ADIW	R28,1
    02A7 940E1817  CALL	pop_gset1
    02A9 9508      RET
_set_page_R:
  page                 --> R20
    02AA 940E1814  CALL	push_gset1
    02AC 2F40      MOV	R20,R16
    02AD 9721      SBIW	R28,1
(0123) }
(0124) void set_page_R(unsigned char page)	/*设置X地址 设置页*/ //0-7
(0125) {
(0126)    write_LCD(RIGHT,CMD,0xb8|page);
    02AE 2F84      MOV	R24,R20
    02AF 6B88      ORI	R24,0xB8
    02B0 8388      STD	Y+0,R24
    02B1 2722      CLR	R18
    02B2 E001      LDI	R16,1
    02B3 DF83      RCALL	_write_LCD
    02B4 9621      ADIW	R28,1
    02B5 940E1817  CALL	pop_gset1
    02B7 9508      RET
_set_col_addr_L:
  col                  --> R20
    02B8 940E1814  CALL	push_gset1
    02BA 2F40      MOV	R20,R16
    02BB 9721      SBIW	R28,1
(0127) }
(0128) 
(0129) void set_col_addr_L(unsigned char col) /*设置Y地址*/ //0-63
(0130) {
(0131)    write_LCD(LEFT,CMD,0x40|col);
    02BC 2F84      MOV	R24,R20
    02BD 6480      ORI	R24,0x40
    02BE 8388      STD	Y+0,R24
    02BF 2722      CLR	R18
    02C0 2700      CLR	R16
    02C1 DF75      RCALL	_write_LCD
    02C2 9621      ADIW	R28,1
    02C3 940E1817  CALL	pop_gset1
    02C5 9508      RET
_set_col_addr_R:
  col                  --> R20
    02C6 940E1814  CALL	push_gset1
    02C8 2F40      MOV	R20,R16
    02C9 9721      SBIW	R28,1
(0132) }
(0133) 
(0134) void set_col_addr_R(unsigned char col) /*设置Y地址*/ //0-63
(0135) {
(0136)    write_LCD(RIGHT,CMD,0x40|col);
    02CA 2F84      MOV	R24,R20
    02CB 6480      ORI	R24,0x40
    02CC 8388      STD	Y+0,R24
    02CD 2722      CLR	R18
    02CE E001      LDI	R16,1
    02CF DF67      RCALL	_write_LCD
    02D0 9621      ADIW	R28,1
    02D1 940E1817  CALL	pop_gset1
    02D3 9508      RET
_LCD_Init:
    02D4 9721      SBIW	R28,1
(0137) }
(0138) 
(0139) 
(0140) //------------液晶初始化函数-----------------------
(0141) void LCD_Init(void) 
(0142) {
(0143)    LCD_DIR_PORT = 0xff;
    02D5 EF8F      LDI	R24,0xFF
    02D6 BB8A      OUT	0x1A,R24
(0144)    LCD_OP_PORT = 0xff;
    02D7 BB8B      OUT	0x1B,R24
(0145)    LCD_EN_DDR    |=  LCD_EN_BIT;
    02D8 9ABA      SBI	0x17,2
(0146)    LCD_DI_DDR    |=  LCD_DI_BIT;
    02D9 9AB8      SBI	0x17,0
(0147)    LCD_CS1_DDR   |=  LCD_CS1_BIT;
    02DA 9ABB      SBI	0x17,3
(0148)    LCD_CS2_DDR   |=  LCD_CS2_BIT;
    02DB 9ABC      SBI	0x17,4
(0149)    LCD_RW_DDR    |=  LCD_RW_BIT;
    02DC 9AB9      SBI	0x17,1
(0150)    LCD_RW_PORT   &= ~LCD_RW_BIT;
    02DD 98C1      CBI	0x18,1
(0151)    LCD_reset();
    02DE DF26      RCALL	_LCD_reset
(0152)    set_start_line_L(0);             /*显示起始行为0*/
    02DF 2700      CLR	R16
    02E0 DF9F      RCALL	_set_start_line_L
(0153)    set_start_line_R(0);             /*显示起始行为0*/
    02E1 2700      CLR	R16
    02E2 DFAB      RCALL	_set_start_line_R
(0154)    write_LCD(LEFT,CMD,DISPLAY_ON);  /*  开显示  */
    02E3 E38F      LDI	R24,0x3F
    02E4 8388      STD	Y+0,R24
    02E5 2722      CLR	R18
    02E6 2700      CLR	R16
    02E7 DF4F      RCALL	_write_LCD
(0155)    write_LCD(RIGHT,CMD,DISPLAY_ON); /*  开显示  */
    02E8 E38F      LDI	R24,0x3F
    02E9 8388      STD	Y+0,R24
    02EA 2722      CLR	R18
    02EB E001      LDI	R16,1
    02EC DF4A      RCALL	_write_LCD
    02ED 9621      ADIW	R28,1
    02EE 9508      RET
_LCD_clr:
  pages                --> R20
  i                    --> R22
    02EF 940E1812  CALL	push_gset2
    02F1 9721      SBIW	R28,1
(0156) }
(0157) 
(0158) 
(0159) //-----------清屏函数---------------------------
(0160) void LCD_clr(void)                 
(0161) {
(0162)    unsigned char pages,i;
(0163)    for(pages=0;pages<8;pages++)
    02F2 2744      CLR	R20
    02F3 C018      RJMP	0x030C
(0164)    {
(0165)       set_page_L(pages);            /* X 页地址 */
    02F4 2F04      MOV	R16,R20
    02F5 DFA6      RCALL	_set_page_L
(0166)       set_page_R(pages);            /* X 页地址 */
    02F6 2F04      MOV	R16,R20
    02F7 DFB2      RCALL	_set_page_R
(0167)       for(i=0;i<64;i++)
    02F8 2766      CLR	R22
    02F9 C00F      RJMP	0x0309
(0168)       {
(0169)          set_col_addr_L(i);//Y
    02FA 2F06      MOV	R16,R22
    02FB DFBC      RCALL	_set_col_addr_L
(0170)          set_col_addr_R(i);//Y
    02FC 2F06      MOV	R16,R22
    02FD DFC8      RCALL	_set_col_addr_R
(0171)          write_LCD(LEFT,DATA,0x0);
    02FE 2422      CLR	R2
    02FF 8228      STD	Y+0,R2
    0300 E021      LDI	R18,1
    0301 2700      CLR	R16
    0302 DF34      RCALL	_write_LCD
(0172)          write_LCD(RIGHT,DATA,0x0);
    0303 2422      CLR	R2
    0304 8228      STD	Y+0,R2
    0305 E021      LDI	R18,1
    0306 E001      LDI	R16,1
    0307 DF2F      RCALL	_write_LCD
    0308 9563      INC	R22
    0309 3460      CPI	R22,0x40
    030A F378      BCS	0x02FA
    030B 9543      INC	R20
    030C 3048      CPI	R20,0x8
    030D F330      BCS	0x02F4
    030E 9621      ADIW	R28,1
    030F 940E1800  CALL	pop_gset2
    0311 9508      RET
(0173)       }
(0174)    }
(0175) }
(0176) 
(0177) 
(0178) //---------当前行列获得函数-----------------------
(0179) unsigned char GetPage(void) /*得到当前页*/
(0180) {
(0181)    return CurPage;
_GetPage:
    0312 91000061  LDS	R16,CurPage
    0314 9508      RET
(0182) }
(0183) 
(0184) unsigned char GetCol(void) /*得到当前列*/
(0185) {
(0186)    return CurCol;
_GetCol:
    0315 91000060  LDS	R16,CurCol
    0317 9508      RET
_SetPageCol:
  ucol                 --> R20
  upage                --> R22
    0318 940E1812  CALL	push_gset2
    031A 2F42      MOV	R20,R18
    031B 2F60      MOV	R22,R16
(0187) }
(0188) 
(0189) //-----------------页置函数-----------------
(0190) void SetPageCol(unsigned char upage, unsigned char ucol) 
(0191) {
(0192)    CurPage = upage;
    031C 93600061  STS	CurPage,R22
(0193)    CurCol = ucol;
    031E 93400060  STS	CurCol,R20
(0194)    if(ucol<64)
    0320 3440      CPI	R20,0x40
    0321 F428      BCC	0x0327
(0195)    {
(0196)       set_page_L(upage);
    0322 2F06      MOV	R16,R22
    0323 DF78      RCALL	_set_page_L
(0197)       set_col_addr_L(ucol);
    0324 2F04      MOV	R16,R20
    0325 DF92      RCALL	_set_col_addr_L
(0198)    }
    0326 C005      RJMP	0x032C
(0199)    else
(0200)    {
(0201)       set_page_R(upage);
    0327 2F06      MOV	R16,R22
    0328 DF81      RCALL	_set_page_R
(0202)       set_col_addr_R(ucol-64);
    0329 2F04      MOV	R16,R20
    032A 5400      SUBI	R16,0x40
    032B DF9A      RCALL	_set_col_addr_R
(0203)    }
    032C 940E1800  CALL	pop_gset2
    032E 9508      RET
_SetRowCol:
  page                 --> R20
  ucol                 --> R22
  urow                 --> R20
    032F 940E1812  CALL	push_gset2
    0331 2F62      MOV	R22,R18
    0332 2F40      MOV	R20,R16
(0204) }
(0205) 
(0206) //---------------行列设置函数---------------------------
(0207) void SetRowCol(unsigned char urow, unsigned char ucol) 
(0208) {
(0209)    unsigned char page;
(0210)    CurRow = urow;
    0333 93400062  STS	CurRow,R20
(0211)    CurCol = ucol;
    0335 93600060  STS	CurCol,R22
(0212) 	
(0213)    switch(urow)
    0337 2755      CLR	R21
    0338 3041      CPI	R20,1
    0339 E0E0      LDI	R30,0
    033A 075E      CPC	R21,R30
    033B F089      BEQ	0x034D
    033C 3042      CPI	R20,2
    033D E0E0      LDI	R30,0
    033E 075E      CPC	R21,R30
    033F F091      BEQ	0x0352
    0340 3043      CPI	R20,3
    0341 E0E0      LDI	R30,0
    0342 075E      CPC	R21,R30
    0343 F099      BEQ	0x0357
    0344 3044      CPI	R20,4
    0345 E0E0      LDI	R30,0
    0346 075E      CPC	R21,R30
    0347 F0A1      BEQ	0x035C
    0348 3045      CPI	R20,5
    0349 E0E0      LDI	R30,0
    034A 075E      CPC	R21,R30
    034B F0A9      BEQ	0x0361
    034C C018      RJMP	0x0365
(0214)    {
(0215)       case 1:
(0216)              page=0;
    034D 2744      CLR	R20
(0217)              CurOffset=1;
    034E E081      LDI	R24,1
    034F 93800063  STS	CurOffset,R24
(0218)              break;
    0351 C013      RJMP	0x0365
(0219)       case 2:
(0220)              page=1;
    0352 E041      LDI	R20,1
(0221)              CurOffset=2;
    0353 E082      LDI	R24,2
    0354 93800063  STS	CurOffset,R24
(0222)              break;
    0356 C00E      RJMP	0x0365
(0223)       case 3:
(0224)              page=3;
    0357 E043      LDI	R20,3
(0225)              CurOffset=1;
    0358 E081      LDI	R24,1
    0359 93800063  STS	CurOffset,R24
(0226)              break;
    035B C009      RJMP	0x0365
(0227)       case 4:
(0228)              page=4;
    035C E044      LDI	R20,4
(0229)              CurOffset=2;
    035D E082      LDI	R24,2
    035E 93800063  STS	CurOffset,R24
(0230)              break;
    0360 C004      RJMP	0x0365
(0231)       case 5:
(0232)              page=6;
    0361 E046      LDI	R20,6
(0233)              CurOffset=1;
    0362 E081      LDI	R24,1
    0363 93800063  STS	CurOffset,R24
(0234)              break;
(0235)    }
(0236)    SetPageCol(page,ucol);
    0365 2F26      MOV	R18,R22
    0366 2F04      MOV	R16,R20
    0367 DFB0      RCALL	_SetPageCol
    0368 940E1800  CALL	pop_gset2
    036A 9508      RET
_disp_char:
  width                --> R22
  len                  --> R22
  uPage                --> Y+2
  ch_r                 --> R10
  uCol                 --> Y+1
  ch_w                 --> R14
  k                    --> R20
  j                    --> R12
  c                    --> R10
    036B 940E180C  CALL	push_gset5
    036D 2EA0      MOV	R10,R16
    036E 9723      SBIW	R28,3
(0237) }
(0238) 
(0239) 
(0240) //----------------字符显示函数------------------
(0241) void disp_char(unsigned char c)
(0242) {
(0243)    unsigned char k,j,uPage,uCol,ch_r,ch_w;
(0244)    unsigned char width;
(0245)    unsigned char len;
(0246)    uPage = GetPage();
    036F DFA2      RCALL	_GetPage
    0370 830A      STD	Y+2,R16
(0247)    uCol = GetCol();
    0371 DFA3      RCALL	_GetCol
    0372 8309      STD	Y+1,R16
(0248)    len=sizeof(ASC_16)/sizeof(ASC_16[0]);
    0373 E16E      LDI	R22,0x1E
(0249)    for(k=0;k<len;k++)
    0374 2744      CLR	R20
    0375 C00C      RJMP	0x0382
(0250)    {
(0251)       if(c == ASC_16[k].Index[0] )
    0376 E181      LDI	R24,0x11
    0377 9F84      MUL	R24,R20
    0378 01F0      MOVW	R30,R0
    0379 E584      LDI	R24,0x54
    037A E090      LDI	R25,0
    037B 0FE8      ADD	R30,R24
    037C 1FF9      ADC	R31,R25
    037D 91E4      LPM	R30,0(Z)
    037E 16AE      CP	R10,R30
    037F F409      BNE	0x0381
(0252)          break;
    0380 C003      RJMP	0x0384
    0381 9543      INC	R20
    0382 1746      CP	R20,R22
    0383 F390      BCS	0x0376
(0253)    }
(0254)    if(k<len)
    0384 1746      CP	R20,R22
    0385 F008      BCS	0x0387
    0386 C0F1      RJMP	0x0478
(0255)    {
(0256)       if(c=='-'||c==':')
    0387 2D8A      MOV	R24,R10
    0388 328D      CPI	R24,0x2D
    0389 F011      BEQ	0x038C
    038A 338A      CPI	R24,0x3A
    038B F411      BNE	0x038E
(0257)          width=ASC_CHR_WIDTH-2;
    038C E066      LDI	R22,6
    038D C006      RJMP	0x0394
(0258)       else if(c=='|')
    038E 2D8A      MOV	R24,R10
    038F 378C      CPI	R24,0x7C
    0390 F411      BNE	0x0393
(0259)          width=ASC_HZ_WIDTH-ASC_CHR_WIDTH;
    0391 E064      LDI	R22,4
    0392 C001      RJMP	0x0394
(0260)       else
(0261)          width=ASC_CHR_WIDTH;
    0393 E068      LDI	R22,0x8
(0262) 		
(0263)       if(CurOffset==1) //下半部是写半个字节
    0394 91800063  LDS	R24,CurOffset
    0396 3081      CPI	R24,1
    0397 F009      BEQ	0x0399
    0398 C062      RJMP	0x03FB
(0264)       {
(0265)          for(j=0;j<width;j++)
    0399 24CC      CLR	R12
    039A C01E      RJMP	0x03B9
(0266)          {
(0267)             SetPageCol(uPage,uCol+j);
    039B 8129      LDD	R18,Y+1
    039C 0D2C      ADD	R18,R12
    039D 810A      LDD	R16,Y+2
    039E DF79      RCALL	_SetPageCol
(0268)             ch_w=ASC_16[k].Msk[j];
    039F E181      LDI	R24,0x11
    03A0 9F84      MUL	R24,R20
    03A1 0110      MOVW	R2,R0
    03A2 E585      LDI	R24,0x55
    03A3 E090      LDI	R25,0
    03A4 0E28      ADD	R2,R24
    03A5 1E39      ADC	R3,R25
    03A6 2DEC      MOV	R30,R12
    03A7 27FF      CLR	R31
    03A8 0DE2      ADD	R30,R2
    03A9 1DF3      ADC	R31,R3

⌨️ 快捷键说明

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