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

📄 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+2
 02D4           ;      DATA_FLAG -> R12
 02D4           ;           DATA -> R10
                        .even
 02D4           _LCD_Send_Byte:
 02D4 AA92              st -y,R10
 02D6 CA92              st -y,R12
 02D8 C22E              mov R12,R18
 02DA A02E              mov R10,R16
 02DC                   .dbline -1
 02DC                   .dbline 264
 02DC           ;    }     
 02DC           ;    
 02DC           ; /*----------------------------------------------------------------------------*-
 02DC           ; 
 02DC           ;    LCD_Send_Byte()
 02DC           ; 
 02DC           ;    This function writes a byte to the LCD panel.
 02DC           ; 
 02DC           ;    Parameters: 
 02DC           ;    ---------------------------------------------------------------------------
 02DC           ;    Data      : The byte to be written to the LCD
 02DC           ;     
 02DC           ;    DATA_FLAG : If DATA_FLAG == 1, a data byte is sent
 02DC           ;                If DATA_FLAG == 0, a command byte is sent
 02DC           ;                         
 02DC           ;    IVERSE    : If IVERSE == 1, inverse video mode                        
 02DC           ;                If IVERSE == 0, normal video mode
 02DC           ;                         
 02DC           ; -*----------------------------------------------------------------------------*/
 02DC           ; static void LCD_Send_Byte(uInt8 DATA, uInt8 DATA_FLAG, uInt8 IVERSE)
 02DC           ;    { 
 02DC                   .dbline 265
 02DC           ;    LCD_Read_Busy();
 02DC DCDF              xcall _LCD_Read_Busy
 02DE                   .dbline 267
 02DE           ;      
 02DE           ;    LCD_INSTR_PORT |=  LCD_EN;
 02DE 929A              sbi 0x12,2
 02E0                   .dbline 268
 02E0           ;    asm("nop");        
 02E0 0000              nop
 02E2                   .dbline 269
 02E2           ;    asm("nop");
 02E2 0000              nop
 02E4                   .dbline 271
 02E4           ;    
 02E4           ;    if (DATA_FLAG)
 02E4 CC20              tst R12
 02E6 11F0              breq L57
 02E8           X14:
 02E8                   .dbline 272
 02E8           ;       LCD_INSTR_PORT |=  LCD_DI; // Set data   
 02E8 909A              sbi 0x12,0
 02EA 01C0              xjmp L58
 02EC           L57:
 02EC                   .dbline 274
 02EC           ;    else
 02EC           ;       LCD_INSTR_PORT &= ~LCD_DI; // Set instruction
 02EC 9098              cbi 0x12,0
 02EE           L58:
 02EE                   .dbline 276
 02EE           ; 
 02EE           ;    LCD_INSTR_PORT &= ~LCD_RW; // Set write
 02EE 9198              cbi 0x12,1
 02F0                   .dbline 278
 02F0           ;    
 02F0           ;    if (IVERSE && DATA_FLAG)   
 02F0 0A80              ldd R0,y+2
 02F2 0020              tst R0
 02F4 51F0              breq L59
 02F6           X15:
 02F6 CC20              tst R12
 02F8 41F0              breq L59
 02FA           X16:
 02FA                   .dbline 279
 02FA           ;       LCD_DATA_PORT = 255 - DATA; // Send inverse data
 02FA 2A2C              mov R2,R10
 02FC 3324              clr R3
 02FE 8FEF              ldi R24,255
 0300 90E0              ldi R25,0
 0302 8219              sub R24,R2
 0304 9309              sbc R25,R3
 0306 8BBB              out 0x1b,R24
 0308 01C0              xjmp L60
 030A           L59:
 030A                   .dbline 281
 030A           ;    else
 030A           ;       LCD_DATA_PORT = DATA; // Send data or instruction
 030A ABBA              out 0x1b,R10
 030C           L60:
 030C                   .dbline 283
 030C           ;    
 030C           ;    LCD_INSTR_PORT &= ~LCD_EN; // Toggle enable
 030C 9298              cbi 0x12,2
 030E                   .dbline 284
 030E           ;    asm("nop");        
 030E 0000              nop
 0310                   .dbline 285
 0310           ;    asm("nop");
 0310 0000              nop
 0312                   .dbline -2
 0312           L56:
 0312                   .dbline 0 ; func end
 0312 C990              ld R12,y+
 0314 A990              ld R10,y+
 0316 0895              ret
 0318                   .dbsym l IVERSE 2 c
 0318                   .dbsym r DATA_FLAG 12 c
 0318                   .dbsym r DATA 10 c
 0318                   .dbend

⌨️ 快捷键说明

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