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

📄 3310lcd_prj.lst

📁 Nakia LCD3310 Driver
💻 LST
📖 第 1 页 / 共 3 页
字号:
    03E3 01FE      MOVW	R30,R28
    03E4 54EE      SUBI	R30,0x4E
    03E5 4FFF      SBCI	R31,0xFF
    03E6 8100      LDD	R16,Z+0
    03E7 DF0E      RCALL	_LCD_set_XY
(0173)         for (n=0; n<83; n++)
    03E8 24AA      CLR	R10
    03E9 C009      RJMP	0x03F3
(0174)           { 
(0175)             LCD_write_byte(buffer_h[n],1);
    03EA E021      LDI	R18,1
    03EB 01CE      MOVW	R24,R28
    03EC 2DEA      MOV	R30,R10
    03ED 27FF      CLR	R31
    03EE 0FE8      ADD	R30,R24
    03EF 1FF9      ADC	R31,R25
    03F0 8100      LDD	R16,Z+0
    03F1 D06B      RCALL	_LCD_write_byte
    03F2 94A3      INC	R10
    03F3 2D8A      MOV	R24,R10
    03F4 3583      CPI	R24,0x53
    03F5 F3A0      BCS	0x03EA
(0176)           } 
(0177)         
(0178)         LCD_set_XY(X,Y+1); 
    03F6 2D2E      MOV	R18,R14
    03F7 5F2F      SUBI	R18,0xFF
    03F8 01FE      MOVW	R30,R28
    03F9 54EE      SUBI	R30,0x4E
    03FA 4FFF      SBCI	R31,0xFF
    03FB 8100      LDD	R16,Z+0
    03FC DEF9      RCALL	_LCD_set_XY
(0179)         for (n=0; n<83; n++)
    03FD 24AA      CLR	R10
    03FE C00B      RJMP	0x040A
(0180)           { 
(0181)             LCD_write_byte(buffer_l[n],1);
    03FF E021      LDI	R18,1
    0400 01CE      MOVW	R24,R28
    0401 5A8C      SUBI	R24,0xAC
    0402 4F9F      SBCI	R25,0xFF
    0403 2DEA      MOV	R30,R10
    0404 27FF      CLR	R31
    0405 0FE8      ADD	R30,R24
    0406 1FF9      ADC	R31,R25
    0407 8100      LDD	R16,Z+0
    0408 D054      RCALL	_LCD_write_byte
    0409 94A3      INC	R10
    040A 2D8A      MOV	R24,R10
    040B 3583      CPI	R24,0x53
    040C F390      BCS	0x03FF
(0182)           } 
(0183)           
(0184)        delay_nms(T);
    040D 2D0C      MOV	R16,R12
    040E 2711      CLR	R17
    040F DEA8      RCALL	_delay_nms
    0410 9543      INC	R20
    0411 394C      CPI	R20,0x9C
    0412 F408      BCC	0x0414
    0413 CF80      RJMP	0x0394
    0414 96EF      ADIW	R28,0x3F
    0415 96EF      ADIW	R28,0x3F
    0416 96AA      ADIW	R28,0x2A
    0417 D081      RCALL	pop_gset5
    0418 9624      ADIW	R28,4
    0419 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
    041A D04D      RCALL	push_arg4
    041B D07F      RCALL	push_gset5
    041C 84CE      LDD	R12,Y+14
    041D 84DF      LDD	R13,Y+15
    041E 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;      //计算位图所占行数
    041F E018      LDI	R17,0x8
    0420 890A      LDD	R16,Y+18
    0421 D04B      RCALL	mod8u
    0422 2300      TST	R16
    0423 F429      BNE	0x0429
    0424 894A      LDD	R20,Y+18
    0425 9546      LSR	R20
    0426 9546      LSR	R20
    0427 9546      LSR	R20
    0428 C005      RJMP	0x042E
(0206)       else
(0207)         row=Pix_y/8+1;
    0429 894A      LDD	R20,Y+18
    042A 9546      LSR	R20
    042B 9546      LSR	R20
    042C 9546      LSR	R20
    042D 5F4F      SUBI	R20,0xFF
