单片机编程(求共阴数码管转换成共阳数码管的程序)

希望大家能把下面共阴数码管的程序改为共阳数码管的程序,显示效果不要改变,数码管是四位的数码管,P2.0,P2.1,P2.2,P2.3,管脚分别控制四位数码管的位选端。。程序如下:#include<reg51.h>
#include<INTRINS.H>
unsigned char code
tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x49};
unsigned char buf[4]={0,0,0,0};
unsigned int k=20;
unsigned long count=0;
unsigned long frequency=0;

void delay(unsigned char x)
{
unsigned int j,y;
for(j=0;j<x;j++)
for(y=0;y<20;y++);

}

void init()
{
TMOD=0x61;
TH0=(-50000)>>8;
TL0=(-50000);
TH1=0;
TL1=0;
TR0=1;
ET0=1;
TR1=1;
ET1=1;
EA=1;
}

void int0() interrupt 1
{
unsigned char m,n;
TF0=0;
TH0=(-50000)>>8;
TL0=(-50000);
k--;
if(k==0)
{
m=TL1;
n=TH1;
TR0=0;
TR1=1;
frequency=count*255+(m+n);
count=0;
k=20;
TL0=0;
TL1=0;
TR0=1;
TR1=1;
}

}

void int1() interrupt 3
{
TF1=0;
count++;
}

void disp(long num)
{
unsigned int dian=0;
while(num>9999)
{
num/=10;
dian++;
}
buf[3]=num%10;
num/=10;
buf[2]=num%10;
num/=10;
buf[1]=num%10;
buf[0]=num/=10;

P2=0xfe;
P0=tab[buf[0]];
delay(10);
P0=0x00;

P2=0xfd;
P0=tab[buf[1]];
delay(10);
P0=0x00;

P2=0xfb;
P0=tab[buf[2]];
delay(10);
P0=0x00;

P2=0xf7;
P0=tab[buf[3]];
delay(10);
P0=0x00;

if(dian==1)
{
{
P0=tab[buf[1]]|0x80;
}
delay(10);
P0=0x00;
}

P2=0xfb;
P0=tab[buf[2]];

if(dian==2)
{
{
P0=tab[buf[2]]|0x80;
}
delay(10);
P0=0x00;
}

P2=0xf7;
P0=tab[buf[3]];

if(dian==3)
{
{
P0=tab[buf[1]]|0x80;
}
delay(10);
P0=0x00;
}
}

void main()
{
init();
while(1)
{
disp(frequency);
}

}

并不用改动段码的数组。
显示一位数字,要改动如下:
P2 = ~0xfe;
P0 = ~tab[buf[0]];
delay(10);
P0 = ~0x00;
看到了吗?改动,就是加上了三个波浪号,即代表取反。
其余三位,都依此类推,即可。
温馨提示:答案为网友推荐,仅供参考
相似回答