打印

数码管动态扫描亮度

[复制链接]
2504|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
brize_huang|  楼主 | 2010-10-13 01:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有没有大侠知道,为什么动态扫描时先开位选后开段选,与先段选后位选的亮度差别很大?
硬件用74hc595驱动四位共阴数码管。
程序:
#include<reg52.h>
#include"common.h"
#define led_port P1
sbit din_595=P2^0;
sbit oe_595=P2^1;
sbit lc_595=P2^2;
sbit sck_595=P2^3 ;
uint8 led_state=1;  //led状态
uint8 code led_dat[]={0xfa,0x22,0xb9,0xab,0x63,0xcb,0xdb,0xa2,0xfb,0xeb}; //字型码0-9


void led_disp(uint8 *dat) //动态扫描
{ led_port=0x00;//关显示
switch(led_state)
{
  case 1:w595(led_dat[dat[3]]);  //通过595开位选
    led_port=0x01;//段选
    delay_4ms();
    led_port=0x00;//关显示
    led_state=1;//状态跳转
    break;
  case 2: ……
  case 3: ……
  case 4: ……
  default:break;
}
}
void main()
{
uint8 led[]={8,9,6,7};//显示数据
while(1)
      led_disp(led);
}

原先是 : case 1:     led_port=0x01;
w595(led_dat[dat[0]]);
    delay_4ms();
    led_port=0x00;
    led_state=2;//状态跳转
    break;
亮度很低,改为
w595(led_dat[dat[0]]);
    led_port=0x01;后亮度大大增加。
有没有人知道是什原因啊?

相关帖子

沙发
Push_Pull| | 2010-10-13 08:29 | 只看该作者
w595(led_dat[dat[0]]);这个函数需要消耗时间,你把位选先开通了,你整体亮的时间不是比后开通的要少w595(led_dat[dat[0]]);这个函数所执行的时间么。

使用特权

评论回复
板凳
zhaoyu2005| | 2010-10-13 09:20 | 只看该作者
除非你的w595函数执行的时间接近mS级,或者你的delay_4ms()函数定时严重不足4mS,就普通51单片机,6M晶振,指令周期2uS,执行w595函数应该在100uS以内(串行数据移入595大部分单片机不用延时,595的时钟常温下高于5M),与4mS相比,差了一个数量级,对亮度影响可以忽略。

另外,一般是先关所有位选,输出(这个输出是将595内部的数据送到输出口上,不是将串行数据移入内部)段数据,再开位选,位数多了容易出现虚影

使用特权

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

本版积分规则

3

主题

11

帖子

1

粉丝