(0208)     
(0209)     for (n=0;n<row;n++)
    042E 2766      CLR	R22
    042F 2777      CLR	R23
    0430 C024      RJMP	0x0455
(0210)       {
(0211)       	LCD_set_XY(X,Y);
    0431 852C      LDD	R18,Y+12
    0432 850A      LDD	R16,Y+10
    0433 DEC2      RCALL	_LCD_set_XY
(0212)         for(i=0; i<Pix_x; i++)
    0434 24EE      CLR	R14
    0435 24FF      CLR	R15
    0436 C014      RJMP	0x044B
(0213)           {
(0214)             LCD_write_byte(map[i+n*Pix_x], 1);
    0437 E021      LDI	R18,1
    0438 2C2A      MOV	R2,R10
    0439 2433      CLR	R3
    043A 932F      PUSH	R18
    043B 933F      PUSH	R19
    043C 0191      MOVW	R18,R2
    043D 018B      MOVW	R16,R22
    043E D046      RCALL	empy16s
    043F 913F      POP	R19
    0440 912F      POP	R18
    0441 01F7      MOVW	R30,R14
    0442 0FE0      ADD	R30,R16
    0443 1FF1      ADC	R31,R17
    0444 0DEC      ADD	R30,R12
    0445 1DFD      ADC	R31,R13
    0446 8100      LDD	R16,Z+0
    0447 D015      RCALL	_LCD_write_byte
    0448 01C7      MOVW	R24,R14
    0449 9601      ADIW	R24,1
    044A 017C      MOVW	R14,R24
    044B 2C2A      MOV	R2,R10
    044C 2433      CLR	R3
    044D 14E2      CP	R14,R2
    044E 04F3      CPC	R15,R3
    044F F338      BCS	0x0437
(0215)           }
(0216)         Y++;                         //换行
    0450 840C      LDD	R0,Y+12
    0451 9403      INC	R0
    0452 860C      STD	Y+12,R0
    0453 5F6F      SUBI	R22,0xFF
    0454 4F7F      SBCI	R23,0xFF
    0455 2E24      MOV	R2,R20
    0456 2433      CLR	R3
    0457 1562      CP	R22,R2
    0458 0573      CPC	R23,R3
    0459 F2B8      BCS	0x0431
    045A D03E      RCALL	pop_gset5
    045B 9624      ADIW	R28,4
    045C 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
    045D 98C2      CBI	0x18,2
(0232)     
(0233)     if (command == 0)
    045E 2322      TST	R18
    045F F411      BNE	0x0462
(0234)       PORTB &= ~LCD_DC ;	        // 传送命令
    0460 98C0      CBI	0x18,0
    0461 C001      RJMP	0x0463
(0235)     else
(0236)       PORTB |= LCD_DC ;		        // 传送数据
    0462 9AC0      SBI	0x18,0
(0237) 
(0238)     SPDR = data;			// 传送数据到SPI寄存器
    0463 B90F      OUT	0x0F,R16
(0239) 
(0240)     while ((SPSR & 0x80) == 0);         // 等待数据传送完毕
    0464 9B77      SBIS	0x0E,7
    0465 CFFE      RJMP	0x0464
(0241) 	
(0242)     PORTB |= LCD_CE ;			// 关闭LCD
FILE: <library>
    0466 9AC2      SBI	0x18,2
    0467 9508      RET
push_arg4:
    0468 933A      ST	R19,-Y
    0469 932A      ST	R18,-Y
push_arg2:
    046A 931A      ST	R17,-Y
    046B 930A      ST	R16,-Y
    046C 9508      RET
mod8u:
    046D 9468      BSET	6
    046E C001      RJMP	xdiv8u
div8u:
    046F 94E8      BCLR	6
xdiv8u:
    0470 932A      ST	R18,-Y
    0471 92FA      ST	R15,-Y
    0472 92EA      ST	R14,-Y
    0473 24FF      CLR	R15
    0474 24EE      CLR	R14
    0475 E120      LDI	R18,0x10
    0476 0F00      LSL	R16
    0477 1CFF      ROL	R15
    0478 1CEE      ROL	R14
    0479 16E1      CP	R14,R17
    047A F010      BCS	0x047D
    047B 1AE1      SUB	R14,R17
    047C 9503      INC	R16
    047D 952A      DEC	R18
    047E F7B9      BNE	0x0476
    047F F40E      BRTC	0x0481
    0480 2D0E      MOV	R16,R14
    0481 90E9      LD	R14,Y+
    0482 90F9      LD	R15,Y+
    0483 9129      LD	R18,Y+
    0484 9508      RET
empy16s:
    0485 920A      ST	R0,-Y
    0486 921A      ST	R1,-Y
    0487 938A      ST	R24,-Y
    0488 939A      ST	R25,-Y
    0489 9F02      MUL	R16,R18
    048A 01C0      MOVW	R24,R0
    048B 9F12      MUL	R17,R18
    048C 0D90      ADD	R25,R0
    048D 9F03      MUL	R16,R19
    048E 0D90      ADD	R25,R0
    048F 018C      MOVW	R16,R24
    0490 9199      LD	R25,Y+
    0491 9189      LD	R24,Y+
    0492 9019      LD	R1,Y+
    0493 9009      LD	R0,Y+
    0494 9508      RET
pop_gset2:
    0495 E0E2      LDI	R30,2
    0496 C010      RJMP	pop
pop_gset3:
    0497 E0E4      LDI	R30,4
    0498 C00E      RJMP	pop
pop_gset5:
    0499 27EE      CLR	R30
    049A C00C      RJMP	pop
push_gset5:
    049B 92FA      ST	R15,-Y
    049C 92EA      ST	R14,-Y
push_gset4:
    049D 92DA      ST	R13,-Y
    049E 92CA      ST	R12,-Y
push_gset3:
    049F 92BA      ST	R11,-Y
    04A0 92AA      ST	R10,-Y
push_gset2:
    04A1 937A      ST	R23,-Y
    04A2 936A      ST	R22,-Y
push_gset1:
    04A3 935A      ST	R21,-Y
    04A4 934A      ST	R20,-Y
    04A5 9508      RET
pop_gset1:
    04A6 E0E1      LDI	R30,1
pop:
    04A7 9149      LD	R20,Y+
    04A8 9159      LD	R21,Y+
    04A9 FDE0      SBRC	R30,0
    04AA 9508      RET
    04AB 9169      LD	R22,Y+
    04AC 9179      LD	R23,Y+
    04AD FDE1      SBRC	R30,1
    04AE 9508      RET
    04AF 90A9      LD	R10,Y+
    04B0 90B9      LD	R11,Y+
    04B1 FDE2      SBRC	R30,2
    04B2 9508      RET
    04B3 90C9      LD	R12,Y+
    04B4 90D9      LD	R13,Y+
    04B5 FDE3      SBRC	R30,3
    04B6 9508      RET
    04B7 90E9      LD	R14,Y+
    04B8 90F9      LD	R15,Y+
    04B9 9508      RET
asgncblk:
    04BA 93AA      ST	R26,-Y
    04BB 93BA      ST	R27,-Y
    04BC 93EA      ST	R30,-Y
    04BD 93FA      ST	R31,-Y
    04BE 920A      ST	R0,-Y
    04BF 81AF      LDD	R26,Y+7
    04C0 85B8      LDD	R27,Y+8
    04C1 81ED      LDD	R30,Y+5
    04C2 81FE      LDD	R31,Y+6
    04C3 3000      CPI	R16,0
    04C4 0701      CPC	R16,R17
    04C5 F031      BEQ	0x04CC
    04C6 95C8      LPM
    04C7 920D      ST	R0,X+
    04C8 9631      ADIW	R30,1
    04C9 5001      SUBI	R16,1
    04CA 4010      SBCI	R17,0
    04CB CFF7      RJMP	0x04C3
    04CC 9009      LD	R0,Y+
    04CD 91F9      LD	R31,Y+
    04CE 91E9      LD	R30,Y+
    04CF 91B9      LD	R27,Y+
    04D0 91A9      LD	R26,Y+
    04D1 9624      ADIW	R28,4
    04D2 9508      RET

⌨️ 快捷键说明

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