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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2153|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

麻煩各位大神看看有什么問題,電路不工作,無法設(shè)置溫度

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
#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;
//延時(shí)
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]);
        }
}
//報(bào)警
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();
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:330198 發(fā)表于 2018-5-18 14:46 | 只看該作者

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

評(píng)分

參與人數(shù) 1黑幣 +90 收起 理由
admin + 90 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 激情五月婷婷综合 | 国产一区二区三区色淫影院 | 亚洲欧美激情网 | 人人干人人超 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 成人在线视频免费看 | 中文精品视频 | 日韩一区二区在线观看视频 | 欧美理伦片在线播放 | 日韩毛片在线视频 | 天天干天天色 | 在线成人av | 亚洲激情视频在线 | 久久精品久久综合 | av激情影院 | 国产精品日韩 | 成人av看片 | 91久久久久久久久久久久久 | 免费99精品国产自在在线 | 成人av一区二区三区 | 亚洲中午字幕 | 亚洲精品9999久久久久 | 久久伊人一区二区 | 国产精品美女一区二区 | 国产成人网 | 欧美一级毛片久久99精品蜜桃 | 一区二区三区在线 | 亚洲国产高清高潮精品美女 | 午夜小电影 | 午夜在线视频一区二区三区 | 成人黄色电影免费 | 日本视频免费观看 | www.成人.com| 精品在线一区 | 亚洲成人www | 91视视频在线观看入口直接观看 | 国产日韩精品一区 | 午夜精品一区二区三区在线视频 | 久久久久久久久久久久91 | 国产www成人 | 国产精品永久免费观看 |