用的74HC164D:串行转并行,移位寄存器功能。
以下是代码。这代码在别人上的板子上能正常显示,在我的板子上,4个数码管都很暗,但是烧写好的程序就没问题,我没有写好的程序,以下代码如果只显示1个数码管就亮,两个就有点暗,4个时候就很暗了。延时调小也没有明显的变化。
D1-D4数码管COM1-4,shift_data数据发送端,ck时钟端
为啥会暗,有什么办法调高亮度吗?
sbit shift_data = P2^3;
sbit ck = P1^7;
sbit D1 = P3^2;
sbit D2 = P3^3;
sbit D3 = P3^4;
sbit D4 = P2^5;
void delay12us(uint Multiple )
{
while(Multiple--) //每步为3us
{
_nop_();
_nop_();
}
}
void numerical_codes_tube(uchar wait_shift_data,uchar number) //数码管
{
uchar shiftsum;
for(shiftsum=0;shiftsum<8;shiftsum++)
{
if(wait_shift_data&0x0)
shift_data=1;
else
shift_data=0;
ck=0;
ck=1;
_nop_();
wait_shift_data=_cror_(wait_shift_data,1);
}
switch(number)
{
case 0:D1=1;break;
case 1:D2=1;break;
case 2:D3=1;break;
case 3:D4=1;break;
}
DELAY_Ms(4);
D1=D2=D3=D4=0;
}
void display_four_bit_code(uchar iteam_code,uchar iteam_code1,uchar iteam_code2,uchar iteam_code3)
{
numerical_codes_tube(iteam_code,0);
numerical_codes_tube(iteam_code1,1);
numerical_codes_tube(iteam_code2,2);
numerical_codes_tube(iteam_code3,3);
}
void main()
{
while(1)
{
display_four_bit_code(0x3c,0x3c,0x3c,0x3c);
}
}
|