打印

双联体共阳数码管驱动奇怪问题。

[复制链接]
2467|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dz863|  楼主 | 2010-1-31 08:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
P2 接数据口,LED_H ,LED_L 位选(加了三极管,反逻辑).
显示数据都对,现在的问题就是小数点不可控 (0,1,7这三个数字对,其余都错),一直怀疑是延时问题,改了多种,延时只能修改高位的亮度。请高手出招,谢谢

// Led 显示用 ,注意是动态显示
void showLed(unsigned char inum)
{
  unsigned char i = 0;
  i = inum /10;
  LED_L = 1 ;
  LED_H = 0;
  P2 = LedCode[i]; // 0 ~9的编码,没有问题。
   delayUs(6);
  i = inum % 10;
   
  LED_L = 0;
  LED_H = 1;
  P2 = LedCode[i];
  delayUs(6);
  
}

相关帖子

沙发
ningling_21| | 2010-1-31 12:20 | 只看该作者
LedCode[i]
看你的编码有没搞对...

使用特权

评论回复
板凳
dz863|  楼主 | 2010-1-31 13:37 | 只看该作者
编码绝对没问题,因为只让一个数码管显示的时候一点问题都没有。

使用特权

评论回复
地板
程序匠人| | 2010-1-31 13:56 | 只看该作者
应该如此:

// Led 显示用 ,注意是动态显示
void showLed(unsigned char inum)
{
  unsigned char i = 0;

  i = inum /10;
  P2 = LedCode[i];
  LED_H = 0;
   delayUs(6);                 //延时1ms
  LED_H = 1;


  i = inum % 10;
  P2 = LedCode[i];
  LED_L = 0;
   delayUs(6);                 //延时1ms
  LED_L = 1;
  
}

使用特权

评论回复
5
dz863|  楼主 | 2010-1-31 17:59 | 只看该作者
匠人的代码有道理,明天实验一下。谢谢

使用特权

评论回复
6
smileagain| | 2010-2-1 00:26 | 只看该作者
匠人的方法是最标准的,数码管扫描时的顺序是:关位选->缓存数据送段选->开位选->延时->关位选
不过lz的程序感觉上数据串位也就是几个指令周期的时间,应该最多也就是数码管有点“串红”吧,好像不至于造成很离谱的显示错误。lz试一下再来回答吧

使用特权

评论回复
7
程序匠人| | 2010-2-1 08:39 | 只看该作者
匠人的方法是最标准的,数码管扫描时的顺序是:关位选->缓存数据送段选->开位选->延时->关位选
不过lz的程序感觉上数据串位也就是几个指令周期的时间,应该最多也就是数码管有点“串红”吧,好像不至于造成很离谱的 ...
smileagain 发表于 2010-2-1 00:26


估计是lz的延时没有达到1ms。

delayUs(6);                 是多少时间?6us?

使用特权

评论回复
8
dz863|  楼主 | 2010-2-1 09:06 | 只看该作者
测试结果:还是一样,小数点依然存在。
我延时实验了很多,30ms都用过。
痛苦,明天还不能解决,换静态方式。5年没玩单片机了,一直玩上位机。

使用特权

评论回复
9
程序匠人| | 2010-2-1 10:04 | 只看该作者
8# dz863

完整的程序(包括段码表)和电路都上来看看

使用特权

评论回复
10
dz863|  楼主 | 2010-2-4 13:21 | 只看该作者
晕倒。把电路板移动个位置就好了。

使用特权

评论回复
11
zhaoyu2005| | 2010-2-4 13:43 | 只看该作者
是不是放到导体上了,造成短路了

使用特权

评论回复
12
红心J| | 2010-2-6 15:00 | 只看该作者
先消隐,再驱动新的一位显示

使用特权

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

本版积分规则

1

主题

5

帖子

1

粉丝