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

📄 lcd.lis

📁 AVR单片机 C语言程序设计经典实用
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0216 E883              std y+0,R30
 0218 242F              mov R18,R20
 021A 062F              mov R16,R22
 021C 9DDF              xcall _LCD_Write_Data
 021E                   .dbline 358
 021E           L46:
 021E                   .dbline 353
 021E A394              inc R10
 0220           L48:
 0220                   .dbline 353
 0220 8A2D              mov R24,R10
 0222 8830              cpi R24,8
 0224 58F3              brlo L45
 0226                   .dbline 359
 0226           ;               {
 0226           ;                       x_address = x << 1;
 0226           ;                       y_address = (y << 3) + i;
 0226           ;                       LCD_Write_Data(x_address,y_address,*disp++);
 0226           ;               }
 0226           ;               for(i = 0;i < 8;i++)
 0226 AA24              clr R10
 0228 13C0              xjmp L52
 022A           L49:
 022A                   .dbline 360
 022A                   .dbline 361
 022A 6B85              ldd R22,y+11
 022C 660F              lsl R22
 022E 6F5F              subi R22,255    ; addi 1
 0230                   .dbline 362
 0230 4E2D              mov R20,R14
 0232 440F              lsl R20
 0234 440F              lsl R20
 0236 440F              lsl R20
 0238 4A0D              add R20,R10
 023A                   .dbline 363
 023A 1601              movw R2,R12
 023C C101              movw R24,R2
 023E 0196              adiw R24,1
 0240 6C01              movw R12,R24
 0242 F101              movw R30,R2
 0244 E491              lpm R30,Z
 0246 E883              std y+0,R30
 0248 242F              mov R18,R20
 024A 062F              mov R16,R22
 024C 85DF              xcall _LCD_Write_Data
 024E                   .dbline 364
 024E           L50:
 024E                   .dbline 359
 024E A394              inc R10
 0250           L52:
 0250                   .dbline 359
 0250 8A2D              mov R24,R10
 0252 8830              cpi R24,8
 0254 50F3              brlo L49
 0256                   .dbline 365
 0256           L43:
 0256                   .dbline -2
 0256                   .dbline 366
 0256           ;               {
 0256           ;                       x_address = (x << 1) + 1;
 0256           ;                       y_address = (y << 3) + i;
 0256           ;                       LCD_Write_Data(x_address,y_address,*disp++);
 0256           ;               }
 0256           ;       }
 0256           ; }
 0256           L42:
 0256 2196              adiw R28,1
 0258 0E940000          xcall pop_gset5
 025C 2496              adiw R28,4
 025E                   .dbline 0 ; func end
 025E 0895              ret
 0260                   .dbsym r y_address 20 c
 0260                   .dbsym r x_address 22 c
 0260                   .dbsym r i 10 c
 0260                   .dbsym r disp 12 pkc
 0260                   .dbsym r y 14 c
 0260                   .dbsym l x 11 c
 0260                   .dbend
 0260                   .dbfunc e LCD_Write_Word _LCD_Write_Word fV
 0260           ;      y_address -> R20
 0260           ;      x_address -> R22
 0260           ;              i -> R10
 0260           ;           disp -> R12,R13
 0260           ;              y -> R14
 0260           ;              x -> y+11
                        .even
 0260           _LCD_Write_Word::
 0260 0E940000          xcall push_arg4
 0264 0E940000          xcall push_gset5
 0268 E22E              mov R14,R18
 026A 2197              sbiw R28,1
 026C CF84              ldd R12,y+15
 026E D888              ldd R13,y+16
 0270                   .dbline -1
 0270                   .dbline 377
 0270           ; 
 0270           ; //******************************************************************************
 0270           ; // Function    : LCD_Write_Word
 0270           ; // Input       : x in [0,3] and y in [0,14],disp - start address of display buffer
 0270           ; // Output      : none
 0270           ; // Description : Application Level Function,在LCD的指定显示单元显示一个中文。
 0270           ; //               每个显示单元默认为16*16点阵字体,对128*64点阵LCD,x最多显示4行
 0270           ; //               字符,y最多显示16个字符,但不允许显示半个汉字
 0270           ; //******************************************************************************
 0270           ; void LCD_Write_Word(INT8U x,INT8U y,const INT8U *disp)
 0270           ; {
 0270                   .dbline 381
 0270           ;       INT8U i;
 0270           ;       INT8U x_address;
 0270           ;       INT8U y_address;
 0270           ;       if((x < 4) && (y < 15))
 0270 8B85              ldd R24,y+11
 0272 8430              cpi R24,4
 0274 08F0              brlo X2
 0276 33C0              xjmp L54
 0278           X2:
 0278 8E2D              mov R24,R14
 027A 8F30              cpi R24,15
 027C 08F0              brlo X3
 027E 2FC0              xjmp L54
 0280           X3:
 0280                   .dbline 382
 0280           ;       {
 0280                   .dbline 383
 0280           ;               for(i = 0;i < 16;i++)
 0280 AA24              clr R10
 0282 12C0              xjmp L59
 0284           L56:
 0284                   .dbline 384
 0284                   .dbline 385
 0284 6B85              ldd R22,y+11
 0286 660F              lsl R22
 0288                   .dbline 386
 0288 4E2D              mov R20,R14
 028A 440F              lsl R20
 028C 440F              lsl R20
 028E 440F              lsl R20
 0290 4A0D              add R20,R10
 0292                   .dbline 387
 0292 1601              movw R2,R12
 0294 C101              movw R24,R2
 0296 0196              adiw R24,1
 0298 6C01              movw R12,R24
 029A F101              movw R30,R2
 029C E491              lpm R30,Z
 029E E883              std y+0,R30
 02A0 242F              mov R18,R20
 02A2 062F              mov R16,R22
 02A4 59DF              xcall _LCD_Write_Data
 02A6                   .dbline 388
 02A6           L57:
 02A6                   .dbline 383
 02A6 A394              inc R10
 02A8           L59:
 02A8                   .dbline 383
 02A8 8A2D              mov R24,R10
 02AA 8031              cpi R24,16
 02AC 58F3              brlo L56
 02AE                   .dbline 389
 02AE           ;               {
 02AE           ;                       x_address = x << 1;
 02AE           ;                       y_address = (y << 3) + i;
 02AE           ;                       LCD_Write_Data(x_address,y_address,*disp++);
 02AE           ;               }
 02AE           ;               for(i = 0;i < 16;i++)
 02AE AA24              clr R10
 02B0 13C0              xjmp L63
 02B2           L60:
 02B2                   .dbline 390
 02B2                   .dbline 391
 02B2 6B85              ldd R22,y+11
 02B4 660F              lsl R22
 02B6 6F5F              subi R22,255    ; addi 1
 02B8                   .dbline 392
 02B8 4E2D              mov R20,R14
 02BA 440F              lsl R20
 02BC 440F              lsl R20
 02BE 440F              lsl R20
 02C0 4A0D              add R20,R10
 02C2                   .dbline 393
 02C2 1601              movw R2,R12
 02C4 C101              movw R24,R2
 02C6 0196              adiw R24,1
 02C8 6C01              movw R12,R24
 02CA F101              movw R30,R2
 02CC E491              lpm R30,Z
 02CE E883              std y+0,R30
 02D0 242F              mov R18,R20
 02D2 062F              mov R16,R22
 02D4 41DF              xcall _LCD_Write_Data
 02D6                   .dbline 394
 02D6           L61:
 02D6                   .dbline 389
 02D6 A394              inc R10
 02D8           L63:
 02D8                   .dbline 389
 02D8 8A2D              mov R24,R10
 02DA 8031              cpi R24,16
 02DC 50F3              brlo L60
 02DE                   .dbline 395
 02DE           L54:
 02DE                   .dbline -2
 02DE                   .dbline 396
 02DE           ;               {
 02DE           ;                       x_address = (x << 1) + 1;
 02DE           ;                       y_address = (y << 3) + i;
 02DE           ;                       LCD_Write_Data(x_address,y_address,*disp++);
 02DE           ;               }
 02DE           ;       }
 02DE           ; }
 02DE           L53:
 02DE 2196              adiw R28,1
 02E0 0E940000          xcall pop_gset5
 02E4 2496              adiw R28,4
 02E6                   .dbline 0 ; func end
 02E6 0895              ret
 02E8                   .dbsym r y_address 20 c
 02E8                   .dbsym r x_address 22 c
 02E8                   .dbsym r i 10 c
 02E8                   .dbsym r disp 12 pkc
 02E8                   .dbsym r y 14 c
 02E8                   .dbsym l x 11 c
 02E8                   .dbend
 02E8                   .dbfunc e LCD_Write_Picture _LCD_Write_Picture fV
 02E8           ;      x_address -> R20
 02E8           ;      y_address -> R14
 02E8           ;          pdata -> R22,R23
 02E8           ;       y_length -> R10
 02E8           ;       x_length -> R12
 02E8           ;             y1 -> y+13
 02E8           ;             x1 -> y+11
                        .even
 02E8           _LCD_Write_Picture::
 02E8 0E940000          xcall push_arg4
 02EC 0E940000          xcall push_gset5
 02F0 2197              sbiw R28,1
 02F2 CF84              ldd R12,y+15
 02F4 A988              ldd R10,y+17
 02F6 6B89              ldd R22,y+19
 02F8 7C89              ldd R23,y+20
 02FA                   .dbline -1
 02FA                   .dbline 407
 02FA           ; 
 02FA           ; //******************************************************************************
 02FA           ; // Function    : LCD_Write_Picture
 02FA           ; // Input       : x in [0,7] and y in [0,127],
 02FA           ; //               x1_length - 纵向象素 y1_length - 横向象素,x1_length必须为8的
 02FA           ; //               整数倍,y1_length可以不必为8的整数倍。
 02FA           ; // Output      : none
 02FA           ; // Description : Application Level Function,在LCD的指定区域显示图片
 02FA           ; //******************************************************************************
 02FA           ; void LCD_Write_Picture(INT8U x1,INT8U y1,INT8U x_length,INT8U y_length,const INT8U *pdata)
 02FA           ; {
 02FA                   .dbline 410
 02FA           ;       INT8U x_address;
 02FA           ;       INT8U y_address;
 02FA           ;       for(x_address = x1;x_address <= x1 + (x_length >> 3) - 1;x_address++)
 02FA 4B85              ldd R20,y+11
 02FC 11C0              xjmp L68
 02FE           L65:
 02FE                   .dbline 411
 02FE           ;       {
 02FE                   .dbline 412
 02FE           ;               for(y_address = y1;y_address < y1 + y_length;y_address++)
 02FE ED84              ldd R14,y+13
 0300 0AC0              xjmp L72
 0302           L69:
 0302                   .dbline 413
 0302                   .dbline 414
 0302 1B01              movw R2,R22
 0304 6F5F              subi R22,255  ; offset = 1
 0306 7F4F              sbci R23,255
 0308 F101              movw R30,R2
 030A E491              lpm R30,Z
 030C E883              std y+0,R30
 030E 2E2D              mov R18,R14
 0310 042F              mov R16,R20
 0312 22DF              xcall _LCD_Write_Data
 0314                   .dbline 415
 0314           L70:
 0314                   .dbline 412
 0314 E394              inc R14
 0316           L72:
 0316                   .dbline 412
 0316 2D84              ldd R2,y+13
 0318 2A0C              add R2,R10
 031A E214              cp R14,R2
 031C 90F3              brlo L69
 031E                   .dbline 416
 031E           L66:
 031E                   .dbline 410
 031E 4395              inc R20
 0320           L68:
 0320                   .dbline 410
 0320 2C2C              mov R2,R12
 0322 2694              lsr R2
 0324 2694              lsr R2
 0326 2694              lsr R2
 0328 8B85              ldd R24,y+11
 032A 820D              add R24,R2
 032C 8150              subi R24,1
 032E 8417              cp R24,R20
 0330 30F7              brsh L65
 0332                   .dbline -2
 0332                   .dbline 417
 0332           ;               {
 0332           ;                       LCD_Write_Data(x_address,y_address,*pdata++);
 0332           ;               }
 0332           ;       }
 0332           ; }
 0332           L64:
 0332 2196              adiw R28,1
 0334 0E940000          xcall pop_gset5
 0338 2496              adiw R28,4
 033A                   .dbline 0 ; func end
 033A 0895              ret
 033C                   .dbsym r x_address 20 c
 033C                   .dbsym r y_address 14 c
 033C                   .dbsym r pdata 22 pkc
 033C                   .dbsym r y_length 10 c
 033C                   .dbsym r x_length 12 c
 033C                   .dbsym l y1 13 c
 033C                   .dbsym l x1 11 c
 033C                   .dbend

⌨️ 快捷键说明

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