📄 main.lst
字号:
0156 E02A LDI R18,0xA
0157 E030 LDI R19,0
0158 940E08C2 CALL div16u
015A 2F40 MOV R20,R16
(0115) display_one(5,temp);
015B 2F24 MOV R18,R20
015C E005 LDI R16,5
015D DF94 RCALL _display_one
(0116) delay_ms(6);
015E E006 LDI R16,6
015F E010 LDI R17,0
0160 DF78 RCALL _delay_ms
(0117) led_contrl_port |= (1<<5);
0161 9A95 SBI 0x12,5
(0118) }
0162 C00A RJMP 0x016D
(0119) else
(0120) {
(0121) if(mode==1)
0163 2D8A MOV R24,R10
0164 3081 CPI R24,1
0165 F439 BNE 0x016D
(0122) {
(0123) display_one(5,0);
0166 2722 CLR R18
0167 E005 LDI R16,5
0168 DF89 RCALL _display_one
(0124) delay_ms(6);
0169 E006 LDI R16,6
016A E010 LDI R17,0
016B DF6D RCALL _delay_ms
(0125) led_contrl_port |= (1<<5);
016C 9A95 SBI 0x12,5
(0126) }
(0127) }
(0128) //个位
(0129) temp=data%10;
016D E02A LDI R18,0xA
016E E030 LDI R19,0
016F 018B MOVW R16,R22
0170 940E08C0 CALL mod16u
0172 2F40 MOV R20,R16
(0130) display_one(4,temp);
0173 2F24 MOV R18,R20
0174 E004 LDI R16,4
0175 DF7C RCALL _display_one
(0131) delay_ms(6);
0176 E006 LDI R16,6
0177 E010 LDI R17,0
0178 DF60 RCALL _delay_ms
(0132) led_contrl_port |= (1<<4);
0179 9A94 SBI 0x12,4
017A 940E08DF CALL pop_gset3
017C 9508 RET
_display_float:
temp2 --> R22
temp --> R20
data --> Y+22
017D 940E08BB CALL push_arg4
017F 940E08E6 CALL push_gset3
0181 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)
0182 01FE MOVW R30,R28
0183 8826 LDD R2,Z+22
0184 8837 LDD R3,Z+23
0185 8C40 LDD R4,Z+24
0186 8C51 LDD R5,Z+25
0187 925A ST R5,-Y
0188 924A ST R4,-Y
0189 923A ST R3,-Y
018A 922A ST R2,-Y
018B EC00 LDI R16,0xC0
018C E010 LDI R17,0
018D 940E090A CALL lpm32
018F 933A ST R19,-Y
0190 932A ST R18,-Y
0191 931A ST R17,-Y
0192 930A ST R16,-Y
0193 940E0A54 CALL cmp32f
0195 F00C BLT 0x0197
(0147) {
(0148) led_error();
0196 D71E RCALL _led_error
(0149) }
(0150) if (data<=0)
0197 EB0C LDI R16,0xBC
0198 E010 LDI R17,0
0199 940E090A CALL lpm32
019B 933A ST R19,-Y
019C 932A ST R18,-Y
019D 931A ST R17,-Y
019E 930A ST R16,-Y
019F 01FE MOVW R30,R28
01A0 8C22 LDD R2,Z+26
01A1 8C33 LDD R3,Z+27
01A2 8C44 LDD R4,Z+28
01A3 8C55 LDD R5,Z+29
01A4 925A ST R5,-Y
01A5 924A ST R4,-Y
01A6 923A ST R3,-Y
01A7 922A ST R2,-Y
01A8 940E0A54 CALL cmp32f
01AA F00C BLT 0x01AC
(0151) {
(0152) led_error();
01AB D709 RCALL _led_error
(0153) }
(0154) //
(0155) if(data<1) //比如 0.123
01AC 01FE MOVW R30,R28
01AD 8826 LDD R2,Z+22
01AE 8837 LDD R3,Z+23
01AF 8C40 LDD R4,Z+24
01B0 8C51 LDD R5,Z+25
01B1 925A ST R5,-Y
01B2 924A ST R4,-Y
01B3 923A ST R3,-Y
01B4 922A ST R2,-Y
01B5 EB08 LDI R16,0xB8
01B6 E010 LDI R17,0
01B7 940E090A CALL lpm32
01B9 933A ST R19,-Y
01BA 932A ST R18,-Y
01BB 931A ST R17,-Y
01BC 930A ST R16,-Y
01BD 940E0A54 CALL cmp32f
01BF F00C BLT 0x01C1
01C0 C117 RJMP 0x02D8
(0156) {
(0157) display_one(7,0); //显示0.
01C1 2722 CLR R18
01C2 E007 LDI R16,7
01C3 DF2E RCALL _display_one
(0158) led_port &= 0x7F; //点亮对应小数点
01C4 B38B IN R24,0x1B
01C5 778F ANDI R24,0x7F
01C6 BB8B OUT 0x1B,R24
(0159) delay_ms(6);
01C7 E006 LDI R16,6
01C8 E010 LDI R17,0
01C9 DF0F RCALL _delay_ms
(0160) led_contrl_port |= (1<<7);
01CA 9A97 SBI 0x12,7
(0161)
(0162) temp=(data*10); // 0.123*10 = 1
01CB EB04 LDI R16,0xB4
01CC E010 LDI R17,0
01CD 940E090A CALL lpm32
01CF 933A ST R19,-Y
01D0 932A ST R18,-Y
01D1 931A ST R17,-Y
01D2 930A ST R16,-Y
01D3 01FE MOVW R30,R28
01D4 8C22 LDD R2,Z+26
01D5 8C33 LDD R3,Z+27
01D6 8C44 LDD R4,Z+28
01D7 8C55 LDD R5,Z+29
01D8 925A ST R5,-Y
01D9 924A ST R4,-Y
01DA 923A ST R3,-Y
01DB 922A ST R2,-Y
01DC 940E0A88 CALL empy32f
01DE 01FE MOVW R30,R28
01DF 8300 STD Z+0,R16
01E0 8311 STD Z+1,R17
01E1 8322 STD Z+2,R18
01E2 8333 STD Z+3,R19
01E3 01FE MOVW R30,R28
01E4 8020 LDD R2,Z+0
01E5 8031 LDD R3,Z+1
01E6 8042 LDD R4,Z+2
01E7 8053 LDD R5,Z+3
01E8 925A ST R5,-Y
01E9 924A ST R4,-Y
01EA 923A ST R3,-Y
01EB 922A ST R2,-Y
01EC EB00 LDI R16,0xB0
01ED E010 LDI R17,0
01EE 940E090A CALL lpm32
01F0 933A ST R19,-Y
01F1 932A ST R18,-Y
01F2 931A ST R17,-Y
01F3 930A ST R16,-Y
01F4 940E0A54 CALL cmp32f
01F6 F0CC BLT 0x0210
01F7 01FE MOVW R30,R28
01F8 8020 LDD R2,Z+0
01F9 8031 LDD R3,Z+1
01FA 8042 LDD R4,Z+2
01FB 8053 LDD R5,Z+3
01FC 925A ST R5,-Y
01FD 924A ST R4,-Y
01FE 923A ST R3,-Y
01FF 922A ST R2,-Y
0200 EB00 LDI R16,0xB0
0201 E010 LDI R17,0
0202 940E090A CALL lpm32
0204 933A ST R19,-Y
0205 932A ST R18,-Y
0206 931A ST R17,-Y
0207 930A ST R16,-Y
0208 940E09A1 CALL sub32f
020A 940E0924 CALL fp2int
020C 01A8 MOVW R20,R16
020D 5040 SUBI R20,0
020E 4850 SBCI R21,0x80
020F C008 RJMP 0x0218
0210 01FE MOVW R30,R28
0211 8100 LDD R16,Z+0
0212 8111 LDD R17,Z+1
0213 8122 LDD R18,Z+2
0214 8133 LDD R19,Z+3
0215 940E0924 CALL fp2int
0217 01A8 MOVW R20,R16
(0163) display_one(6,temp);
0218 2F24 MOV R18,R20
0219 E006 LDI R16,6
021A DED7 RCALL _display_one
(0164) delay_ms(6);
021B E006 LDI R16,6
021C E010 LDI R17,0
021D DEBB RCALL _delay_ms
(0165) led_contrl_port |= (1<<6);
021E 9A96 SBI 0x12,6
(0166)
(0167) temp2=(data*100);
021F EA0C LDI R16,0xAC
0220 E010 LDI R17,0
0221 940E090A CALL lpm32
0223 933A ST R19,-Y
0224 932A ST R18,-Y
0225 931A ST R17,-Y
0226 930A ST R16,-Y
0227 01FE MOVW R30,R28
0228 8C22 LDD R2,Z+26
0229 8C33 LDD R3,Z+27
022A 8C44 LDD R4,Z+28
022B 8C55 LDD R5,Z+29
022C 925A ST R5,-Y
022D 924A ST R4,-Y
022E 923A ST R3,-Y
022F 922A ST R2,-Y
0230 940E0A88 CALL empy32f
0232 01FE MOVW R30,R28
0233 8304 STD Z+4,R16
0234 8315 STD Z+5,R17
0235 8326 STD Z+6,R18
0236 8337 STD Z+7,R19
0237 01FE MOVW R30,R28
0238 8024 LDD R2,Z+4
0239 8035 LDD R3,Z+5
023A 8046 LDD R4,Z+6
023B 8057 LDD R5,Z+7
023C 925A ST R5,-Y
023D 924A ST R4,-Y
023E 923A ST R3,-Y
023F 922A ST R2,-Y
0240 EB00 LDI R16,0xB0
0241 E010 LDI R17,0
0242 940E090A CALL lpm32
0244 933A ST R19,-Y
0245 932A ST R18,-Y
0246 931A ST R17,-Y
0247 930A ST R16,-Y
0248 940E0A54 CALL cmp32f
024A F0D4 BLT 0x0265
024B 01FE MOVW R30,R28
024C 8024 LDD R2,Z+4
024D 8035 LDD R3,Z+5
024E 8046 LDD R4,Z+6
024F 8057 LDD R5,Z+7
0250 925A ST R5,-Y
0251 924A ST R4,-Y
0252 923A ST R3,-Y
0253 922A ST R2,-Y
0254 EB00 LDI R16,0xB0
0255 E010 LDI R17,0
0256 940E090A CALL lpm32
0258 933A ST R19,-Y
0259 932A ST R18,-Y
025A 931A ST R17,-Y
025B 930A ST R16,-Y
025C 940E09A1 CALL sub32f
025E 940E0924 CALL fp2int
0260 01C8 MOVW R24,R16
0261 5080 SUBI R24,0
0262 4890 SBCI R25,0x80
0263 015C MOVW R10,R24
0264 C008 RJMP 0x026D
0265 01FE MOVW R30,R28
0266 8104 LDD R16,Z+4
0267 8115 LDD R17,Z+5
0268 8126 LDD R18,Z+6
0269 8137 LDD R19,Z+7
026A 940E0924 CALL fp2int
026C 0158 MOVW R10,R16
026D 01B5 MOVW R22,R10
(0168) temp=temp2%10; // 0.123*100%10 = 2
026E E02A LDI R18,0xA
026F E030 LDI R19,0
0270 018B MOVW R16,R22
0271 940E08C0 CALL mod16u
0273 2F40 MOV R20,R16
(0169) display_one(5,temp);
0274 2F24 MOV R18,R20
0275 E005 LDI R16,5
0276 DE7B RCALL _display_one
(0170) delay_ms(6);
0277 E006 LDI R16,6
0278 E010 LDI R17,0
0279 DE5F RCALL _delay_ms
(0171) led_contrl_port |= (1<<5);
027A 9A95 SBI 0x12,5
(0172)
(0173) temp2=(data*1000);
027B EC00 LDI R16,0xC0
027C E010 LDI R17,0
027D 940E090A CALL lpm32
027F 933A ST R19,-Y
0280 932A ST R18,-Y
0281 931A ST R17,-Y
0282 930A ST R16,-Y
0283 01FE MOVW R30,R28
0284 8C22 LDD R2,Z+26
0285 8C33 LDD R3,Z+27
0286 8C44 LDD R4,Z+28
0287 8C55 LDD R5,Z+29
0288 925A ST R5,-Y
0289 924A ST R4,-Y
028A 923A ST R3,-Y
028B 922A ST R2,-Y
028C 940E0A88 CALL empy32f
028E 01FE MOVW R30,R28
028F 8700 STD Z+8,R16
0290 8711 STD Z+9,R17
0291 8722 STD Z+10,R18
0292 8733 STD Z+11,R19
0293 01FE MOVW R30,R28
0294 8420 LDD R2,Z+8
0295 8431 LDD R3,Z+9
0296 8442 LDD R4,Z+10
0297 8453 LDD R5,Z+11
0298 925A ST R5,-Y
0299 924A ST R4,-Y
029A 923A ST R3,-Y
029B 922A ST R2,-Y
029C EB00 LDI R16,0xB0
029D E010 LDI R17,0
029E 940E090A CALL lpm32
02A0 933A ST R19,-Y
02A1 932A ST R18,-Y
02A2 931A ST R17,-Y
02A3 930A ST R16,-Y
02A4 940E0A54 CALL cmp32f
02A6 F0D4 BLT 0x02C1
02A7 01FE MOVW R30,R28
02A8 8420 LDD R2,Z+8
02A9 8431 LDD R3,Z+9
02AA 8442 LDD R4,Z+10
02AB 8453 LDD R5,Z+11
02AC 925A ST R5,-Y
02AD 924A ST R4,-Y
02AE 923A ST R3,-Y
02AF 922A ST R2,-Y
02B0 EB00 LDI R16,0xB0
02B1 E010 LDI R17,0
02B2 940E090A CALL lpm32
02B4 933A ST R19,-Y
02B5 932A ST R18,-Y
02B6 931A ST R17,-Y
02B7 930A ST R16,-Y
02B8 940E09A1 CALL sub32f
02BA 940E0924 CALL fp2int
02BC 01C8 MOVW R24,R16
02BD 5080 SUBI R24,0
02BE 4890 SBCI R25,0x80
02BF 015C MOVW R10,R24
02C0 C008 RJMP 0x02C9
02C1 01FE MOVW R30,R28
02C2 8500 LDD R16,Z+8
02C3 8511 LDD R17,Z+9
02C4 8522 LDD R18,Z+10
02C5 8533 LDD R19,Z+11
02C6 940E0924 CALL fp2int
02C8 0158 MOVW R10,R16
02C9 01B5 MOVW R22,R10
(0174) temp=temp2%10; // 0.123*100%10 = 3
02CA E02A LDI R18,0xA
02CB E030 LDI R19,0
02CC 018B MOVW R16,R22
02CD 940E08C0 CALL mod16u
02CF 2F40 MOV R20,R16
(0175) display_one(4,temp);
02D0 2F24 MOV R18,R20
02D1 E004 LDI R16,4
02D2 DE1F RCALL _display_one
(0176) delay_ms(6);
02D3 E006 LDI R16,6
02D4 E010 LDI R17,0
02D5 DE03 RCALL _delay_ms
(0177) led_contrl_port |= (1<<4);
02D6 9A94 SBI 0x12,4
(0178) }
02D7 C436 RJMP 0x070E
(0179) else if(data<10) //比如1.234
02D8 01FE MOVW R30,R28
02D9 8826 LDD R2,Z+22
02DA 8837 LDD R3,Z+23
02DB 8C40 LDD R4,Z+24
02DC 8C51 LDD R5,Z+25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -