📄 1.lst
字号:
00E3 E010 LDI R17,0
00E4 DFDC RCALL _delay_us
(0052) EN_CLR;
00E5 9896 CBI 0x12,6
00E6 940E0171 CALL pop_gset1
00E8 9508 RET
_LCD_write_data:
data --> R20
00E9 940E016E CALL push_gset1
00EB 2F40 MOV R20,R16
(0053) }
(0054)
(0055) /*显示屏命令写入函数*/
(0056) void LCD_write_data(unsigned char data) {
(0057)
(0058) RS_SET;
00EC 9A93 SBI 0x12,3
(0059) RW_CLR;
00ED 9894 CBI 0x12,4
(0060) EN_SET;
00EE 9A96 SBI 0x12,6
(0061) PORTA = data;
00EF BB4B OUT 0x1B,R20
(0062) delay_us(5);
00F0 E005 LDI R16,5
00F1 E010 LDI R17,0
00F2 DFCE RCALL _delay_us
(0063) EN_CLR;
00F3 9896 CBI 0x12,6
00F4 940E0171 CALL pop_gset1
00F6 9508 RET
(0064) }
(0065)
(0066) /*显示屏清空显示*/
(0067) void LCD_clear(void) {
(0068)
(0069) LCD_write_com(0x01);
_LCD_clear:
00F7 E001 LDI R16,1
00F8 DFE2 RCALL _LCD_write_com
(0070) delay_ms(5);
00F9 E005 LDI R16,5
00FA DFD1 RCALL _delay_ms
00FB 9508 RET
_LCD_write_str:
s --> R20
y --> R10
x --> R22
00FC 940E016A CALL push_gset3
00FE 2EA2 MOV R10,R18
00FF 2F60 MOV R22,R16
0100 814E LDD R20,Y+6
0101 815F LDD R21,Y+7
(0071) }
(0072)
(0073) /*显示屏字符串写入函数*/
(0074) void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s) {
(0075)
(0076) if (y == 0) {
0102 20AA TST R10
0103 F421 BNE 0x0108
(0077) LCD_write_com(0x80 + x);
0104 2F06 MOV R16,R22
0105 5800 SUBI R16,0x80
0106 DFD4 RCALL _LCD_write_com
(0078) }
0107 C009 RJMP 0x0111
(0079) else {
(0080) LCD_write_com(0xC0 + x);
0108 2F06 MOV R16,R22
0109 5400 SUBI R16,0x40
010A DFD0 RCALL _LCD_write_com
(0081) }
010B C005 RJMP 0x0111
(0082)
(0083) while (*s) {
(0084) LCD_write_data( *s);
010C 01FA MOVW R30,R20
010D 8100 LDD R16,Z+0
010E DFDA RCALL _LCD_write_data
(0085) s ++;
010F 5F4F SUBI R20,0xFF
0110 4F5F SBCI R21,0xFF
0111 01FA MOVW R30,R20
0112 8020 LDD R2,Z+0
0113 2022 TST R2
0114 F7B9 BNE 0x010C
0115 940E0163 CALL pop_gset3
0117 9508 RET
_LCD_write_char:
data --> Y+4
y --> R22
x --> R20
0118 940E016C CALL push_gset2
011A 2F62 MOV R22,R18
011B 2F40 MOV R20,R16
(0086) }
(0087) }
(0088)
(0089) /*显示屏单字符写入函数*/
(0090) void LCD_write_char(unsigned char x,unsigned char y,unsigned char data) {
(0091)
(0092) if (y == 0) {
011C 2366 TST R22
011D F421 BNE 0x0122
(0093) LCD_write_com(0x80 + x);
011E 2F04 MOV R16,R20
011F 5800 SUBI R16,0x80
0120 DFBA RCALL _LCD_write_com
(0094) }
0121 C003 RJMP 0x0125
(0095) else {
(0096) LCD_write_com(0xC0 + x);
0122 2F04 MOV R16,R20
0123 5400 SUBI R16,0x40
0124 DFB6 RCALL _LCD_write_com
(0097) }
(0098)
(0099) LCD_write_data( data);
0125 810C LDD R16,Y+4
0126 DFC2 RCALL _LCD_write_data
0127 940E0160 CALL pop_gset2
0129 9508 RET
(0100) }
(0101)
(0102) /*显示屏初始化函数*/
(0103) void LCD_init(void) {
(0104)
(0105) DDRA = 0xFF; /*I/O口方向设置*/
_LCD_init:
012A EF8F LDI R24,0xFF
012B BB8A OUT 0x1A,R24
(0106) DDRD |= (1 << PD3) | (1 << PD4) | (1 << PD6);
012C B381 IN R24,0x11
012D 6588 ORI R24,0x58
012E BB81 OUT 0x11,R24
(0107) LCD_write_com(0x38); /*显示模式设置*/
012F E308 LDI R16,0x38
0130 DFAA RCALL _LCD_write_com
(0108) delay_ms(5);
0131 E005 LDI R16,5
0132 DF99 RCALL _delay_ms
(0109) LCD_write_com(0x38);
0133 E308 LDI R16,0x38
0134 DFA6 RCALL _LCD_write_com
(0110) delay_ms(5);
0135 E005 LDI R16,5
0136 DF95 RCALL _delay_ms
(0111) LCD_write_com(0x38);
0137 E308 LDI R16,0x38
0138 DFA2 RCALL _LCD_write_com
(0112) delay_ms(5);
0139 E005 LDI R16,5
013A DF91 RCALL _delay_ms
(0113) LCD_write_com(0x38);
013B E308 LDI R16,0x38
013C DF9E RCALL _LCD_write_com
(0114)
(0115) LCD_write_com(0x08); /*显示关闭*/
013D E008 LDI R16,0x8
013E DF9C RCALL _LCD_write_com
(0116) LCD_write_com(0x01); /*显示清屏*/
013F E001 LDI R16,1
0140 DF9A RCALL _LCD_write_com
(0117) LCD_write_com(0x06); /*显示光标移动设置*/
0141 E006 LDI R16,6
0142 DF98 RCALL _LCD_write_com
(0118) delay_ms(5);
0143 E005 LDI R16,5
0144 DF87 RCALL _delay_ms
(0119) LCD_write_com(0x0C); /*显示开及光标设置*/
FILE: <library>
0145 E00C LDI R16,0xC
0146 DF94 RCALL _LCD_write_com
0147 9508 RET
mod8u:
0148 9468 BSET 6
0149 C001 RJMP xdiv8u
div8u:
014A 94E8 BCLR 6
xdiv8u:
014B 932A ST R18,-Y
014C 92FA ST R15,-Y
014D 92EA ST R14,-Y
014E 24FF CLR R15
014F 24EE CLR R14
0150 E120 LDI R18,0x10
0151 0F00 LSL R16
0152 1CFF ROL R15
0153 1CEE ROL R14
0154 16E1 CP R14,R17
0155 F010 BCS 0x0158
0156 1AE1 SUB R14,R17
0157 9503 INC R16
0158 952A DEC R18
0159 F7B9 BNE 0x0151
015A F40E BRTC 0x015C
015B 2D0E MOV R16,R14
015C 90E9 LD R14,Y+
015D 90F9 LD R15,Y+
015E 9129 LD R18,Y+
015F 9508 RET
pop_gset2:
0160 E0E2 LDI R30,2
0161 940C0172 JMP pop
pop_gset3:
0163 E0E4 LDI R30,4
0164 940C0172 JMP pop
push_gset5:
0166 92FA ST R15,-Y
0167 92EA ST R14,-Y
push_gset4:
0168 92DA ST R13,-Y
0169 92CA ST R12,-Y
push_gset3:
016A 92BA ST R11,-Y
016B 92AA ST R10,-Y
push_gset2:
016C 937A ST R23,-Y
016D 936A ST R22,-Y
push_gset1:
016E 935A ST R21,-Y
016F 934A ST R20,-Y
0170 9508 RET
pop_gset1:
0171 E0E1 LDI R30,1
pop:
0172 9149 LD R20,Y+
0173 9159 LD R21,Y+
0174 FDE0 SBRC R30,0
0175 9508 RET
0176 9169 LD R22,Y+
0177 9179 LD R23,Y+
0178 FDE1 SBRC R30,1
0179 9508 RET
017A 90A9 LD R10,Y+
017B 90B9 LD R11,Y+
017C FDE2 SBRC R30,2
017D 9508 RET
017E 90C9 LD R12,Y+
017F 90D9 LD R13,Y+
0180 FDE3 SBRC R30,3
0181 9508 RET
0182 90E9 LD R14,Y+
0183 90F9 LD R15,Y+
0184 9508 RET
push_lset:
0185 93FA ST R31,-Y
0186 93EA ST R30,-Y
0187 93BA ST R27,-Y
0188 93AA ST R26,-Y
0189 939A ST R25,-Y
018A 938A ST R24,-Y
018B 933A ST R19,-Y
018C 932A ST R18,-Y
018D 931A ST R17,-Y
018E 930A ST R16,-Y
018F 929A ST R9,-Y
0190 928A ST R8,-Y
0191 927A ST R7,-Y
0192 926A ST R6,-Y
0193 925A ST R5,-Y
0194 924A ST R4,-Y
0195 923A ST R3,-Y
0196 922A ST R2,-Y
0197 921A ST R1,-Y
0198 920A ST R0,-Y
0199 B60F IN R0,0x3F
019A 920A ST R0,-Y
019B 9508 RET
pop_lset:
019C 9009 LD R0,Y+
019D BE0F OUT 0x3F,R0
019E 9009 LD R0,Y+
019F 9019 LD R1,Y+
01A0 9029 LD R2,Y+
01A1 9039 LD R3,Y+
01A2 9049 LD R4,Y+
01A3 9059 LD R5,Y+
01A4 9069 LD R6,Y+
01A5 9079 LD R7,Y+
01A6 9089 LD R8,Y+
01A7 9099 LD R9,Y+
01A8 9109 LD R16,Y+
01A9 9119 LD R17,Y+
01AA 9129 LD R18,Y+
01AB 9139 LD R19,Y+
01AC 9189 LD R24,Y+
01AD 9199 LD R25,Y+
01AE 91A9 LD R26,Y+
01AF 91B9 LD R27,Y+
01B0 91E9 LD R30,Y+
01B1 91F9 LD R31,Y+
01B2 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -