数码管亮度不一致
现在是这样的,选了芯片6个IO口连上了6个数码管的共阳极,直连,没有任何电阻。然后我只点亮一个,共阳极电压为1.3.点亮3个,电压为0.9,点亮6个,电压为0.4.测量的都是平均电压,示波器测的共阳极电压为3V左右,大部分时间为低电平,只有开启那一会是高电平。简单来说波形是正常的。const char num={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};//数码管数字0-9,未点亮小数点,需点亮每个小数点则&0xdfvoid Timer2Int(void) interrupt 5//定时时间为2.5ms左右,数码管未发生闪烁。
{
static char i=0;
TF2 = 0; //溢出清零
// flush_flag=1;
i++;
switch(i){
case 1:brighdig(1,1,(current/100));break;
case 2:brighdig(1,2,(current/10)%10);break;
case 3:brighdig(1,3,(current%10));break;
case 4:brighdig(0,1,(n/100));break;
case 5:brighdig(0,2,(n/10)%10);break;
case 6:brighdig(0,3,(n%10));break;
}
if(i>=6) i=0;
}
void brighdig(unsigned char flag,unsigned char number,unsigned int cur)
{
DIG21=0; //数码管共阳极
DIG22=0;
DIG23=0;
DIG11=0;
DIG12=0;
DIG13=0;
if(flag){
switch(number){
case 1: DIG21=1;
display_num(num&0xdf); //点亮小数点
break;
case 2: DIG22=1;
display_num(num);
break;
case 3: DIG23=1;
display_num(num);
break;
}
}
else{
switch(number){
case 1: DIG11=1;
display_num(num&0xdf);
break;
case 2: DIG12=1;
display_num(num);
break;
case 3: DIG13=1;
display_num(num);
break;
}
}
}
void display_num(unsigned char num)
{
unsigned char i;
for(i=0;i<8;i++)
{
CLK=0;
if(num&0X01)
{
DAS=1;
}
else {
DAS=0;
}
CLK=1;
num=num>>1;
}
}
关闭了其它中断,只有定时器中断在工作。供电电压为3V,显示就如图。只有0是暗的,其它数字很正常。扫描时间也改过,还是一样。然后3.3V供电的话亮度是比3V供电好点,现在就是想3V供电有没有扫描办法解决这个问题。
本帖最后由 skw168 于 2020-9-15 10:38 编辑
每次只点亮数码管的一段,6*8=48段一个循环,还有必须要接限流电阻 试一下把显示部分直接放到while里面呢?不要放在定时器里面 潜力变实力 发表于 2020-9-15 11:06
试一下把显示部分直接放到while里面呢?不要放在定时器里面
试过,原来就是在while(1)里面 skw168 发表于 2020-9-15 10:36
每次只点亮数码管的一段,6*8=48段一个循环,还有必须要接限流电阻
我觉得不一定是这个问题,但是我后期可以试试,因为只有数字0显示异常 爱情海玩偶 发表于 2020-9-15 11:23
试过,原来就是在while(1)里面
试一下显示一下8是否正常,然后带小数点 潜力变实力 发表于 2020-9-15 11:35
试一下显示一下8是否正常,然后带小数点
正常的 潜力变实力 发表于 2020-9-15 11:35
试一下显示一下8是否正常,然后带小数点
这个就是在while(1)里面显示的
爱情海玩偶 发表于 2020-9-15 11:43
这个就是在while(1)里面显示的
确认一下是不是0的编码不对,8都可以正常显示了,就可以排除电路的驱动能力不够的问题。 潜力变实力 发表于 2020-9-15 13:21
确认一下是不是0的编码不对,8都可以正常显示了,就可以排除电路的驱动能力不够的问题。 ...
3.3V电压的话0显示亮度很正常,比3V的亮许多,我现在就是想解决3V供电数字0为啥暗好多,基本上都快看不清了 这种程序框架都不对,显示应该设置缓冲区,中断只管从缓冲区取数据显示,做简单的动作,主程序要显示什么就往缓冲区里填 爱情海玩偶 发表于 2020-9-15 11:24
我觉得不一定是这个问题,但是我后期可以试试,因为只有数字0显示异常
这不是浪费时间吗 检查一下电路 ayb_ice 发表于 2020-9-15 16:24
这种程序框架都不对,显示应该设置缓冲区,中断只管从缓冲区取数据显示,做简单的动作,主程序要显示什么就 ...
不太懂,我是通过ad采样来更新数值,采样是60ms更新一次数值。我更新的数值是一个全局变量。 DSP之神 发表于 2020-9-15 17:20
检查一下电路
电路很简单,就是如图所示,电压啥的都测过,没发现区别 芯片驱动能力有限,显示不同数字,亮度不一致,受芯片IO总电流限制,笔画越多,亮度越暗。
还是串电阻吧,能有效改善。
爱情海玩偶 发表于 2020-9-15 17:27
不太懂,我是通过ad采样来更新数值,采样是60ms更新一次数值。我更新的数值是一个全局变量。 ...
就是各负其责,各个功能只负责自己完成的功能,这样程序间耦合低,易于维护扩展,显示只管显示,只某个变量(缓冲区)取数据,直接显示,要显示的内容不是他管的事,那是其它任务的事 cjseng 发表于 2020-9-15 20:51
芯片驱动能力有限,显示不同数字,亮度不一致,受芯片IO总电流限制,笔画越多,亮度越暗。
还是串电阻吧, ...
但是数字8不影响的 ayb_ice 发表于 2020-9-16 08:28
就是各负其责,各个功能只负责自己完成的功能,这样程序间耦合低,易于维护扩展,显示只管显示,只某个变 ...
我上次看的别人的代码就是有个缓存数组,里面存的值就是要刷新的值,然后更新的话就是去数组里取值 ayb_ice 发表于 2020-9-16 08:28
就是各负其责,各个功能只负责自己完成的功能,这样程序间耦合低,易于维护扩展,显示只管显示,只某个变 ...
你说的, 我视频讲过, 我确信他们不会写.....
亮度有问题,很简单,要么驱动电路电压不稳. 要么点亮的时长不固定. 上示波器测量一下不就ok了?
页:
[1]
2