现在是这样的,选了芯片6个IO口连上了6个数码管的共阳极,直连,没有任何电阻。然后我只点亮一个,共阳极电压为1.3.点亮3个,电压为0.9,点亮6个,电压为0.4.测量的都是平均电压,示波器测的共阳极电压为3V左右,大部分时间为低电平,只有开启那一会是高电平。简单来说波形是正常的。const char num[10]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};//数码管数字0-9,未点亮小数点,需点亮每个小数点则&0xdf void 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[cur]&0xdf); //点亮小数点 break; case 2: DIG22=1; display_num(num[cur]); break; case 3: DIG23=1; display_num(num[cur]); break; } } else{ switch(number){ case 1: DIG11=1; display_num(num[cur]&0xdf); break; case 2: DIG12=1; display_num(num[cur]); break; case 3: DIG13=1; display_num(num[cur]); 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供电有没有扫描办法解决这个问题。 |
0很暗,其它数字很亮
所有的0都暗