📄 text2.lst
字号:
(0153) lcd_set_e(); // Write data to LCD
00204 9AAA SBI 0x15,2
(0154) asm("nop");
00205 0000 NOP
(0155) asm("nop");
00206 0000 NOP
(0156) lcd_clear_e(); // Disable LCD
00207 98AA CBI 0x15,2
00208 9169 LD R22,Y+
00209 9149 LD R20,Y+
0020A 9508 RET
(0157) }
(0158) // ********************************* //
(0159) // *** Initialize the LCD driver *** //
(0160) // ********************************* //
(0161) void Init_LCD(void)
(0162) {
(0163) LCD_INIT();
_Init_LCD:
0020B DF80 RCALL _LCD_INIT
(0164) LCD_WriteControl (LCD_FUNCTION_SET);
0020C E208 LDI R16,0x28
0020D DFBD RCALL _LCD_WriteControl
(0165) LCD_WriteControl (LCD_OFF);
0020E E008 LDI R16,0x8
0020F DFBB RCALL _LCD_WriteControl
(0166) LCD_WriteControl (LCD_CLEAR);
00210 E001 LDI R16,1
00211 DFB9 RCALL _LCD_WriteControl
(0167) LCD_WriteControl (LCD_MODE_SET);
00212 E006 LDI R16,6
00213 DFB7 RCALL _LCD_WriteControl
(0168) LCD_WriteControl (LCD_ON);
00214 E00C LDI R16,0xC
00215 DFB5 RCALL _LCD_WriteControl
(0169) LCD_WriteControl (LCD_HOME);
00216 E002 LDI R16,2
00217 CFB3 RJMP _LCD_WriteControl
(0170) }
(0171) // ************************************************ //
(0172) // *** Clear the LCD screen (also homes cursor) *** //
(0173) // ************************************************ //
(0174) void LCD_Clear(void)
(0175) {
(0176) LCD_WriteControl(0x01);
_LCD_Clear:
00218 E001 LDI R16,1
00219 CFB1 RJMP _LCD_WriteControl
(0177) }
(0178) // *********************************************** //
(0179) // *** Position the LCD cursor at row 1, col 1 *** //
(0180) // *********************************************** //
(0181) void LCD_Home(void)
(0182) {
(0183) LCD_WriteControl(0x02);
_LCD_Home:
0021A E002 LDI R16,2
0021B CFAF RJMP _LCD_WriteControl
_LCD_DisplayCharacter:
Char --> R10
0021C 92AA ST -Y,R10
0021D 2EA0 MOV R10,R16
(0184) }
(0185) // ****************************************************************** //
(0186) // *** Display a single character, at the current cursor location *** //
(0187) // ****************************************************************** //
(0188) void LCD_DisplayCharacter (char Char)
(0189) {
(0190) LCD_WriteData (Char);
0021E 2D0A MOV R16,R10
0021F DFCB RCALL _LCD_WriteData
00220 90A9 LD R10,Y+
00221 9508 RET
_LCD_DisplayString_F:
string --> R20
column --> R12
row --> R10
00222 D0AD RCALL push_xgset303C
00223 2EC2 MOV R12,R18
00224 2EA0 MOV R10,R16
00225 814E LDD R20,Y+6
00226 815F LDD R21,Y+7
(0191) }
(0192) // ********************************************************************* //
(0193) // *** Display a string at the specified row and column, using FLASH *** //
(0194) // ********************************************************************* //
(0195) void LCD_DisplayString_F (char row, char column , unsigned char __flash *string)
(0196) {
(0197) LCD_Cursor (row, column);
00227 2D2C MOV R18,R12
00228 2D0A MOV R16,R10
00229 D01E RCALL _LCD_Cursor
0022A C006 RJMP 0x0231
(0198) while (*string)
(0199) {
(0200) LCD_DisplayCharacter (*string++);
0022B 011A MOVW R2,R20
0022C 5F4F SUBI R20,0xFF
0022D 4F5F SBCI R21,0xFF
0022E 01F1 MOVW R30,R2
0022F 9104 LPM R16,Z
00230 DFEB RCALL _LCD_DisplayCharacter
00231 01FA MOVW R30,R20
00232 9024 LPM R2,Z
00233 2022 TST R2
00234 F7B1 BNE 0x022B
00235 C0A1 RJMP pop_xgset303C
_LCD_DisplayString:
string --> R10
column --> R14
row --> R12
00236 D07A RCALL push_xgset00FC
00237 2EE2 MOV R14,R18
00238 2EC0 MOV R12,R16
00239 80AE LDD R10,Y+6
0023A 80BF LDD R11,Y+7
(0201) }
(0202) }
(0203) // ******************************************************************* //
(0204) // *** Display a string at the specified row and column, using RAM *** //
(0205) // ******************************************************************* //
(0206) void LCD_DisplayString (char row, char column ,unsigned char *string)
(0207) {
(0208) LCD_Cursor (row, column);
0023B 2D2E MOV R18,R14
0023C 2D0C MOV R16,R12
0023D D00A RCALL _LCD_Cursor
0023E C004 RJMP 0x0243
(0209) while (*string)
(0210) LCD_DisplayCharacter (*string++);
0023F 01F5 MOVW R30,R10
00240 9101 LD R16,Z+
00241 015F MOVW R10,R30
00242 DFD9 RCALL _LCD_DisplayCharacter
00243 01F5 MOVW R30,R10
00244 8020 LD R2,Z
00245 2022 TST R2
00246 F7C1 BNE 0x023F
00247 C05E RJMP pop_xgset00FC
_LCD_Cursor:
column --> R20
row --> R10
00248 D079 RCALL push_xgsetF00C
00249 2F42 MOV R20,R18
0024A 2EA0 MOV R10,R16
(0211) }
(0212) // *************************************************** //
(0213) // *** Position the LCD cursor at "row", "column". *** //
(0214) // *************************************************** //
(0215) void LCD_Cursor (char row, char column)
(0216) {
(0217) switch (row) {
0024B 2D6A MOV R22,R10
0024C 2777 CLR R23
0024D 3061 CPI R22,1
0024E E0E0 LDI R30,0
0024F 077E CPC R23,R30
00250 F069 BEQ 0x025E
00251 3062 CPI R22,2
00252 E0E0 LDI R30,0
00253 077E CPC R23,R30
00254 F071 BEQ 0x0263
00255 3063 CPI R22,3
00256 E0E0 LDI R30,0
00257 077E CPC R23,R30
00258 F079 BEQ 0x0268
00259 3064 CPI R22,4
0025A E0E0 LDI R30,0
0025B 077E CPC R23,R30
0025C F081 BEQ 0x026D
0025D C013 RJMP 0x0271
(0218) case 1: LCD_WriteControl (0x80 + column - 1); break;
0025E 2F04 MOV R16,R20
0025F 5800 SUBI R16,0x80
00260 5001 SUBI R16,1
00261 DF69 RCALL _LCD_WriteControl
00262 C00E RJMP 0x0271
(0219) case 2: LCD_WriteControl (0xc0 + column - 1); break;
00263 2F04 MOV R16,R20
00264 5400 SUBI R16,0x40
00265 5001 SUBI R16,1
00266 DF64 RCALL _LCD_WriteControl
00267 C009 RJMP 0x0271
(0220) case 3: LCD_WriteControl (0x94 + column - 1); break;
00268 2F04 MOV R16,R20
00269 560C SUBI R16,0x6C
0026A 5001 SUBI R16,1
0026B DF5F RCALL _LCD_WriteControl
0026C C004 RJMP 0x0271
(0221) case 4: LCD_WriteControl (0xd4 + column - 1); break;
0026D 2F04 MOV R16,R20
0026E 520C SUBI R16,0x2C
0026F 5001 SUBI R16,1
00270 DF5A RCALL _LCD_WriteControl
(0222) default: break;
00271 C057 RJMP pop_xgsetF00C
(0223) }
(0224) }
(0225) // ************************** //
(0226) // *** Turn the cursor on *** //
(0227) // ************************** //
(0228) void LCD_Cursor_On (void)
(0229) {
(0230) LCD_WriteControl (LCD_CURS_ON);
_LCD_Cursor_On:
00272 E00D LDI R16,0xD
00273 CF57 RJMP _LCD_WriteControl
(0231) }
(0232) // *************************** //
(0233) // *** Turn the cursor off *** //
(0234) // *************************** //
(0235) void LCD_Cursor_Off (void)
(0236) {
(0237) LCD_WriteControl (LCD_ON);
_LCD_Cursor_Off:
00274 E00C LDI R16,0xC
00275 CF55 RJMP _LCD_WriteControl
(0238) }
(0239) // ******************** //
(0240) // *** Turn Off LCD *** //
(0241) // ******************** //
(0242) void LCD_Display_Off (void)
(0243) {
(0244) LCD_WriteControl(LCD_OFF);
_LCD_Display_Off:
00276 E008 LDI R16,0x8
00277 CF53 RJMP _LCD_WriteControl
(0245) }
(0246) // ******************* //
(0247) // *** Turn On LCD *** //
(0248) // ******************* //
(0249) void LCD_Display_On (void)
(0250) {
(0251) LCD_WriteControl(LCD_ON);
FILE: <library>
_LCD_Display_On:
00278 E00C LDI R16,0xC
00279 CF51 RJMP _LCD_WriteControl
mod16u:
0027A 9468 BSET 6
0027B C001 RJMP xdiv16u
div16u:
0027C 94E8 BCLR 6
xdiv16u:
0027D 92EA ST -Y,R14
0027E 92FA ST -Y,R15
0027F 938A ST -Y,R24
00280 24EE CLR R14
00281 24FF CLR R15
00282 E180 LDI R24,0x10
00283 0F00 LSL R16
00284 1F11 ROL R17
00285 1CEE ROL R14
00286 1CFF ROL R15
00287 16E2 CP R14,R18
00288 06F3 CPC R15,R19
00289 F018 BCS 0x028D
0028A 1AE2 SUB R14,R18
0028B 0AF3 SBC R15,R19
0028C 9503 INC R16
0028D 958A DEC R24
0028E F7A1 BNE 0x0283
0028F F416 BRTC 0x0292
00290 2D0E MOV R16,R14
00291 2D1F MOV R17,R15
00292 9189 LD R24,Y+
00293 90F9 LD R15,Y+
00294 90E9 LD R14,Y+
00295 9508 RET
empy16s:
00296 920A ST -Y,R0
00297 921A ST -Y,R1
00298 938A ST -Y,R24
00299 939A ST -Y,R25
0029A 9F02 MUL R16,R18
0029B 01C0 MOVW R24,R0
0029C 9F12 MUL R17,R18
0029D 0D90 ADD R25,R0
0029E 9F03 MUL R16,R19
0029F 0D90 ADD R25,R0
002A0 018C MOVW R16,R24
002A1 9199 LD R25,Y+
002A2 9189 LD R24,Y+
002A3 9019 LD R1,Y+
002A4 9009 LD R0,Y+
002A5 9508 RET
pop_xgset00FC:
002A6 90A9 LD R10,Y+
002A7 90B9 LD R11,Y+
002A8 90C9 LD R12,Y+
002A9 90D9 LD R13,Y+
002AA 90E9 LD R14,Y+
002AB 90F9 LD R15,Y+
002AC 9508 RET
push_xgsetF0FC:
002AD 937A ST -Y,R23
002AE 936A ST -Y,R22
push_xgset30FC:
002AF 935A ST -Y,R21
002B0 934A ST -Y,R20
push_xgset00FC:
002B1 92FA ST -Y,R15
002B2 92EA ST -Y,R14
push_xgset003C:
002B3 92DA ST -Y,R13
002B4 92CA ST -Y,R12
002B5 92BA ST -Y,R11
002B6 92AA ST -Y,R10
002B7 9508 RET
push_xgset300C:
002B8 935A ST -Y,R21
002B9 934A ST -Y,R20
002BA 92BA ST -Y,R11
002BB 92AA ST -Y,R10
002BC 9508 RET
pop_xgset300C:
002BD 90A9 LD R10,Y+
002BE 90B9 LD R11,Y+
002BF 9149 LD R20,Y+
002C0 9159 LD R21,Y+
002C1 9508 RET
push_xgsetF00C:
002C2 937A ST -Y,R23
002C3 936A ST -Y,R22
002C4 935A ST -Y,R21
002C5 934A ST -Y,R20
002C6 92BA ST -Y,R11
002C7 92AA ST -Y,R10
002C8 9508 RET
pop_xgsetF00C:
002C9 90A9 LD R10,Y+
002CA 90B9 LD R11,Y+
002CB 9149 LD R20,Y+
002CC 9159 LD R21,Y+
002CD 9169 LD R22,Y+
002CE 9179 LD R23,Y+
002CF 9508 RET
push_xgset303C:
002D0 935A ST -Y,R21
002D1 934A ST -Y,R20
002D2 92DA ST -Y,R13
002D3 92CA ST -Y,R12
002D4 92BA ST -Y,R11
002D5 92AA ST -Y,R10
002D6 9508 RET
pop_xgset303C:
002D7 90A9 LD R10,Y+
002D8 90B9 LD R11,Y+
002D9 90C9 LD R12,Y+
002DA 90D9 LD R13,Y+
002DB 9149 LD R20,Y+
002DC 9159 LD R21,Y+
002DD 9508 RET
push_xgsetF03C:
002DE 937A ST -Y,R23
002DF 936A ST -Y,R22
002E0 935A ST -Y,R21
002E1 934A ST -Y,R20
002E2 92DA ST -Y,R13
002E3 92CA ST -Y,R12
002E4 92BA ST -Y,R11
002E5 92AA ST -Y,R10
002E6 9508 RET
pop_xgsetF03C:
002E7 90A9 LD R10,Y+
002E8 90B9 LD R11,Y+
002E9 90C9 LD R12,Y+
002EA 90D9 LD R13,Y+
002EB 9149 LD R20,Y+
002EC 9159 LD R21,Y+
002ED 9169 LD R22,Y+
002EE 9179 LD R23,Y+
002EF 9508 RET
neg32:
002F0 9500 COM R16
002F1 9510 COM R17
002F2 9520 COM R18
002F3 9530 COM R19
002F4 5F0F SUBI R16,0xFF
002F5 4F1F SBCI R17,0xFF
002F6 4F2F SBCI R18,0xFF
002F7 4F3F SBCI R19,0xFF
002F8 9508 RET
lpm32:
002F9 93EA ST -Y,R30
002FA 93FA ST -Y,R31
002FB 920A ST -Y,R0
002FC 2FE0 MOV R30,R16
002FD 2FF1 MOV R31,R17
002FE 95C8 LPM
002FF 2D00 MOV R16,R0
00300 9631 ADIW R30,1
00301 95C8 LPM
00302 2D10 MOV R17,R0
00303 9631 ADIW R30,1
00304 95C8 LPM
00305 2D20 MOV R18,R0
00306 9631 ADIW R30,1
00307 95C8 LPM
00308 2D30 MOV R19,R0
00309 9009 LD R0,Y+
0030A 91F9 LD R31,Y+
0030B 91E9 LD R30,Y+
0030C 9508 RET
fpint:
0030D 924A ST -Y,R4
0030E 925A ST -Y,R5
0030F 926A ST -Y,R6
00310 938A ST -Y,R24
00311 D0F0 RCALL unpacku
00312 F111 BEQ 0x0335
00313 2055 TST R5
00314 F0E2 BMI 0x0331
00315 E18F LDI R24,0x1F
00316 1648 CP R4,R24
00317 F4C0 BCC 0x0330
00318 E187 LDI R24,0x17
00319 1648 CP R4,R24
0031A F0D1 BEQ 0x0335
0031B F458 BCC 0x0327
0031C 9441 NEG R4
0031D EE89 LDI R24,0xE9
0031E 1A48 SUB R4,R24
0031F C005 RJMP 0x0325
00320 9535 ASR R19
00321 9527 ROR R18
00322 9517 ROR R17
00323 9507 ROR R16
00324 944A DEC R4
00325 F7D1 BNE 0x0320
00326 C00E RJMP 0x0335
00327 E187 LDI R24,0x17
00328 1A48 SUB R4,R24
00329 0F00 LSL R16
0032A 1F11 ROL R17
0032B 1F22 ROL R18
0032C 1F33 ROL R19
0032D 944A DEC R4
0032E F7D1 BNE 0x0329
0032F C005 RJMP 0x0335
00330 E73F LDI R19,0x7F
00331 2F23 MOV R18,R19
00332 2F13 MOV R17,R19
00333 2F03 MOV R16,R19
00334 C003 RJMP 0x0338
00335 2066 TST R6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -