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

📄 lcd_back.lis

📁 AVR单片机C语言程序设计实例精粹
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0150                   .dbline 274
 0150           ; }
 0150           ; 
 0150           ; 
 0150           ; 
 0150           ; //LCD复位
 0150           ; void LCD_Reset(void)
 0150           ; {
 0150                   .dbline 275
 0150           ;       Set_RST(0);
 0150 0027              clr R16
 0152 84DF              xcall _Set_RST
 0154                   .dbline 276
 0154           ;       Set_RST(1);
 0154 01E0              ldi R16,1
 0156                   .dbline -2
 0156                   .dbline 277
 0156           ; }
 0156           L31:
 0156                   .dbline 0 ; func end
 0156 82CF              xjmp _Set_RST
 0158                   .dbend
 0158                   .dbfunc e LCD_Clear_Line _LCD_Clear_Line fV
 0158           ;              i -> R20
 0158           ;              j -> R10
 0158           ;       wEndLine -> R22
 0158           ;     wStartLine -> R10
                        .even
 0158           _LCD_Clear_Line::
 0158 0E940000          xcall push_gset3
 015C 622F              mov R22,R18
 015E A02E              mov R10,R16
 0160                   .dbline -1
 0160                   .dbline 281
 0160           ; 
 0160           ; //LCD清除显示行
 0160           ; void LCD_Clear_Line(INT8U wStartLine,INT8U wEndLine)
 0160           ; {
 0160                   .dbline 283
 0160           ;       INT8U i,j;
 0160           ;       for(i = wStartLine;i <= wEndLine;i++)
 0160 4A2D              mov R20,R10
 0162 11C0              xjmp L36
 0164           L33:
 0164                   .dbline 284
 0164           ;       {
 0164                   .dbline 285
 0164           ;               Set_CS1(1);
 0164 01E0              ldi R16,1
 0166 74DF              xcall _Set_CS1
 0168                   .dbline 286
 0168           ;               Set_CS2(1);
 0168 01E0              ldi R16,1
 016A 6CDF              xcall _Set_CS2
 016C                   .dbline 287
 016C           ;               LCD_Command_Set_X(i);
 016C 042F              mov R16,R20
 016E A4DF              xcall _LCD_Command_Set_X
 0170                   .dbline 288
 0170           ;               LCD_Command_Set_Y(0);
 0170 0027              clr R16
 0172 B5DF              xcall _LCD_Command_Set_Y
 0174                   .dbline 289
 0174           ;               for(j = 0;j < 64;j++)
 0174 AA24              clr R10
 0176 03C0              xjmp L40
 0178           L37:
 0178                   .dbline 290
 0178                   .dbline 291
 0178 0027              clr R16
 017A C4DF              xcall _LCD_Command_WriteByte
 017C                   .dbline 292
 017C           L38:
 017C                   .dbline 289
 017C A394              inc R10
 017E           L40:
 017E                   .dbline 289
 017E 8A2D              mov R24,R10
 0180 8034              cpi R24,64
 0182 D0F3              brlo L37
 0184                   .dbline 293
 0184           L34:
 0184                   .dbline 283
 0184 4395              inc R20
 0186           L36:
 0186                   .dbline 283
 0186 6417              cp R22,R20
 0188 68F7              brsh L33
 018A                   .dbline -2
 018A                   .dbline 294
 018A           ;               {
 018A           ;                       LCD_Command_WriteByte(0x00);
 018A           ;               }
 018A           ;       }
 018A           ; }
 018A           L32:
 018A 0E940000          xcall pop_gset3
 018E                   .dbline 0 ; func end
 018E 0895              ret
 0190                   .dbsym r i 20 c
 0190                   .dbsym r j 10 c
 0190                   .dbsym r wEndLine 22 c
 0190                   .dbsym r wStartLine 10 c
 0190                   .dbend
 0190                   .dbfunc e LCD_Init _LCD_Init fV
                        .even
 0190           _LCD_Init::
 0190                   .dbline -1
 0190                   .dbline 298
 0190           ; 
 0190           ; //LCD初始化
 0190           ; void LCD_Init(void)
 0190           ; {
 0190                   .dbline 299
 0190           ;       LCD_Reset();
 0190 DFDF              xcall _LCD_Reset
 0192                   .dbline 300
 0192           ;       LCD_Clear_Line(0,7);
 0192 27E0              ldi R18,7
 0194 0027              clr R16
 0196 E0DF              xcall _LCD_Clear_Line
 0198                   .dbline 301
 0198           ;       DisplayOnOff(1);
 0198 01E0              ldi R16,1
 019A 68DF              xcall _DisplayOnOff
 019C                   .dbline 302
 019C           ;       SetStartLine(0);
 019C 0027              clr R16
 019E                   .dbline -2
 019E                   .dbline 303
 019E           ; }
 019E           L41:
 019E                   .dbline 0 ; func end
 019E 79CF              xjmp _SetStartLine
 01A0                   .dbend
 01A0                   .dbfunc e LCD_Write_Char _LCD_Write_Char fV
 01A0           ;      y_address -> R20
 01A0           ;      x_address -> R22
 01A0           ;              i -> R10
 01A0           ;           disp -> R12,R13
 01A0           ;              y -> R14
 01A0           ;              x -> y+11
                        .even
 01A0           _LCD_Write_Char::
 01A0 0E940000          xcall push_arg4
 01A4 0E940000          xcall push_gset5
 01A8 E22E              mov R14,R18
 01AA 2197              sbiw R28,1
 01AC CF84              ldd R12,y+15
 01AE D888              ldd R13,y+16
 01B0                   .dbline -1
 01B0                   .dbline 309
 01B0           ; 
 01B0           ; //对128*64点阵LCD
 01B0           ; //X : 行数 0~3
 01B0           ; //Y : 列数 0~15
 01B0           ; void LCD_Write_Char(INT8U x,INT8U y,const INT8U *disp)
 01B0           ; {
 01B0                   .dbline 313
 01B0           ;       INT8U i;
 01B0           ;       INT8U x_address;
 01B0           ;       INT8U y_address;
 01B0           ;       if((x < 4) && (y < 16))
 01B0 8B85              ldd R24,y+11
 01B2 8430              cpi R24,4
 01B4 08F0              brlo X1
 01B6 33C0              xjmp L43
 01B8           X1:
 01B8 8E2D              mov R24,R14
 01BA 8031              cpi R24,16
 01BC 08F0              brlo X2
 01BE 2FC0              xjmp L43
 01C0           X2:
 01C0                   .dbline 314
 01C0           ;       {
 01C0                   .dbline 315
 01C0           ;               for(i = 0;i < 8;i++)
 01C0 AA24              clr R10
 01C2 12C0              xjmp L48
 01C4           L45:
 01C4                   .dbline 316
 01C4                   .dbline 317
 01C4 6B85              ldd R22,y+11
 01C6 660F              lsl R22
 01C8                   .dbline 318
 01C8 4E2D              mov R20,R14
 01CA 440F              lsl R20
 01CC 440F              lsl R20
 01CE 440F              lsl R20
 01D0 4A0D              add R20,R10
 01D2                   .dbline 319
 01D2 1601              movw R2,R12
 01D4 C101              movw R24,R2
 01D6 0196              adiw R24,1
 01D8 6C01              movw R12,R24
 01DA F101              movw R30,R2
 01DC E491              lpm R30,Z
 01DE E883              std y+0,R30
 01E0 242F              mov R18,R20
 01E2 062F              mov R16,R22
 01E4 CED0              xcall _LCD_Write_Data
 01E6                   .dbline 320
 01E6           L46:
 01E6                   .dbline 315
 01E6 A394              inc R10
 01E8           L48:
 01E8                   .dbline 315
 01E8 8A2D              mov R24,R10
 01EA 8830              cpi R24,8
 01EC 58F3              brlo L45
 01EE                   .dbline 321
 01EE           ;               {
 01EE           ;                       x_address = x << 1;
 01EE           ;                       y_address = (y << 3) + i;
 01EE           ;                       LCD_Write_Data(x_address,y_address,*disp++);
 01EE           ;               }
 01EE           ;               for(i = 0;i < 8;i++)
 01EE AA24              clr R10
 01F0 13C0              xjmp L52
 01F2           L49:
 01F2                   .dbline 322
 01F2                   .dbline 323
 01F2 6B85              ldd R22,y+11
 01F4 660F              lsl R22
 01F6 6F5F              subi R22,255    ; addi 1
 01F8                   .dbline 324
 01F8 4E2D              mov R20,R14
 01FA 440F              lsl R20
 01FC 440F              lsl R20
 01FE 440F              lsl R20
 0200 4A0D              add R20,R10
 0202                   .dbline 325
 0202 1601              movw R2,R12
 0204 C101              movw R24,R2
 0206 0196              adiw R24,1
 0208 6C01              movw R12,R24
 020A F101              movw R30,R2
 020C E491              lpm R30,Z
 020E E883              std y+0,R30
 0210 242F              mov R18,R20
 0212 062F              mov R16,R22
 0214 B6D0              xcall _LCD_Write_Data
 0216                   .dbline 326
 0216           L50:
 0216                   .dbline 321
 0216 A394              inc R10
 0218           L52:
 0218                   .dbline 321
 0218 8A2D              mov R24,R10
 021A 8830              cpi R24,8
 021C 50F3              brlo L49
 021E                   .dbline 327
 021E           L43:
 021E                   .dbline -2
 021E                   .dbline 328
 021E           ;               {
 021E           ;                       x_address = (x << 1) + 1;
 021E           ;                       y_address = (y << 3) + i;
 021E           ;                       LCD_Write_Data(x_address,y_address,*disp++);
 021E           ;               }
 021E           ;       }
 021E           ; }
 021E           L42:
 021E 2196              adiw R28,1
 0220 0E940000          xcall pop_gset5
 0224 2496              adiw R28,4
 0226                   .dbline 0 ; func end
 0226 0895              ret
 0228                   .dbsym r y_address 20 c
 0228                   .dbsym r x_address 22 c
 0228                   .dbsym r i 10 c
 0228                   .dbsym r disp 12 pkc
 0228                   .dbsym r y 14 c
 0228                   .dbsym l x 11 c
 0228                   .dbend
 0228                   .dbfunc e LCD_Write_Word _LCD_Write_Word fV
 0228           ;      y_address -> R20
 0228           ;      x_address -> R22
 0228           ;              i -> R10
 0228           ;           disp -> R12,R13
 0228           ;              y -> R14
 0228           ;              x -> y+11
                        .even
 0228           _LCD_Write_Word::
 0228 0E940000          xcall push_arg4
 022C 0E940000          xcall push_gset5
 0230 E22E              mov R14,R18
 0232 2197              sbiw R28,1
 0234 CF84              ldd R12,y+15
 0236 D888              ldd R13,y+16
 0238                   .dbline -1
 0238                   .dbline 334
 0238           ; 
 0238           ; //对128*64点阵LCD
 0238           ; //X : 行数 0~3
 0238           ; //Y : 列数 0~15
 0238           ; void LCD_Write_Word(INT8U x,INT8U y,const INT8U *disp)
 0238           ; {
 0238                   .dbline 338
 0238           ;       INT8U i;
 0238           ;       INT8U x_address;
 0238           ;       INT8U y_address;
 0238           ;       if((x < 4) && (y < 16))
 0238 8B85              ldd R24,y+11
 023A 8430              cpi R24,4
 023C 08F0              brlo X3
 023E 33C0              xjmp L54
 0240           X3:
 0240 8E2D              mov R24,R14
 0242 8031              cpi R24,16
 0244 08F0              brlo X4
 0246 2FC0              xjmp L54
 0248           X4:
 0248                   .dbline 339
 0248           ;       {
 0248                   .dbline 340
 0248           ;               for(i = 0;i < 16;i++)
 0248 AA24              clr R10
 024A 12C0              xjmp L59
 024C           L56:
 024C                   .dbline 341
 024C                   .dbline 342
 024C 6B85              ldd R22,y+11
 024E 660F              lsl R22
 0250                   .dbline 343
 0250 4E2D              mov R20,R14
 0252 440F              lsl R20
 0254 440F              lsl R20
 0256 440F              lsl R20
 0258 4A0D              add R20,R10
 025A                   .dbline 344
 025A 1601              movw R2,R12
 025C C101              movw R24,R2
 025E 0196              adiw R24,1
 0260 6C01              movw R12,R24
 0262 F101              movw R30,R2
 0264 E491              lpm R30,Z
 0266 E883              std y+0,R30
 0268 242F              mov R18,R20
 026A 062F              mov R16,R22
 026C 8AD0              xcall _LCD_Write_Data
 026E                   .dbline 345
 026E           L57:
 026E                   .dbline 340
 026E A394              inc R10
 0270           L59:
 0270                   .dbline 340
 0270 8A2D              mov R24,R10
 0272 8031              cpi R24,16
 0274 58F3              brlo L56
 0276                   .dbline 346
 0276           ;               {
 0276           ;                       x_address = x << 1;
 0276           ;                       y_address = (y << 3) + i;
 0276           ;                       LCD_Write_Data(x_address,y_address,*disp++);
 0276           ;               }
 0276           ;               for(i = 0;i < 16;i++)
 0276 AA24              clr R10
 0278 13C0              xjmp L63
 027A           L60:
 027A                   .dbline 347
 027A                   .dbline 348
 027A 6B85              ldd R22,y+11
 027C 660F              lsl R22
 027E 6F5F              subi R22,255    ; addi 1
 0280                   .dbline 349
 0280 4E2D              mov R20,R14
 0282 440F              lsl R20
 0284 440F              lsl R20
 0286 440F              lsl R20
 0288 4A0D              add R20,R10
 028A                   .dbline 350
 028A 1601              movw R2,R12

⌨️ 快捷键说明

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