📄 main.lst
字号:
(0130) display_one(4,temp);
0154 2F24 MOV R18,R20
0155 E004 LDI R16,4
0156 DF7C RCALL _display_one
(0131) delay_ms(6);
0157 E006 LDI R16,6
0158 E010 LDI R17,0
0159 DF60 RCALL _delay_ms
(0132) led_contrl_port |= (1<<4);
015A 9A94 SBI 0x12,4
015B 940E091D CALL pop_gset3
015D 9508 RET
_display_float:
temp2 --> R22
temp --> R20
data --> Y+22
015E 940E08F9 CALL push_arg4
0160 940E0924 CALL push_gset3
0162 9760 SBIW R28,0x10
(0133) }
(0134)
(0135) /***********************
(0136) ** 显示四位浮点数 本函数占用 mega16 的空间 19%
(0137) ** 输入:要显示的四位数
(0138) ** 说明:可以小于四位数,自动补零
(0139) ************************/
(0140)
(0141) void display_float(float data)
(0142) {
(0143) UNS8 temp;
(0144) UNS16 temp2; //用于把浮点数变为整形
(0145) // 人为保证data的值,可以不要错误处理。
(0146) if (data>=1000)
0163 01FE MOVW R30,R28
0164 8826 LDD R2,Z+22
0165 8837 LDD R3,Z+23
0166 8C40 LDD R4,Z+24
0167 8C51 LDD R5,Z+25
0168 925A ST R5,-Y
0169 924A ST R4,-Y
016A 923A ST R3,-Y
016B 922A ST R2,-Y
016C EC00 LDI R16,0xC0
016D E010 LDI R17,0
016E 940E0948 CALL lpm32
0170 933A ST R19,-Y
0171 932A ST R18,-Y
0172 931A ST R17,-Y
0173 930A ST R16,-Y
0174 940E0A92 CALL cmp32f
0176 F00C BLT 0x0178
(0147) {
(0148) led_error();
0177 D71E RCALL _led_error
(0149) }
(0150) if (data<=0)
0178 EB0C LDI R16,0xBC
0179 E010 LDI R17,0
017A 940E0948 CALL lpm32
017C 933A ST R19,-Y
017D 932A ST R18,-Y
017E 931A ST R17,-Y
017F 930A ST R16,-Y
0180 01FE MOVW R30,R28
0181 8C22 LDD R2,Z+26
0182 8C33 LDD R3,Z+27
0183 8C44 LDD R4,Z+28
0184 8C55 LDD R5,Z+29
0185 925A ST R5,-Y
0186 924A ST R4,-Y
0187 923A ST R3,-Y
0188 922A ST R2,-Y
0189 940E0A92 CALL cmp32f
018B F00C BLT 0x018D
(0151) {
(0152) led_error();
018C D709 RCALL _led_error
(0153) }
(0154) //
(0155) if(data<1) //比如 0.123
018D 01FE MOVW R30,R28
018E 8826 LDD R2,Z+22
018F 8837 LDD R3,Z+23
0190 8C40 LDD R4,Z+24
0191 8C51 LDD R5,Z+25
0192 925A ST R5,-Y
0193 924A ST R4,-Y
0194 923A ST R3,-Y
0195 922A ST R2,-Y
0196 EB08 LDI R16,0xB8
0197 E010 LDI R17,0
0198 940E0948 CALL lpm32
019A 933A ST R19,-Y
019B 932A ST R18,-Y
019C 931A ST R17,-Y
019D 930A ST R16,-Y
019E 940E0A92 CALL cmp32f
01A0 F00C BLT 0x01A2
01A1 C117 RJMP 0x02B9
(0156) {
(0157) display_one(7,0); //显示0.
01A2 2722 CLR R18
01A3 E007 LDI R16,7
01A4 DF2E RCALL _display_one
(0158) led_port &= 0x7F; //点亮对应小数点
01A5 B38B IN R24,0x1B
01A6 778F ANDI R24,0x7F
01A7 BB8B OUT 0x1B,R24
(0159) delay_ms(6);
01A8 E006 LDI R16,6
01A9 E010 LDI R17,0
01AA DF0F RCALL _delay_ms
(0160) led_contrl_port |= (1<<7);
01AB 9A97 SBI 0x12,7
(0161)
(0162) temp=(data*10); // 0.123*10 = 1
01AC EB04 LDI R16,0xB4
01AD E010 LDI R17,0
01AE 940E0948 CALL lpm32
01B0 933A ST R19,-Y
01B1 932A ST R18,-Y
01B2 931A ST R17,-Y
01B3 930A ST R16,-Y
01B4 01FE MOVW R30,R28
01B5 8C22 LDD R2,Z+26
01B6 8C33 LDD R3,Z+27
01B7 8C44 LDD R4,Z+28
01B8 8C55 LDD R5,Z+29
01B9 925A ST R5,-Y
01BA 924A ST R4,-Y
01BB 923A ST R3,-Y
01BC 922A ST R2,-Y
01BD 940E0AC6 CALL empy32f
01BF 01FE MOVW R30,R28
01C0 8300 STD Z+0,R16
01C1 8311 STD Z+1,R17
01C2 8322 STD Z+2,R18
01C3 8333 STD Z+3,R19
01C4 01FE MOVW R30,R28
01C5 8020 LDD R2,Z+0
01C6 8031 LDD R3,Z+1
01C7 8042 LDD R4,Z+2
01C8 8053 LDD R5,Z+3
01C9 925A ST R5,-Y
01CA 924A ST R4,-Y
01CB 923A ST R3,-Y
01CC 922A ST R2,-Y
01CD EB00 LDI R16,0xB0
01CE E010 LDI R17,0
01CF 940E0948 CALL lpm32
01D1 933A ST R19,-Y
01D2 932A ST R18,-Y
01D3 931A ST R17,-Y
01D4 930A ST R16,-Y
01D5 940E0A92 CALL cmp32f
01D7 F0CC BLT 0x01F1
01D8 01FE MOVW R30,R28
01D9 8020 LDD R2,Z+0
01DA 8031 LDD R3,Z+1
01DB 8042 LDD R4,Z+2
01DC 8053 LDD R5,Z+3
01DD 925A ST R5,-Y
01DE 924A ST R4,-Y
01DF 923A ST R3,-Y
01E0 922A ST R2,-Y
01E1 EB00 LDI R16,0xB0
01E2 E010 LDI R17,0
01E3 940E0948 CALL lpm32
01E5 933A ST R19,-Y
01E6 932A ST R18,-Y
01E7 931A ST R17,-Y
01E8 930A ST R16,-Y
01E9 940E09DF CALL sub32f
01EB 940E0962 CALL fp2int
01ED 01A8 MOVW R20,R16
01EE 5040 SUBI R20,0
01EF 4850 SBCI R21,0x80
01F0 C008 RJMP 0x01F9
01F1 01FE MOVW R30,R28
01F2 8100 LDD R16,Z+0
01F3 8111 LDD R17,Z+1
01F4 8122 LDD R18,Z+2
01F5 8133 LDD R19,Z+3
01F6 940E0962 CALL fp2int
01F8 01A8 MOVW R20,R16
(0163) display_one(6,temp);
01F9 2F24 MOV R18,R20
01FA E006 LDI R16,6
01FB DED7 RCALL _display_one
(0164) delay_ms(6);
01FC E006 LDI R16,6
01FD E010 LDI R17,0
01FE DEBB RCALL _delay_ms
(0165) led_contrl_port |= (1<<6);
01FF 9A96 SBI 0x12,6
(0166)
(0167) temp2=(data*100);
0200 EA0C LDI R16,0xAC
0201 E010 LDI R17,0
0202 940E0948 CALL lpm32
0204 933A ST R19,-Y
0205 932A ST R18,-Y
0206 931A ST R17,-Y
0207 930A ST R16,-Y
0208 01FE MOVW R30,R28
0209 8C22 LDD R2,Z+26
020A 8C33 LDD R3,Z+27
020B 8C44 LDD R4,Z+28
020C 8C55 LDD R5,Z+29
020D 925A ST R5,-Y
020E 924A ST R4,-Y
020F 923A ST R3,-Y
0210 922A ST R2,-Y
0211 940E0AC6 CALL empy32f
0213 01FE MOVW R30,R28
0214 8304 STD Z+4,R16
0215 8315 STD Z+5,R17
0216 8326 STD Z+6,R18
0217 8337 STD Z+7,R19
0218 01FE MOVW R30,R28
0219 8024 LDD R2,Z+4
021A 8035 LDD R3,Z+5
021B 8046 LDD R4,Z+6
021C 8057 LDD R5,Z+7
021D 925A ST R5,-Y
021E 924A ST R4,-Y
021F 923A ST R3,-Y
0220 922A ST R2,-Y
0221 EB00 LDI R16,0xB0
0222 E010 LDI R17,0
0223 940E0948 CALL lpm32
0225 933A ST R19,-Y
0226 932A ST R18,-Y
0227 931A ST R17,-Y
0228 930A ST R16,-Y
0229 940E0A92 CALL cmp32f
022B F0D4 BLT 0x0246
022C 01FE MOVW R30,R28
022D 8024 LDD R2,Z+4
022E 8035 LDD R3,Z+5
022F 8046 LDD R4,Z+6
0230 8057 LDD R5,Z+7
0231 925A ST R5,-Y
0232 924A ST R4,-Y
0233 923A ST R3,-Y
0234 922A ST R2,-Y
0235 EB00 LDI R16,0xB0
0236 E010 LDI R17,0
0237 940E0948 CALL lpm32
0239 933A ST R19,-Y
023A 932A ST R18,-Y
023B 931A ST R17,-Y
023C 930A ST R16,-Y
023D 940E09DF CALL sub32f
023F 940E0962 CALL fp2int
0241 01C8 MOVW R24,R16
0242 5080 SUBI R24,0
0243 4890 SBCI R25,0x80
0244 015C MOVW R10,R24
0245 C008 RJMP 0x024E
0246 01FE MOVW R30,R28
0247 8104 LDD R16,Z+4
0248 8115 LDD R17,Z+5
0249 8126 LDD R18,Z+6
024A 8137 LDD R19,Z+7
024B 940E0962 CALL fp2int
024D 0158 MOVW R10,R16
024E 01B5 MOVW R22,R10
(0168) temp=temp2%10; // 0.123*100%10 = 2
024F E02A LDI R18,0xA
0250 E030 LDI R19,0
0251 018B MOVW R16,R22
0252 940E08FE CALL mod16u
0254 2F40 MOV R20,R16
(0169) display_one(5,temp);
0255 2F24 MOV R18,R20
0256 E005 LDI R16,5
0257 DE7B RCALL _display_one
(0170) delay_ms(6);
0258 E006 LDI R16,6
0259 E010 LDI R17,0
025A DE5F RCALL _delay_ms
(0171) led_contrl_port |= (1<<5);
025B 9A95 SBI 0x12,5
(0172)
(0173) temp2=(data*1000);
025C EC00 LDI R16,0xC0
025D E010 LDI R17,0
025E 940E0948 CALL lpm32
0260 933A ST R19,-Y
0261 932A ST R18,-Y
0262 931A ST R17,-Y
0263 930A ST R16,-Y
0264 01FE MOVW R30,R28
0265 8C22 LDD R2,Z+26
0266 8C33 LDD R3,Z+27
0267 8C44 LDD R4,Z+28
0268 8C55 LDD R5,Z+29
0269 925A ST R5,-Y
026A 924A ST R4,-Y
026B 923A ST R3,-Y
026C 922A ST R2,-Y
026D 940E0AC6 CALL empy32f
026F 01FE MOVW R30,R28
0270 8700 STD Z+8,R16
0271 8711 STD Z+9,R17
0272 8722 STD Z+10,R18
0273 8733 STD Z+11,R19
0274 01FE MOVW R30,R28
0275 8420 LDD R2,Z+8
0276 8431 LDD R3,Z+9
0277 8442 LDD R4,Z+10
0278 8453 LDD R5,Z+11
0279 925A ST R5,-Y
027A 924A ST R4,-Y
027B 923A ST R3,-Y
027C 922A ST R2,-Y
027D EB00 LDI R16,0xB0
027E E010 LDI R17,0
027F 940E0948 CALL lpm32
0281 933A ST R19,-Y
0282 932A ST R18,-Y
0283 931A ST R17,-Y
0284 930A ST R16,-Y
0285 940E0A92 CALL cmp32f
0287 F0D4 BLT 0x02A2
0288 01FE MOVW R30,R28
0289 8420 LDD R2,Z+8
028A 8431 LDD R3,Z+9
028B 8442 LDD R4,Z+10
028C 8453 LDD R5,Z+11
028D 925A ST R5,-Y
028E 924A ST R4,-Y
028F 923A ST R3,-Y
0290 922A ST R2,-Y
0291 EB00 LDI R16,0xB0
0292 E010 LDI R17,0
0293 940E0948 CALL lpm32
0295 933A ST R19,-Y
0296 932A ST R18,-Y
0297 931A ST R17,-Y
0298 930A ST R16,-Y
0299 940E09DF CALL sub32f
029B 940E0962 CALL fp2int
029D 01C8 MOVW R24,R16
029E 5080 SUBI R24,0
029F 4890 SBCI R25,0x80
02A0 015C MOVW R10,R24
02A1 C008 RJMP 0x02AA
02A2 01FE MOVW R30,R28
02A3 8500 LDD R16,Z+8
02A4 8511 LDD R17,Z+9
02A5 8522 LDD R18,Z+10
02A6 8533 LDD R19,Z+11
02A7 940E0962 CALL fp2int
02A9 0158 MOVW R10,R16
02AA 01B5 MOVW R22,R10
(0174) temp=temp2%10; // 0.123*100%10 = 3
02AB E02A LDI R18,0xA
02AC E030 LDI R19,0
02AD 018B MOVW R16,R22
02AE 940E08FE CALL mod16u
02B0 2F40 MOV R20,R16
(0175) display_one(4,temp);
02B1 2F24 MOV R18,R20
02B2 E004 LDI R16,4
02B3 DE1F RCALL _display_one
(0176) delay_ms(6);
02B4 E006 LDI R16,6
02B5 E010 LDI R17,0
02B6 DE03 RCALL _delay_ms
(0177) led_contrl_port |= (1<<4);
02B7 9A94 SBI 0x12,4
(0178) }
02B8 C436 RJMP 0x06EF
(0179) else if(data<10) //比如1.234
02B9 01FE MOVW R30,R28
02BA 8826 LDD R2,Z+22
02BB 8837 LDD R3,Z+23
02BC 8C40 LDD R4,Z+24
02BD 8C51 LDD R5,Z+25
02BE 925A ST R5,-Y
02BF 924A ST R4,-Y
02C0 923A ST R3,-Y
02C1 922A ST R2,-Y
02C2 EB04 LDI R16,0xB4
02C3 E010 LDI R17,0
02C4 940E0948 CALL lpm32
02C6 933A ST R19,-Y
02C7 932A ST R18,-Y
02C8 931A ST R17,-Y
02C9 930A ST R16,-Y
02CA 940E0A92 CALL cmp32f
02CC F00C BLT 0x02CE
02CD C16E RJMP 0x043C
(0180) {
(0181) temp=(data/1); // 1.234/1 = 1
02CE 01FE MOVW R30,R28
02CF 8826 LDD R2,Z+22
02D0 8837 LDD R3,Z+23
02D1 8C40 LDD R4,Z+24
02D2 8C51 LDD R5,Z+25
02D3 925A ST R5,-Y
02D4 924A ST R4,-Y
02D5 923A ST R3,-Y
02D6 922A ST R2,-Y
02D7 EB08 LDI R16,0xB8
02D8 E010 LDI R17,0
02D9 940E0948 CALL lpm32
02DB 933A ST R19,-Y
02DC 932A ST R18,-Y
02DD 931A ST R17,-Y
02DE 930A ST R16,-Y
02DF 940E0A38 CALL div32f
02E1 01FE MOVW R30,R28
02E2 8300 STD Z+0,R16
02E3 8311 STD Z+1,R17
02E4 8322 STD Z+2,R18
02E5 8333 STD Z+3,R19
02E6 01FE MOVW R30,R28
02E7 8020 LDD R2,Z+0
02E8 8031 LDD R3,Z+1
02E9 8042 LDD R4,Z+2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -