微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求大神帮我看看这个程序问题

求大神帮我看看这个程序问题

时间: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;
        }
}


错误如图


把电阻程序放到选择调用程序里面试试

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

网站地图

Top