📄 hc595.lis
字号:
013A 8417 cp R24,R20
013C 9507 cpc R25,R21
013E 30F4 brsh L20
0140 .dbline 102
0140 ; {
0140 .dbline 103
0140 ; HC_595_OUT(0xFF);
0140 0FEF ldi R16,255
0142 70DF xcall _HC_595_OUT
0144 .dbline 104
0144 ; Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
0144 88B3 in R24,0x18
0146 806F ori R24,240
0148 88BB out 0x18,R24
014A .dbline 105
014A ; }
014A 7FC0 xjmp L21
014C L20:
014C .dbline 106
014C ; else if(data>999)
014C 87EE ldi R24,999
014E 93E0 ldi R25,3
0150 8417 cp R24,R20
0152 9507 cpc R25,R21
0154 30F5 brsh L22
0156 .dbline 107
0156 ; {
0156 .dbline 108
0156 ; Seg7_Led_Buf[3]=data/1000;
0156 28EE ldi R18,1000
0158 33E0 ldi R19,3
015A 8A01 movw R16,R20
015C 0E940000 xcall div16u
0160 00930300 sts _Seg7_Led_Buf+3,R16
0164 .dbline 109
0164 ; Seg7_Led_Buf[2]=(data%1000)/100;
0164 28EE ldi R18,1000
0166 33E0 ldi R19,3
0168 8A01 movw R16,R20
016A 0E940000 xcall mod16u
016E 24E6 ldi R18,100
0170 30E0 ldi R19,0
0172 0E940000 xcall div16u
0176 00930200 sts _Seg7_Led_Buf+2,R16
017A .dbline 110
017A ; Seg7_Led_Buf[1]=(data%100)/10;
017A 24E6 ldi R18,100
017C 30E0 ldi R19,0
017E 8A01 movw R16,R20
0180 0E940000 xcall mod16u
0184 2AE0 ldi R18,10
0186 30E0 ldi R19,0
0188 0E940000 xcall div16u
018C 00930100 sts _Seg7_Led_Buf+1,R16
0190 .dbline 111
0190 ; Seg7_Led_Buf[0]=data%10;
0190 2AE0 ldi R18,10
0192 30E0 ldi R19,0
0194 8A01 movw R16,R20
0196 0E940000 xcall mod16u
019A 00930000 sts _Seg7_Led_Buf,R16
019E .dbline 112
019E ; Seg7_Led_Update();
019E 4DDF xcall _Seg7_Led_Update
01A0 .dbline 113
01A0 ; }
01A0 54C0 xjmp L23
01A2 L22:
01A2 .dbline 114
01A2 ; else if(data>99)
01A2 83E6 ldi R24,99
01A4 90E0 ldi R25,0
01A6 8417 cp R24,R20
01A8 9507 cpc R25,R21
01AA 10F5 brsh L27
01AC .dbline 115
01AC ; {
01AC .dbline 116
01AC ; Seg7_Led_Buf[3]=16;
01AC 80E1 ldi R24,16
01AE 80930300 sts _Seg7_Led_Buf+3,R24
01B2 .dbline 117
01B2 ; Seg7_Led_Buf[2]=(data%1000)/100;
01B2 28EE ldi R18,1000
01B4 33E0 ldi R19,3
01B6 8A01 movw R16,R20
01B8 0E940000 xcall mod16u
01BC 24E6 ldi R18,100
01BE 30E0 ldi R19,0
01C0 0E940000 xcall div16u
01C4 00930200 sts _Seg7_Led_Buf+2,R16
01C8 .dbline 118
01C8 ; Seg7_Led_Buf[1]=(data%100)/10;
01C8 24E6 ldi R18,100
01CA 30E0 ldi R19,0
01CC 8A01 movw R16,R20
01CE 0E940000 xcall mod16u
01D2 2AE0 ldi R18,10
01D4 30E0 ldi R19,0
01D6 0E940000 xcall div16u
01DA 00930100 sts _Seg7_Led_Buf+1,R16
01DE .dbline 119
01DE ; Seg7_Led_Buf[0]=data%10;
01DE 2AE0 ldi R18,10
01E0 30E0 ldi R19,0
01E2 8A01 movw R16,R20
01E4 0E940000 xcall mod16u
01E8 00930000 sts _Seg7_Led_Buf,R16
01EC .dbline 120
01EC ; Seg7_Led_Update();
01EC 26DF xcall _Seg7_Led_Update
01EE .dbline 121
01EE ; }
01EE 2DC0 xjmp L28
01F0 L27:
01F0 .dbline 122
01F0 ; else if(data>9)
01F0 89E0 ldi R24,9
01F2 90E0 ldi R25,0
01F4 8417 cp R24,R20
01F6 9507 cpc R25,R21
01F8 C8F4 brsh L32
01FA .dbline 123
01FA ; {
01FA .dbline 124
01FA ; Seg7_Led_Buf[3]=16;
01FA 80E1 ldi R24,16
01FC 80930300 sts _Seg7_Led_Buf+3,R24
0200 .dbline 125
0200 ; Seg7_Led_Buf[2]=16;
0200 80930200 sts _Seg7_Led_Buf+2,R24
0204 .dbline 126
0204 ; Seg7_Led_Buf[1]=(data%100)/10;
0204 24E6 ldi R18,100
0206 30E0 ldi R19,0
0208 8A01 movw R16,R20
020A 0E940000 xcall mod16u
020E 2AE0 ldi R18,10
0210 30E0 ldi R19,0
0212 0E940000 xcall div16u
0216 00930100 sts _Seg7_Led_Buf+1,R16
021A .dbline 127
021A ; Seg7_Led_Buf[0]=data%10;
021A 2AE0 ldi R18,10
021C 30E0 ldi R19,0
021E 8A01 movw R16,R20
0220 0E940000 xcall mod16u
0224 00930000 sts _Seg7_Led_Buf,R16
0228 .dbline 128
0228 ; Seg7_Led_Update();
0228 08DF xcall _Seg7_Led_Update
022A .dbline 129
022A ; }
022A 0FC0 xjmp L33
022C L32:
022C .dbline 131
022C ; else
022C ; {
022C .dbline 132
022C ; Seg7_Led_Buf[3]=16;
022C 80E1 ldi R24,16
022E 80930300 sts _Seg7_Led_Buf+3,R24
0232 .dbline 133
0232 ; Seg7_Led_Buf[2]=16;
0232 80930200 sts _Seg7_Led_Buf+2,R24
0236 .dbline 134
0236 ; Seg7_Led_Buf[1]=16;
0236 80930100 sts _Seg7_Led_Buf+1,R24
023A .dbline 135
023A ; Seg7_Led_Buf[0]=data%10;
023A 2AE0 ldi R18,10
023C 30E0 ldi R19,0
023E 8A01 movw R16,R20
0240 0E940000 xcall mod16u
0244 00930000 sts _Seg7_Led_Buf,R16
0248 .dbline 136
0248 ; Seg7_Led_Update();
0248 F8DE xcall _Seg7_Led_Update
024A .dbline 137
024A ; }
024A L33:
024A L28:
024A L23:
024A L21:
024A .dbline -2
024A L19:
024A 0E940000 xcall pop_gset1
024E .dbline 0 ; func end
024E 0895 ret
0250 .dbsym r data 20 i
0250 .dbend
0250 .dbfunc e Seg7_Led_float _Seg7_Led_float fV
0250 ; temp -> R20,R21
0250 ; data -> y+8
.even
0250 _Seg7_Led_float::
0250 0E940000 xcall push_arg4
0254 0E940000 xcall push_gset2
0258 2497 sbiw R28,4
025A .dbline -1
025A .dbline 150
025A ; }
025A ; /*************************************************************************
025A ; ** 函数名称:HC595显示浮点数据
025A ; ** 功能描述:
025A ; ** 输 入:
025A ; ** 输出 :
025A ; ** 全局变量:
025A ; ** 调用模块:
025A ; ** 说明:
025A ; ** 注意:
025A ; **************************************************************************/
025A ; void Seg7_Led_float(float data)
025A ; {
025A .dbline 157
025A ; unsigned int temp;
025A ; /*
025A ; 重要说明:data+=0.00001;其中0.00001为容错值
025A ; 解决float数据类型在计算机内部存储的误差问题,可以解决显示问题
025A ; 但是会引入新的计算误差,如果精度要求大于0.00001建议更改容错值或者将此处注释掉
025A ; */
025A ; data+=0.00001;
025A FE01 movw R30,R28
025C 2084 ldd R2,z+8
025E 3184 ldd R3,z+9
0260 4284 ldd R4,z+10
0262 5384 ldd R5,z+11
0264 5A92 st -y,R5
0266 4A92 st -y,R4
0268 3A92 st -y,R3
026A 2A92 st -y,R2
026C 00E0 ldi R16,<L41
026E 10E0 ldi R17,>L41
0270 0E940000 xcall lpm32
0274 3A93 st -y,R19
0276 2A93 st -y,R18
0278 1A93 st -y,R17
027A 0A93 st -y,R16
027C 0E940000 xcall add32f
0280 FE01 movw R30,R28
0282 0087 std z+8,R16
0284 1187 std z+9,R17
0286 2287 std z+10,R18
0288 3387 std z+11,R19
028A .dbline 158
028A ; point=1;
028A 81E0 ldi R24,1
028C 80930000 sts _point,R24
0290 .dbline 159
0290 ; if(data>999) //错误处理,超出显示范围则全亮
0290 00E0 ldi R16,<L44
0292 10E0 ldi R17,>L44
0294 0E940000 xcall lpm32
0298 3A93 st -y,R19
029A 2A93 st -y,R18
029C 1A93 st -y,R17
029E 0A93 st -y,R16
02A0 FE01 movw R30,R28
02A2 ; stack offset 4
02A2 2484 ldd R2,z+12
02A4 3584 ldd R3,z+13
02A6 4684 ldd R4,z+14
02A8 5784 ldd R5,z+15
02AA 5A92 st -y,R5
02AC 4A92 st -y,R4
02AE 3A92 st -y,R3
02B0 2A92 st -y,R2
02B2 0E940000 xcall cmp32f
02B6 34F4 brge L42
02B8 .dbline 160
02B8 ; {
02B8 .dbline 161
02B8 ; HC_595_OUT(0xFF);
02B8 0FEF ldi R16,255
02BA B4DE xcall _HC_595_OUT
02BC .dbline 162
02BC ; Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
02BC 88B3 in R24,0x18
02BE 806F ori R24,240
02C0 88BB out 0x18,R24
02C2 .dbline 163
02C2 ; }
02C2 8EC1 xjmp L43
02C4 L42:
02C4 .dbline 164
02C4 ; else if(data>99)
02C4 00E0 ldi R16,<L47
02C6 10E0 ldi R17,>L47
02C8 0E940000 xcall lpm32
02CC 3A93 st -y,R19
02CE 2A93 st -y,R18
02D0 1A93 st -y,R17
02D2 0A93 st -y,R16
02D4 FE01 movw R30,R28
02D6 ; stack offset 4
02D6 2484 ldd R2,z+12
02D8 3584 ldd R3,z+13
02DA 4684 ldd R4,z+14
02DC 5784 ldd R5,z+15
02DE 5A92 st -y,R5
02E0 4A92 st -y,R4
02E2 3A92 st -y,R3
02E4 2A92 st -y,R2
02E6 0E940000 xcall cmp32f
02EA 0CF0 brlt X0
02EC 77C0 xjmp L45
02EE X0:
02EE .dbline 165
02EE ; {
02EE .dbline 166
02EE ; temp=data*10;
02EE 00E0 ldi R16,<L50
02F0 10E0 ldi R17,>L50
02F2 0E940000 xcall lpm32
02F6 3A93 st -y,R19
02F8 2A93 st -y,R18
02FA 1A93 st -y,R17
02FC 0A93 st -y,R16
02FE FE01 movw R30,R28
0300 ; stack offset 4
0300 2484 ldd R2,z+12
0302 3584 ldd R3,z+13
0304 4684 ldd R4,z+14
0306 5784 ldd R5,z+15
0308 5A92 st -y,R5
030A 4A92 st -y,R4
030C 3A92 st -y,R3
030E 2A92 st -y,R2
0310 0E940000 xcall empy32f
0314 FE01 movw R30,R28
0316 0083 std z+0,R16
0318 1183 std z+1,R17
031A 2283 std z+2,R18
031C 3383 std z+3,R19
031E FE01 movw R30,R28
0320 2080 ldd R2,z+0
0322 3180 ldd R3,z+1
0324 4280 ldd R4,z+2
0326 5380 ldd R5,z+3
0328 5A92 st -y,R5
032A 4A92 st -y,R4
032C 3A92 st -y,R3
032E 2A92 st -y,R2
0330 00E0 ldi R16,<L51
0332 10E0 ldi R17,>L51
0334 0E940000 xcall lpm32
0338 3A93 st -y,R19
033A 2A93 st -y,R18
033C 1A93 st -y,R17
033E 0A93 st -y,R16
0340 0E940000 xcall cmp32f
0344 CCF0 brlt L48
0346 FE01 movw R30,R28
0348 2080 ldd R2,z+0
034A 3180 ldd R3,z+1
034C 4280 ldd R4,z+2
034E 5380 ldd R5,z+3
0350 5A92 st -y,R5
0352 4A92 st -y,R4
0354 3A92 st -y,R3
0356 2A92 st -y,R2
0358 00E0 ldi R16,<L51
035A 10E0 ldi R17,>L51
035C 0E940000 xcall lpm32
0360 3A93 st -y,R19
0362 2A93 st -y,R18
0364 1A93 st -y,R17
0366 0A93 st -y,R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -