求大神帮我看看这个程序问题
时间:10-02
整理:3721RD
点击:
#include<reg51.h>
#include <intrins.h>
#include<math.h>
#define unchar unsigned char
#define unlong unsigned long
#define ln2 0.693147
#define pi 3.141592
sbit pr=P1^0;
sbit pc=P1^1;
sbit pl=P1^2;
sbit A0=P2^7;
long float f;
/************************段码说明***********************/
unsigned char code
Table1[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //10位0~9段码
unsigned char Dis_BUF[4]={16,16,16,16};//显存
unsigned tab[4]={0x1f,0x2f,0x4f,0x8f};
void main() //主函数开中断int0,显示
{
EA=1;
EX0=1;
PT1=0;
PX0=1;
while(1)
{
display();
}
}
void delay(unsigned int itime) //延时函数
{
while(itime--);
}
void int0(void)interrupt 0 using 0 //INT0中断内容 开t1中断,to计数
{
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
TR1=1;
TR0=1;
ET1=1;
ET0=1;
EA=1;
}
void time1(void) interrupt 3 using 2 //t1中断 定时,选择调用程序
{
if(pr==1)
{dianzu();}
if(pc==1)
{dianrong();}
if(pl==1)
{diangan();}
}
void dianzu() //测电阻程序
{
long float i=0;
i=TH0*256+TL0;
f=i*20;
if(f<7500)
{
A0=0;
first();
}
if(f>7500)
{
A0=1;
second();
}
}
void first()
{
long float i=0;
long float R=0;
long float c=0.00000047;
long float r=200;
i=TH0*256+TL0;
f=i*20;
delay(100);
R= 1/(2*ln2*c*f)-r/2;
led(R);
}
void second()
{
long float i=0;
long float R=0;
long float c=0.0000000001;
long float r=20000;
i=TH0*256+TL0;
f=i*20;
delay(100);
R=1/(2*ln2*c*f)-r/2;
led(R);
}
void dianrong()
{
long float i=0;
long float C=0;
long float r=47000;
i=TH0*256+TL0;
f=i*20;
delay(100);
C=1/(ln2*f*3*r);
C*=1000000000000; //以pF为单位
led(C);
}
void diangan()
{
long float i=0;
long float L=0;
long float r=100;
i=TH0*256+TL0;
f=i*20;
delay(100);
L=r/(2*ln2*f*100);
L*=1000000; //以uH为单位
led(L);
}
void led(unsigned float x)
{
char exp;
if(x>=0&&x<1000)
{
exp=0;
}
if(x>=1000&&x<10000)
{
exp=1;
x/=10;
}
if(x>=10000&&x<100000)
{
exp=2;
x/=100;
}
if(x>=100000&&x<1000000)
{
exp=3;
x/=1000;
}
Dis_BUF[0]=Table[x/100];
Dis_BUF[1]=Table[x%100/10];
Dis_BUF[2]=Table[x%10];
Dis_BUF[3]=Table[exp];
}
void display()
{
char m;
while(1)
{
m=tab[0];
P2=m;
P0=Dis_BUF[0];
delay(100);
P2=0x00;
m=tab[1];
P2=m;
P0=Dis_BUF[1];
delay(100);
P2=0x00;
m=tab[2];
P2=m;
P0=Dis_BUF[2];
delay(100);
P2=0x00;
m=tab[3];
P2=m;
P0=Dis_BUF[3];
delay(100);
P2=0x00;
}
}
#include <intrins.h>
#include<math.h>
#define unchar unsigned char
#define unlong unsigned long
#define ln2 0.693147
#define pi 3.141592
sbit pr=P1^0;
sbit pc=P1^1;
sbit pl=P1^2;
sbit A0=P2^7;
long float f;
/************************段码说明***********************/
unsigned char code
Table1[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //10位0~9段码
unsigned char Dis_BUF[4]={16,16,16,16};//显存
unsigned tab[4]={0x1f,0x2f,0x4f,0x8f};
void main() //主函数开中断int0,显示
{
EA=1;
EX0=1;
PT1=0;
PX0=1;
while(1)
{
display();
}
}
void delay(unsigned int itime) //延时函数
{
while(itime--);
}
void int0(void)interrupt 0 using 0 //INT0中断内容 开t1中断,to计数
{
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
TR1=1;
TR0=1;
ET1=1;
ET0=1;
EA=1;
}
void time1(void) interrupt 3 using 2 //t1中断 定时,选择调用程序
{
if(pr==1)
{dianzu();}
if(pc==1)
{dianrong();}
if(pl==1)
{diangan();}
}
void dianzu() //测电阻程序
{
long float i=0;
i=TH0*256+TL0;
f=i*20;
if(f<7500)
{
A0=0;
first();
}
if(f>7500)
{
A0=1;
second();
}
}
void first()
{
long float i=0;
long float R=0;
long float c=0.00000047;
long float r=200;
i=TH0*256+TL0;
f=i*20;
delay(100);
R= 1/(2*ln2*c*f)-r/2;
led(R);
}
void second()
{
long float i=0;
long float R=0;
long float c=0.0000000001;
long float r=20000;
i=TH0*256+TL0;
f=i*20;
delay(100);
R=1/(2*ln2*c*f)-r/2;
led(R);
}
void dianrong()
{
long float i=0;
long float C=0;
long float r=47000;
i=TH0*256+TL0;
f=i*20;
delay(100);
C=1/(ln2*f*3*r);
C*=1000000000000; //以pF为单位
led(C);
}
void diangan()
{
long float i=0;
long float L=0;
long float r=100;
i=TH0*256+TL0;
f=i*20;
delay(100);
L=r/(2*ln2*f*100);
L*=1000000; //以uH为单位
led(L);
}
void led(unsigned float x)
{
char exp;
if(x>=0&&x<1000)
{
exp=0;
}
if(x>=1000&&x<10000)
{
exp=1;
x/=10;
}
if(x>=10000&&x<100000)
{
exp=2;
x/=100;
}
if(x>=100000&&x<1000000)
{
exp=3;
x/=1000;
}
Dis_BUF[0]=Table[x/100];
Dis_BUF[1]=Table[x%100/10];
Dis_BUF[2]=Table[x%10];
Dis_BUF[3]=Table[exp];
}
void display()
{
char m;
while(1)
{
m=tab[0];
P2=m;
P0=Dis_BUF[0];
delay(100);
P2=0x00;
m=tab[1];
P2=m;
P0=Dis_BUF[1];
delay(100);
P2=0x00;
m=tab[2];
P2=m;
P0=Dis_BUF[2];
delay(100);
P2=0x00;
m=tab[3];
P2=m;
P0=Dis_BUF[3];
delay(100);
P2=0x00;
}
}
错误如图
把电阻程序放到选择调用程序里面试试