📄 project.lst
字号:
(0135) NOP();
0230 0000 NOP
(0136) Set_EN(0);
0231 2700 CLR R16
0232 DFCA RCALL _Set_EN
(0137) }
0233 940E02DF CALL pop_gset2
0235 9508 RET
_LCD_Write_Data:
status --> R22
data --> R20
0236 940E02FC CALL push_gset2
0238 2F62 MOV R22,R18
0239 2F40 MOV R20,R16
(0138)
(0139) //******************************************************************************
(0140) // Function : LCD_Write_Data
(0141) // Input : data - Data to be written to LCD
(0142) // status - Detect LCD Status when 1
(0143) // Output : none
(0144) // Description : Write Data to LCD
(0145) //******************************************************************************
(0146) void LCD_Write_Data(INT8U data,INT8U status)
(0147) {
(0148) if(status == 1)
023A 3061 CPI R22,1
023B F419 BNE 0x023F
(0149) {
(0150) while(LCD_Read_BF() != 0) {;}
023C DFC8 RCALL _LCD_Read_BF
023D 2300 TST R16
023E F7E9 BNE 0x023C
(0151) }
(0152) Set_EN(0);
023F 2700 CLR R16
0240 DFBC RCALL _Set_EN
(0153) Set_RS(1);
0241 E001 LDI R16,1
0242 DFAE RCALL _Set_RS
(0154) Set_RW(0);
0243 2700 CLR R16
0244 DFB2 RCALL _Set_RW
(0155) Set_Data(data);
0245 2F04 MOV R16,R20
0246 DFBC RCALL _Set_Data
(0156) Set_EN(1);
0247 E001 LDI R16,1
0248 DFB4 RCALL _Set_EN
(0157) NOP();
0249 0000 NOP
(0158) NOP();
024A 0000 NOP
(0159) Set_EN(0);
024B 2700 CLR R16
024C DFB0 RCALL _Set_EN
(0160) }
024D 940E02DF CALL pop_gset2
024F 9508 RET
_LCD_Read_Data:
data --> R20
status --> R20
0250 940E02E5 CALL push_gset1
0252 2F40 MOV R20,R16
(0161)
(0162) //******************************************************************************
(0163) // Function : LCD_Read_Data
(0164) // Input : status - Detect LCD Status when 1
(0165) // Output : Data read from LCD
(0166) // Description : Read Data from LCD
(0167) //******************************************************************************
(0168) INT8U LCD_Read_Data(INT8U status)
(0169) {
(0170) INT8U data;
(0171) if(status == 1)
0253 3041 CPI R20,1
0254 F419 BNE 0x0258
(0172) {
(0173) while(LCD_Read_BF() != 0) {;}
0255 DFAF RCALL _LCD_Read_BF
0256 2300 TST R16
0257 F7E9 BNE 0x0255
(0174) }
(0175) DDRA = 0x00;
0258 2422 CLR R2
0259 BA2A OUT 0x1A,R2
(0176) Set_EN(0);
025A 2700 CLR R16
025B DFA1 RCALL _Set_EN
(0177) Set_RS(1);
025C E001 LDI R16,1
025D DF93 RCALL _Set_RS
(0178) Set_RW(1);
025E E001 LDI R16,1
025F DF97 RCALL _Set_RW
(0179) Set_EN(1);
0260 E001 LDI R16,1
0261 DF9B RCALL _Set_EN
(0180) NOP();
0262 0000 NOP
(0181) NOP();
0263 0000 NOP
(0182) data = PINA;
0264 B349 IN R20,0x19
(0183) Set_EN(0);
0265 2700 CLR R16
0266 DF96 RCALL _Set_EN
(0184) DDRA = 0xFF;
0267 EF8F LDI R24,0xFF
0268 BB8A OUT 0x1A,R24
(0185) return(data);
0269 2F04 MOV R16,R20
026A 940E02E8 CALL pop_gset1
026C 9508 RET
(0186) }
(0187)
(0188) //******************************************************************************
(0189) // Function : LCD_Reset
(0190) // Input : none
(0191) // Output : none
(0192) // Description : LCD software reset,must execute according to time sequence
(0193) //******************************************************************************
(0194) void LCD_Reset(void)
(0195) {
(0196) Delay_ms(15);
_LCD_Reset:
026D E00F LDI R16,0xF
026E D059 RCALL _Delay_ms
(0197) LCD_Write_Command(0x38,0);
026F 2722 CLR R18
0270 E308 LDI R16,0x38
0271 DFAA RCALL _LCD_Write_Command
(0198) Delay_ms(5);
0272 E005 LDI R16,5
0273 D054 RCALL _Delay_ms
(0199) LCD_Write_Command(0x38,0);
0274 2722 CLR R18
0275 E308 LDI R16,0x38
0276 DFA5 RCALL _LCD_Write_Command
(0200) Delay_ms(5);
0277 E005 LDI R16,5
0278 D04F RCALL _Delay_ms
(0201) LCD_Write_Command(0x38,0);
0279 2722 CLR R18
027A E308 LDI R16,0x38
027B DFA0 RCALL _LCD_Write_Command
(0202) LCD_Write_Command(0x38,1);
027C E021 LDI R18,1
027D E308 LDI R16,0x38
027E DF9D RCALL _LCD_Write_Command
(0203) LCD_Write_Command(0x08,1);
027F E021 LDI R18,1
0280 E008 LDI R16,0x8
0281 DF9A RCALL _LCD_Write_Command
(0204) LCD_Write_Command(0x01,1);
0282 E021 LDI R18,1
0283 E001 LDI R16,1
0284 DF97 RCALL _LCD_Write_Command
(0205) LCD_Write_Command(0x06,1);
0285 E021 LDI R18,1
0286 E006 LDI R16,6
0287 DF94 RCALL _LCD_Write_Command
(0206) LCD_Write_Command(0x0C,1);
0288 E021 LDI R18,1
0289 E00C LDI R16,0xC
(0207) }
028A CF91 RJMP _LCD_Write_Command
_LCD_Show_Char:
address --> R20
code --> Y+4
y --> R20
x --> R22
028B 940E02FC CALL push_gset2
028D 2F42 MOV R20,R18
028E 2F60 MOV R22,R16
(0208)
(0209) //******************************************************************************
(0210) // Function : LCD_Show_Char
(0211) // Input : x - Row of LCD(0 to 1);
(0212) // y - Column of LCD(0 to 15);
(0213) // code - Code of Char
(0214) // Output : none
(0215) // Description : Display a Char at Setting Row and Column
(0216) //******************************************************************************
(0217) void LCD_Show_Char(INT8U x,INT8U y,INT8U code)
(0218) {
(0219) INT8U address;
(0220) if((x < 2) && (y < 16))
028F 3062 CPI R22,2
0290 F470 BCC 0x029F
0291 3140 CPI R20,0x10
0292 F460 BCC 0x029F
(0221) {
(0222) address = 0x40 * x + y;
0293 E480 LDI R24,0x40
0294 9F86 MUL R24,R22
0295 2C20 MOV R2,R0
0296 0E24 ADD R2,R20
0297 2D42 MOV R20,R2
(0223) LCD_Write_Command(0x80 | address,1);
0298 E021 LDI R18,1
0299 2D02 MOV R16,R2
029A 6800 ORI R16,0x80
029B DF80 RCALL _LCD_Write_Command
(0224) LCD_Write_Data(code,1);
029C E021 LDI R18,1
029D 810C LDD R16,Y+4
029E DF97 RCALL _LCD_Write_Data
(0225) }
(0226) }
029F 940E02DF CALL pop_gset2
02A1 9508 RET
_LCD_Show_String:
x_address --> R20
y_address --> R22
pdata --> R10
y --> R12
x --> R22
02A2 940E0304 CALL push_gset4
02A4 2EC2 MOV R12,R18
02A5 2F60 MOV R22,R16
02A6 9721 SBIW R28,1
02A7 84A9 LDD R10,Y+9
02A8 84BA LDD R11,Y+10
(0227)
(0228) //******************************************************************************
(0229) // Function : LCD_Show_String
(0230) // Input : x - Row of LCD(0 to 1);
(0231) // y - Column of LCD(0 to 15);
(0232) // pdata - Pointer to a String
(0233) // Output : none
(0234) // Description : Display a String from at Setting Row and Column
(0235) //******************************************************************************
(0236) void LCD_Show_String(INT8U x,INT8U y,INT8U *pdata)
(0237) {
(0238) INT8U x_address = x;
02A9 2F46 MOV R20,R22
(0239) INT8U y_address = y;
02AA 2D6C MOV R22,R12
02AB C014 RJMP 0x02C0
(0240) while(*pdata != '\0')
(0241) {
(0242) LCD_Show_Char(x_address,y_address,*pdata++);
02AC 01F5 MOVW R30,R10
02AD 9021 LD R2,Z+
02AE 015F MOVW R10,R30
02AF 8228 STD Y+0,R2
02B0 2F26 MOV R18,R22
02B1 2F04 MOV R16,R20
02B2 DFD8 RCALL _LCD_Show_Char
(0243) y_address++;
02B3 9563 INC R22
(0244) if((x_address == 0) && (y_address >= 16))
02B4 2344 TST R20
02B5 F429 BNE 0x02BB
02B6 3160 CPI R22,0x10
02B7 F018 BCS 0x02BB
(0245) {
(0246) x_address = 1;
02B8 E041 LDI R20,1
(0247) y_address = 0;
02B9 2766 CLR R22
(0248) }
02BA C005 RJMP 0x02C0
(0249) else if((x_address == 1) && (y_address >= 16))
02BB 3041 CPI R20,1
02BC F419 BNE 0x02C0
02BD 3160 CPI R22,0x10
02BE F008 BCS 0x02C0
(0250) {
(0251) return;
02BF C004 RJMP 0x02C4
02C0 01F5 MOVW R30,R10
02C1 8020 LDD R2,Z+0
02C2 2022 TST R2
02C3 F741 BNE 0x02AC
(0252) }
(0253) }
(0254) }
02C4 9621 ADIW R28,1
02C5 940E02E2 CALL pop_gset4
02C7 9508 RET
_Delay_ms:
cnt --> R20
time --> R16
02C8 940E02E5 CALL push_gset1
(0255)
(0256) //******************************************************************************
(0257) // Function : Delay_ms
(0258) // Input : time - Delay Time
(0259) // Output : none
(0260) // Description : Inaccurate ms Level Delay for Software Reset of LCD
(0261) //******************************************************************************
(0262) void Delay_ms(INT8U time)
(0263) {
(0264) INT16U cnt = 0;
02CA 2744 CLR R20
02CB 2755 CLR R21
02CC C00A RJMP 0x02D7
(0265) while(time--)
(0266) {
(0267) for(cnt = 0;cnt < 5000;cnt++)
02CD 2744 CLR R20
02CE 2755 CLR R21
02CF C003 RJMP 0x02D3
(0268) {
(0269) NOP();
02D0 0000 NOP
02D1 5F4F SUBI R20,0xFF
02D2 4F5F SBCI R21,0xFF
02D3 3848 CPI R20,0x88
02D4 E1E3 LDI R30,0x13
02D5 075E CPC R21,R30
02D6 F3C8 BCS 0x02D0
02D7 2E20 MOV R2,R16
02D8 2433 CLR R3
02D9 5001 SUBI R16,1
02DA 2022 TST R2
02DB F789 BNE 0x02CD
(0270) }
(0271) }
(0272) }
FILE: <library>
02DC 940E02E8 CALL pop_gset1
02DE 9508 RET
pop_gset2:
02DF E0E2 LDI R30,2
02E0 940C02E9 JMP pop
pop_gset4:
02E2 E0E8 LDI R30,0x8
02E3 940C02E9 JMP pop
push_gset1:
02E5 935A ST R21,-Y
02E6 934A ST R20,-Y
02E7 9508 RET
pop_gset1:
02E8 E0E1 LDI R30,1
pop:
02E9 9149 LD R20,Y+
02EA 9159 LD R21,Y+
02EB FDE0 SBRC R30,0
02EC 9508 RET
02ED 9169 LD R22,Y+
02EE 9179 LD R23,Y+
02EF FDE1 SBRC R30,1
02F0 9508 RET
02F1 90A9 LD R10,Y+
02F2 90B9 LD R11,Y+
02F3 FDE2 SBRC R30,2
02F4 9508 RET
02F5 90C9 LD R12,Y+
02F6 90D9 LD R13,Y+
02F7 FDE3 SBRC R30,3
02F8 9508 RET
02F9 90E9 LD R14,Y+
02FA 90F9 LD R15,Y+
02FB 9508 RET
push_gset2:
02FC 937A ST R23,-Y
02FD 936A ST R22,-Y
02FE 940C02E5 JMP push_gset1
push_gset3:
0300 92BA ST R11,-Y
0301 92AA ST R10,-Y
0302 940C02FC JMP push_gset2
push_gset4:
0304 92DA ST R13,-Y
0305 92CA ST R12,-Y
0306 940C0300 JMP push_gset3
push_lset:
0308 93FA ST R31,-Y
0309 93EA ST R30,-Y
030A 93BA ST R27,-Y
030B 93AA ST R26,-Y
030C 939A ST R25,-Y
030D 938A ST R24,-Y
030E 933A ST R19,-Y
030F 932A ST R18,-Y
0310 931A ST R17,-Y
0311 930A ST R16,-Y
0312 929A ST R9,-Y
0313 928A ST R8,-Y
0314 927A ST R7,-Y
0315 926A ST R6,-Y
0316 925A ST R5,-Y
0317 924A ST R4,-Y
0318 923A ST R3,-Y
0319 922A ST R2,-Y
031A 921A ST R1,-Y
031B 920A ST R0,-Y
031C B60F IN R0,0x3F
031D 920A ST R0,-Y
031E 9508 RET
pop_lset:
031F 9009 LD R0,Y+
0320 BE0F OUT 0x3F,R0
0321 9009 LD R0,Y+
0322 9019 LD R1,Y+
0323 9029 LD R2,Y+
0324 9039 LD R3,Y+
0325 9049 LD R4,Y+
0326 9059 LD R5,Y+
0327 9069 LD R6,Y+
0328 9079 LD R7,Y+
0329 9089 LD R8,Y+
032A 9099 LD R9,Y+
032B 9109 LD R16,Y+
032C 9119 LD R17,Y+
032D 9129 LD R18,Y+
032E 9139 LD R19,Y+
032F 9189 LD R24,Y+
0330 9199 LD R25,Y+
0331 91A9 LD R26,Y+
0332 91B9 LD R27,Y+
0333 91E9 LD R30,Y+
0334 91F9 LD R31,Y+
0335 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -