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

📄 lcd.lis

📁 基于8515的lcd显示控制程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0062           ;       if (c == '\n')
 0062 4A30              cpi R20,10
 0064 19F4              brne L10
 0066                   .dbline 133
 0066           ;               LCD_command(LCD_NEW_LINE);
 0066 00EC              ldi R16,192
 0068 F1DF              rcall _LCD_command
 006A 03C0              rjmp L11
 006C           L10:
 006C                   .dbline 135
 006C 21E0              ldi R18,1
 006E 042F              mov R16,R20
 0070 1DD0              rcall _LCD_write
 0072           L11:
 0072                   .dbline -2
 0072                   .dbline 136
 0072           ;       else
 0072           ;               LCD_write(c, DATA);
 0072           ; }
 0072           L9:
 0072 00D0              rcall pop_gset1
 0074                   .dbline 0 ; func end
 0074 0895              ret
 0076                   .dbsym r c 20 c
 0076                   .dbend
 0076                   .dbfunc e LCD_puts _LCD_puts fV
 0076           ;              s -> R20,R21
                        .even
 0076           _LCD_puts::
 0076 00D0              rcall push_gset1
 0078 402F              mov R20,R16
 007A 512F              mov R21,R17
 007C                   .dbline -1
 007C                   .dbline 139
 007C           ; 
 007C           ; void LCD_puts(String s)
 007C           ; {
 007C 10C0              rjmp L14
 007E           L13:
 007E                   .dbline 140
 007E           ;       while (*s) {    
 007E                   .dbline 141
 007E           ;               LCD_busy_test();
 007E 3FD0              rcall _LCD_busy_test
 0080                   .dbline 142
 0080           ;               if (*s == '\n')
 0080 E42F              mov R30,R20
 0082 F52F              mov R31,R21
 0084 8081              ldd R24,z+0
 0086 8A30              cpi R24,10
 0088 19F4              brne L16
 008A                   .dbline 143
 008A           ;                       LCD_command(LCD_NEW_LINE);
 008A 00EC              ldi R16,192
 008C DFDF              rcall _LCD_command
 008E 05C0              rjmp L17
 0090           L16:
 0090                   .dbline 145
 0090           ;               else
 0090           ;                       LCD_write(*s, DATA);
 0090 21E0              ldi R18,1
 0092 E42F              mov R30,R20
 0094 F52F              mov R31,R21
 0096 0081              ldd R16,z+0
 0098 09D0              rcall _LCD_write
 009A           L17:
 009A                   .dbline 146
 009A 4F5F              subi R20,255  ; offset = 1
 009C 5F4F              sbci R21,255
 009E                   .dbline 147
 009E           L14:
 009E                   .dbline 140
 009E E42F              mov R30,R20
 00A0 F52F              mov R31,R21
 00A2 2080              ldd R2,z+0
 00A4 2220              tst R2
 00A6 59F7              brne L13
 00A8                   .dbline -2
 00A8                   .dbline 148
 00A8           ;               ++s;
 00A8           ;       }
 00A8           ; }
 00A8           L12:
 00A8 00D0              rcall pop_gset1
 00AA                   .dbline 0 ; func end
 00AA 0895              ret
 00AC                   .dbsym r s 20 pc
 00AC                   .dbend
 00AC                   .dbfunc s LCD_write _LCD_write fV
 00AC           ;            sel -> R18
 00AC           ;            val -> R16
                        .even
 00AC           _LCD_write:
 00AC 00D0              rcall push_gset1
 00AE                   .dbline -1
 00AE                   .dbline 168
 00AE           ; 
 00AE           ; 
 00AE           ; //
 00AE           ; //    Function Name:
 00AE           ; //            LCD_write
 00AE           ; //
 00AE           ; //    Description:
 00AE           ; //            Write data or cmd to HD44780U
 00AE           ; //
 00AE           ; //    Parameters:
 00AE           ; //            val     = data value to be written to HD44780U
 00AE           ; //            sel     = data / cmd
 00AE           ; //            0 - cmd write
 00AE           ; //            1 - data write is selected
 00AE           ; //
 00AE           ; //    Returns:
 00AE           ; //            (nothing)
 00AE           ; //
 00AE           ; static void LCD_write(UInt8 val, UInt8 sel)
 00AE           ; {
 00AE                   .dbline 169
 00AE           ;       MCUCR = 0xC0;
 00AE 80EC              ldi R24,192
 00B0 85BF              out 0x35,R24
 00B2                   .dbline 170
 00B2 422F              mov R20,R18
 00B4 5527              clr R21
 00B6 4030              cpi R20,0
 00B8 4507              cpc R20,R21
 00BA 29F0              breq L22
 00BC           X0:
 00BC 4130              cpi R20,1
 00BE E0E0              ldi R30,0
 00C0 5E07              cpc R21,R30
 00C2 21F0              breq L23
 00C4 05C0              rjmp L19
 00C6           X1:
 00C6                   .dbline 170
 00C6           ;       switch (sel) {
 00C6           L22:
 00C6                   .dbline 171
 00C6           ;       case CMD:       *CMD_IO  = val; break;
 00C6 00930080          sts 32768,R16
 00CA                   .dbline 171
 00CA 02C0              rjmp L20
 00CC           L23:
 00CC                   .dbline 172
 00CC           ;       case DATA:      *DATA_IO = val; break;
 00CC 009300C0          sts 49152,R16
 00D0                   .dbline 172
 00D0           L19:
 00D0           L20:
 00D0                   .dbline -2
 00D0                   .dbline 174
 00D0           ;       }
 00D0           ; }
 00D0           L18:
 00D0 00D0              rcall pop_gset1
 00D2                   .dbline 0 ; func end
 00D2 0895              ret
 00D4                   .dbsym r sel 18 c
 00D4                   .dbsym r val 16 c
 00D4                   .dbend
 00D4                   .dbfunc s LCD_read _LCD_read fc
 00D4           ;           rVal -> R20
 00D4           ;            sel -> R16
                        .even
 00D4           _LCD_read:
 00D4 00D0              rcall push_gset1
 00D6                   .dbline -1
 00D6                   .dbline 192
 00D6           ;  
 00D6           ; //
 00D6           ; //    Function Name:
 00D6           ; //            LCD_read
 00D6           ; //
 00D6           ; //    Description:
 00D6           ; //            Read data or cmd to HD44780U
 00D6           ; //
 00D6           ; //    Parameters:
 00D6           ; //            sel     = data / cmd
 00D6           ; //            0 - cmd read
 00D6           ; //            1 - data read
 00D6           ; //
 00D6           ; //    Returns:
 00D6           ; //            data read from LCD
 00D6           ; //
 00D6           ; static UInt8 LCD_read(UInt8 sel)
 00D6           ; {
 00D6                   .dbline 194
 00D6           ;       UInt8   rVal;
 00D6           ;       MCUCR = 0xC0;
 00D6 80EC              ldi R24,192
 00D8 85BF              out 0x35,R24
 00DA                   .dbline 195
 00DA 402F              mov R20,R16
 00DC 5527              clr R21
 00DE 4030              cpi R20,0
 00E0 4507              cpc R20,R21
 00E2 29F0              breq L28
 00E4           X2:
 00E4 4130              cpi R20,1
 00E6 E0E0              ldi R30,0
 00E8 5E07              cpc R21,R30
 00EA 21F0              breq L29
 00EC 05C0              rjmp L25
 00EE           X3:
 00EE                   .dbline 195
 00EE           ;       switch (sel) {
 00EE           L28:
 00EE                   .dbline 196
 00EE           ;       case CMD:       rVal = *CMD_IO;         break;
 00EE 40910080          lds R20,32768
 00F2                   .dbline 196
 00F2 02C0              rjmp L26
 00F4           L29:
 00F4                   .dbline 197
 00F4           ;       case DATA:      rVal = *DATA_IO;        break;
 00F4 409100C0          lds R20,49152
 00F8                   .dbline 197
 00F8           L25:
 00F8           L26:
 00F8                   .dbline 199
 00F8           ;       }
 00F8           ;       return rVal;
 00F8 042F              mov R16,R20
 00FA                   .dbline -2
 00FA           L24:
 00FA 00D0              rcall pop_gset1
 00FC                   .dbline 0 ; func end
 00FC 0895              ret
 00FE                   .dbsym r rVal 20 c
 00FE                   .dbsym r sel 16 c
 00FE                   .dbend
 00FE                   .dbfunc s LCD_busy_test _LCD_busy_test fV
                        .even
 00FE           _LCD_busy_test:
 00FE                   .dbline -1
 00FE                   .dbline 216
 00FE           ; }
 00FE           ; 
 00FE           ; //
 00FE           ; //    Function Name:
 00FE           ; //            LCD_busy_test
 00FE           ; //
 00FE           ; //    Description:
 00FE           ; //            Test if the LCD is busy or not
 00FE           ; //
 00FE           ; //    Parameters:
 00FE           ; //            (none)
 00FE           ; //
 00FE           ; //    Returns:
 00FE           ; //            (nothing)
 00FE           ; //
 00FE           ; static void LCD_busy_test(void)
 00FE           ; {
 00FE           L31:
 00FE                   .dbline 217
 00FE           L32:
 00FE                   .dbline 217
 00FE           ;       while (LCD_read(CMD) & 0x80);
 00FE 0027              clr R16
 0100 E9DF              rcall _LCD_read
 0102 07FD              sbrc R16,7
 0104 FCCF              rjmp L31
 0106                   .dbline -2
 0106                   .dbline 218
 0106           ; }
 0106           L30:
 0106                   .dbline 0 ; func end
 0106 0895              ret
 0108                   .dbend

⌨️ 快捷键说明

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