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

📄 ks0108_12864lcd.lis

📁 ks0108 avr单片机1284显示
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0242           ;       LCD_INSTR_PORT &= ~LCD_CS2;
 0242 9598              cbi 0x12,5
 0244                   .dbline 185
 0244           ; 
 0244           ;       LCD_Send_Byte(DISPLAY_PAGE_SET + Page, COMMAND, NORMAL); // Sweep pages
 0244 2224              clr R2
 0246 2882              std y+0,R2
 0248 2227              clr R18
 024A 042F              mov R16,R20
 024C 0854              subi R16,72    ; addi 184
 024E 42D0              xcall _LCD_Send_Byte
 0250                   .dbline 186
 0250           ;       LCD_Send_Byte(DISPLAY_COLUMN_SET, COMMAND, NORMAL);
 0250 2224              clr R2
 0252 2882              std y+0,R2
 0254 2227              clr R18
 0256 00E4              ldi R16,64
 0258 3DD0              xcall _LCD_Send_Byte
 025A                   .dbline 188
 025A           ;         
 025A           ;       for (Column = 0; Column < 128; Column++)
 025A 6627              clr R22
 025C 14C0              xjmp L48
 025E           L45:
 025E                   .dbline 189
 025E           ;          { 
 025E                   .dbline 191
 025E           ;                // Clear right side
 025E           ;          if(Column == 64)
 025E 6034              cpi R22,64
 0260 69F4              brne L49
 0262           X9:
 0262                   .dbline 192
 0262           ;             {
 0262                   .dbline 193
 0262           ;             LCD_INSTR_PORT &= ~LCD_CS1; // Select right side
 0262 9498              cbi 0x12,4
 0264                   .dbline 194
 0264           ;             LCD_INSTR_PORT |=  LCD_CS2;
 0264 959A              sbi 0x12,5
 0266                   .dbline 197
 0266           ;                       
 0266           ;                       // Sweep pages
 0266           ;             LCD_Send_Byte(DISPLAY_PAGE_SET + Page, COMMAND, NORMAL); 
 0266 2224              clr R2
 0268 2882              std y+0,R2
 026A 2227              clr R18
 026C 042F              mov R16,R20
 026E 0854              subi R16,72    ; addi 184
 0270 31D0              xcall _LCD_Send_Byte
 0272                   .dbline 198
 0272           ;             LCD_Send_Byte(DISPLAY_COLUMN_SET, COMMAND, NORMAL);
 0272 2224              clr R2
 0274 2882              std y+0,R2
 0276 2227              clr R18
 0278 00E4              ldi R16,64
 027A 2CD0              xcall _LCD_Send_Byte
 027C                   .dbline 199
 027C           ;             }
 027C           L49:
 027C                   .dbline 201
 027C           ;                // For each set of 8 pixels, write 0x00 or 0xFF(depend on Vedio_Mode)
 027C           ;          LCD_Send_Byte(0x00, D_DATA, Vedio_Mode); 
 027C A882              std y+0,R10
 027E 21E0              ldi R18,1
 0280 0027              clr R16
 0282 28D0              xcall _LCD_Send_Byte
 0284                   .dbline 202
 0284           ;          }
 0284           L46:
 0284                   .dbline 188
 0284 6395              inc R22
 0286           L48:
 0286                   .dbline 188
 0286 6038              cpi R22,128
 0288 50F3              brlo L45
 028A           X10:
 028A                   .dbline 203
 028A           ;       }
 028A           L42:
 028A                   .dbline 180
 028A 4395              inc R20
 028C           L44:
 028C                   .dbline 180
 028C 4830              cpi R20,8
 028E C0F2              brlo L41
 0290           X11:
 0290                   .dbline -2
 0290           L40:
 0290                   .dbline 0 ; func end
 0290 2196              adiw R28,1
 0292 0C940000          xjmp pop_xgsetF00C
 0296                   .dbsym r Page 20 c
 0296                   .dbsym r Column 22 c
 0296                   .dbsym r Vedio_Mode 10 c
 0296                   .dbend
 0296                   .dbfunc s LCD_Read_Busy _LCD_Read_Busy fV
 0296           ;    LCD_Timeout -> R16,R17
                        .even
 0296           _LCD_Read_Busy:
 0296                   .dbline -1
 0296                   .dbline 214
 0296           ;    }
 0296           ; 
 0296           ; /*----------------------------------------------------------------------------*-
 0296           ; 
 0296           ;    LCD_Read_Busy()    
 0296           ;  
 0296           ;    Check out if the LCD is in operation or ready for writing data.
 0296           ;                          
 0296           ; -*----------------------------------------------------------------------------*/
 0296           ; static void LCD_Read_Busy(void)
 0296           ;    {
 0296                   .dbline 217
 0296           ;    uInt16 LCD_Timeout; // Software timeout 
 0296           ;    
 0296           ;    LCD_DATA_PORT = 0xFF;  
 0296 8FEF              ldi R24,255
 0298 8BBB              out 0x1b,R24
 029A                   .dbline 218
 029A           ;    LCD_DATA_PORT_DIR = INPUT; // Set data PORT direction 
 029A 2224              clr R2
 029C 2ABA              out 0x1a,R2
 029E                   .dbline 220
 029E           ;  
 029E           ;    LCD_INSTR_PORT &= ~LCD_DI; // Set instruction
 029E 9098              cbi 0x12,0
 02A0                   .dbline 221
 02A0           ;    LCD_INSTR_PORT |=  LCD_RW; // Set read
 02A0 919A              sbi 0x12,1
 02A2                   .dbline 223
 02A2           ; 
 02A2           ;    LCD_INSTR_PORT |=  LCD_EN;
 02A2 929A              sbi 0x12,2
 02A4                   .dbline 224
 02A4           ;    asm("nop");        
 02A4 0000              nop
 02A6                   .dbline 225
 02A6           ;    asm("nop");
 02A6 0000              nop
 02A8                   .dbline 227
 02A8           ;     
 02A8           ;    LCD_INSTR_PORT &= ~LCD_EN; // Toggle enable
 02A8 9298              cbi 0x12,2
 02AA                   .dbline 228
 02AA           ;    asm("nop");        
 02AA 0000              nop
 02AC                   .dbline 229
 02AC           ;    asm("nop");
 02AC 0000              nop
 02AE 06C0              xjmp L53
 02B0           L52:
 02B0                   .dbline 233
 02B0           ;    
 02B0           ;    // See if busy with software timeout       
 02B0           ;    while((LCD_BUSY & LCD_DATA_PORT_VL) && ++LCD_Timeout)  
 02B0           ;       {
 02B0                   .dbline 234
 02B0           ;       LCD_INSTR_PORT &= ~LCD_EN; // Toggle enable             
 02B0 9298              cbi 0x12,2
 02B2                   .dbline 235
 02B2           ;       asm("nop");     
 02B2 0000              nop
 02B4                   .dbline 236
 02B4           ;         asm("nop");
 02B4 0000              nop
 02B6                   .dbline 238
 02B6           ;         
 02B6           ;       LCD_INSTR_PORT |=  LCD_EN;
 02B6 929A              sbi 0x12,2
 02B8                   .dbline 239
 02B8           ;       asm("nop");     
 02B8 0000              nop
 02BA                   .dbline 240
 02BA           ;         asm("nop");
 02BA 0000              nop
 02BC                   .dbline 241
 02BC           ;       }
 02BC           L53:
 02BC                   .dbline 232
 02BC CF9B              sbis 0x19,7
 02BE 06C0              rjmp L55
 02C0           X12:
 02C0 C801              movw R24,R16
 02C2 0196              adiw R24,1
 02C4 8C01              movw R16,R24
 02C6 8030              cpi R24,0
 02C8 8907              cpc R24,R25
 02CA 91F7              brne L52
 02CC           X13:
 02CC           L55:
 02CC                   .dbline 242
 02CC           ;    LCD_DATA_PORT_DIR = OUTPUT; // Set data PORT direction back to an output
 02CC 8FEF              ldi R24,255
 02CE 8ABB              out 0x1a,R24
 02D0                   .dbline 243
 02D0           ;    LCD_INSTR_PORT &= ~LCD_EN;
 02D0 9298              cbi 0x12,2
 02D2                   .dbline -2
 02D2           L51:
 02D2                   .dbline 0 ; func end
 02D2 0895              ret
 02D4                   .dbsym r LCD_Timeout 16 s
 02D4                   .dbend
 02D4                   .dbfunc s LCD_Send_Byte _LCD_Send_Byte fV
 02D4           ;         IVERSE -> y+0
 02D4           ;      DATA_FLAG -> R18
 02D4           ;           DATA -> R16
                        .even
 02D4           _LCD_Send_Byte:
 02D4                   .dbline -1
 02D4                   .dbline 264
 02D4           ;    }     
 02D4           ;    
 02D4           ; /*----------------------------------------------------------------------------*-
 02D4           ; 
 02D4           ;    LCD_Send_Byte()
 02D4           ; 
 02D4           ;    This function writes a byte to the LCD panel.
 02D4           ; 
 02D4           ;    Parameters: 
 02D4           ;    ---------------------------------------------------------------------------
 02D4           ;    Data      : The byte to be written to the LCD
 02D4           ;     
 02D4           ;    DATA_FLAG : If DATA_FLAG == 1, a data byte is sent
 02D4           ;                If DATA_FLAG == 0, a command byte is sent
 02D4           ;                         
 02D4           ;    IVERSE    : If IVERSE == 1, inverse video mode                        
 02D4           ;                If IVERSE == 0, normal video mode
 02D4           ;                         
 02D4           ; -*----------------------------------------------------------------------------*/
 02D4           ; static void LCD_Send_Byte(uInt8 DATA, uInt8 DATA_FLAG, uInt8 IVERSE)
 02D4           ;    { 
 02D4                   .dbline 267
 02D4           ;    // LCD_Read_Busy();
 02D4           ;      
 02D4           ;    LCD_INSTR_PORT |=  LCD_EN;
 02D4 929A              sbi 0x12,2
 02D6                   .dbline 268
 02D6           ;    asm("nop");        
 02D6 0000              nop
 02D8                   .dbline 269
 02D8           ;    asm("nop");
 02D8 0000              nop
 02DA                   .dbline 271
 02DA           ;    
 02DA           ;    if (DATA_FLAG)
 02DA 2223              tst R18
 02DC 11F0              breq L57
 02DE           X14:
 02DE                   .dbline 272
 02DE           ;       LCD_INSTR_PORT |=  LCD_DI; // Set data   
 02DE 909A              sbi 0x12,0
 02E0 01C0              xjmp L58
 02E2           L57:
 02E2                   .dbline 274
 02E2           ;    else
 02E2           ;       LCD_INSTR_PORT &= ~LCD_DI; // Set instruction
 02E2 9098              cbi 0x12,0
 02E4           L58:
 02E4                   .dbline 276
 02E4           ; 
 02E4           ;    LCD_INSTR_PORT &= ~LCD_RW; // Set write
 02E4 9198              cbi 0x12,1
 02E6                   .dbline 278
 02E6           ;    
 02E6           ;    if (IVERSE && DATA_FLAG)   
 02E6 0880              ldd R0,y+0
 02E8 0020              tst R0
 02EA 51F0              breq L59
 02EC           X15:
 02EC 2223              tst R18
 02EE 41F0              breq L59
 02F0           X16:
 02F0                   .dbline 279
 02F0           ;       LCD_DATA_PORT = 255 - DATA; // Send inverse data
 02F0 202E              mov R2,R16
 02F2 3324              clr R3
 02F4 8FEF              ldi R24,255
 02F6 90E0              ldi R25,0
 02F8 8219              sub R24,R2
 02FA 9309              sbc R25,R3
 02FC 8BBB              out 0x1b,R24
 02FE 01C0              xjmp L60
 0300           L59:
 0300                   .dbline 281
 0300           ;    else
 0300           ;       LCD_DATA_PORT = DATA; // Send data or instruction
 0300 0BBB              out 0x1b,R16
 0302           L60:
 0302                   .dbline 283
 0302           ;    
 0302           ;    LCD_INSTR_PORT &= ~LCD_EN; // Toggle enable
 0302 9298              cbi 0x12,2
 0304                   .dbline 284
 0304           ;    asm("nop");        
 0304 0000              nop
 0306                   .dbline 285
 0306           ;    asm("nop");
 0306 0000              nop
 0308                   .dbline -2
 0308           L56:
 0308                   .dbline 0 ; func end
 0308 0895              ret
 030A                   .dbsym l IVERSE 0 c
 030A                   .dbsym r DATA_FLAG 18 c
 030A                   .dbsym r DATA 16 c
 030A                   .dbend
 030A                   .dbfunc s LCD_Set_XY _LCD_Set_XY fV
 030A           ;              Y -> R20
 030A           ;              X -> R22
                        .even
 030A           _LCD_Set_XY:
 030A 4A93              st -y,R20
 030C 6A93              st -y,R22
 030E 422F              mov R20,R18

⌨️ 快捷键说明

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