📄 hc595.lst
字号:
0149 91800102 LDS R24,point
014B 3081 CPI R24,1
014C F471 BNE 0x015B
014D 91800103 LDS R24,point_pos
014F 3081 CPI R24,1
0150 F451 BNE 0x015B
(0070) HC_595_OUT((Seg7_Data[Seg7_Led_Buf[1]])|(1<<dp));
0151 E88C LDI R24,0x8C
0152 E090 LDI R25,0
0153 91E00105 LDS R30,Seg7_Led_Buf+1
0155 27FF CLR R31
0156 0FE8 ADD R30,R24
0157 1FF9 ADC R31,R25
0158 9104 LPM R16,0(Z)
0159 6800 ORI R16,0x80
015A DFC9 RCALL _HC_595_OUT
(0071) Seg7_Bit1_En();
015B 9ABD SBI 0x17,5
015C 9AC5 SBI 0x18,5
(0072) delay_nus(60);
015D E30C LDI R16,0x3C
015E E010 LDI R17,0
015F 940E00E0 CALL _delay_nus
(0073) Seg7_Bit1_Dis();
0161 9ABD SBI 0x17,5
0162 98C5 CBI 0x18,5
(0074)
(0075) HC_595_OUT(Seg7_Data[Seg7_Led_Buf[2]]);
0163 E88C LDI R24,0x8C
0164 E090 LDI R25,0
0165 91E00106 LDS R30,Seg7_Led_Buf+2
0167 27FF CLR R31
0168 0FE8 ADD R30,R24
0169 1FF9 ADC R31,R25
016A 9104 LPM R16,0(Z)
016B DFB8 RCALL _HC_595_OUT
(0076) if((point==1)&&(point_pos==2))
016C 91800102 LDS R24,point
016E 3081 CPI R24,1
016F F471 BNE 0x017E
0170 91800103 LDS R24,point_pos
0172 3082 CPI R24,2
0173 F451 BNE 0x017E
(0077) HC_595_OUT((Seg7_Data[Seg7_Led_Buf[2]])|(1<<dp));
0174 E88C LDI R24,0x8C
0175 E090 LDI R25,0
0176 91E00106 LDS R30,Seg7_Led_Buf+2
0178 27FF CLR R31
0179 0FE8 ADD R30,R24
017A 1FF9 ADC R31,R25
017B 9104 LPM R16,0(Z)
017C 6800 ORI R16,0x80
017D DFA6 RCALL _HC_595_OUT
(0078) Seg7_Bit2_En();
017E 9ABE SBI 0x17,6
017F 9AC6 SBI 0x18,6
(0079) delay_nus(60);
0180 E30C LDI R16,0x3C
0181 E010 LDI R17,0
0182 940E00E0 CALL _delay_nus
(0080) Seg7_Bit2_Dis();
0184 9ABE SBI 0x17,6
0185 98C6 CBI 0x18,6
(0081)
(0082) HC_595_OUT(Seg7_Data[Seg7_Led_Buf[3]]);
0186 E88C LDI R24,0x8C
0187 E090 LDI R25,0
0188 91E00107 LDS R30,Seg7_Led_Buf+3
018A 27FF CLR R31
018B 0FE8 ADD R30,R24
018C 1FF9 ADC R31,R25
018D 9104 LPM R16,0(Z)
018E DF95 RCALL _HC_595_OUT
(0083) if((point==1)&&(point_pos==3))
018F 91800102 LDS R24,point
0191 3081 CPI R24,1
0192 F471 BNE 0x01A1
0193 91800103 LDS R24,point_pos
0195 3083 CPI R24,3
0196 F451 BNE 0x01A1
(0084) HC_595_OUT((Seg7_Data[Seg7_Led_Buf[3]])|(1<<dp));
0197 E88C LDI R24,0x8C
0198 E090 LDI R25,0
0199 91E00107 LDS R30,Seg7_Led_Buf+3
019B 27FF CLR R31
019C 0FE8 ADD R30,R24
019D 1FF9 ADC R31,R25
019E 9104 LPM R16,0(Z)
019F 6800 ORI R16,0x80
01A0 DF83 RCALL _HC_595_OUT
(0085) Seg7_Bit3_En();
01A1 9ABF SBI 0x17,7
01A2 9AC7 SBI 0x18,7
(0086) delay_nus(60);
01A3 E30C LDI R16,0x3C
01A4 E010 LDI R17,0
01A5 940E00E0 CALL _delay_nus
(0087) Seg7_Bit3_Dis();
01A7 9ABF SBI 0x17,7
01A8 98C7 CBI 0x18,7
01A9 9508 RET
_Seg7_Led_display:
data --> R20
01AA 940E0436 CALL push_gset1
01AC 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) //错误处理,超出显示范围则全亮
01AD E08F LDI R24,0xF
01AE E297 LDI R25,0x27
01AF 1784 CP R24,R20
01B0 0795 CPC R25,R21
01B1 F430 BCC 0x01B8
(0102) {
(0103) HC_595_OUT(0xFF);
01B2 EF0F LDI R16,0xFF
01B3 DF70 RCALL _HC_595_OUT
(0104) Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
01B4 B388 IN R24,0x18
01B5 6F80 ORI R24,0xF0
01B6 BB88 OUT 0x18,R24
(0105) }
01B7 C07F RJMP 0x0237
(0106) else if(data>999)
01B8 EE87 LDI R24,0xE7
01B9 E093 LDI R25,3
01BA 1784 CP R24,R20
01BB 0795 CPC R25,R21
01BC F530 BCC 0x01E3
(0107) {
(0108) Seg7_Led_Buf[3]=data/1000;
01BD EE28 LDI R18,0xE8
01BE E033 LDI R19,3
01BF 018A MOVW R16,R20
01C0 940E0411 CALL div16u
01C2 93000107 STS Seg7_Led_Buf+3,R16
(0109) Seg7_Led_Buf[2]=(data%1000)/100;
01C4 EE28 LDI R18,0xE8
01C5 E033 LDI R19,3
01C6 018A MOVW R16,R20
01C7 940E040F CALL mod16u
01C9 E624 LDI R18,0x64
01CA E030 LDI R19,0
01CB 940E0411 CALL div16u
01CD 93000106 STS Seg7_Led_Buf+2,R16
(0110) Seg7_Led_Buf[1]=(data%100)/10;
01CF E624 LDI R18,0x64
01D0 E030 LDI R19,0
01D1 018A MOVW R16,R20
01D2 940E040F CALL mod16u
01D4 E02A LDI R18,0xA
01D5 E030 LDI R19,0
01D6 940E0411 CALL div16u
01D8 93000105 STS Seg7_Led_Buf+1,R16
(0111) Seg7_Led_Buf[0]=data%10;
01DA E02A LDI R18,0xA
01DB E030 LDI R19,0
01DC 018A MOVW R16,R20
01DD 940E040F CALL mod16u
01DF 93000104 STS Seg7_Led_Buf,R16
(0112) Seg7_Led_Update();
01E1 DF4D RCALL _Seg7_Led_Update
(0113) }
01E2 C054 RJMP 0x0237
(0114) else if(data>99)
01E3 E683 LDI R24,0x63
01E4 E090 LDI R25,0
01E5 1784 CP R24,R20
01E6 0795 CPC R25,R21
01E7 F510 BCC 0x020A
(0115) {
(0116) Seg7_Led_Buf[3]=16;
01E8 E180 LDI R24,0x10
01E9 93800107 STS Seg7_Led_Buf+3,R24
(0117) Seg7_Led_Buf[2]=(data%1000)/100;
01EB EE28 LDI R18,0xE8
01EC E033 LDI R19,3
01ED 018A MOVW R16,R20
01EE 940E040F CALL mod16u
01F0 E624 LDI R18,0x64
01F1 E030 LDI R19,0
01F2 940E0411 CALL div16u
01F4 93000106 STS Seg7_Led_Buf+2,R16
(0118) Seg7_Led_Buf[1]=(data%100)/10;
01F6 E624 LDI R18,0x64
01F7 E030 LDI R19,0
01F8 018A MOVW R16,R20
01F9 940E040F CALL mod16u
01FB E02A LDI R18,0xA
01FC E030 LDI R19,0
01FD 940E0411 CALL div16u
01FF 93000105 STS Seg7_Led_Buf+1,R16
(0119) Seg7_Led_Buf[0]=data%10;
0201 E02A LDI R18,0xA
0202 E030 LDI R19,0
0203 018A MOVW R16,R20
0204 940E040F CALL mod16u
0206 93000104 STS Seg7_Led_Buf,R16
(0120) Seg7_Led_Update();
0208 DF26 RCALL _Seg7_Led_Update
(0121) }
0209 C02D RJMP 0x0237
(0122) else if(data>9)
020A E089 LDI R24,0x9
020B E090 LDI R25,0
020C 1784 CP R24,R20
020D 0795 CPC R25,R21
020E F4C8 BCC 0x0228
(0123) {
(0124) Seg7_Led_Buf[3]=16;
020F E180 LDI R24,0x10
0210 93800107 STS Seg7_Led_Buf+3,R24
(0125) Seg7_Led_Buf[2]=16;
0212 93800106 STS Seg7_Led_Buf+2,R24
(0126) Seg7_Led_Buf[1]=(data%100)/10;
0214 E624 LDI R18,0x64
0215 E030 LDI R19,0
0216 018A MOVW R16,R20
0217 940E040F CALL mod16u
0219 E02A LDI R18,0xA
021A E030 LDI R19,0
021B 940E0411 CALL div16u
021D 93000105 STS Seg7_Led_Buf+1,R16
(0127) Seg7_Led_Buf[0]=data%10;
021F E02A LDI R18,0xA
0220 E030 LDI R19,0
0221 018A MOVW R16,R20
0222 940E040F CALL mod16u
0224 93000104 STS Seg7_Led_Buf,R16
(0128) Seg7_Led_Update();
0226 DF08 RCALL _Seg7_Led_Update
(0129) }
0227 C00F RJMP 0x0237
(0130) else
(0131) {
(0132) Seg7_Led_Buf[3]=16;
0228 E180 LDI R24,0x10
0229 93800107 STS Seg7_Led_Buf+3,R24
(0133) Seg7_Led_Buf[2]=16;
022B 93800106 STS Seg7_Led_Buf+2,R24
(0134) Seg7_Led_Buf[1]=16;
022D 93800105 STS Seg7_Led_Buf+1,R24
(0135) Seg7_Led_Buf[0]=data%10;
022F E02A LDI R18,0xA
0230 E030 LDI R19,0
0231 018A MOVW R16,R20
0232 940E040F CALL mod16u
0234 93000104 STS Seg7_Led_Buf,R16
(0136) Seg7_Led_Update();
0236 DEF8 RCALL _Seg7_Led_Update
(0137) }
0237 940E0439 CALL pop_gset1
0239 9508 RET
_Seg7_Led_float:
temp --> R20
data --> Y+8
023A 940E040A CALL push_arg4
023C 940E0434 CALL push_gset2
023E 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;
023F 01FE MOVW R30,R28
0240 8420 LDD R2,Z+8
0241 8431 LDD R3,Z+9
0242 8442 LDD R4,Z+10
0243 8453 LDD R5,Z+11
0244 925A ST R5,-Y
0245 924A ST R4,-Y
0246 923A ST R3,-Y
0247 922A ST R2,-Y
0248 EB09 LDI R16,0xB9
0249 E010 LDI R17,0
024A 940E0456 CALL lpm32
024C 933A ST R19,-Y
024D 932A ST R18,-Y
024E 931A ST R17,-Y
024F 930A ST R16,-Y
0250 940E04DF CALL add32f
0252 01FE MOVW R30,R28
0253 8700 STD Z+8,R16
0254 8711 STD Z+9,R17
0255 8722 STD Z+10,R18
0256 8733 STD Z+11,R19
(0158) point=1;
0257 E081 LDI R24,1
0258 93800102 STS point,R24
(0159) if(data>999) //错误处理,超出显示范围则全亮
025A EB05 LDI R16,0xB5
025B E010 LDI R17,0
025C 940E0456 CALL lpm32
025E 933A ST R19,-Y
025F 932A ST R18,-Y
0260 931A ST R17,-Y
0261 930A ST R16,-Y
0262 01FE MOVW R30,R28
0263 8424 LDD R2,Z+12
0264 8435 LDD R3,Z+13
0265 8446 LDD R4,Z+14
0266 8457 LDD R5,Z+15
0267 925A ST R5,-Y
0268 924A ST R4,-Y
0269 923A ST R3,-Y
026A 922A ST R2,-Y
026B 940E053D CALL cmp32f
026D F434 BGE 0x0274
(0160) {
(0161) HC_595_OUT(0xFF);
026E EF0F LDI R16,0xFF
026F DEB4 RCALL _HC_595_OUT
(0162) Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
0270 B388 IN R24,0x18
0271 6F80 ORI R24,0xF0
0272 BB88 OUT 0x18,R24
(0163) }
0273 C18E RJMP 0x0402
(0164) else if(data>99)
0274 EB01 LDI R16,0xB1
0275 E010 LDI R17,0
0276 940E0456 CALL lpm32
0278 933A ST R19,-Y
0279 932A ST R18,-Y
027A 931A ST R17,-Y
027B 930A ST R16,-Y
027C 01FE MOVW R30,R28
027D 8424 LDD R2,Z+12
027E 8435 LDD R3,Z+13
027F 8446 LDD R4,Z+14
0280 8457 LDD R5,Z+15
0281 925A ST R5,-Y
0282 924A ST R4,-Y
0283 923A ST R3,-Y
0284 922A ST R2,-Y
0285 940E053D CALL cmp32f
0287 F00C BLT 0x0289
0288 C077 RJMP 0x0300
(0165) {
(0166) temp=data*10;
0289 EA0D LDI R16,0xAD
028A E010 LDI R17,0
028B 940E0456 CALL lpm32
028D 933A ST R19,-Y
028E 932A ST R18,-Y
028F 931A ST R17,-Y
0290 930A ST R16,-Y
0291 01FE MOVW R30,R28
0292 8424 LDD R2,Z+12
0293 8435 LDD R3,Z+13
0294 8446 LDD R4,Z+14
0295 8457 LDD R5,Z+15
0296 925A ST R5,-Y
0297 924A ST R4,-Y
0298 923A ST R3,-Y
0299 922A ST R2,-Y
029A 940E0571 CALL empy32f
029C 01FE MOVW R30,R28
029D 8300 STD Z+0,R16
029E 8311 STD Z+1,R17
029F 8322 STD Z+2,R18
02A0 8333 STD Z+3,R19
02A1 01FE MOVW R30,R28
02A2 8020 LDD R2,Z+0
02A3 8031 LDD R3,Z+1
02A4 8042 LDD R4,Z+2
02A5 8053 LDD R5,Z+3
02A6 925A ST R5,-Y
02A7 924A ST R4,-Y
02A8 923A ST R3,-Y
02A9 922A ST R2,-Y
02AA EA09 LDI R16,0xA9
02AB E010 LDI R17,0
02AC 940E0456 CALL lpm32
02AE 933A ST R19,-Y
02AF 932A ST R18,-Y
02B0 931A ST R17,-Y
02B1 930A ST R16,-Y
02B2 940E053D CALL cmp32f
02B4 F0CC BLT 0x02CE
02B5 01FE MOVW R30,R28
02B6 8020 LDD R2,Z+0
02B7 8031 LDD R3,Z+1
02B8 8042 LDD R4,Z+2
02B9 8053 LDD R5,Z+3
02BA 925A ST R5,-Y
02BB 924A ST R4,-Y
02BC 923A ST R3,-Y
02BD 922A ST R2,-Y
02BE EA09 LDI R16,0xA9
02BF E010 LDI R17,0
02C0 940E0456 CALL lpm32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -