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

📄 3310lcd_function.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0260           L42:
 0260                   .dbline 163
 0260 A394              inc R10
 0262           L44:
 0262                   .dbline 163
 0262 8A2D              mov R24,R10
 0264 8335              cpi R24,83
 0266 F8F2              brlo L41
 0268                   .dbline 169
 0268           ;           { 
 0268           ;             buffer_h[n]=buffer_h[n+1];
 0268           ;             buffer_l[n]=buffer_l[n+1];
 0268           ;           } 
 0268           ;         
 0268           ;         LCD_set_XY(X,Y);
 0268 2E2D              mov R18,R14
 026A FE01              movw R30,R28
 026C EE54              subi R30,78  ; addi 178
 026E FF4F              sbci R31,255
 0270 0081              ldd R16,z+0
 0272 FFDE              xcall _LCD_set_XY
 0274                   .dbline 170
 0274           ;         for (n=0; n<83; n++)
 0274 AA24              clr R10
 0276 09C0              xjmp L50
 0278           L47:
 0278                   .dbline 171
 0278                   .dbline 172
 0278 21E0              ldi R18,1
 027A CE01              movw R24,R28
 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 72D0              xcall _LCD_write_byte
 0288                   .dbline 173
 0288           L48:
 0288                   .dbline 170
 0288 A394              inc R10
 028A           L50:
 028A                   .dbline 170
 028A 8A2D              mov R24,R10
 028C 8335              cpi R24,83
 028E A0F3              brlo L47
 0290                   .dbline 175
 0290           ;           { 
 0290           ;             LCD_write_byte(buffer_h[n],1);
 0290           ;           } 
 0290           ;         
 0290           ;         LCD_set_XY(X,Y+1); 
 0290 2E2D              mov R18,R14
 0292 2F5F              subi R18,255    ; addi 1
 0294 FE01              movw R30,R28
 0296 EE54              subi R30,78  ; addi 178
 0298 FF4F              sbci R31,255
 029A 0081              ldd R16,z+0
 029C EADE              xcall _LCD_set_XY
 029E                   .dbline 176
 029E           ;         for (n=0; n<83; n++)
 029E AA24              clr R10
 02A0 0BC0              xjmp L54
 02A2           L51:
 02A2                   .dbline 177
 02A2                   .dbline 178
 02A2 21E0              ldi R18,1
 02A4 CE01              movw R24,R28
 02A6 8C5A              subi R24,172  ; offset = 84
 02A8 9F4F              sbci R25,255
 02AA EA2D              mov R30,R10
 02AC FF27              clr R31
 02AE E80F              add R30,R24
 02B0 F91F              adc R31,R25
 02B2 0081              ldd R16,z+0
 02B4 5BD0              xcall _LCD_write_byte
 02B6                   .dbline 179
 02B6           L52:
 02B6                   .dbline 176
 02B6 A394              inc R10
 02B8           L54:
 02B8                   .dbline 176
 02B8 8A2D              mov R24,R10
 02BA 8335              cpi R24,83
 02BC 90F3              brlo L51
 02BE                   .dbline 181
 02BE 0C2D              mov R16,R12
 02C0 1127              clr R17
 02C2 0E940000          xcall _delay_nms
 02C6                   .dbline 182
 02C6           L34:
 02C6                   .dbline 156
 02C6 4395              inc R20
 02C8           L36:
 02C8                   .dbline 156
 02C8 4C39              cpi R20,156
 02CA 08F4              brsh X1
 02CC 7DCF              xjmp L33
 02CE           X1:
 02CE                   .dbline -2
 02CE           L30:
 02CE EF96              adiw R28,63
 02D0 EF96              adiw R28,63
 02D2 AA96              adiw R28,42  ; offset = 168
 02D4 0E940000          xcall pop_gset5
 02D8 2496              adiw R28,4
 02DA                   .dbline 0 ; func end
 02DA 0895              ret
 02DC                   .dbsym r i 20 c
 02DC                   .dbsym r j 22 c
 02DC                   .dbsym l buffer_l 84 A[84:84]c
 02DC                   .dbsym l buffer_h 0 A[84:84]c
 02DC                   .dbsym r n 10 c
 02DC                   .dbsym r T 12 c
 02DC                   .dbsym r Y 14 c
 02DC                   .dbsym l X 178 c
 02DC                   .dbend
 02DC                   .dbfunc e LCD_draw_bmp_pixel _LCD_draw_bmp_pixel fV
 02DC           ;            row -> R20
 02DC           ;              n -> R22,R23
 02DC           ;              i -> R14,R15
 02DC           ;          Pix_y -> y+18
 02DC           ;          Pix_x -> R10
 02DC           ;            map -> R12,R13
 02DC           ;              Y -> y+12
 02DC           ;              X -> y+10
                        .even
 02DC           _LCD_draw_bmp_pixel::
 02DC 0E940000          xcall push_arg4
 02E0 0E940000          xcall push_gset5
 02E4 CE84              ldd R12,y+14
 02E6 DF84              ldd R13,y+15
 02E8 A888              ldd R10,y+16
 02EA                   .dbline -1
 02EA                   .dbline 240
 02EA           ;           { 
 02EA           ;             LCD_write_byte(buffer_l[n],1);
 02EA           ;           } 
 02EA           ;           
 02EA           ;        delay_nms(T);
 02EA           ;       }
 02EA           ;   }
 02EA           ; /*void LCD_move_english_string (unsigned char X, unsigned char Y, unsigned char T,unsigned int n)
 02EA           ;   {
 02EA           ;     unsigned char i,n,j=0;
 02EA           ;     unsigned char buffer[84]={0};
 02EA           ;     T -= 31;  
 02EA           ;     for (i=0; i<n; i++)
 02EA           ;       {
 02EA           ;         buffer[83] = LCD_write_byte(font6x8[T][j], 1);
 02EA           ;         j++;
 02EA           ;         if (j==6) j=0;
 02EA           ;         
 02EA           ;         for (n=0; n<83; n++)
 02EA           ;           { 
 02EA           ;             buffer_h[n]=buffer_h[n+1];
 02EA           ;             buffer_l[n]=buffer_l[n+1];
 02EA           ;           } 
 02EA           ;         
 02EA           ;         LCD_set_XY(X,Y);
 02EA           ;         for (n=0; n<83; n++)
 02EA           ;           { 
 02EA           ;             LCD_write_byte(buffer_h[n],1);
 02EA           ;           } 
 02EA           ;         
 02EA           ;         LCD_set_XY(X,Y+1); 
 02EA           ;         for (n=0; n<83; n++)
 02EA           ;           { 
 02EA           ;             LCD_write_byte(buffer_l[n],1);
 02EA           ;           } 
 02EA           ;           
 02EA           ;        delay_nms(T);
 02EA           ;       }
 02EA           ;   }*/
 02EA           ;   /*
 02EA           ; void LCD_write_char(unsigned char c)
 02EA           ;   {
 02EA           ;     unsigned char line;
 02EA           ; 
 02EA           ;     c -= 32;
 02EA           ; 
 02EA           ;     for (line=0; line<6; line++)
 02EA           ;       LCD_write_byte(font6x8[c][line], 1);
 02EA           ;   }
 02EA           ; */
 02EA           ; /*-----------------------------------------------------------------------
 02EA           ; LCD_draw_map      : 位图绘制函数
 02EA           ; 
 02EA           ; 输入参数:X、Y    :位图绘制的起始X、Y坐标;
 02EA           ;           *map    :位图点阵数据;
 02EA           ;           Pix_x   :位图像素(长)
 02EA           ;           Pix_y   :位图像素(宽)
 02EA           ; 
 02EA           ; 编写日期          :2004-8-13
 02EA           ; 最后修改日期      :2004-8-13 
 02EA           ; -----------------------------------------------------------------------*/
 02EA           ; void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
 02EA           ;                   unsigned char Pix_x,unsigned char Pix_y)
 02EA           ;   {
 02EA                   .dbline 244
 02EA           ;     unsigned int i,n;
 02EA           ;     unsigned char row;
 02EA           ;     
 02EA           ;     if (Pix_y%8==0) row=Pix_y/8;      //计算位图所占行数
 02EA 18E0              ldi R17,8
 02EC 0A89              ldd R16,y+18
 02EE 0E940000          xcall mod8u
 02F2 0023              tst R16
 02F4 29F4              brne L56
 02F6                   .dbline 244
 02F6 4A89              ldd R20,y+18
 02F8 4695              lsr R20
 02FA 4695              lsr R20
 02FC 4695              lsr R20
 02FE 05C0              xjmp L57
 0300           L56:
 0300                   .dbline 246
 0300           ;       else
 0300           ;         row=Pix_y/8+1;
 0300 4A89              ldd R20,y+18
 0302 4695              lsr R20
 0304 4695              lsr R20
 0306 4695              lsr R20
 0308 4F5F              subi R20,255    ; addi 1
 030A           L57:
 030A                   .dbline 248
 030A           ;     
 030A           ;     for (n=0;n<row;n++)
 030A 6627              clr R22
 030C 7727              clr R23
 030E 25C0              xjmp L61
 0310           L58:
 0310                   .dbline 249
 0310           ;       {
 0310                   .dbline 250
 0310           ;               LCD_set_XY(X,Y);
 0310 2C85              ldd R18,y+12
 0312 0A85              ldd R16,y+10
 0314 AEDE              xcall _LCD_set_XY
 0316                   .dbline 251
 0316           ;         for(i=0; i<Pix_x; i++)
 0316 EE24              clr R14
 0318 FF24              clr R15
 031A 15C0              xjmp L65
 031C           L62:
 031C                   .dbline 252
 031C                   .dbline 253
 031C 21E0              ldi R18,1
 031E 2A2C              mov R2,R10
 0320 3324              clr R3
 0322 2F93              push R18
 0324 3F93              push R19
 0326 9101              movw R18,R2
 0328 8B01              movw R16,R22
 032A 0E940000          xcall empy16s
 032E 3F91              pop R19
 0330 2F91              pop R18
 0332 F701              movw R30,R14
 0334 E00F              add R30,R16
 0336 F11F              adc R31,R17
 0338 EC0D              add R30,R12
 033A FD1D              adc R31,R13
 033C 0081              ldd R16,z+0
 033E 16D0              xcall _LCD_write_byte
 0340                   .dbline 254
 0340           L63:
 0340                   .dbline 251
 0340 C701              movw R24,R14
 0342 0196              adiw R24,1
 0344 7C01              movw R14,R24
 0346           L65:
 0346                   .dbline 251
 0346 2A2C              mov R2,R10
 0348 3324              clr R3
 034A E214              cp R14,R2
 034C F304              cpc R15,R3
 034E 30F3              brlo L62
 0350                   .dbline 255
 0350 0C84              ldd R0,y+12
 0352 0394              inc R0
 0354 0C86              std y+12,R0
 0356                   .dbline 256
 0356           L59:
 0356                   .dbline 248
 0356 6F5F              subi R22,255  ; offset = 1
 0358 7F4F              sbci R23,255
 035A           L61:
 035A                   .dbline 248
 035A 242E              mov R2,R20
 035C 3324              clr R3
 035E 6215              cp R22,R2
 0360 7305              cpc R23,R3
 0362 B0F2              brlo L58
 0364                   .dbline -2
 0364           L55:
 0364 0E940000          xcall pop_gset5
 0368 2496              adiw R28,4
 036A                   .dbline 0 ; func end
 036A 0895              ret
 036C                   .dbsym r row 20 c
 036C                   .dbsym r n 22 i
 036C                   .dbsym r i 14 i
 036C                   .dbsym l Pix_y 18 c
 036C                   .dbsym r Pix_x 10 c
 036C                   .dbsym r map 12 pc
 036C                   .dbsym l Y 12 c
 036C                   .dbsym l X 10 c
 036C                   .dbend
 036C                   .dbfunc e LCD_write_byte _LCD_write_byte fV
 036C           ;        command -> R18
 036C           ;           data -> R16
                        .even
 036C           _LCD_write_byte::
 036C                   .dbline -1
 036C                   .dbline 269
 036C           ;           {
 036C           ;             LCD_write_byte(map[i+n*Pix_x], 1);
 036C           ;           }
 036C           ;         Y++;                         //换行
 036C           ;       }      
 036C           ;   }
 036C           ; 
 036C           ; /*-----------------------------------------------------------------------
 036C           ; LCD_write_byte    : 使用SPI接口写数据到LCD
 036C           ; 
 036C           ; 输入参数:data    :写入的数据;
 036C           ;           command :写数据/命令选择;
 036C           ; 
 036C           ; 编写日期          :2004-8-10 
 036C           ; 最后修改日期      :2004-8-13 
 036C           ; -----------------------------------------------------------------------*/
 036C           ; void LCD_write_byte(unsigned char data, unsigned char command)
 036C           ;   {
 036C                   .dbline 270
 036C           ;     PORTA &= ~LCD_CE ;                        // 使能LCD
 036C DC98              cbi 0x1b,4
 036E                   .dbline 272
 036E           ;     
 036E           ;     if (command == 0)
 036E 2223              tst R18
 0370 11F4              brne L67
 0372                   .dbline 273
 0372           ;       PORTA &= ~LCD_DC ;              // 传送命令
 0372 DE98              cbi 0x1b,6
 0374 01C0              xjmp L68
 0376           L67:
 0376                   .dbline 275
 0376           ;     else
 0376           ;       PORTA |= LCD_DC ;                       // 传送数据
 0376 DE9A              sbi 0x1b,6
 0378           L68:
 0378                   .dbline 277
 0378           ; 
 0378           ;     SPDR = data;                      // 传送数据到SPI寄存器
 0378 0FB9              out 0xf,R16
 037A           L69:
 037A                   .dbline 279
 037A           L70:
 037A                   .dbline 279
 037A           ; 
 037A           ;     while ((SPSR & 0x80) == 0);         // 等待数据传送完毕
 037A 779B              sbis 0xe,7
 037C FECF              rjmp L69
 037E                   .dbline 281
 037E           ;       
 037E           ;     PORTA |= LCD_CE ;                 // 关闭LCD
 037E DC9A              sbi 0x1b,4
 0380                   .dbline -2
 0380           L66:
 0380                   .dbline 0 ; func end
 0380 0895              ret
 0382                   .dbsym r command 18 c
 0382                   .dbsym r data 16 c
 0382                   .dbend

⌨️ 快捷键说明

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