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

[复制链接]
3096|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;
  
}
 楼主| dz863 发表于 2010-1-31 17:59 | 显示全部楼层
匠人的代码有道理,明天实验一下。谢谢
smileagain 发表于 2010-2-1 00:26 | 显示全部楼层
匠人的方法是最标准的,数码管扫描时的顺序是:关位选->缓存数据送段选->开位选->延时->关位选
不过lz的程序感觉上数据串位也就是几个指令周期的时间,应该最多也就是数码管有点“串红”吧,好像不至于造成很离谱的显示错误。lz试一下再来回答吧
程序匠人 发表于 2010-2-1 08:39 | 显示全部楼层
匠人的方法是最标准的,数码管扫描时的顺序是:关位选->缓存数据送段选->开位选->延时->关位选
不过lz的程序感觉上数据串位也就是几个指令周期的时间,应该最多也就是数码管有点“串红”吧,好像不至于造成很离谱的 ...
smileagain 发表于 2010-2-1 00:26


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

delayUs(6);                 是多少时间?6us?
 楼主| dz863 发表于 2010-2-1 09:06 | 显示全部楼层
测试结果:还是一样,小数点依然存在。
我延时实验了很多,30ms都用过。
痛苦,明天还不能解决,换静态方式。5年没玩单片机了,一直玩上位机。
程序匠人 发表于 2010-2-1 10:04 | 显示全部楼层
8# dz863

完整的程序(包括段码表)和电路都上来看看
 楼主| dz863 发表于 2010-2-4 13:21 | 显示全部楼层
晕倒。把电路板移动个位置就好了。
zhaoyu2005 发表于 2010-2-4 13:43 | 显示全部楼层
是不是放到导体上了,造成短路了
红心J 发表于 2010-2-6 15:00 | 显示全部楼层
先消隐,再驱动新的一位显示
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

1

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