数码管闪烁

[复制链接]
5171|17
 楼主| yueyinji1989 发表于 2013-3-11 23:12 | 显示全部楼层 |阅读模式
本帖最后由 yueyinji1989 于 2013-3-11 23:16 编辑

想请教个简单问题!
    做AD实验的时候,发现数码管的第三位(个位)数在不停闪烁。
改变了显示刷新频率,输入模拟值大小,AD转换等待时间,都是这样现象。请问是什么回事呢?

AD转换代码:
  1. uchar ad_init()
  2. {
  3. //开启AD,并返回转换后数值
  4. uchar adval;
  5. adwr=1;
  6. _nop_();
  7. adwr=0;
  8. _nop_();
  9. adwr=1;
  10. delay(30);//延时30ms
  11. P1=0xff;
  12. adrd=1;
  13. _nop_();
  14. adrd=0;
  15. _nop_();//取值
  16. adval=P1;
  17. adrd=1;
  18. return adval;}
数码管显示代码:
  1. void display(uchar num)
  2. {
  3.         //数码管显示
  4.         uchar bai,ge,shi;                                 
  5.         bai=num/100;
  6.         shi=num%100/10;
  7.         ge =num%100%10;
  8.         //百位
  9.         dula=1;
  10.         P0=table[bai];
  11.         dula=0;
  12.         P0=0xff;
  13.         wela=1;
  14.         P0=0x7e;
  15.         wela=0;
  16.         delay(5);//延时5ms

  17.         //十位
  18.         dula=1;
  19.         P0=table[shi];
  20.         dula=0;
  21.         P0=0xff;
  22.         wela=1;
  23.         P0=0x7d;
  24.         wela=0;
  25.         delay(5);

  26.         //个位
  27.         dula=1;
  28.         P0=table[ge];
  29.         dula=0;
  30.         P0=0xff;
  31.         wela=1;
  32.         P0=0x7b;
  33.         wela=0;
  34.         delay(3);
  35. }

ljl457 发表于 2013-3-12 10:41 | 显示全部楼层
数码管坏了
hlzhaowu 发表于 2013-3-12 11:49 | 显示全部楼层
有可能吗
delin17 发表于 2013-3-12 13:19 | 显示全部楼层
显示刷新频率太低,导致闪。
动态显示驱动没做好,考虑加快刷新
 楼主| yueyinji1989 发表于 2013-3-12 13:45 | 显示全部楼层
ljl457 发表于 2013-3-12 10:41
数码管坏了

没坏哦!
 楼主| yueyinji1989 发表于 2013-3-12 13:47 | 显示全部楼层
delin17 发表于 2013-3-12 13:19
显示刷新频率太低,导致闪。
动态显示驱动没做好,考虑加快刷新

试过加快刷新了,都是不行。刷新时间为1ms时,改变电位器时数值都不会改变了!
wangyy608 发表于 2013-3-12 13:49 | 显示全部楼层
先找到问题:
只调用显示程序
只显示1位
。。。。
慢慢试
xuyaqi 发表于 2013-3-12 13:59 | 显示全部楼层
同意楼上
fp123123 发表于 2013-3-12 16:14 | 显示全部楼层
用TM1616驱动数码管好一些
世纪过客 发表于 2013-3-12 22:41 | 显示全部楼层
不要一下全部调出来,程序不来就是一步一步调的。确定每个环节都ok后,就好办了
 楼主| yueyinji1989 发表于 2013-3-13 00:28 | 显示全部楼层
wangyy608 发表于 2013-3-12 13:49
先找到问题:
只调用显示程序
只显示1位

显示调过,没问题。
加上AD转换后,要么第三位数闪得很快,要么是无论怎么调电位器,第三位数都保持不变!
jiemnij 发表于 2013-3-13 09:01 | 显示全部楼层
21ic 现在看样子比较冷清了..都没人回答...悲剧啊..
没仔细看你的代码.. 不过整体思路知道个大概.
你数码管显示的频率是delay(5), 但是你有没有考虑过, 你ad那里是delay(30)
从你的代码结构来看, 明显  显示部分不是放在 中断里面执行的
那么数码管的扫描频率就是 5*3+30=45ms    1000/45=22.xxx帧
这还是理想状况, 没有其他任何代码的前提下的, 一般都是需要设置成>30帧
如果你屏蔽所有其他代码.但是留下显示部分没有问题,
那么说明..主要原因就在这里了..
写程序需要全局考虑时间问题的.........
 楼主| yueyinji1989 发表于 2013-3-13 11:11 | 显示全部楼层
jiemnij 发表于 2013-3-13 09:01
21ic 现在看样子比较冷清了..都没人回答...悲剧啊..
没仔细看你的代码.. 不过整体思路知道个大概.
你数码管 ...

应该是这个问题需要大量时间自己去调试的吧,所以也没什么好建议。
谢谢,是没全局考虑到时间。。
cslat21_ic 发表于 2013-3-13 12:41 | 显示全部楼层
跟动态扫描时间有关系哦。
wup2008 发表于 2013-3-14 16:50 | 显示全部楼层
可能是程序编程思路有问题!我的一般不是这样编写的。
coca8043 发表于 2013-5-2 22:14 | 显示全部楼层
ayb_ice 发表于 2013-5-3 07:56 | 显示全部楼层
送一个常量试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:不要激情,要坚韧。

42

主题

281

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部