有没有大侠知道,为什么动态扫描时先开位选后开段选,与先段选后位选的亮度差别很大?
硬件用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;后亮度大大增加。
有没有人知道是什原因啊? |