| 去看看我这个帖子,有你想要的关于数码管根据环境亮度自动调节的程序及电路http://www.51hei.com/bbs/dpj-146620-1.html |
geyobing 发表于 2019-3-20 09:54 非常感谢你的回复!我会试着把程序调整。 |
| 19楼的讲的已经很好了,关于你采集光敏电阻波动的情况,你可以做一些小手段,举例0-1000,分10段,理论上0-100对应1,101-200对应2,以此类推,但是为了不出现一会弱一会亮的情况,可以加些额外条件,比如现在属于1段,那就必须值大于120才能跳到2段,如果现在属于2段值必须小于80才能调到1段,这样就可以避免临界值切来切去的问题,这个值要根据你实际的调整一下。 |
hhh402 发表于 2019-3-18 22:18 解决我之前的那个疑惑。很感谢你的思路,受益匪浅! |
| 用中断是最好的选择,延时程序要慎用,延时就是浪费资源。4位数码管100HZ刷新率,就是2.5ms刷新一位数码管,要分10级亮度就是:使用250us的中断,10个中断(总共25ms)刷一位数码管,要1级亮度就是1个中断开,9个中断关;要2级亮度就是2个中断开,8个中断关;以此类推。 |
geyobing 发表于 2019-3-14 13:38 抱歉还是有个点没想明白,固定刷新率,光敏电阻来调节开的时间长短,这两点我都做了,但位选放中断中,比如5ms就要开一个位选,这时该位选打开后又存在开时间的延时,要是大于5ms话岂不是影响第二个位选的显示效果,一直不明白这点,请赐教多谢了。 |
本厨 发表于 2019-3-15 14:45 总时长25ms,开显示时长为on_time, 那么关显示25-on_time,你的累加累减能麻烦再讲下吗? |
Y_G_G 发表于 2019-3-15 15:11 感谢解答! 我记得学动态数码管显示时,老师强调用中断来开位,所以之前都是这么做的,但现在像这样需要延时的,就行不通了,所以很疑惑。 |
多谢各位的帮助 ,现在程序能实现10级自动亮度调节,但发现adc分阶用的值不好取,导致有时光线变化在某个值附近时,数码管亮度一直来回切换,看着闪动。我大概知道用冗余,但是比如一级亮度(100 < adc)&&(adc >150), 二级亮度( 159 < adc ) && ( adc > 200 ),此时150-159间的数值状态我该怎么处理,如果都放else那么肯定不行的。 另外:光敏电阻的特性曲线网上也没找到相关资料,只知道亮阻值暗阻值,比较融通。 |
join22life 发表于 2019-3-15 12:28 位选要中断干嘛呢? 8个数码管以下的,扫描显示,一个接一个的显示,最后ADC一次,用不也多长时间的 如果你觉得程序还要干点的别的什么的话,加入到延时函数里面进行也可以的了 |
| 延时1的向上加,到0延时结束 延时2的向下减,到0延时结束 |
Y_G_G 发表于 2019-3-14 23:41 抱歉还是有个疑问,位选不是应该通过中断才是最好的吗? |
Y_G_G 发表于 2019-3-14 23:41 恩,多谢,下午准备解决这个问题 ![]() |
join22life 发表于 2019-3-14 15:43 思路很好,可以试一试!不行了再换种方式,作品就是在不断的调试中成长的 |
| 参与人数 5 | 黑币 +42 | 收起 理由 |
|---|---|---|
|
| + 8 | 很给力! |
|
| + 10 | |
|
| + 10 | |
|
| + 10 | 赞一个! |
|
| + 4 | 赞一个! |
|
其实没有那么复杂的,不要用中断 你写两个延时的函数,一个控制数码管开,另一个控制数码管关 等于是数码亮>延时1>数码管灭>延时2>显示下一个数码管 把光敏电阻ADC的值用来作为延时的时间, 延时1的向上加,到0延时结束 延时2的向下减,到0延时结束 这样一来,总的延时时长就是恒定不变的了,不会因为光敏电阻的变化而变化了 |
wulin 发表于 2019-3-14 15:37 看来我把亮度调节想的简单化了 |
zhb2004xp 发表于 2019-3-14 16:09 这个像你说的,我现在就是出现数字显示不清有全8现象了 |
| 多位数码管的显示本身就是利用人眼的视觉错觉造成的,如果要增加视觉上亮度强度的感觉,理论上是要增加闪烁的频率,但是如果显示内容同样变化频率较快的话,会造成全部显示8的视觉错觉。 |
geyobing 发表于 2019-3-14 13:38 我现在写了一个光敏电阻不同值对应开位选的时长的函数,放主循环中; 另一个开各个位选函数,放主循环中,通过中断每5ms开位,这个思路是正确的吧? |
join22life 发表于 2019-3-14 14:00 调节数码管亮度其实就是调节数码管导通和截止时间比例,具体方案还要看数码管的驱动方式。比较倾向于采用PWM方式给位选供电。数码管静态显示控制亮度简单些,数码管动态显示控制亮度比较麻烦。 |
| 就像图中那样,每5ms中断一次用于开位选,但是一个数码管显示时间将近6ms,等到第二个中断来时进入第二个数码管显示,以此类推,使用没有显示数码管显示没有完毕被中断,这样对程序有什么影响吗? |