📄 hc595.lst
字号:
0138 F471 BNE 0x0147
0139 91800101 LDS R24,point_pos
013B 3082 CPI R24,2
013C F451 BNE 0x0147
(0077) HC_595_OUT((Seg7_Data[Seg7_Led_Buf[2]])|(1<<dp));
013D E88C LDI R24,0x8C
013E E090 LDI R25,0
013F 91E00104 LDS R30,Seg7_Led_Buf+2
0141 27FF CLR R31
0142 0FE8 ADD R30,R24
0143 1FF9 ADC R31,R25
0144 9104 LPM R16,0(Z)
0145 6800 ORI R16,0x80
0146 DFA6 RCALL _HC_595_OUT
(0078) Seg7_Bit2_En();
0147 9ABE SBI 0x17,6
0148 9AC6 SBI 0x18,6
(0079) delay_nus(60);
0149 E30C LDI R16,0x3C
014A E010 LDI R17,0
014B 940E00A9 CALL _delay_nus
(0080) Seg7_Bit2_Dis();
014D 9ABE SBI 0x17,6
014E 98C6 CBI 0x18,6
(0081)
(0082) HC_595_OUT(Seg7_Data[Seg7_Led_Buf[3]]);
014F E88C LDI R24,0x8C
0150 E090 LDI R25,0
0151 91E00105 LDS R30,Seg7_Led_Buf+3
0153 27FF CLR R31
0154 0FE8 ADD R30,R24
0155 1FF9 ADC R31,R25
0156 9104 LPM R16,0(Z)
0157 DF95 RCALL _HC_595_OUT
(0083) if((point==1)&&(point_pos==3))
0158 91800100 LDS R24,point
015A 3081 CPI R24,1
015B F471 BNE 0x016A
015C 91800101 LDS R24,point_pos
015E 3083 CPI R24,3
015F F451 BNE 0x016A
(0084) HC_595_OUT((Seg7_Data[Seg7_Led_Buf[3]])|(1<<dp));
0160 E88C LDI R24,0x8C
0161 E090 LDI R25,0
0162 91E00105 LDS R30,Seg7_Led_Buf+3
0164 27FF CLR R31
0165 0FE8 ADD R30,R24
0166 1FF9 ADC R31,R25
0167 9104 LPM R16,0(Z)
0168 6800 ORI R16,0x80
0169 DF83 RCALL _HC_595_OUT
(0085) Seg7_Bit3_En();
016A 9ABF SBI 0x17,7
016B 9AC7 SBI 0x18,7
(0086) delay_nus(60);
016C E30C LDI R16,0x3C
016D E010 LDI R17,0
016E 940E00A9 CALL _delay_nus
(0087) Seg7_Bit3_Dis();
0170 9ABF SBI 0x17,7
0171 98C7 CBI 0x18,7
0172 9508 RET
_Seg7_Led_display:
data --> R20
0173 940E03FF CALL push_gset1
0175 01A8 MOVW R20,R16
(0088) }
(0089) /*************************************************************************
(0090) ** 函数名称:Hc595显示整形数据
(0091) ** 功能描述:
(0092) ** 输 入:0~9999
(0093) ** 输出 :
(0094) ** 全局变量:
(0095) ** 调用模块:
(0096) ** 说明:
(0097) ** 注意:
(0098) **************************************************************************/
(0099) void Seg7_Led_display(unsigned int data)
(0100) {
(0101) if(data>9999) //错误处理,超出显示范围则全亮
0176 E08F LDI R24,0xF
0177 E297 LDI R25,0x27
0178 1784 CP R24,R20
0179 0795 CPC R25,R21
017A F430 BCC 0x0181
(0102) {
(0103) HC_595_OUT(0xFF);
017B EF0F LDI R16,0xFF
017C DF70 RCALL _HC_595_OUT
(0104) Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
017D B388 IN R24,0x18
017E 6F80 ORI R24,0xF0
017F BB88 OUT 0x18,R24
(0105) }
0180 C07F RJMP 0x0200
(0106) else if(data>999)
0181 EE87 LDI R24,0xE7
0182 E093 LDI R25,3
0183 1784 CP R24,R20
0184 0795 CPC R25,R21
0185 F530 BCC 0x01AC
(0107) {
(0108) Seg7_Led_Buf[3]=data/1000;
0186 EE28 LDI R18,0xE8
0187 E033 LDI R19,3
0188 018A MOVW R16,R20
0189 940E03DA CALL div16u
018B 93000105 STS Seg7_Led_Buf+3,R16
(0109) Seg7_Led_Buf[2]=(data%1000)/100;
018D EE28 LDI R18,0xE8
018E E033 LDI R19,3
018F 018A MOVW R16,R20
0190 940E03D8 CALL mod16u
0192 E624 LDI R18,0x64
0193 E030 LDI R19,0
0194 940E03DA CALL div16u
0196 93000104 STS Seg7_Led_Buf+2,R16
(0110) Seg7_Led_Buf[1]=(data%100)/10;
0198 E624 LDI R18,0x64
0199 E030 LDI R19,0
019A 018A MOVW R16,R20
019B 940E03D8 CALL mod16u
019D E02A LDI R18,0xA
019E E030 LDI R19,0
019F 940E03DA CALL div16u
01A1 93000103 STS Seg7_Led_Buf+1,R16
(0111) Seg7_Led_Buf[0]=data%10;
01A3 E02A LDI R18,0xA
01A4 E030 LDI R19,0
01A5 018A MOVW R16,R20
01A6 940E03D8 CALL mod16u
01A8 93000102 STS Seg7_Led_Buf,R16
(0112) Seg7_Led_Update();
01AA DF4D RCALL _Seg7_Led_Update
(0113) }
01AB C054 RJMP 0x0200
(0114) else if(data>99)
01AC E683 LDI R24,0x63
01AD E090 LDI R25,0
01AE 1784 CP R24,R20
01AF 0795 CPC R25,R21
01B0 F510 BCC 0x01D3
(0115) {
(0116) Seg7_Led_Buf[3]=16;
01B1 E180 LDI R24,0x10
01B2 93800105 STS Seg7_Led_Buf+3,R24
(0117) Seg7_Led_Buf[2]=(data%1000)/100;
01B4 EE28 LDI R18,0xE8
01B5 E033 LDI R19,3
01B6 018A MOVW R16,R20
01B7 940E03D8 CALL mod16u
01B9 E624 LDI R18,0x64
01BA E030 LDI R19,0
01BB 940E03DA CALL div16u
01BD 93000104 STS Seg7_Led_Buf+2,R16
(0118) Seg7_Led_Buf[1]=(data%100)/10;
01BF E624 LDI R18,0x64
01C0 E030 LDI R19,0
01C1 018A MOVW R16,R20
01C2 940E03D8 CALL mod16u
01C4 E02A LDI R18,0xA
01C5 E030 LDI R19,0
01C6 940E03DA CALL div16u
01C8 93000103 STS Seg7_Led_Buf+1,R16
(0119) Seg7_Led_Buf[0]=data%10;
01CA E02A LDI R18,0xA
01CB E030 LDI R19,0
01CC 018A MOVW R16,R20
01CD 940E03D8 CALL mod16u
01CF 93000102 STS Seg7_Led_Buf,R16
(0120) Seg7_Led_Update();
01D1 DF26 RCALL _Seg7_Led_Update
(0121) }
01D2 C02D RJMP 0x0200
(0122) else if(data>9)
01D3 E089 LDI R24,0x9
01D4 E090 LDI R25,0
01D5 1784 CP R24,R20
01D6 0795 CPC R25,R21
01D7 F4C8 BCC 0x01F1
(0123) {
(0124) Seg7_Led_Buf[3]=16;
01D8 E180 LDI R24,0x10
01D9 93800105 STS Seg7_Led_Buf+3,R24
(0125) Seg7_Led_Buf[2]=16;
01DB 93800104 STS Seg7_Led_Buf+2,R24
(0126) Seg7_Led_Buf[1]=(data%100)/10;
01DD E624 LDI R18,0x64
01DE E030 LDI R19,0
01DF 018A MOVW R16,R20
01E0 940E03D8 CALL mod16u
01E2 E02A LDI R18,0xA
01E3 E030 LDI R19,0
01E4 940E03DA CALL div16u
01E6 93000103 STS Seg7_Led_Buf+1,R16
(0127) Seg7_Led_Buf[0]=data%10;
01E8 E02A LDI R18,0xA
01E9 E030 LDI R19,0
01EA 018A MOVW R16,R20
01EB 940E03D8 CALL mod16u
01ED 93000102 STS Seg7_Led_Buf,R16
(0128) Seg7_Led_Update();
01EF DF08 RCALL _Seg7_Led_Update
(0129) }
01F0 C00F RJMP 0x0200
(0130) else
(0131) {
(0132) Seg7_Led_Buf[3]=16;
01F1 E180 LDI R24,0x10
01F2 93800105 STS Seg7_Led_Buf+3,R24
(0133) Seg7_Led_Buf[2]=16;
01F4 93800104 STS Seg7_Led_Buf+2,R24
(0134) Seg7_Led_Buf[1]=16;
01F6 93800103 STS Seg7_Led_Buf+1,R24
(0135) Seg7_Led_Buf[0]=data%10;
01F8 E02A LDI R18,0xA
01F9 E030 LDI R19,0
01FA 018A MOVW R16,R20
01FB 940E03D8 CALL mod16u
01FD 93000102 STS Seg7_Led_Buf,R16
(0136) Seg7_Led_Update();
01FF DEF8 RCALL _Seg7_Led_Update
(0137) }
0200 940E0402 CALL pop_gset1
0202 9508 RET
_Seg7_Led_float:
temp --> R20
data --> Y+8
0203 940E03D3 CALL push_arg4
0205 940E03FD CALL push_gset2
0207 9724 SBIW R28,4
(0138) }
(0139) /*************************************************************************
(0140) ** 函数名称:HC595显示浮点数据
(0141) ** 功能描述:
(0142) ** 输 入:
(0143) ** 输出 :
(0144) ** 全局变量:
(0145) ** 调用模块:
(0146) ** 说明:
(0147) ** 注意:
(0148) **************************************************************************/
(0149) void Seg7_Led_float(float data)
(0150) {
(0151) unsigned int temp;
(0152) /*
(0153) 重要说明:data+=0.00001;其中0.00001为容错值
(0154) 解决float数据类型在计算机内部存储的误差问题,可以解决显示问题
(0155) 但是会引入新的计算误差,如果精度要求大于0.00001建议更改容错值或者将此处注释掉
(0156) */
(0157) data+=0.00001;
0208 01FE MOVW R30,R28
0209 8420 LDD R2,Z+8
020A 8431 LDD R3,Z+9
020B 8442 LDD R4,Z+10
020C 8453 LDD R5,Z+11
020D 925A ST R5,-Y
020E 924A ST R4,-Y
020F 923A ST R3,-Y
0210 922A ST R2,-Y
0211 EB09 LDI R16,0xB9
0212 E010 LDI R17,0
0213 940E041F CALL lpm32
0215 933A ST R19,-Y
0216 932A ST R18,-Y
0217 931A ST R17,-Y
0218 930A ST R16,-Y
0219 940E04A8 CALL add32f
021B 01FE MOVW R30,R28
021C 8700 STD Z+8,R16
021D 8711 STD Z+9,R17
021E 8722 STD Z+10,R18
021F 8733 STD Z+11,R19
(0158) point=1;
0220 E081 LDI R24,1
0221 93800100 STS point,R24
(0159) if(data>999) //错误处理,超出显示范围则全亮
0223 EB05 LDI R16,0xB5
0224 E010 LDI R17,0
0225 940E041F CALL lpm32
0227 933A ST R19,-Y
0228 932A ST R18,-Y
0229 931A ST R17,-Y
022A 930A ST R16,-Y
022B 01FE MOVW R30,R28
022C 8424 LDD R2,Z+12
022D 8435 LDD R3,Z+13
022E 8446 LDD R4,Z+14
022F 8457 LDD R5,Z+15
0230 925A ST R5,-Y
0231 924A ST R4,-Y
0232 923A ST R3,-Y
0233 922A ST R2,-Y
0234 940E0506 CALL cmp32f
0236 F434 BGE 0x023D
(0160) {
(0161) HC_595_OUT(0xFF);
0237 EF0F LDI R16,0xFF
0238 DEB4 RCALL _HC_595_OUT
(0162) Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
0239 B388 IN R24,0x18
023A 6F80 ORI R24,0xF0
023B BB88 OUT 0x18,R24
(0163) }
023C C18E RJMP 0x03CB
(0164) else if(data>99)
023D EB01 LDI R16,0xB1
023E E010 LDI R17,0
023F 940E041F CALL lpm32
0241 933A ST R19,-Y
0242 932A ST R18,-Y
0243 931A ST R17,-Y
0244 930A ST R16,-Y
0245 01FE MOVW R30,R28
0246 8424 LDD R2,Z+12
0247 8435 LDD R3,Z+13
0248 8446 LDD R4,Z+14
0249 8457 LDD R5,Z+15
024A 925A ST R5,-Y
024B 924A ST R4,-Y
024C 923A ST R3,-Y
024D 922A ST R2,-Y
024E 940E0506 CALL cmp32f
0250 F00C BLT 0x0252
0251 C077 RJMP 0x02C9
(0165) {
(0166) temp=data*10;
0252 EA0D LDI R16,0xAD
0253 E010 LDI R17,0
0254 940E041F CALL lpm32
0256 933A ST R19,-Y
0257 932A ST R18,-Y
0258 931A ST R17,-Y
0259 930A ST R16,-Y
025A 01FE MOVW R30,R28
025B 8424 LDD R2,Z+12
025C 8435 LDD R3,Z+13
025D 8446 LDD R4,Z+14
025E 8457 LDD R5,Z+15
025F 925A ST R5,-Y
0260 924A ST R4,-Y
0261 923A ST R3,-Y
0262 922A ST R2,-Y
0263 940E053A CALL empy32f
0265 01FE MOVW R30,R28
0266 8300 STD Z+0,R16
0267 8311 STD Z+1,R17
0268 8322 STD Z+2,R18
0269 8333 STD Z+3,R19
026A 01FE MOVW R30,R28
026B 8020 LDD R2,Z+0
026C 8031 LDD R3,Z+1
026D 8042 LDD R4,Z+2
026E 8053 LDD R5,Z+3
026F 925A ST R5,-Y
0270 924A ST R4,-Y
0271 923A ST R3,-Y
0272 922A ST R2,-Y
0273 EA09 LDI R16,0xA9
0274 E010 LDI R17,0
0275 940E041F CALL lpm32
0277 933A ST R19,-Y
0278 932A ST R18,-Y
0279 931A ST R17,-Y
027A 930A ST R16,-Y
027B 940E0506 CALL cmp32f
027D F0CC BLT 0x0297
027E 01FE MOVW R30,R28
027F 8020 LDD R2,Z+0
0280 8031 LDD R3,Z+1
0281 8042 LDD R4,Z+2
0282 8053 LDD R5,Z+3
0283 925A ST R5,-Y
0284 924A ST R4,-Y
0285 923A ST R3,-Y
0286 922A ST R2,-Y
0287 EA09 LDI R16,0xA9
0288 E010 LDI R17,0
0289 940E041F CALL lpm32
028B 933A ST R19,-Y
028C 932A ST R18,-Y
028D 931A ST R17,-Y
028E 930A ST R16,-Y
028F 940E04B0 CALL sub32f
0291 940E0433 CALL fp2int
0293 01B8 MOVW R22,R16
0294 5060 SUBI R22,0
0295 4870 SBCI R23,0x80
0296 C008 RJMP 0x029F
0297 01FE MOVW R30,R28
0298 8100 LDD R16,Z+0
0299 8111 LDD R17,Z+1
029A 8122 LDD R18,Z+2
029B 8133 LDD R19,Z+3
029C 940E0433 CALL fp2int
029E 01B8 MOVW R22,R16
029F 01AB MOVW R20,R22
(0167) point_pos=1;
02A0 E081 LDI R24,1
02A1 93800101 STS point_pos,R24
(0168) Seg7_Led_Buf[3]=temp/1000;
02A3 EE28 LDI R18,0xE8
02A4 E033 LDI R19,3
02A5 018A MOVW R16,R20
02A6 940E03DA CALL div16u
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -