📄 lcd.lis
字号:
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 + -