久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 麻煩各位大神看看有什么問題,電路不工作,無法設置溫度 [打印本頁]

作者: kaili    時間: 2018-5-17 12:30
標題: 麻煩各位大神看看有什么問題,電路不工作,無法設置溫度
#include<reg52.h>#include<reg52.h>
#include<math.h>
float R;
float Kp;
float T;
float Ti;
float Td;
float e2;
float e1,e;
float a0,a1,a2;
#define ui unsigned int
#define uc unsigned char
sbit bj=P2^4;
sbit lcden=P2^7;
sbit lcdrs=P2^6;
sbit lcdrw=P2^5;
sbit control=P2^3;
char lshi,lge,hshi,hge;
uc num,flag;
ui temp;
sbit dsio=P3^7;
//延時
void delay(ui z)
{
        uc x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
//DS18B20控制
void dsinit()
{
        uc i;
        dsio=0;
        i=70;
        while(i--);
        dsio=1;
        i=4;
        while(i--);
}
void dswritebyte(uc dat)
{
        uc i,j;
        for(j=0;j<8;j++)
        {
                dsio=0;
                i++;
                dsio=dat&0x01;
                i=6;
                while(i--);
                dsio=1;
                dat>>=1;
        }
}
uc dsreadbyte()
{
        uc i,j,byte,b;
        for(j=0;j<8;j++)
        {
                dsio=0;
                i++;
                dsio=1;
                i++;i++;
                b=dsio;
                byte=(byte>>1)|(b<<7);
                i=4;
                while(i--);
        }
        return byte;
}
void dschangetemp()
{
        dsinit();
        delay(1);
        dswritebyte(0xcc);
        dswritebyte(0x44);

}
void dsreadtemp()
{
        dsinit();
        delay(1);
        dswritebyte(0xcc);
        dswritebyte(0xbe);
}
ui gettemp()
{
        int temp;
        uc h,l;
        dschangetemp();
        dsreadtemp();
        l=dsreadbyte();
        h=dsreadbyte();
        temp=h;
        temp<<=8;
        temp|=l;
        temp=temp*0.0625*100+0.5;
        return temp;
}
//LCD控制程序
void lcdwritecom(uc com)
{
        lcdrs=0;
        P0=com;
        delay(10);
        lcden=1;
        delay(10);
        lcden=0;
}
void lcdwritedata(uc date)
{
        lcdrs=1;
        P0=date;
        delay(10);
        lcden=1;
        delay(10);
        lcden=0;
}
void lcdinit()
{
        lcdrw=0;
        lcden=0;
        lcdwritecom(0x38);
        lcdwritecom(0x0c);
        lcdwritecom(0x06);
        lcdwritecom(0x01);
}
//LCD顯示
void lcddisplay(int temp)
{
        ui  tab[]={0,0,0,-2,0,0};
        lcdwritecom(0x80);
        lcdwritedata('+');
        tab[0]=temp/10000;
        tab[1]=temp%10000/1000;
        tab[2]=temp%1000/100;
        tab[4]=temp%100/10;
        tab[5]=temp%10;
        lcdwritecom(0x81);
        for(num=0;num<6;num++)
        {
                lcdwritedata('0'+tab[num]);
        }
}
//報警
void baojing()
{
        float t;
         t=gettemp();
        if(t<3000||t>8500)
        bj=0;
        else bj=1;        
}
void adjust()
{
        delay(100);
        flag++;
        if(flag==5)flag=1;
        if(flag==1)
        {
                lcdwritecom(0x80+0x44);
                lcdwritecom(0x0f);        
         }
         if(flag==2)
        {
                lcdwritecom(0x80+0x45);
                lcdwritecom(0x0f);        
         }
        if(flag==3)
        {
                lcdwritecom(0x80+0x47);
                lcdwritecom(0x0f);        
         }
        if(flag==4)
        {
                lcdwritecom(0x80+0x48);
                lcdwritecom(0x0f);        
         }
}
void inc()
{
        delay(100);
        switch(flag)
        {
                case 1:lshi++; if(lshi==10)lshi=0;
                                                lcdwritedata('0'+lshi);
                                                lcdwritecom(0x10);
                                                break;
                case 2:lge++; if(lge==10)lge=0;
                                                lcdwritedata('0'+lge);
                                                lcdwritecom(0x10);
                                                break;
                case 3:hshi++; if(hshi==10)hshi=0;
                                                lcdwritedata('0'+hshi);
                                                lcdwritecom(0x10);
                                                break;
                case 4:hge++; if(hge==10)hge=0;
                                                lcdwritedata('0'+hge);
                                                lcdwritecom(0x10);
                                                break;
        }
}
void dec()
{
        delay(100);
        switch(flag)
        {
                case 1:lshi--; if(lshi<0)lshi=9;
                                                lcdwritedata('0'+lshi);
                                                lcdwritecom(0x10);
                                                break;
                case 2:lge--; if(lge<0)lge=9;
                                                lcdwritedata('0'+lge);
                                                lcdwritecom(0x10);
                                                break;
                case 3:hshi--; if(hshi<0)hshi=9;
                                                lcdwritedata('0'+hshi);
                                                 lcdwritecom(0x10);
                                                break;
                case 4:hge--; if(hge<0)hge=9;
                                                lcdwritedata('0'+hge);
                                                 lcdwritecom(0x10);
                                                break;
        }
}
//鍵盤掃描
void keyscan()
{
        uc test,num;
        num=0;
        test=P1;
        if(test!=0xff)
        delay(5);
        test=P1;
        if(test==0xf7)
        
        {
                while(P1!=0xff);
                num++;
                while(1)
                {
                        test=P1;
                        if(test!=0xff)
                        delay(5);
                        test=P1;
                        if(test!=0xff)
                        {
                                if(test==0xf7)
                                        num++;
                                        if(num==2)
                                        {        lcdwritecom(0x0c);
                                                break;}
                                switch(test)
                                {
                                        case 0xfe:adjust();        
                                                        break;
                                        case 0xfd:inc();
                                                        break;
                                        case 0xfb:dec();
                                                        break;
                                }
                         }
                        while(P1!=0xff);
               
                }
                }
}
//PID
void PIDinit()
{
      
           Kp=2;Ti=4;Td=1;T=1;R=25;
           a0=Kp*(1+T/Ti+Td/T);
           a1=-Kp*(1+(2*Td)/T);
           a2=Kp*(Td/T);
           e2=e1=0;
}
void PIDdeal()
{
        float y        ,u ;
        y=gettemp();
        e=y/100-R;
        u=a0*e+a1*e1+a2*e2;
        e2=e1;e1=e;
        if(u>0.5||u<-0.5)
        control=0;
        else control=1;
}
void main()
{
        uc code tab2[]="SET:20~50C";
        uc i;
        TMOD=0x01;
        TH0=(65535-10900)/256;
        TL0=(65535-10900)%256;
        ET0=1;
        TR0=1;
        lcdinit();
        lcdwritecom(0x87);
        lcdwritedata('C');
        lcdwritecom(0x80+0x40);
        for(i=0;i<10;i++)
                lcdwritedata(tab2) ;
        lshi=2;lge=0;hshi=5;hge=0;
        while(1)
        {
                lcddisplay(gettemp());
                baojing();
            keyscan() ;
                EA=1; while(1);
        }
}
void t0() interrupt 1
{        
        uc i;
        TH0=(65535-10900)/256;
        TL0=(65535-10900)%256;
        i++;
        if(i==100)
        {
           void PIDinit();
           void PIDdeal();
        }
}

作者: zhanghyg    時間: 2018-5-18 14:46

你的程序死在while(1)這里了。還有調用子程序不用加void




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产一区二区三区www | 午夜视频一区二区 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 又黑又粗又长的欧美一区 | 欧美激情五月 | 免费精品视频一区 | 久久久91精品国产一区二区三区 | 美女在线一区二区 | 精品国产乱码久久久久久88av | 91国内精品久久 | 在线一区 | 久久久久久国产精品免费免费 | 国产精品污www在线观看 | 亚洲精品国产第一综合99久久 | 色网站入口| 亚洲午夜在线 | a级片网站 | 91中文字幕在线 | 在线免费黄色小视频 | av黄色在线| 精品国产青草久久久久福利 | 黄色免费观看 | www免费视频 | 国产一级成人 | 久久aⅴ乱码一区二区三区 91综合网 | 国产精品久久久久久238 | 国产精成人 | 欧美一级欧美一级在线播放 | 欧洲一区在线观看 | 日韩精品一区二区三区 | 精品一区二区三区在线观看 | 日一区二区 | 日本成人免费网站 | 亚洲精品久久久久中文字幕欢迎你 | 欧美日韩理论 | 欧美日韩一 | 国产美女一区二区 | 色中文在线 | 成人福利电影 | 精品国产乱码久久久久久老虎 | 欧美视频偷拍 |