📄 nokia_5110.lis
字号:
0292 .dbline 212
0292 21E0 ldi R18,1
0294 CE01 movw R24,R28
0296 EA2D mov R30,R10
0298 FF27 clr R31
029A E80F add R30,R24
029C F91F adc R31,R25
029E 0081 ldd R16,z+0
02A0 6BD0 rcall _LCD_write_byte
02A2 .dbline 213
02A2 L63:
02A2 .dbline 210
02A2 A394 inc R10
02A4 L65:
02A4 .dbline 210
02A4 8A2D mov R24,R10
02A6 8335 cpi R24,83
02A8 A0F3 brlo L62
02AA .dbline 215
02AA ; {
02AA ; LCD_write_byte(buffer_h[n],1);
02AA ; }
02AA ;
02AA ; LCD_set_XY(X,Y+1);
02AA 2E2D mov R18,R14
02AC 2F5F subi R18,255 ; addi 1
02AE FE01 movw R30,R28
02B0 EE54 subi R30,78 ; addi 178
02B2 FF4F sbci R31,255
02B4 0081 ldd R16,z+0
02B6 F9DE rcall _LCD_set_XY
02B8 .dbline 216
02B8 ; for (n=0; n<83; n++)
02B8 AA24 clr R10
02BA 0BC0 rjmp L69
02BC L66:
02BC .dbline 217
02BC .dbline 218
02BC 21E0 ldi R18,1
02BE CE01 movw R24,R28
02C0 8C5A subi R24,172 ; offset = 84
02C2 9F4F sbci R25,255
02C4 EA2D mov R30,R10
02C6 FF27 clr R31
02C8 E80F add R30,R24
02CA F91F adc R31,R25
02CC 0081 ldd R16,z+0
02CE 54D0 rcall _LCD_write_byte
02D0 .dbline 219
02D0 L67:
02D0 .dbline 216
02D0 A394 inc R10
02D2 L69:
02D2 .dbline 216
02D2 8A2D mov R24,R10
02D4 8335 cpi R24,83
02D6 90F3 brlo L66
02D8 .dbline 221
02D8 0C2D mov R16,R12
02DA 1127 clr R17
02DC A5DE rcall _delay_nms
02DE .dbline 222
02DE L49:
02DE .dbline 196
02DE 4395 inc R20
02E0 L51:
02E0 .dbline 196
02E0 4C39 cpi R20,156
02E2 08F4 brsh X1
02E4 80CF rjmp L48
02E6 X1:
02E6 .dbline -2
02E6 .dbline 223
02E6 ; {
02E6 ; LCD_write_byte(buffer_l[n],1);
02E6 ; }
02E6 ;
02E6 ; delay_nms(T);
02E6 ; }
02E6 ; }
02E6 L45:
02E6 EF96 adiw R28,63
02E8 EF96 adiw R28,63
02EA AA96 adiw R28,42 ; offset = 168
02EC 00D0 rcall pop_gset5
02EE 2496 adiw R28,4
02F0 .dbline 0 ; func end
02F0 0895 ret
02F2 .dbsym r i 20 c
02F2 .dbsym r j 22 c
02F2 .dbsym l buffer_l 84 A[84:84]c
02F2 .dbsym l buffer_h 0 A[84:84]c
02F2 .dbsym r n 10 c
02F2 .dbsym r T 12 c
02F2 .dbsym r Y 14 c
02F2 .dbsym l X 178 c
02F2 .dbend
02F2 .dbfunc e LCD_draw_bmp_pixel _LCD_draw_bmp_pixel fV
02F2 ; row -> R20
02F2 ; n -> R22,R23
02F2 ; i -> R14,R15
02F2 ; Pix_y -> y+18
02F2 ; Pix_x -> R10
02F2 ; map -> R12,R13
02F2 ; Y -> y+12
02F2 ; X -> y+10
.even
02F2 _LCD_draw_bmp_pixel::
02F2 00D0 rcall push_arg4
02F4 00D0 rcall push_gset5
02F6 CE84 ldd R12,y+14
02F8 DF84 ldd R13,y+15
02FA A888 ldd R10,y+16
02FC .dbline -1
02FC .dbline 238
02FC ;
02FC ; /*-----------------------------------------------------------------------
02FC ; LCD_draw_map : 位图绘制函数
02FC ;
02FC ; 输入参数:X、Y :位图绘制的起始X、Y坐标;
02FC ; *map :位图点阵数据;
02FC ; Pix_x :位图像素(长)
02FC ; Pix_y :位图像素(宽)
02FC ;
02FC ; 编写日期 :2004-8-13
02FC ; 最后修改日期 :2004-8-13
02FC ; -----------------------------------------------------------------------*/
02FC ; void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
02FC ; unsigned char Pix_x,unsigned char Pix_y)
02FC ; {
02FC .dbline 242
02FC ; unsigned int i,n;
02FC ; unsigned char row;
02FC ;
02FC ; if (Pix_y%8==0) row=Pix_y/8; //计算位图所占行数
02FC 18E0 ldi R17,8
02FE 0A89 ldd R16,y+18
0300 00D0 rcall mod8u
0302 0023 tst R16
0304 29F4 brne L71
0306 .dbline 242
0306 4A89 ldd R20,y+18
0308 4695 lsr R20
030A 4695 lsr R20
030C 4695 lsr R20
030E 05C0 rjmp L72
0310 L71:
0310 .dbline 244
0310 ; else
0310 ; row=Pix_y/8+1;
0310 4A89 ldd R20,y+18
0312 4695 lsr R20
0314 4695 lsr R20
0316 4695 lsr R20
0318 4F5F subi R20,255 ; addi 1
031A L72:
031A .dbline 246
031A ;
031A ; for (n=0;n<row;n++)
031A 6627 clr R22
031C 7727 clr R23
031E 24C0 rjmp L76
0320 L73:
0320 .dbline 247
0320 ; {
0320 .dbline 248
0320 ; LCD_set_XY(X,Y);
0320 2C85 ldd R18,y+12
0322 0A85 ldd R16,y+10
0324 C2DE rcall _LCD_set_XY
0326 .dbline 249
0326 ; for(i=0; i<Pix_x; i++)
0326 EE24 clr R14
0328 FF24 clr R15
032A 14C0 rjmp L80
032C L77:
032C .dbline 250
032C .dbline 251
032C 21E0 ldi R18,1
032E 2A2C mov R2,R10
0330 3324 clr R3
0332 2F93 push R18
0334 3F93 push R19
0336 9101 movw R18,R2
0338 8B01 movw R16,R22
033A 00D0 rcall empy16s
033C 3F91 pop R19
033E 2F91 pop R18
0340 F701 movw R30,R14
0342 E00F add R30,R16
0344 F11F adc R31,R17
0346 EC0D add R30,R12
0348 FD1D adc R31,R13
034A 0081 ldd R16,z+0
034C 15D0 rcall _LCD_write_byte
034E .dbline 252
034E L78:
034E .dbline 249
034E C701 movw R24,R14
0350 0196 adiw R24,1
0352 7C01 movw R14,R24
0354 L80:
0354 .dbline 249
0354 2A2C mov R2,R10
0356 3324 clr R3
0358 E214 cp R14,R2
035A F304 cpc R15,R3
035C 38F3 brlo L77
035E .dbline 253
035E 0C84 ldd R0,y+12
0360 0394 inc R0
0362 0C86 std y+12,R0
0364 .dbline 254
0364 L74:
0364 .dbline 246
0364 6F5F subi R22,255 ; offset = 1
0366 7F4F sbci R23,255
0368 L76:
0368 .dbline 246
0368 242E mov R2,R20
036A 3324 clr R3
036C 6215 cp R22,R2
036E 7305 cpc R23,R3
0370 B8F2 brlo L73
0372 .dbline -2
0372 .dbline 255
0372 ; {
0372 ; LCD_write_byte(map[i+n*Pix_x], 1);
0372 ; }
0372 ; Y++; //换行
0372 ; }
0372 ; }
0372 L70:
0372 00D0 rcall pop_gset5
0374 2496 adiw R28,4
0376 .dbline 0 ; func end
0376 0895 ret
0378 .dbsym r row 20 c
0378 .dbsym r n 22 i
0378 .dbsym r i 14 i
0378 .dbsym l Pix_y 18 c
0378 .dbsym r Pix_x 10 c
0378 .dbsym r map 12 pc
0378 .dbsym l Y 12 c
0378 .dbsym l X 10 c
0378 .dbend
0378 .dbfunc e LCD_write_byte _LCD_write_byte fV
0378 ; i -> R20
0378 ; command -> R18
0378 ; dat -> R16
.even
0378 _LCD_write_byte::
0378 00D0 rcall push_gset1
037A .dbline -1
037A .dbline 267
037A ;
037A ; /*-----------------------------------------------------------------------
037A ; LCD_write_byte : 使用SPI接口写数据到LCD
037A ;
037A ; 输入参数:data :写入的数据;
037A ; command :写数据/命令选择;
037A ;
037A ; 编写日期 :2004-8-10
037A ; 最后修改日期 :2004-8-13
037A ; -----------------------------------------------------------------------*/
037A ; void LCD_write_byte(unsigned char dat, unsigned char command)
037A ; {
037A .dbline 271
037A ; unsigned char i;
037A ; //PORTB &= ~LCD_CE ; // avr
037A ; //LCD_CE = 0; // 51
037A ; LCD_5110_PORT &= ~(0x01 << LCD_CE); // msp430
037A 9398 cbi 0x12,3
037C .dbline 273
037C ;
037C ; if (command == 0)
037C 2223 tst R18
037E 11F4 brne L82
0380 .dbline 276
0380 ; // PORTB &= ~LCD_DC ; // 传送命令
0380 ; // LCD_DC = 0;
0380 ; LCD_5110_PORT &= ~(0x01 << LCD_DC);
0380 9298 cbi 0x12,2
0382 01C0 rjmp L83
0384 L82:
0384 .dbline 280
0384 ; else
0384 ; // PORTB |= LCD_DC ; // 传送数据
0384 ; // LCD_DC = 1;
0384 ; LCD_5110_PORT |= (0x01 << LCD_DC);
0384 929A sbi 0x12,2
0386 L83:
0386 .dbline 281
0386 ; for(i=0;i<8;i++)
0386 4427 clr R20
0388 09C0 rjmp L87
038A L84:
038A .dbline 282
038A ; {
038A .dbline 283
038A ; if(dat&0x80)
038A 07FF sbrs R16,7
038C 02C0 rjmp L88
038E .dbline 285
038E ; //SDIN = 1;
038E ; LCD_5110_PORT |= (0x01 << LCD_DIN);
038E 919A sbi 0x12,1
0390 01C0 rjmp L89
0392 L88:
0392 .dbline 288
0392 ; else
0392 ; //SDIN = 0;
0392 ; LCD_5110_PORT &= ~(0x01 << LCD_DIN);
0392 9198 cbi 0x12,1
0394 L89:
0394 .dbline 290
0394 9098 cbi 0x12,0
0396 .dbline 291
0396 000F lsl R16
0398 .dbline 293
0398 909A sbi 0x12,0
039A .dbline 294
039A L85:
039A .dbline 281
039A 4395 inc R20
039C L87:
039C .dbline 281
039C 4830 cpi R20,8
039E A8F3 brlo L84
03A0 .dbline 301
03A0 ; //SCLK = 0;
03A0 ; LCD_5110_PORT &= ~(0x01 << LCD_CLK);
03A0 ; dat = dat << 1;
03A0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -