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

📄 3310lcd_prj.lst

📁 一个关于AVR单片机的例程
💻 LST
📖 第 1 页 / 共 3 页
字号:
    042F 4FFF      SBCI	R31,0xFF
    0430 8100      LDD	R16,Z+0
    0431 DEFF      RCALL	_LCD_set_XY
(0173)         for (n=0; n<83; n++)
    0432 24AA      CLR	R10
    0433 C009      RJMP	0x043D
(0174)           { 
(0175)             LCD_write_byte(buffer_h[n],1);
    0434 E021      LDI	R18,1
    0435 01CE      MOVW	R24,R28
    0436 2DEA      MOV	R30,R10
    0437 27FF      CLR	R31
    0438 0FE8      ADD	R30,R24
    0439 1FF9      ADC	R31,R25
    043A 8100      LDD	R16,Z+0
    043B D072      RCALL	_LCD_write_byte
    043C 94A3      INC	R10
    043D 2D8A      MOV	R24,R10
    043E 3583      CPI	R24,0x53
    043F F3A0      BCS	0x0434
(0176)           } 
(0177)         
(0178)         LCD_set_XY(X,Y+1); 
    0440 2D2E      MOV	R18,R14
    0441 5F2F      SUBI	R18,0xFF
    0442 01FE      MOVW	R30,R28
    0443 54EE      SUBI	R30,0x4E
    0444 4FFF      SBCI	R31,0xFF
    0445 8100      LDD	R16,Z+0
    0446 DEEA      RCALL	_LCD_set_XY
(0179)         for (n=0; n<83; n++)
    0447 24AA      CLR	R10
    0448 C00B      RJMP	0x0454
(0180)           { 
(0181)             LCD_write_byte(buffer_l[n],1);
    0449 E021      LDI	R18,1
    044A 01CE      MOVW	R24,R28
    044B 5A8C      SUBI	R24,0xAC
    044C 4F9F      SBCI	R25,0xFF
    044D 2DEA      MOV	R30,R10
    044E 27FF      CLR	R31
    044F 0FE8      ADD	R30,R24
    0450 1FF9      ADC	R31,R25
    0451 8100      LDD	R16,Z+0
    0452 D05B      RCALL	_LCD_write_byte
    0453 94A3      INC	R10
    0454 2D8A      MOV	R24,R10
    0455 3583      CPI	R24,0x53
    0456 F390      BCS	0x0449
(0182)           } 
(0183)           
(0184)        delay_nms(T);
    0457 2D0C      MOV	R16,R12
    0458 2711      CLR	R17
    0459 940E02EC  CALL	_delay_nms
    045B 9543      INC	R20
    045C 394C      CPI	R20,0x9C
    045D F408      BCC	0x045F
    045E CF7D      RJMP	0x03DC
    045F 96EF      ADIW	R28,0x3F
    0460 96EF      ADIW	R28,0x3F
    0461 96AA      ADIW	R28,0x2A
    0462 940E04EC  CALL	pop_gset5
    0464 9624      ADIW	R28,4
    0465 9508      RET
_LCD_draw_bmp_pixel:
  row                  --> R20
  n                    --> R22
  i                    --> R14
  Pix_y                --> Y+18
  Pix_x                --> R10
  map                  --> R12
  Y                    --> Y+12
  X                    --> Y+10
    0466 940E04B9  CALL	push_arg4
    0468 940E04EF  CALL	push_gset5
    046A 84CE      LDD	R12,Y+14
    046B 84DF      LDD	R13,Y+15
    046C 88A8      LDD	R10,Y+16
