📄 nokia5110.lst
字号:
0457 54EE SUBI R30,0x4E
0458 4FFF SBCI R31,0xFF
0459 8100 LDD R16,Z+0
045A DEF9 RCALL _LCD_set_XY
(0216) for (n=0; n<83; n++)
045B 24AA CLR R10
045C C00B RJMP 0x0468
(0217) {
(0218) LCD_write_byte(buffer_l[n],1);
045D E021 LDI R18,1
045E 01CE MOVW R24,R28
045F 5A8C SUBI R24,0xAC
0460 4F9F SBCI R25,0xFF
0461 2DEA MOV R30,R10
0462 27FF CLR R31
0463 0FE8 ADD R30,R24
0464 1FF9 ADC R31,R25
0465 8100 LDD R16,Z+0
0466 D054 RCALL _LCD_write_byte
0467 94A3 INC R10
0468 2D8A MOV R24,R10
0469 3583 CPI R24,0x53
046A F390 BCS 0x045D
(0219) }
(0220)
(0221) delay_nms(T);
046B 2D0C MOV R16,R12
046C 2711 CLR R17
046D DEA5 RCALL _delay_nms
046E 9543 INC R20
046F 394C CPI R20,0x9C
0470 F408 BCC 0x0472
0471 CF80 RJMP 0x03F2
(0222) }
(0223) }
0472 96EF ADIW R28,0x3F
0473 96EF ADIW R28,0x3F
0474 96AA ADIW R28,0x2A
0475 D08D RCALL pop_gset5
0476 9624 ADIW R28,4
0477 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
0478 D059 RCALL push_arg4
0479 D0AB RCALL push_gset5
047A 84CE LDD R12,Y+14
047B 84DF LDD R13,Y+15
047C 88A8 LDD R10,Y+16
(0224)
(0225) /*-----------------------------------------------------------------------
(0226) LCD_draw_map : 位图绘制函数
(0227)
(0228) 输入参数:X、Y :位图绘制的起始X、Y坐标;
(0229) *map :位图点阵数据;
(0230) Pix_x :位图像素(长)
(0231) Pix_y :位图像素(宽)
(0232)
(0233) 编写日期 :2004-8-13
(0234) 最后修改日期 :2004-8-13
(0235) -----------------------------------------------------------------------*/
(0236) void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
(0237) unsigned char Pix_x,unsigned char Pix_y)
(0238) {
(0239) unsigned int i,n;
(0240) unsigned char row;
(0241)
(0242) if (Pix_y%8==0) row=Pix_y/8; //计算位图所占行数
047D E018 LDI R17,0x8
047E 890A LDD R16,Y+18
047F D057 RCALL mod8u
0480 2300 TST R16
0481 F429 BNE 0x0487
0482 894A LDD R20,Y+18
0483 9546 LSR R20
0484 9546 LSR R20
0485 9546 LSR R20
0486 C005 RJMP 0x048C
(0243) else
(0244) row=Pix_y/8+1;
0487 894A LDD R20,Y+18
0488 9546 LSR R20
0489 9546 LSR R20
048A 9546 LSR R20
048B 5F4F SUBI R20,0xFF
(0245)
(0246) for (n=0;n<row;n++)
048C 2766 CLR R22
048D 2777 CLR R23
048E C024 RJMP 0x04B3
(0247) {
(0248) LCD_set_XY(X,Y);
048F 852C LDD R18,Y+12
0490 850A LDD R16,Y+10
0491 DEC2 RCALL _LCD_set_XY
(0249) for(i=0; i<Pix_x; i++)
0492 24EE CLR R14
0493 24FF CLR R15
0494 C014 RJMP 0x04A9
(0250) {
(0251) LCD_write_byte(map[i+n*Pix_x], 1);
0495 E021 LDI R18,1
0496 2C2A MOV R2,R10
0497 2433 CLR R3
0498 932F PUSH R18
0499 933F PUSH R19
049A 0191 MOVW R18,R2
049B 018B MOVW R16,R22
049C D052 RCALL empy16s
049D 913F POP R19
049E 912F POP R18
049F 01F7 MOVW R30,R14
04A0 0FE0 ADD R30,R16
04A1 1FF1 ADC R31,R17
04A2 0DEC ADD R30,R12
04A3 1DFD ADC R31,R13
04A4 8100 LDD R16,Z+0
04A5 D015 RCALL _LCD_write_byte
04A6 01C7 MOVW R24,R14
04A7 9601 ADIW R24,1
04A8 017C MOVW R14,R24
04A9 2C2A MOV R2,R10
04AA 2433 CLR R3
04AB 14E2 CP R14,R2
04AC 04F3 CPC R15,R3
04AD F338 BCS 0x0495
(0252) }
(0253) Y++; //换行
04AE 840C LDD R0,Y+12
04AF 9403 INC R0
04B0 860C STD Y+12,R0
04B1 5F6F SUBI R22,0xFF
04B2 4F7F SBCI R23,0xFF
04B3 2E24 MOV R2,R20
04B4 2433 CLR R3
04B5 1562 CP R22,R2
04B6 0573 CPC R23,R3
04B7 F2B8 BCS 0x048F
(0254) }
(0255) }
04B8 D04A RCALL pop_gset5
04B9 9624 ADIW R28,4
04BA 9508 RET
_LCD_write_byte:
i --> R20
command --> R18
dat --> R16
04BB D049 RCALL push_gset1
(0256)
(0257) /*-----------------------------------------------------------------------
(0258) LCD_write_byte : 使用SPI接口写数据到LCD
(0259)
(0260) 输入参数:data :写入的数据;
(0261) command :写数据/命令选择;
(0262)
(0263) 编写日期 :2004-8-10
(0264) 最后修改日期 :2004-8-13
(0265) -----------------------------------------------------------------------*/
(0266) void LCD_write_byte(unsigned char dat, unsigned char command)
(0267) {
(0268) unsigned char i;
(0269) //PORTB &= ~LCD_CE ; // avr
(0270) //LCD_CE = 0; // 51
(0271) LCD_5110_PORT &= ~(0x01 << LCD_CE); // msp430
04BC 9893 CBI 0x12,3
(0272)
(0273) if (command == 0)
04BD 2322 TST R18
04BE F411 BNE 0x04C1
(0274) // PORTB &= ~LCD_DC ; // 传送命令
(0275) // LCD_DC = 0;
(0276) LCD_5110_PORT &= ~(0x01 << LCD_DC);
04BF 9892 CBI 0x12,2
04C0 C001 RJMP 0x04C2
(0277) else
(0278) // PORTB |= LCD_DC ; // 传送数据
(0279) // LCD_DC = 1;
(0280) LCD_5110_PORT |= (0x01 << LCD_DC);
04C1 9A92 SBI 0x12,2
(0281) for(i=0;i<8;i++)
04C2 2744 CLR R20
04C3 C009 RJMP 0x04CD
(0282) {
(0283) if(dat&0x80)
04C4 FF07 SBRS R16,7
04C5 C002 RJMP 0x04C8
(0284) //SDIN = 1;
(0285) LCD_5110_PORT |= (0x01 << LCD_DIN);
04C6 9A91 SBI 0x12,1
04C7 C001 RJMP 0x04C9
(0286) else
(0287) //SDIN = 0;
(0288) LCD_5110_PORT &= ~(0x01 << LCD_DIN);
04C8 9891 CBI 0x12,1
(0289) //SCLK = 0;
(0290) LCD_5110_PORT &= ~(0x01 << LCD_CLK);
04C9 9890 CBI 0x12,0
(0291) dat = dat << 1;
04CA 0F00 LSL R16
(0292) //SCLK = 1;
(0293) LCD_5110_PORT |= (0x01 << LCD_CLK);
04CB 9A90 SBI 0x12,0
04CC 9543 INC R20
04CD 3048 CPI R20,0x8
04CE F3A8 BCS 0x04C4
(0294) }
(0295) // SPDR = data; // 传送数据到SPI寄存器
(0296)
(0297) //while ((SPSR & 0x80) == 0); // 等待数据传送完毕
(0298)
(0299) //PORTB |= LCD_CE ; // 关闭LCD
(0300) // LCD_CE = 1;
(0301) LCD_5110_PORT |= (0x01 << LCD_CE);
04CF 9A93 SBI 0x12,3
(0302) }
FILE: <library>
04D0 D037 RCALL pop_gset1
04D1 9508 RET
push_arg4:
04D2 933A ST R19,-Y
04D3 932A ST R18,-Y
push_arg2:
04D4 931A ST R17,-Y
04D5 930A ST R16,-Y
04D6 9508 RET
mod8u:
04D7 9468 BSET 6
04D8 C001 RJMP xdiv8u
div8u:
04D9 94E8 BCLR 6
xdiv8u:
04DA 932A ST R18,-Y
04DB 92FA ST R15,-Y
04DC 92EA ST R14,-Y
04DD 24FF CLR R15
04DE 24EE CLR R14
04DF E120 LDI R18,0x10
04E0 0F00 LSL R16
04E1 1CFF ROL R15
04E2 1CEE ROL R14
04E3 16E1 CP R14,R17
04E4 F010 BCS 0x04E7
04E5 1AE1 SUB R14,R17
04E6 9503 INC R16
04E7 952A DEC R18
04E8 F7B9 BNE 0x04E0
04E9 F40E BRTC 0x04EB
04EA 2D0E MOV R16,R14
04EB 90E9 LD R14,Y+
04EC 90F9 LD R15,Y+
04ED 9129 LD R18,Y+
04EE 9508 RET
empy16s:
04EF 920A ST R0,-Y
04F0 921A ST R1,-Y
04F1 938A ST R24,-Y
04F2 939A ST R25,-Y
04F3 9F02 MUL R16,R18
04F4 01C0 MOVW R24,R0
04F5 9F12 MUL R17,R18
04F6 0D90 ADD R25,R0
04F7 9F03 MUL R16,R19
04F8 0D90 ADD R25,R0
04F9 018C MOVW R16,R24
04FA 9199 LD R25,Y+
04FB 9189 LD R24,Y+
04FC 9019 LD R1,Y+
04FD 9009 LD R0,Y+
04FE 9508 RET
pop_gset2:
04FF E0E2 LDI R30,2
0500 C008 RJMP pop
pop_gset3:
0501 E0E4 LDI R30,4
0502 C006 RJMP pop
pop_gset5:
0503 27EE CLR R30
0504 C004 RJMP pop
push_gset1:
0505 935A ST R21,-Y
0506 934A ST R20,-Y
0507 9508 RET
pop_gset1:
0508 E0E1 LDI R30,1
pop:
0509 9149 LD R20,Y+
050A 9159 LD R21,Y+
050B FDE0 SBRC R30,0
050C 9508 RET
050D 9169 LD R22,Y+
050E 9179 LD R23,Y+
050F FDE1 SBRC R30,1
0510 9508 RET
0511 90A9 LD R10,Y+
0512 90B9 LD R11,Y+
0513 FDE2 SBRC R30,2
0514 9508 RET
0515 90C9 LD R12,Y+
0516 90D9 LD R13,Y+
0517 FDE3 SBRC R30,3
0518 9508 RET
0519 90E9 LD R14,Y+
051A 90F9 LD R15,Y+
051B 9508 RET
push_gset2:
051C 937A ST R23,-Y
051D 936A ST R22,-Y
051E CFE6 RJMP push_gset1
push_gset3:
051F 92BA ST R11,-Y
0520 92AA ST R10,-Y
0521 CFFA RJMP push_gset2
push_gset4:
0522 92DA ST R13,-Y
0523 92CA ST R12,-Y
0524 CFFA RJMP push_gset3
push_gset5:
0525 92FA ST R15,-Y
0526 92EA ST R14,-Y
0527 CFFA RJMP push_gset4
asgncblk:
0528 93AA ST R26,-Y
0529 93BA ST R27,-Y
052A 93EA ST R30,-Y
052B 93FA ST R31,-Y
052C 920A ST R0,-Y
052D 81AF LDD R26,Y+7
052E 85B8 LDD R27,Y+8
052F 81ED LDD R30,Y+5
0530 81FE LDD R31,Y+6
0531 3000 CPI R16,0
0532 0701 CPC R16,R17
0533 F031 BEQ 0x053A
0534 95C8 LPM
0535 920D ST R0,X+
0536 9631 ADIW R30,1
0537 5001 SUBI R16,1
0538 4010 SBCI R17,0
0539 CFF7 RJMP 0x0531
053A 9009 LD R0,Y+
053B 91F9 LD R31,Y+
053C 91E9 LD R30,Y+
053D 91B9 LD R27,Y+
053E 91A9 LD R26,Y+
053F 9624 ADIW R28,4
0540 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -