|
本设计的功能是pid温控
这个程序数组哪里有问题 在编译的时候会出现文件打不开的警告 - #include <reg52.h>
- #include "ds18b20ce.h"
- #include "delay.h"
- #include "jipan.h"
- sbit P10=P1^0;
- sbit led0=P1^4;
- sbit beep=P1^5;
- unsigned char flag=0;
- unsigned int set_temper;
- unsigned int temper;
- unsigned int a;
- unsigned int b;
- unsigned int c,tp,tp2;
- unsigned int Ep,Ed,rout=0;
- unsigned char kp,ki,kd;
- unsigned char high_time,low_time=50;
- unsigned char count=0;
- int d[4];
- void compare_temper(void);
- unsigned int pid_com(void);
- void main(void)
- {
- TMOD=0x01;
- TH0=(65536-20000)/256;
- TL0=(65536-20000)%256;
- EA=1;
- EX0=1;
- ET0=1;
- IT0=0;
- TR0=1;
- kp=10;
- ki=8;
- kd=6;
- while(1)
- {
- if(flag)
- {
- key_jian();
- set_temper=(d[0]*100+d[1]*10+d[2])*10+d[3];
- }
- else
- {
- tp=UpDataDS18B20();
- display();
- temper=tp*10+tp2;
- }
- }
- }
- unsigned int pid_com(void)
- {
- unsigned int n;
- a=(set_temper-temper)*100;
- Ep=kp*(a-b);
- Ed=kd*(a-2*b+c);
- n=Ep+ki*a+Ed;
- c=b;
- b=a;
- return n;
- }
- //PWM????????
- void compare_temper(void)
- {
- if(set_temper>temper)
- {
- beep=1;
- if(set_temper-temper>20)
- {
- high_time=100;
- low_time=0;
- }
- else
- {
- rout=pid_com();
- high_time=(unsigned char)(rout/80);
- if(high_time>=100)
- {
- high_time=100;
- }
- low_time=100-high_time;
- }
- }
- else if(set_temper<=temper)
- {
- if(temper-set_temper>0)
- {
- high_time=0;
- low_time=100;
- beep=0;
- }
- else
- {
- rout=pid_com();
- high_time=(unsigned char)(rout/100);
- if(high_time>=100)
- {
- high_time=0;
- }
- low_time=100-high_time;
- }
- }
- }
- void int0 ()
- interrupt 0
- {
- flag=~flag;
- }
- //?????T0?ж??????
- void timer_t0()
- interrupt 1
- {
- TH0=(65536-30000)/256;
- TL0=(65536-30000)%256;
- count++;
- led0=1;
- if(count>100)
- {
- count=0;
- }
- if(count<high_time)
- {
- P10=0;
- }
- else
- {
- P10=1;
- }
- if(count==0)
- {
- led0=0;
- compare_temper();
- }
- }
- //DS18B20?????,DS18B20????
- #include"ds18b20ce.h"
- #include"delay.h"
- #include<reg52.h>
- #define DQ_HIGH()DQ=1
- #define DQ_LOW() DQ=0
- sbit DQ = P1^1;
- bit DS18B20Init(void)
- {
- bit flag;
- DQ_LOW();
- delay(80);
- DQ_HIGH();
- delay(7);
- if(DQ==0)
- {
- flag=1;
- }
- else
- {
- flag=0;
- }
- delay(20);
- return flag;
- }
- void WriteDS18B20(unsigned char ch)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- if(ch&0x01)
- {
- DQ_LOW();
- delay(1);
- DQ_HIGH();
- delay(5);
- }
- else
- {
- DQ_LOW();
- delay(7);
- DQ_HIGH();
- }
- ch>>=1;
- }
- }
- unsigned char ReadDS18B20(void)
- {
- unsigned char i,ReValue;
- for(i=0;i<8;i++)
- {
- DQ_LOW();
- delay(0);
- DQ_HIGH();
- ReValue>>=1;
- if(DQ==1)
- {
- ReValue|=0x80;
- }
- else
- {
- ReValue&=0x7f;
- }
- delay(2);
- }
- return ReValue;
- }
- unsigned char UpDataDS18B20(void)
- {
- unsigned char Temp_H,Temp_L;
- DS18B20Init();
- WriteDS18B20(0xcc);
- WriteDS18B20(0x44);
- delay(800);
- DS18B20Init();
- WriteDS18B20(0xcc);
- WriteDS18B20(0xbe);
- Temp_L=ReadDS18B20();
- Temp_H=ReadDS18B20();
- tp2=Temp_L&0x0f;
- tp2=tp2*6.25/10;
- Temp_L>>=4;
- Temp_H<<=4;
- Temp_L|=Temp_H;
- return Temp_L;
- }
- //??????????????????????????
- #include"jipan.h"
- #include"delay.h"
- #include"ds18b20ce.h"
- #include<reg52.h>
- unsigned char tp2;
- unsigned int tp;
- sbit k1=P3^0;//?????
- sbit k2=P3^1;//?????
- sbit k3=P3^2;//??????????
- unsigned char num1,num2,n=0;
- unsigned char b[4]={0,5,0,0};
- unsigned char code smg_du1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- unsigned char code smg_du2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
- unsigned char code smg_we[]={0x01,0x02,0x04,0x08};
- void key_jian()
- {
- unsigned char i;
- if((k1==1)&&(k2==1))
- {
- for(i=0;i<4;i++)
- {
- P2=smg_we[i];
- n=b[i];
- if(i==2)
- {
- P0=smg_du2[n];
- }
- else
- {
- P0=smg_du1[n];
- }
- delay_50us(15);
- }
- }
- if(k1==0)
- {
- delay_50us(200);
- if(k1==0)
- {
- num1++;
- if(num1==10)num1=0;
- while(!k1);
- }
- delay_50us(200);
- while(!k1);
- }
- else
- {
- P0=smg_du1[num1];
- switch(num2)
- {
- case 0:b[0]=num1;
- break;
- case 1:b[1]=num1;
- break;
- case 2:b[2]=num1;
- break;
- case 3:b[3]=num1;
- break;
- }
- }
- if(k2==0)
- {
- delay_50us(200);
- if(k2==0)
- {
- num2++;
- num1=0;
- if(num2==4)num2=0;
- while(!k2);
- }
- delay_50us(200);
- while(!k2);
- }
- else
- {
- P2=smg_we[num2];
- }
- }
- void display(void)
- {
- if((tp/100)==0)
- {
- P2=0x00;
- }
- else
- {
- P2=smg_we[0];
- P0=smg_du1[tp/100];
- }
- delay_50us(20);
- if((((tp%100)/10)==0)&&((tp/100)==0))
- {
- P2=0x00;
- }else
- {
- P2=smg_we[1];
- P0=smg_du1[(tp%100)/10];
- }
- delay_50us(20);
- P2=smg_we[2];
- P0=smg_du2[tp%100%10];
- delay_50us(20);
- P2=smg_we[3];
- P0=smg_du1[tp2];
- delay_50us(20);
- }
- //???????????????
- #include"delay.h"
- void delay_50us(uint?t)
- {
- unsigned char j;
- for(;t>0;t--)
- for(j=19;j>0;j--);
- }
- void delay(uint us)
- {
- while(us--);
- }
复制代码
|
-
-
仿真图.7z
22.99 KB, 下载次数: 5, 下载积分: 黑币 -5
proteus文件
|