📄 project1.lst
字号:
LineNum --> R10
00DC 940E019E CALL push_gset3
00DE 2F62 MOV R22,R18
00DF 2EA0 MOV R10,R16
(0176)
(0177)
(0178) }
(0179)
(0180)
(0181) }
(0182)
(0183) void DispSetCursor(unsigned char LineNum, unsigned char ColumnNum)
(0184) {
(0185)
(0186) unsigned char i=0x00;
00E0 2744 CLR R20
(0187) switch(LineNum&0x0f) //确定行号
00E1 2D8A MOV R24,R10
00E2 2799 CLR R25
00E3 708F ANDI R24,0xF
00E4 7090 ANDI R25,0
00E5 015C MOVW R10,R24
00E6 3080 CPI R24,0
00E7 0789 CPC R24,R25
00E8 F071 BEQ 0x00F7
00E9 01C5 MOVW R24,R10
00EA 3081 CPI R24,1
00EB E0E0 LDI R30,0
00EC 079E CPC R25,R30
00ED F059 BEQ 0x00F9
00EE 3082 CPI R24,2
00EF E0E0 LDI R30,0
00F0 079E CPC R25,R30
00F1 F049 BEQ 0x00FB
00F2 3083 CPI R24,3
00F3 E0E0 LDI R30,0
00F4 079E CPC R25,R30
00F5 F039 BEQ 0x00FD
00F6 C007 RJMP 0x00FE
(0188) {
(0189) case 0x00:
(0190) i=0x80;
00F7 E840 LDI R20,0x80
(0191) break;
00F8 C005 RJMP 0x00FE
(0192) case 0x01:
(0193) i=0x90;
00F9 E940 LDI R20,0x90
(0194) break;
00FA C003 RJMP 0x00FE
(0195) case 0x02:
(0196) i=0x88;
00FB E848 LDI R20,0x88
(0197) break;
00FC C001 RJMP 0x00FE
(0198) case 0x03:
(0199) i=0x98;
00FD E948 LDI R20,0x98
(0200) break;
(0201) default :
(0202) break;
(0203) }
(0204) i = (ColumnNum&0x0f)|i; //确定列号
00FE 2F86 MOV R24,R22
00FF 708F ANDI R24,0xF
0100 2B48 OR R20,R24
(0205) SdCmd(i);
0101 2F04 MOV R16,R20
0102 DF99 RCALL _SdCmd
0103 940E0197 CALL pop_gset3
0105 9508 RET
_WriteTextScreen2:
i --> R20
j --> R10
pstr --> R22
0106 940E019E CALL push_gset3
0108 01B8 MOVW R22,R16
(0206)
(0207) }
(0208)
(0209) void WriteTextScreen2(unsigned char *pstr)
(0210) {
(0211) unsigned char i;
(0212) unsigned char j;
(0213)
(0214) SdCmd(0x34); // 8bit I/F, basic command
0109 E304 LDI R16,0x34
010A DF91 RCALL _SdCmd
(0215) SdCmd(0x30); // 8bit I/F, basic command, graphic off
010B E300 LDI R16,0x30
010C DF8F RCALL _SdCmd
(0216)
(0217) for(i=0;i<36;i++) //清空屏幕
010D 2744 CLR R20
010E C00F RJMP 0x011E
(0218) {
(0219) if (i%18==0) //判断是否换行
010F E112 LDI R17,0x12
0110 2F04 MOV R16,R20
0111 940E017C CALL mod8u
0113 2300 TST R16
0114 F431 BNE 0x011B
(0220) {
(0221) DispSetCursor(i/18,0); //如换行, 则光标移动到行首
0115 2722 CLR R18
0116 E112 LDI R17,0x12
0117 2F04 MOV R16,R20
0118 940E017E CALL div8u
011A DFC1 RCALL _DispSetCursor
(0222) }
(0223)
(0224) SdData(' '); //
011B E200 LDI R16,0x20
011C DF93 RCALL _SdData
011D 9543 INC R20
011E 3244 CPI R20,0x24
011F F378 BCS 0x010F
(0225) }
(0226)
(0227) j=0;
0120 24AA CLR R10
0121 C025 RJMP 0x0147
(0228) //while (*pstr)
(0229) while (*pstr && j<36)
(0230) {
(0231) if (j%18==0) //判断是否换行
0122 E112 LDI R17,0x12
0123 2D0A MOV R16,R10
0124 940E017C CALL mod8u
0126 2300 TST R16
0127 F431 BNE 0x012E
(0232) {
(0233) DispSetCursor(j/18,0); //如换行, 则光标移动到行首
0128 2722 CLR R18
0129 E112 LDI R17,0x12
012A 2D0A MOV R16,R10
012B 940E017E CALL div8u
012D DFAE RCALL _DispSetCursor
(0234) }
(0235)
(0236) //避免最后一格写半个汉字, 把汉字写到下一行
(0237) if (((j+1)%18==0) && *pstr>127 && *(pstr-1)<128)
012E E112 LDI R17,0x12
012F 2D0A MOV R16,R10
0130 5F0F SUBI R16,0xFF
0131 940E017C CALL mod8u
0133 2300 TST R16
0134 F469 BNE 0x0142
0135 E78F LDI R24,0x7F
0136 01FB MOVW R30,R22
0137 8020 LDD R2,Z+0
0138 1582 CP R24,R2
0139 F440 BCC 0x0142
013A 9731 SBIW R30,1
013B 8180 LDD R24,Z+0
013C 3880 CPI R24,0x80
013D F420 BCC 0x0142
(0238) {
(0239) SdData(' '); //
013E E200 LDI R16,0x20
013F DF70 RCALL _SdData
(0240) j++;
0140 94A3 INC R10
(0241) }
0141 C005 RJMP 0x0147
(0242) else
(0243) {
(0244) SdData(*pstr++);
0142 01FB MOVW R30,R22
0143 9101 LD R16,Z+
0144 01BF MOVW R22,R30
0145 DF6A RCALL _SdData
(0245) j++;
0146 94A3 INC R10
0147 01FB MOVW R30,R22
0148 8020 LDD R2,Z+0
0149 2022 TST R2
014A F021 BEQ 0x014F
014B 2D8A MOV R24,R10
014C 3284 CPI R24,0x24
014D F408 BCC 0x014F
014E CFD3 RJMP 0x0122
014F 940E0197 CALL pop_gset3
0151 9508 RET
(0246) }
(0247)
(0248) //SdData(*pstr++);
(0249) //j++;
(0250) }
(0251)
(0252) }
(0253)
(0254) /*-----------------------------------------------------------------------
(0255) 延时函数
(0256) 系统时钟:8M
(0257) -----------------------------------------------------------------------*/
(0258) void delay_1us(void) //1us延时函数
(0259) {
(0260) asm("nop");
_delay_1us:
0152 0000 NOP
0153 9508 RET
_delay_nus:
i --> R20
n --> R22
0154 940E01A0 CALL push_gset2
0156 01B8 MOVW R22,R16
(0261) }
(0262)
(0263) void delay_nus(unsigned int n) //N us延时函数
(0264) {
(0265) unsigned int i=0;
0157 2744 CLR R20
0158 2755 CLR R21
(0266) for (i=0;i<n;i++)
0159 C003 RJMP 0x015D
(0267) delay_1us();
015A DFF7 RCALL _delay_1us
015B 5F4F SUBI R20,0xFF
015C 4F5F SBCI R21,0xFF
015D 1746 CP R20,R22
015E 0757 CPC R21,R23
015F F3D0 BCS 0x015A
0160 940E0194 CALL pop_gset2
0162 9508 RET
(0268) }
(0269)
(0270) void delay_1ms(void) //1ms延时函数
(0271) {
(0272) unsigned int i;
(0273) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
0163 2700 CLR R16
0164 2711 CLR R17
0165 C002 RJMP 0x0168
0166 5F0F SUBI R16,0xFF
0167 4F1F SBCI R17,0xFF
0168 3704 CPI R16,0x74
0169 E0E4 LDI R30,4
016A 071E CPC R17,R30
016B F3D0 BCS 0x0166
016C 9508 RET
_delay_nms:
i --> R20
n --> R22
016D 940E01A0 CALL push_gset2
016F 01B8 MOVW R22,R16
(0274) }
(0275)
(0276) void delay_nms(unsigned int n) //N ms延时函数
(0277) {
(0278) unsigned int i=0;
0170 2744 CLR R20
0171 2755 CLR R21
(0279) for (i=0;i<n;i++)
0172 C003 RJMP 0x0176
(0280) delay_1ms();
FILE: <library>
0173 DFEF RCALL _delay_1ms
0174 5F4F SUBI R20,0xFF
0175 4F5F SBCI R21,0xFF
0176 1746 CP R20,R22
0177 0757 CPC R21,R23
0178 F3D0 BCS 0x0173
0179 940E0194 CALL pop_gset2
017B 9508 RET
mod8u:
017C 9468 BSET 6
017D C001 RJMP xdiv8u
div8u:
017E 94E8 BCLR 6
xdiv8u:
017F 932A ST R18,-Y
0180 92FA ST R15,-Y
0181 92EA ST R14,-Y
0182 24FF CLR R15
0183 24EE CLR R14
0184 E120 LDI R18,0x10
0185 0F00 LSL R16
0186 1CFF ROL R15
0187 1CEE ROL R14
0188 16E1 CP R14,R17
0189 F010 BCS 0x018C
018A 1AE1 SUB R14,R17
018B 9503 INC R16
018C 952A DEC R18
018D F7B9 BNE 0x0185
018E F40E BRTC 0x0190
018F 2D0E MOV R16,R14
0190 90E9 LD R14,Y+
0191 90F9 LD R15,Y+
0192 9129 LD R18,Y+
0193 9508 RET
pop_gset2:
0194 E0E2 LDI R30,2
0195 940C01A6 JMP pop
pop_gset3:
0197 E0E4 LDI R30,4
0198 940C01A6 JMP pop
push_gset5:
019A 92FA ST R15,-Y
019B 92EA ST R14,-Y
push_gset4:
019C 92DA ST R13,-Y
019D 92CA ST R12,-Y
push_gset3:
019E 92BA ST R11,-Y
019F 92AA ST R10,-Y
push_gset2:
01A0 937A ST R23,-Y
01A1 936A ST R22,-Y
push_gset1:
01A2 935A ST R21,-Y
01A3 934A ST R20,-Y
01A4 9508 RET
pop_gset1:
01A5 E0E1 LDI R30,1
pop:
01A6 9149 LD R20,Y+
01A7 9159 LD R21,Y+
01A8 FDE0 SBRC R30,0
01A9 9508 RET
01AA 9169 LD R22,Y+
01AB 9179 LD R23,Y+
01AC FDE1 SBRC R30,1
01AD 9508 RET
01AE 90A9 LD R10,Y+
01AF 90B9 LD R11,Y+
01B0 FDE2 SBRC R30,2
01B1 9508 RET
01B2 90C9 LD R12,Y+
01B3 90D9 LD R13,Y+
01B4 FDE3 SBRC R30,3
01B5 9508 RET
01B6 90E9 LD R14,Y+
01B7 90F9 LD R15,Y+
01B8 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -