tomzbj
发表于 2017-5-3 08:52
别折腾595了, 一片TM1650解决问题.
dragon_hn
发表于 2017-5-3 09:40
不可能需要30ms.自己找找真实的原因吧
whirt_noob
发表于 2017-5-3 09:59
dirtwillfly 发表于 2017-5-2 10:42
尽量用移位操作代替除法和取模。或者num不要用数字,直接用字符串来储存数字,显示的时候就方便了 ...
在数码管中显示数字不是还要把字符串再转换成数字吗?
whirt_noob
发表于 2017-5-3 13:59
linqing171 发表于 2017-5-2 12:48
首先是这个运算不会有1ms,肯定不会有。你的代码其它地方有耗时的。
其次是你可以一次运算好,存起来,后面 ...
确实不会有30ms,部分代码是以前同事的,看了一下,温度采集用了很多的延时,以前不用数码管的时候没什么问题,现在要加上数码管,所以就有闪烁了,自己的代码也有问题,优化不够,多谢指点。以按照方面做优化了
whirt_noob
发表于 2017-5-3 14:04
gx_huang 发表于 2017-5-2 12:55
应该用中间变量
uchar temp;
temp=num/100;
按照提示做了优化,另外问一下,像DS18B20这一类采集温度时间比较久的元器件,要怎么样处理程序中需要延时的部分?我把采集温度过程中的延时过程都用来刷新数码管,可还是有非常轻微的闪烁,不注意看看不出来,但是总归是不太好
whirt_noob
发表于 2017-5-3 14:05
@若水 发表于 2017-5-2 13:14
STM8处理这点代码不可能用30ms的,肯定是其它代码占时间
确实是读取温度是占用了时间
whirt_noob
发表于 2017-5-3 14:07
菜鸟同学 发表于 2017-5-2 14:30
30ms 这个你怎么测试出来的。
穷逼公司,毁我青春,拿着28元的逻辑分析仪测的
whirt_noob
发表于 2017-5-3 14:07
ningling_21 发表于 2017-5-2 15:50
30ms 怎么测出来的
拿28块钱的逻辑分析仪测的
whirt_noob
发表于 2017-5-3 14:09
jackhwang 发表于 2017-5-2 16:43
num=(u16)ucdata;
Thousand=num/1000;
Hundred=num%1000/100;
已改了原来的程序,谢谢了
whirt_noob
发表于 2017-5-3 14:27
icecut 发表于 2017-5-2 17:45
没有除法可以用减法...还可以用比较,二分法,比如大于5000否,大于就减去,然后大于3000否,大于就减去,大于200 ...
版主果然厉害,方法多,思路广。
whirt_noob
发表于 2017-5-3 14:29
宇容创行 发表于 2017-5-2 17:47
这是设计问题,和算法无关,算的再慢都不应该影响到显示
怎么处理采集温度时候的延时?虽然我把采集温度时候的延时用刷新数码管来代替,可还是有非常轻微的闪烁。
whirt_noob
发表于 2017-5-3 14:30
ayb_ice 发表于 2017-5-2 18:56
stm8有除法指令,并且支持16位的,就算没有也不可能要30ms,除非你的时钟很慢,查找其它地方问题 ...
修改了温度采集部分,学习用STM8单片机需要学学汇编吗?一直用C
whirt_noob
发表于 2017-5-3 14:32
JerryWu75 发表于 2017-5-2 19:39
LED刷新放到定时器中断中, 计算过程放到主循环中. 再作一个互斥锁.
你说的是设置一个标志,刷新数码管的时候不去计算,计算的时候不去刷新是吗?
gx_huang
发表于 2017-5-3 14:33
whirt_noob 发表于 2017-5-3 14:04
按照提示做了优化,另外问一下,像DS18B20这一类采集温度时间比较久的元器件,要怎么样处理程序中需要延 ...
这个需要程序架构的调整。
正常情况下,显示程序可以在定时器中断里运行显示,比如8个数码管,定时器中断周期设置为2.5ms,每进一次中断,显示一个数码管,显示完8个数码管大约20ms。那种主程序延时扫描的显示程序,注定是不好的,有多任务时,程序很难协调各个功能的。
至于温度采集,也可以在定时中断里运行,每进一次中断,计数累计一次,什么时候发什么指令,然后隔多久再读结果,全是中断程序执行。
whirt_noob
发表于 2017-5-3 14:36
zyj9490 发表于 2017-5-2 21:06
这段代码完全可以优化,NUM%1000,可以作为中间变量进行保存,
已经优化了代码,多谢指点。
whirt_noob
发表于 2017-5-3 14:40
tomzbj 发表于 2017-5-3 08:52
别折腾595了, 一片TM1650解决问题.
595便宜啊
whirt_noob
发表于 2017-5-3 14:48
gx_huang 发表于 2017-5-3 14:33
这个需要程序架构的调整。
正常情况下,显示程序可以在定时器中断里运行显示,比如8个数码管,定时器中断 ...
我明白你的意思了,谢谢指点
whirt_noob
发表于 2017-5-3 14:49
dragon_hn 发表于 2017-5-3 09:40
不可能需要30ms.自己找找真实的原因吧
已经找到原因了
fengfeng的恒
发表于 2017-5-3 16:13
把计算放到主函数,需要变化的时候才计算,保存每个数码管显示的数字;然后在中断里定时刷新显示就好了;多任务、延时长都不是问题。
菜鸟同学
发表于 2017-5-3 16:29
这个计算需要30ms我真的不信。