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

📄 3310lcd_function.lis

📁 Nakia LCD3310 Driver
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0212 CE01              movw R24,R28
 0214 8B5A              subi R24,171  ; offset = 85
 0216 9F4F              sbci R25,255
 0218 EA2D              mov R30,R10
 021A FF27              clr R31
 021C E80F              add R30,R24
 021E F91F              adc R31,R25
 0220 2080              ldd R2,z+0
 0222 CE01              movw R24,R28
 0224 8C5A              subi R24,172  ; offset = 84
 0226 9F4F              sbci R25,255
 0228 EA2D              mov R30,R10
 022A FF27              clr R31
 022C E80F              add R30,R24
 022E F91F              adc R31,R25
 0230 2082              std z+0,R2
 0232                   .dbline 170
 0232           L42:
 0232                   .dbline 166
 0232 A394              inc R10
 0234           L44:
 0234                   .dbline 166
 0234 8A2D              mov R24,R10
 0236 8335              cpi R24,83
 0238 F8F2              brlo L41
 023A                   .dbline 172
 023A           ;           { 
 023A           ;             buffer_h[n]=buffer_h[n+1];
 023A           ;             buffer_l[n]=buffer_l[n+1];
 023A           ;           } 
 023A           ;         
 023A           ;         LCD_set_XY(X,Y);
 023A 2E2D              mov R18,R14
 023C FE01              movw R30,R28
 023E EE54              subi R30,78  ; addi 178
 0240 FF4F              sbci R31,255
 0242 0081              ldd R16,z+0
 0244 0EDF              rcall _LCD_set_XY
 0246                   .dbline 173
 0246           ;         for (n=0; n<83; n++)
 0246 AA24              clr R10
 0248 09C0              rjmp L50
 024A           L47:
 024A                   .dbline 174
 024A                   .dbline 175
 024A 21E0              ldi R18,1
 024C CE01              movw R24,R28
 024E EA2D              mov R30,R10
 0250 FF27              clr R31
 0252 E80F              add R30,R24
 0254 F91F              adc R31,R25
 0256 0081              ldd R16,z+0
 0258 6BD0              rcall _LCD_write_byte
 025A                   .dbline 176
 025A           L48:
 025A                   .dbline 173
 025A A394              inc R10
 025C           L50:
 025C                   .dbline 173
 025C 8A2D              mov R24,R10
 025E 8335              cpi R24,83
 0260 A0F3              brlo L47
 0262                   .dbline 178
 0262           ;           { 
 0262           ;             LCD_write_byte(buffer_h[n],1);
 0262           ;           } 
 0262           ;         
 0262           ;         LCD_set_XY(X,Y+1); 
 0262 2E2D              mov R18,R14
 0264 2F5F              subi R18,255    ; addi 1
 0266 FE01              movw R30,R28
 0268 EE54              subi R30,78  ; addi 178
 026A FF4F              sbci R31,255
 026C 0081              ldd R16,z+0
 026E F9DE              rcall _LCD_set_XY
 0270                   .dbline 179
 0270           ;         for (n=0; n<83; n++)
 0270 AA24              clr R10
 0272 0BC0              rjmp L54
 0274           L51:
 0274                   .dbline 180
 0274                   .dbline 181
 0274 21E0              ldi R18,1
 0276 CE01              movw R24,R28
 0278 8C5A              subi R24,172  ; offset = 84
 027A 9F4F              sbci R25,255
 027C EA2D              mov R30,R10
 027E FF27              clr R31
 0280 E80F              add R30,R24
 0282 F91F              adc R31,R25
 0284 0081              ldd R16,z+0
 0286 54D0              rcall _LCD_write_byte
 0288                   .dbline 182
 0288           L52:
 0288                   .dbline 179
 0288 A394              inc R10
 028A           L54:
 028A                   .dbline 179
 028A 8A2D              mov R24,R10
 028C 8335              cpi R24,83
 028E 90F3              brlo L51
 0290                   .dbline 184
 0290 0C2D              mov R16,R12
 0292 1127              clr R17
 0294 00D0              rcall _delay_nms
 0296                   .dbline 185
 0296           L34:
 0296                   .dbline 159
 0296 4395              inc R20
 0298           L36:
 0298                   .dbline 159
 0298 4C39              cpi R20,156
 029A 08F4              brsh X1
 029C 80CF              rjmp L33
 029E           X1:
 029E                   .dbline -2
 029E           L30:
 029E EF96              adiw R28,63
 02A0 EF96              adiw R28,63
 02A2 AA96              adiw R28,42  ; offset = 168
 02A4 00D0              rcall pop_gset5
 02A6 2496              adiw R28,4
 02A8                   .dbline 0 ; func end
 02A8 0895              ret
 02AA                   .dbsym r i 20 c
 02AA                   .dbsym r j 22 c
 02AA                   .dbsym l buffer_l 84 A[84:84]c
 02AA                   .dbsym l buffer_h 0 A[84:84]c
 02AA                   .dbsym r n 10 c
 02AA                   .dbsym r T 12 c
 02AA                   .dbsym r Y 14 c
 02AA                   .dbsym l X 178 c
 02AA                   .dbend
 02AA                   .dbfunc e LCD_draw_bmp_pixel _LCD_draw_bmp_pixel fV
 02AA           ;            row -> R20
 02AA           ;              n -> R22,R23
 02AA           ;              i -> R14,R15
 02AA           ;          Pix_y -> y+18
 02AA           ;          Pix_x -> R10
 02AA           ;            map -> R12,R13
 02AA           ;              Y -> y+12
 02AA           ;              X -> y+10
                        .even
 02AA           _LCD_draw_bmp_pixel::
 02AA 00D0              rcall push_arg4
 02AC 00D0              rcall push_gset5
 02AE CE84              ldd R12,y+14
 02B0 DF84              ldd R13,y+15
 02B2 A888              ldd R10,y+16
 02B4                   .dbline -1
 02B4                   .dbline 201
 02B4           ;           { 
 02B4           ;             LCD_write_byte(buffer_l[n],1);
 02B4           ;           } 
 02B4           ;           
 02B4           ;        delay_nms(T);
 02B4           ;       }
 02B4           ;   }
 02B4           ; 
 02B4           ; /*-----------------------------------------------------------------------
 02B4           ; LCD_draw_map      : 位图绘制函数
 02B4           ; 
 02B4           ; 输入参数:X、Y    :位图绘制的起始X、Y坐标;
 02B4           ;           *map    :位图点阵数据;
 02B4           ;           Pix_x   :位图像素(长)
 02B4           ;           Pix_y   :位图像素(宽)
 02B4           ; 
 02B4           ; 编写日期          :2004-8-13
 02B4           ; 最后修改日期      :2004-8-13 
 02B4           ; -----------------------------------------------------------------------*/
 02B4           ; void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
 02B4           ;                   unsigned char Pix_x,unsigned char Pix_y)
 02B4           ;   {
 02B4                   .dbline 205
 02B4           ;     unsigned int i,n;
 02B4           ;     unsigned char row;
 02B4           ;     
 02B4           ;     if (Pix_y%8==0) row=Pix_y/8;      //计算位图所占行数
 02B4 18E0              ldi R17,8
 02B6 0A89              ldd R16,y+18
 02B8 00D0              rcall mod8u
 02BA 0023              tst R16
 02BC 29F4              brne L56
 02BE                   .dbline 205
 02BE 4A89              ldd R20,y+18
 02C0 4695              lsr R20
 02C2 4695              lsr R20
 02C4 4695              lsr R20
 02C6 05C0              rjmp L57
 02C8           L56:
 02C8                   .dbline 207
 02C8           ;       else
 02C8           ;         row=Pix_y/8+1;
 02C8 4A89              ldd R20,y+18
 02CA 4695              lsr R20
 02CC 4695              lsr R20
 02CE 4695              lsr R20
 02D0 4F5F              subi R20,255    ; addi 1
 02D2           L57:
 02D2                   .dbline 209
 02D2           ;     
 02D2           ;     for (n=0;n<row;n++)
 02D2 6627              clr R22
 02D4 7727              clr R23
 02D6 24C0              rjmp L61
 02D8           L58:
 02D8                   .dbline 210
 02D8           ;       {
 02D8                   .dbline 211
 02D8           ;               LCD_set_XY(X,Y);
 02D8 2C85              ldd R18,y+12
 02DA 0A85              ldd R16,y+10
 02DC C2DE              rcall _LCD_set_XY
 02DE                   .dbline 212
 02DE           ;         for(i=0; i<Pix_x; i++)
 02DE EE24              clr R14
 02E0 FF24              clr R15
 02E2 14C0              rjmp L65
 02E4           L62:
 02E4                   .dbline 213
 02E4                   .dbline 214
 02E4 21E0              ldi R18,1
 02E6 2A2C              mov R2,R10
 02E8 3324              clr R3
 02EA 2F93              push R18
 02EC 3F93              push R19
 02EE 9101              movw R18,R2
 02F0 8B01              movw R16,R22
 02F2 00D0              rcall empy16s
 02F4 3F91              pop R19
 02F6 2F91              pop R18
 02F8 F701              movw R30,R14
 02FA E00F              add R30,R16
 02FC F11F              adc R31,R17
 02FE EC0D              add R30,R12
 0300 FD1D              adc R31,R13
 0302 0081              ldd R16,z+0
 0304 15D0              rcall _LCD_write_byte
 0306                   .dbline 215
 0306           L63:
 0306                   .dbline 212
 0306 C701              movw R24,R14
 0308 0196              adiw R24,1
 030A 7C01              movw R14,R24
 030C           L65:
 030C                   .dbline 212
 030C 2A2C              mov R2,R10
 030E 3324              clr R3
 0310 E214              cp R14,R2
 0312 F304              cpc R15,R3
 0314 38F3              brlo L62
 0316                   .dbline 216
 0316 0C84              ldd R0,y+12
 0318 0394              inc R0
 031A 0C86              std y+12,R0
 031C                   .dbline 217
 031C           L59:
 031C                   .dbline 209
 031C 6F5F              subi R22,255  ; offset = 1
 031E 7F4F              sbci R23,255
 0320           L61:
 0320                   .dbline 209
 0320 242E              mov R2,R20
 0322 3324              clr R3
 0324 6215              cp R22,R2
 0326 7305              cpc R23,R3
 0328 B8F2              brlo L58
 032A                   .dbline -2
 032A           L55:
 032A 00D0              rcall pop_gset5
 032C 2496              adiw R28,4
 032E                   .dbline 0 ; func end
 032E 0895              ret
 0330                   .dbsym r row 20 c
 0330                   .dbsym r n 22 i
 0330                   .dbsym r i 14 i
 0330                   .dbsym l Pix_y 18 c
 0330                   .dbsym r Pix_x 10 c
 0330                   .dbsym r map 12 pc
 0330                   .dbsym l Y 12 c
 0330                   .dbsym l X 10 c
 0330                   .dbend
 0330                   .dbfunc e LCD_write_byte _LCD_write_byte fV
 0330           ;        command -> R18
 0330           ;           data -> R16
                        .even
 0330           _LCD_write_byte::
 0330                   .dbline -1
 0330                   .dbline 230
 0330           ;           {
 0330           ;             LCD_write_byte(map[i+n*Pix_x], 1);
 0330           ;           }
 0330           ;         Y++;                         //换行
 0330           ;       }      
 0330           ;   }
 0330           ; 
 0330           ; /*-----------------------------------------------------------------------
 0330           ; LCD_write_byte    : 使用SPI接口写数据到LCD
 0330           ; 
 0330           ; 输入参数:data    :写入的数据;
 0330           ;           command :写数据/命令选择;
 0330           ; 
 0330           ; 编写日期          :2004-8-10 
 0330           ; 最后修改日期      :2004-8-13 
 0330           ; -----------------------------------------------------------------------*/
 0330           ; void LCD_write_byte(unsigned char data, unsigned char command)
 0330           ;   {
 0330                   .dbline 231
 0330           ;     PORTB &= ~LCD_CE ;                        // 使能LCD
 0330 C298              cbi 0x18,2
 0332                   .dbline 233
 0332           ;     
 0332           ;     if (command == 0)
 0332 2223              tst R18
 0334 11F4              brne L67
 0336                   .dbline 234
 0336           ;       PORTB &= ~LCD_DC ;              // 传送命令
 0336 C098              cbi 0x18,0
 0338 01C0              rjmp L68
 033A           L67:
 033A                   .dbline 236
 033A           ;     else
 033A           ;       PORTB |= LCD_DC ;                       // 传送数据
 033A C09A              sbi 0x18,0
 033C           L68:
 033C                   .dbline 238
 033C           ; 
 033C           ;     SPDR = data;                      // 传送数据到SPI寄存器
 033C 0FB9              out 0xf,R16
 033E           L69:
 033E                   .dbline 240
 033E           L70:
 033E                   .dbline 240
 033E           ; 
 033E           ;     while ((SPSR & 0x80) == 0);         // 等待数据传送完毕
 033E 779B              sbis 0xe,7
 0340 FECF              rjmp L69
 0342                   .dbline 242
 0342           ;       
 0342           ;     PORTB |= LCD_CE ;                 // 关闭LCD
 0342 C29A              sbi 0x18,2
 0344                   .dbline -2
 0344           L66:
 0344                   .dbline 0 ; func end
 0344 0895              ret
 0346                   .dbsym r command 18 c
 0346                   .dbsym r data 16 c
 0346                   .dbend

⌨️ 快捷键说明

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