微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机频率计Proteus仿真设计(带程序电路)

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

时间:12-01 来源:互联网 点击:

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);

}

void show_high_f()
{
wvalue=value;
depart_w();
if(value<1e4)
sprintf(sbuffer,"%c.%c%c%c KHz ",w[0],w[1],w[2],w[3]);
else if(value<1e5)
sprintf(sbuffer,"%c%c.%c%c KHz ",w[0],w[1],w[2],w[3]);
else if(value<1e6)
sprintf(sbuffer,"%c%c%c.%c KHz ",w[0],w[1],w[2],w[3]);
else if(value<1e7)
sprintf(sbuffer,"%c.%c%c%c MHz ",w[0],w[1],w[2],w[3]);
else
sprintf(sbuffer,"%c%c.%c%c MHz ",w[0],w[1],w[2],w[3]);
lcd_moveto(1,5);
lcd_print(sbuffer);
}

void show_low_t()
{
wvalue=value;
depart_w();
if(value<1e4)
sprintf(sbuffer,"%c%c%c.%c uS ",w[0],w[1],w[2],w[3]);
else if(value<1e5)
sprintf(sbuffer,"%c.%c%c%c mS ",w[0],w[1],w[2],w[3]);
else if(value<1e6)
sprintf(sbuffer,"%c%c.%c%c mS ",w[0],w[1],w[2],w[3]);
else if(value<1e7)
sprintf(sbuffer,"%c%c%c.%c mS ",w[0],w[1],w[2],w[3]);
else if(value<1e8)
sprintf(sbuffer,"%c.%c%c%c S ",w[0],w[1],w[2],w[3]);
lcd_moveto(1,5);
lcd_print(sbuffer);
}

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

void intr0() interrupt 0
{

Cut=1;
P2=0xff;
Enex=0;
value=TH0*0x10000+TL0*0x100+DBPORT;
value*=10;//注意在写片时屏掉此语句
Enex=1;
if(!IsFreq) show_low_t();
else show_low_f();
if(value<4000) IsLow=0;
Cut=0;

}

void intr1() interrupt 2
{
TL0=0;
TH0=0;
}

void high_get()
{
while(1)
{
StarCount;
delay1s();
StopCount;
P2=0xff;
Enex=0;
value=TH0*0x10000+TL0*0x100+DBPORT;
Enex=1;
if(value<2000) low_get();
if(IsFreq) show_high_f();
elseshow_high_t();
ClrsCount;
TL0=0;
TH0=0;
}
}

void contrast_handle()
{
lcd_moveto(1,0);
lcd_print("Contrast : ");
lcd_putchar(contrast+0);
}

void install()
{
key_delay();
while(1)
{
switch(P0&0x7)
{
case K2:P1_5=~P1_5;
_nop_();
P1_5=~P1_5;
key_delay();
lcd_moveto(0,12);
if(BackLight) lcd_print("N ");
else lcd_print("FF");
break;
case K7:contrast--;
if(contrast==0xff) contrast++;
contrast_handle();
key_delay();
break;
case K6:contrast++;
if(contrast==8) contrast--;
contrast_handle();
key_delay();
break;

}
}
}

void lcd_init()
{
lcd_command(DIS_CURS_OFF);
lcd_command(LCD_INIT);
lcd_command(LCD_HOME);
contrast_handle();
}

void main()
{
lcd_init();
lcd_command(LCD_CLRS);
lcd_print("Welcome");
lcd_moveto(1,0);
lcd_print("Press Button...");
while(1)
{
switch(P0&0x7)
{
case K1:lcd_command(LCD_CLRS);
lcd_moveto(0,0);
lcd_print("Frequency:");
lcd_moveto(1,5);
lcd_print("No Input");
high_init();
high_get();
case K2:IsFreq=0;
lcd_command(LCD_CLRS);
lcd_moveto(0,0);
lcd_print("Priod:");
lcd_moveto(1,5);
lcd_print("No Input");
high_get();
case K3:lcd_command(LCD_CLRS);
lcd_print("Count To:");
lcd_moveto(1,0);
lcd_print("Present: ");
count_init();
count();
case K4:lcd_command(LCD_CLRS);
lcd_print("Pulse Width:");
lcd_moveto(1,5);
lcd_print("Capture.....");
width_init();
width_get();
case K5:lcd_command(LCD_CLRS);
lcd_print("Backlight: O");
lcd_moveto(0,12);
if(BackLight) lcd_print("N ");
else lcd_print("FF");
lcd_moveto(1,0);
lcd_print("Contrast : ");
lcd_putchar(contrast+0);
install();
}
}
lcd_command(LCD_CLRS);
while(1);
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top