采用位控制,看看我下面的程序合不合适:
sbit A0=P2^2; //74LS138地址端口A1 A2 A3
sbit A1=P2^3;
sbit A3=P2^4;
unsigned char ucLedseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管段码
void Delay10ms() //软件延时子函数
{
unsigned int i,j,k;
for(i=0;i<3;i++)
for(j=0;j<40;j++)
for(k=0;k<9;k++);
}
//扫描采用一个循环语句,列如
while(1)
{
A2=0;
A1=1;
A0=0;
P3=ucLedseg[num/100]; //假设num为要显示的数值,P3口位数码管位码,此处显示百位值
Delay10ms(); //延时子函数
A2=0;
A1=0;
A0=1;
P3=ucLedseg[num/10%10]; //显示十位数值
Delay10ms();
A2=0;
A1=0;
A0=0;
P3=ucLedseg[num%10]; //显示个位数值
Delay10ms();
}
不知这个想法可以不,主要是采用位控制,而不是写整个IO口的值。
|