用的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);
}
}
|