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我真的不信。
页: 1 [2] 3
查看完整版本: 单片机处这种数字比较大的取余和除法运算怎么处理?