新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 51单片机频率计Proteus仿真设计(带程序电路)

51单片机频率计Proteus仿真设计(带程序电路)

作者: 时间:2016-12-01 来源:网络 收藏

void key_delay()
{
unsigned char i,j;
for(i=0;i<255;i++)
for(j=0;j<250;j++);
}

void key_jud()
{
switch(P0&0x7)
{
case K6:TH0=0;
TL0=0;
ClrsCount;
key_delay();
break;
case K7:P1_6=!P1_6;
lcd_moveto(1,15);
if(!P1_6)
lcd_putchar(P);
else
lcd_putchar( );
key_delay();
break;
case K1:w[0]++;
if(w[0]==10) w[0]=0;
key_delay();
break;
case K2:w[1]++;
key_delay();
if(w[1]==10) w[1]=0;
break;
case K3:w[2]++;
if(w[2]==10) w[2]=0;
key_delay();
break;
case K4:w[3]++;
if(w[3]==10) w[3]=0;
key_delay();
break;
case K5:w[4]++;
if(w[4]==10) w[4]=0;
key_delay();
break;
}
}

void low_init()
{
Disall;
Distc=0;
Tctrl=0;
Cut=0;
StopCount;
ClrsCount;
StarCount;
IsLow=1;
TL0=0;
TH0=0;
IT0=1;
IT1=1;
EX1=1;
EX0=1;
ClrsDff;
EA=1;
}

void width_init()
{
Disall;
Width=0;
Tctrl=0;
ClrsCount;
TL0=0;
TH0=0;
TMOD=0x05;
TR0=1;
TF2=0;
T2CON=8;
ET2=1;
ClrsCount;
TH0=0;
TL0=0;
EA=1;
}


void depart_w()
{
unsigned char i;
while(wvalue>=1e4) wvalue/=10;
for(i=0;i<4;i++)
{
w[3-i]=wvalue%10+0;
wvalue/=10;
}
}

void intrT2() interrupt 5
{
unsigned char i;
Tctrl=1;
P2=0xff;
Enex=0;
value=TH0;
value=(value<<8);
value=value+TL0;
value=(value<<8);
value=value+DBPORT;
Enex=1;
for(i=0;value;i++)
{
sbuffer[i]=value%10+0;
value=value/10;
}
lcd_moveto(1,3);
i++;
while(i)
{
lcd_putchar(sbuffer[i]);
i--;
}
lcd_putchar(sbuffer[i]);
lcd_print(" uS ");
while(1)
{
i=P0&0x07;
if(i==K1) break;
}
TH0=0;
TL0=0;
ClrsCount;
lcd_moveto(1,3);
lcd_print(" Capture.....");
key_delay();
T2CON=8;
Tctrl=0;

}

void width_get()
{
while(1);
}

void count()
{
while(1)
{
key_jud();
P2=0xff;
Enex=0;
value=TH0;
value=(value<<8);
value=value+TL0;
value=(value<<8);
value=value+DBPORT;
Enex=1;
lcd_moveto(1,9);
sprintf(sbuffer,"%-5lu",value);
lcd_moveto(1,9);
lcd_print(sbuffer);
copyer=w[4]+w[3]*10+w[2]*1e2+w[1]*1e3+w[0]*1e4;
if(value==copyer)
{
StopCount;
P3_1=0;
while(P0_1==1||P0_2==1);
P3_1=1;
StarCount;
}
sprintf(sbuffer,"%c%c%c%c%c",w[0]+0,w[1]+0,w[2]+0,w[3]+0,w[4]+0);
lcd_moveto(0,9);
lcd_print(sbuffer);
}
}

void count_init()
{
unsigned char i;
Disall;
Fctrl=0;
TMOD=0x05;
TR0=1;
StopCount;
ClrsCount;
TL0=0;
TH0=0;
for(i=0;i<5;i++) w[i]=9;
w[2]=8;
StarCount;
}

void low_get()
{
low_init();
while(IsLow);
high_init();
}

void show_high_t()
{
copyer=value;
while(value>=100000) value/=10;
wvalue=1e9/value;
depart_w();
if(copyer<=1e4)
sprintf(sbuffer,"%c%c%c.%c uS ",w[0],w[1],w[2],w[3]);
else if(copyer<=1e5)
sprintf(sbuffer,"%c%c.%c%c uS ",w[0],w[1],w[2],w[3]);
else if(copyer<=1e6)
sprintf(sbuffer,"%c.%c%c%c uS ",w[0],w[1],w[2],w[3]);
else if(copyer<=1e7)
sprintf(sbuffer,"%c%c%c.%c nS ",w[0],w[1],w[2],w[3]);
else
sprintf(sbuffer,"%c%c.%c%c nS ",w[0],w[1],w[2],w[3]);
lcd_moveto(1,5);
lcd_print(sbuffer);

}



评论


技术专区

关闭