taocongrong 发表于 2012-11-1 10:02:37

Gorgon_Meducer 发表于 2012-11-1 10:23:39

你是不是用了很多阻塞代码……

taocongrong 发表于 2012-11-1 11:44:52

taocongrong 发表于 2012-11-1 11:45:42

taocongrong 发表于 2012-11-1 11:47:15

taocongrong 发表于 2012-11-1 13:37:49

Gorgon_Meducer 发表于 2012-11-1 14:23:43

详细说明下中断处理程序里面做了什么,主循环里面作了什么,是否开了中断嵌套。

taocongrong 发表于 2012-11-1 17:20:47

taocongrong 发表于 2012-11-1 17:23:19

lljme 发表于 2012-11-1 17:38:39

扫描数码管时,一次把四位都扫一次,每一位显示要有1ms吧。

Halley 发表于 2012-11-1 17:53:14

谁是王老师啊?

ilikemcu 发表于 2012-11-1 18:07:00

王老师当然是版主啦,你是新来的吧。

这种问题我习惯用的处理方式:接收的只管接收,显示的只管显示,但是主程序在接收完整的数据之后,会对接收的一帧数据进行校验译码转换等处理,如果有显示,则把数据转换到显示缓冲1区,然后建立一个标志,这个标志是通知显示刷新程序,在显示中断中,如果完成了一次从头至尾的显示扫描,那么就会坚持这个标志,如果标志有效,刷新程序会把显示缓存1区的数据整体复制到显示缓存2区,然后开始以2区的数据作为显示内容,进行显示刷新扫描,这样两边不会产生冲突。同时把刚刚建立的标志清零。同样的,如果主程序在建立这个标志之后,下次译码转换前会先判断这个标志,如果标志仍在,就不会做译码转换。

虽然2个缓冲区,内存RAM有点浪费,但是绝对避免了显示问题,否则的话,实际试验,LED上一直存在飘忽不定的鬼影。不过现在直接用显示驱动的专用芯片,就没这个烦恼了,便宜方便。

sf49ers 发表于 2012-11-1 18:10:43

串口中断做的不好,居然在中断里干等一帧数据,还是开辟一个接收缓冲区吧

redsword84 发表于 2012-11-1 18:19:05

串口收数放缓冲区,主程序判断有数据更新,就更新数码管的显示缓冲区。接收只管接收,显示只管显示,我的建议。

Gorgon_Meducer 发表于 2012-11-2 10:43:26

taocongrong 发表于 2012-11-1 17:20 static/image/common/back.gif
王老师您好:
这是我的代码
#include


说实话,看了代码,我当时就OTZ了……

解决这类问题其实是有标准的方式的,但考虑到循序渐进的问题,那个不提也罢,以下是我基于你现在的状况提的一些建议:
1、从LZ编写代码的风格来看,应该不是很熟悉队列操作,也就是说可能还不擅长使用缓冲区。从这点出发,我们直接考虑
   在中断里面处理数据的问题。
2、在中断里面接收数据不是不可以,而是不可以死等。简单说就是要用到状态机,一般做法是用一个static变量记录状态,
   然后在不同的状态等待接收不同的字符,状态机可以简单的用switch case来实现。这方面的例子很多,你也可以参考
   我板块里面的状态机教程。
3、用全局的数组或者变量来保存中断里面接收到的数据是没有问题的,但要注意做好原子保护,说白了就是在主循环里面
   操作这个全局变量或者数组的时候,要暂时性的关闭全局中断响应。
4、最后我比较在意的是,系统主频是多少?你有仔细确认过么?不要到最后跑个1M的频率……

sf49ers 发表于 2012-11-2 10:50:56

版主说话就是条理清楚
还有个细节要注意,数码管动态扫描过程是
1、关所有位选信号
2、输出段信号
3、打开相应的位选
否则也有微弱的闪烁感

taocongrong 发表于 2012-11-2 10:53:24

Gorgon_Meducer 发表于 2012-11-2 18:29:27

taocongrong 发表于 2012-11-2 10:53 static/image/common/back.gif
主频是7.3728MHZ,我看看,其实准备用两个单片机实现的,一个单片机用串口接收数据,而后 将第一个单片机 ...

这样一个简单的应用如果用两片单片机,真的是对不起你自己……

taocongrong 发表于 2012-11-3 12:27:34

iop 发表于 2013-8-17 11:48:07

怎么什么都看不到
页: [1]
查看完整版本: 单片机接受数据后,数据显示到数码管上面,数码管出现...