打印

数码管闪烁

[复制链接]
4133|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yueyinji1989|  楼主 | 2013-3-11 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yueyinji1989 于 2013-3-11 23:16 编辑

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

AD转换代码:
uchar ad_init()
{
//开启AD,并返回转换后数值
uchar adval;
adwr=1;
_nop_();
adwr=0;
_nop_();
adwr=1;
delay(30);//延时30ms
P1=0xff;
adrd=1;
_nop_();
adrd=0;
_nop_();//取值
adval=P1;
adrd=1;
return adval;}
数码管显示代码:
void display(uchar num)
{
        //数码管显示
        uchar bai,ge,shi;                                 
        bai=num/100;
        shi=num%100/10;
        ge =num%100%10;
        //百位
        dula=1;
        P0=table[bai];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0x7e;
        wela=0;
        delay(5);//延时5ms

        //十位
        dula=1;
        P0=table[shi];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0x7d;
        wela=0;
        delay(5);

        //个位
        dula=1;
        P0=table[ge];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0x7b;
        wela=0;
        delay(3);
}

相关帖子

沙发
ljl457| | 2013-3-12 10:41 | 只看该作者
数码管坏了

使用特权

评论回复
板凳
hlzhaowu| | 2013-3-12 11:49 | 只看该作者
有可能吗

使用特权

评论回复
地板
delin17| | 2013-3-12 13:19 | 只看该作者
显示刷新频率太低,导致闪。
动态显示驱动没做好,考虑加快刷新

使用特权

评论回复
5
yueyinji1989|  楼主 | 2013-3-12 13:45 | 只看该作者
ljl457 发表于 2013-3-12 10:41
数码管坏了

没坏哦!

使用特权

评论回复
6
yueyinji1989|  楼主 | 2013-3-12 13:47 | 只看该作者
delin17 发表于 2013-3-12 13:19
显示刷新频率太低,导致闪。
动态显示驱动没做好,考虑加快刷新

试过加快刷新了,都是不行。刷新时间为1ms时,改变电位器时数值都不会改变了!

使用特权

评论回复
7
wangyy608| | 2013-3-12 13:49 | 只看该作者
先找到问题:
只调用显示程序
只显示1位
。。。。
慢慢试

使用特权

评论回复
8
xuyaqi| | 2013-3-12 13:59 | 只看该作者
同意楼上

使用特权

评论回复
9
fp123123| | 2013-3-12 16:14 | 只看该作者
用TM1616驱动数码管好一些

使用特权

评论回复
10
世纪过客| | 2013-3-12 22:41 | 只看该作者
不要一下全部调出来,程序不来就是一步一步调的。确定每个环节都ok后,就好办了

使用特权

评论回复
11
yueyinji1989|  楼主 | 2013-3-13 00:28 | 只看该作者
wangyy608 发表于 2013-3-12 13:49
先找到问题:
只调用显示程序
只显示1位

显示调过,没问题。
加上AD转换后,要么第三位数闪得很快,要么是无论怎么调电位器,第三位数都保持不变!

使用特权

评论回复
12
jiemnij| | 2013-3-13 09:01 | 只看该作者
21ic 现在看样子比较冷清了..都没人回答...悲剧啊..
没仔细看你的代码.. 不过整体思路知道个大概.
你数码管显示的频率是delay(5), 但是你有没有考虑过, 你ad那里是delay(30)
从你的代码结构来看, 明显  显示部分不是放在 中断里面执行的
那么数码管的扫描频率就是 5*3+30=45ms    1000/45=22.xxx帧
这还是理想状况, 没有其他任何代码的前提下的, 一般都是需要设置成>30帧
如果你屏蔽所有其他代码.但是留下显示部分没有问题,
那么说明..主要原因就在这里了..
写程序需要全局考虑时间问题的.........

使用特权

评论回复
13
yueyinji1989|  楼主 | 2013-3-13 11:11 | 只看该作者
jiemnij 发表于 2013-3-13 09:01
21ic 现在看样子比较冷清了..都没人回答...悲剧啊..
没仔细看你的代码.. 不过整体思路知道个大概.
你数码管 ...

应该是这个问题需要大量时间自己去调试的吧,所以也没什么好建议。
谢谢,是没全局考虑到时间。。

使用特权

评论回复
14
cslat21_ic| | 2013-3-13 12:41 | 只看该作者
跟动态扫描时间有关系哦。

使用特权

评论回复
15
wup2008| | 2013-3-14 16:50 | 只看该作者
可能是程序编程思路有问题!我的一般不是这样编写的。

使用特权

评论回复
16
coca8043| | 2013-5-2 22:14 | 只看该作者

使用特权

评论回复
17
ayb_ice| | 2013-5-3 07:56 | 只看该作者
送一个常量试试

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

42

主题

281

帖子

0

粉丝