(0185)       }
(0186)   }
(0187) 
(0188) /*-----------------------------------------------------------------------
(0189) LCD_draw_map      : 位图绘制函数
(0190) 
(0191) 输入参数:X、Y    :位图绘制的起始X、Y坐标;
(0192)           *map    :位图点阵数据;
(0193)           Pix_x   :位图像素(长)
(0194)           Pix_y   :位图像素(宽)
(0195) 
(0196) 编写日期          :2004-8-13
(0197) 最后修改日期      :2004-8-13 
(0198) -----------------------------------------------------------------------*/
(0199) void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
(0200)                   unsigned char Pix_x,unsigned char Pix_y)
(0201)   {
(0202)     unsigned int i,n;
(0203)     unsigned char row;
(0204)     
(0205)     if (Pix_y%8==0) row=Pix_y/8;      //计算位图所占行数
    046D E018      LDI	R17,0x8
    046E 890A      LDD	R16,Y+18
    046F 940E04BE  CALL	mod8u
    0471 2300      TST	R16
    0472 F429      BNE	0x0478
    0473 894A      LDD	R20,Y+18
    0474 9546      LSR	R20
    0475 9546      LSR	R20
    0476 9546      LSR	R20
    0477 C005      RJMP	0x047D
(0206)       else
(0207)         row=Pix_y/8+1;
    0478 894A      LDD	R20,Y+18
    0479 9546      LSR	R20
    047A 9546      LSR	R20
    047B 9546      LSR	R20
    047C 5F4F      SUBI	R20,0xFF
(0208)     
(0209)     for (n=0;n<row;n++)
    047D 2766      CLR	R22
    047E 2777      CLR	R23
    047F C025      RJMP	0x04A5
(0210)       {
(0211)       	LCD_set_XY(X,Y);
    0480 852C      LDD	R18,Y+12
    0481 850A      LDD	R16,Y+10
    0482 DEAE      RCALL	_LCD_set_XY
(0212)         for(i=0; i<Pix_x; i++)
    0483 24EE      CLR	R14
    0484 24FF      CLR	R15
    0485 C015      RJMP	0x049B
(0213)           {
(0214)             LCD_write_byte(map[i+n*Pix_x], 1);
    0486 E021      LDI	R18,1
    0487 2C2A      MOV	R2,R10
    0488 2433      CLR	R3
    0489 932F      PUSH	R18
    048A 933F      PUSH	R19
    048B 0191      MOVW	R18,R2
    048C 018B      MOVW	R16,R22
    048D 940E04D6  CALL	empy16s
    048F 913F      POP	R19
    0490 912F      POP	R18
    0491 01F7      MOVW	R30,R14
    0492 0FE0      ADD	R30,R16
    0493 1FF1      ADC	R31,R17
    0494 0DEC      ADD	R30,R12
    0495 1DFD      ADC	R31,R13
    0496 8100      LDD	R16,Z+0
    0497 D016      RCALL	_LCD_write_byte
    0498 01C7      MOVW	R24,R14
    0499 9601      ADIW	R24,1
    049A 017C      MOVW	R14,R24
    049B 2C2A      MOV	R2,R10
    049C 2433      CLR	R3
    049D 14E2      CP	R14,R2
    049E 04F3      CPC	R15,R3
    049F F330      BCS	0x0486
(0215)           }
(0216)         Y++;                         //换行
    04A0 840C      LDD	R0,Y+12
    04A1 9403      INC	R0
    04A2 860C      STD	Y+12,R0
    04A3 5F6F      SUBI	R22,0xFF
    04A4 4F7F      SBCI	R23,0xFF
    04A5 2E24      MOV	R2,R20
    04A6 2433      CLR	R3
    04A7 1562      CP	R22,R2
    04A8 0573      CPC	R23,R3
    04A9 F2B0      BCS	0x0480
    04AA 940E04EC  CALL	pop_gset5
    04AC 9624      ADIW	R28,4
    04AD 9508      RET
(0217)       }      
(0218)   }
(0219) 
(0220) /*-----------------------------------------------------------------------
(0221) LCD_write_byte    : 使用SPI接口写数据到LCD
(0222) 
(0223) 输入参数:data    :写入的数据;
(0224)           command :写数据/命令选择;
(0225) 
(0226) 编写日期          :2004-8-10 
(0227) 最后修改日期      :2004-8-13 
(0228) -----------------------------------------------------------------------*/
(0229) void LCD_write_byte(unsigned char data, unsigned char command)
(0230)   {
(0231)     PORTB &= ~LCD_CE ;		        // 使能LCD
_LCD_write_byte:
  command              --> R18
  data                 --> R16
    04AE 98C4      CBI	0x18,4
(0232)     
(0233)     if (command == 0)
    04AF 2322      TST	R18
    04B0 F411      BNE	0x04B3
(0234)       PORTB &= ~LCD_DC ;	        // 传送命令
    04B1 98C3      CBI	0x18,3
    04B2 C001      RJMP	0x04B4
(0235)     else
(0236)       PORTB |= LCD_DC ;		        // 传送数据
    04B3 9AC3      SBI	0x18,3
(0237) 
(0238)     SPDR = data;			// 传送数据到SPI寄存器
    04B4 B90F      OUT	0x0F,R16
(0239) 
(0240)     while ((SPSR & 0x80) == 0);         // 等待数据传送完毕
    04B5 9B77      SBIS	0x0E,7
    04B6 CFFE      RJMP	0x04B5
(0241) 	
(0242)     PORTB |= LCD_CE ;			// 关闭LCD
FILE: <library>
    04B7 9AC4      SBI	0x18,4
    04B8 9508      RET
push_arg4:
    04B9 933A      ST	R19,-Y
    04BA 932A      ST	R18,-Y
push_arg2:
    04BB 931A      ST	R17,-Y
    04BC 930A      ST	R16,-Y
    04BD 9508      RET
mod8u:
    04BE 9468      BSET	6
    04BF C001      RJMP	xdiv8u
div8u:
    04C0 94E8      BCLR	6
xdiv8u:
    04C1 932A      ST	R18,-Y
    04C2 92FA      ST	R15,-Y
    04C3 92EA      ST	R14,-Y
    04C4 24FF      CLR	R15
    04C5 24EE      CLR	R14
    04C6 E120      LDI	R18,0x10
    04C7 0F00      LSL	R16
    04C8 1CFF      ROL	R15
    04C9 1CEE      ROL	R14
    04CA 16E1      CP	R14,R17
    04CB F010      BCS	0x04CE
    04CC 1AE1      SUB	R14,R17
    04CD 9503      INC	R16
    04CE 952A      DEC	R18
    04CF F7B9      BNE	0x04C7
    04D0 F40E      BRTC	0x04D2
    04D1 2D0E      MOV	R16,R14
    04D2 90E9      LD	R14,Y+
    04D3 90F9      LD	R15,Y+
    04D4 9129      LD	R18,Y+
    04D5 9508      RET
empy16s:
    04D6 920A      ST	R0,-Y
    04D7 921A      ST	R1,-Y
    04D8 938A      ST	R24,-Y
    04D9 939A      ST	R25,-Y
    04DA 9F02      MUL	R16,R18
    04DB 01C0      MOVW	R24,R0
    04DC 9F12      MUL	R17,R18
    04DD 0D90      ADD	R25,R0
    04DE 9F03      MUL	R16,R19
    04DF 0D90      ADD	R25,R0
    04E0 018C      MOVW	R16,R24
    04E1 9199      LD	R25,Y+
    04E2 9189      LD	R24,Y+
    04E3 9019      LD	R1,Y+
    04E4 9009      LD	R0,Y+
    04E5 9508      RET
pop_gset2:
    04E6 E0E2      LDI	R30,2
    04E7 940C04FB  JMP	pop
pop_gset3:
    04E9 E0E4      LDI	R30,4
    04EA 940C04FB  JMP	pop
pop_gset5:
    04EC 27EE      CLR	R30
    04ED 940C04FB  JMP	pop
push_gset5:
    04EF 92FA      ST	R15,-Y
    04F0 92EA      ST	R14,-Y
push_gset4:
    04F1 92DA      ST	R13,-Y
    04F2 92CA      ST	R12,-Y
push_gset3:
    04F3 92BA      ST	R11,-Y
    04F4 92AA      ST	R10,-Y
push_gset2:
    04F5 937A      ST	R23,-Y
    04F6 936A      ST	R22,-Y
push_gset1:
    04F7 935A      ST	R21,-Y
    04F8 934A      ST	R20,-Y
    04F9 9508      RET
pop_gset1:
    04FA E0E1      LDI	R30,1
pop:
    04FB 9149      LD	R20,Y+
    04FC 9159      LD	R21,Y+
    04FD FDE0      SBRC	R30,0
    04FE 9508      RET
    04FF 9169      LD	R22,Y+
    0500 9179      LD	R23,Y+
    0501 FDE1      SBRC	R30,1
    0502 9508      RET
    0503 90A9      LD	R10,Y+
    0504 90B9      LD	R11,Y+
    0505 FDE2      SBRC	R30,2
    0506 9508      RET
    0507 90C9      LD	R12,Y+
    0508 90D9      LD	R13,Y+
    0509 FDE3      SBRC	R30,3
    050A 9508      RET
    050B 90E9      LD	R14,Y+
    050C 90F9      LD	R15,Y+
    050D 9508      RET
asgncblk:
    050E 93AA      ST	R26,-Y
    050F 93BA      ST	R27,-Y
    0510 93EA      ST	R30,-Y
    0511 93FA      ST	R31,-Y
    0512 920A      ST	R0,-Y
    0513 81AF      LDD	R26,Y+7
    0514 85B8      LDD	R27,Y+8
    0515 81ED      LDD	R30,Y+5
    0516 81FE      LDD	R31,Y+6
    0517 3000      CPI	R16,0
    0518 0701      CPC	R16,R17
    0519 F031      BEQ	0x0520
    051A 95C8      LPM
    051B 920D      ST	R0,X+
    051C 9631      ADIW	R30,1
    051D 5001      SUBI	R16,1
    051E 4010      SBCI	R17,0
    051F CFF7      RJMP	0x0517
    0520 9009      LD	R0,Y+
    0521 91F9      LD	R31,Y+
    0522 91E9      LD	R30,Y+
    0523 91B9      LD	R27,Y+
    0524 91A9      LD	R26,Y+
    0525 9624      ADIW	R28,4
    0526 9508      RET

⌨️ 快捷键说明

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