一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2726|回复: 15
收起左侧

关于STC89C52点阵屏刷新显示问题,求教

[复制链接]
发表于 2018-4-20 10:14 | 显示全部楼层 |阅读模式
大家好,最近在做一个点阵,遇到一个技术问题,来这里请各位大神指导一下。硬件平台:MCU:STC89C52
点阵驱动电路:138+595+4953

51单片机采集温湿度传感器的数据,然后用点阵显示。我现在的做法是定时器开启2ms中断,2ms进行刷新显示一次,那么16x16的点阵,显示完一整帧是32ms,可以正常显示。但有一个问题,2ms定时器中断是不是有点太过频繁,导致主函数里采集温湿度数据的时候,并不是每次都采集成功。我给传感器加热,理论上数据应该是不断变化的,但点阵显示上数据的更新大概要7~10s才有变化刷新一次。


问题1:我的主次关系出问题了?不应该把点阵的显示放到定时器中断去处理?我看了论坛其他的坛友发的历程,是主函数里读取温度,然后就刷新显示,没有用到定时器中断刷新显示的。

问题2:我看了论坛大神分享的历程,用18b20或dht11采集温度,然后显示。 这两个传感器采集一次的时间都需要很久,不会影响点阵的刷新时间吗?
问题3:通常点阵显示刷新一般是怎么做处理的呢?

发表于 2018-4-20 10:50 | 显示全部楼层
我没有做过点阵,但应该是跟数码管类似的驱动方式吧?

1.编程角度说,采用定时器中断控制来控制任务的执行是很好的,便于时序的控制,这对以后编写复杂的多任务程序很有帮助。
2.很久以前玩过18B20,记得采集温度大概要七八百毫秒?1S的数据刷新速度人眼看起来效果应该已经可以接受了。你这十来秒刷新一次,我怀疑是不是中间有数据没读对的情况? 如果数据读对了,采集时间久与否肯定只影响数据刷新速度,不影响点阵刷新。 单总线通讯一次的时间忘了,这种单总线通讯对时序要求很高,你的通讯时序是否采用的延时完成?你可以算算2ms定时器中断执行一次需要多长时间,是否对通讯造成了影响;
3.为保证显示不出现人眼可见的闪烁,肯定要按时刷新,当然,像这种只采集显示温度的简单应用,可以在主程序空闲时一直刷新;
 楼主| 发表于 2018-4-20 11:05 | 显示全部楼层
Aegis 发表于 2018-4-20 10:50
我没有做过点阵,但应该是跟数码管类似的驱动方式吧?

1.编程角度说,采用定时器中断控制来控制任务的执 ...

谢谢你的解答。

1.传感器采集数据是正常的(IIC驱动的传感器),我用串口打印数据,不加延迟,不断给传感器加热,串口数据是不断更新显示。比如30度。我给它加热到40度。从显示30到40,点阵上的显示需要刚才说的几秒的时间才能完成刷新。

2.一般的传感器18b20,采集一次几百ms完成一次,然后再刷新显示。 这个应该是会出现闪烁的。情况就类似,点阵显示,延时几百毫米,然后再显示,我看了坛友发的历程,都是基于这样的模式,点阵不会闪烁的吗?所以这里有点疑问了。
发表于 2018-4-20 14:58 | 显示全部楼层
单总线的东西,如果没有用到操作系统的话,读取温度时屏幕必定会闪烁的。
如果运算速度不够,屏幕还只能放在中断刷。不放中断很容易导致最后一行特别亮……
测温度这个东西,也不需要特别实时吧,我用的DHT11,我的做法是20秒读取一次温度(读取时关闭中断)同时更改屏幕颜色,让人感觉闪烁是因为颜色改变。
发表于 2018-4-20 14:58 | 显示全部楼层
如果是自然数据的采集,可以更长时间了,如30分钟。。。。。。。。。。。定时器触发是2毫秒,可以 使用变量,把执行过程的间隔变成合适的时间间隔的




发表于 2018-4-20 15:20 | 显示全部楼层
不在定时器里刷新显示,是因为程序不太复杂.
你可以计算一下采集温度要多长时间,再决定显示函数是放到大循环还是中断里面.

一般来讲中断里面是放置优先级较高的代码.但代码不宜过长,否则的话可以在中断中设个标志,在main loop 中判断如何执行.

一整帧是32ms
刷个点阵LED哪里费得了这么多时间,你的代码还有优化空间.
发表于 2018-4-20 19:04 | 显示全部楼层
单片机主要作用就是对屏一直刷新,中断处理其他事情。
记得以前折磨过这货,我找找看,看还有没有?  另外,点阵屏,建议用高的主频cpu  arm啥的   51的速度太慢了。
 楼主| 发表于 2018-4-21 09:45 | 显示全部楼层
lxclia 发表于 2018-4-20 14:58
单总线的东西,如果没有用到操作系统的话,读取温度时屏幕必定会闪烁的。
如果运算速度不够,屏幕还只能放 ...

对,温湿度这种不需要实时去采集。 1个小时,或者更长时间采集一次, 刷新放在中断里做处理,这里就有你说的情况,采集数据的时候,中断刷新会被打断一次,出现闪烁了。
 楼主| 发表于 2018-4-21 09:50 | 显示全部楼层
junyee 发表于 2018-4-20 15:20
不在定时器里刷新显示,是因为程序不太复杂.
你可以计算一下采集温度要多长时间,再决定显示函数是放到大循 ...

谢谢指教。
2ms刷新一行数据,16x16的就需要32ms, 可能我显示的地方可以优化下,时间更短。
这里单片机用了12M晶振,应该是不是改成24M,提升速度?
 楼主| 发表于 2018-4-21 09:51 | 显示全部楼层
liuchengliaaa 发表于 2018-4-20 19:04
单片机主要作用就是对屏一直刷新,中断处理其他事情。
记得以前折磨过这货,我找找看,看还有没有?  另外 ...

谢谢大神,有历程参考的再好不过了。
我现在才用12M的晶振,改成24M的晶振,提升下速度看看。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-16 12:58 , Processed in 0.070970 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表