#include<reg52.h>
#include"DS18B20.h"
#include"LCD1602.h"
#include"key.h"
#include"serial.h"
#include"GSM.h"
#include"PID.h"
bit flag_30s;
unsigned char counter_100,counter_6;
sbit SSR =P1^3;
sbit LED_wait=P1^7;
unsigned char tmp_set;
unsigned char idata tmp_now_ASC[10]={0X20,'1','5','.','5',0X20,0Xdf,'C',0x20,'\0'};
unsigned char idata tmp_set_ASC[10]={0X20,'2','0','.','0',0X20,0Xdf,'C',0x20,'\0'};
bit get_str;
bit disp_sta;
bit system_sta;
bit term_on;
unsigned char tmp_now; //
//unsigned char flag; //
void set_T0()
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void T0_init()
{
IT0=1;
EX0=1;
TMOD=0x01;
set_T0();
EA=1;
ET0=1;
TR0=1;
}
void display(void)
{
if(disp_sta)
{
LCD_disp_ListChar(0,0,"set_T:");
LCD_disp_ListChar(7,0,tmp_set_ASC);
LCD_disp_ListChar(0,1,"cur_T:");
LCD_disp_ListChar(7,1,"tmp_now_ASC");
}
}
void tmp_now2ASC(void)
{
tmp_now_ASC[0]=tmp_now[0];
if(tmp_now[1]/10)
tmp_now_ASC[1]=tmp_now[1]/10+0x30;
else
tmp_now_ASC[1]=0x20;
tmp_now_ASC[2]=tmp_now[1]%10+0x30;
tmp_now_ASC[4]=tmp_now[2]+0x30;
}
//void LCD_disp_ListChar()
main()
{
counter_100=0;
counter_6=0;
flag_30s=0;
SSR=0;
disp_sta=1;
system_sta=1;
LED_wait=1;
term_on=0;
tmp_set=20;
get_str=0;
T0_init();
T1_init();
LCD_init();
serial_T2_init();
GSM_init();
PIDInit(&spid);
spid.Proportion=10;
spid.Integral=8;
spid.Derivative=6;
spid.SetPoint=100;
while(1)
{
LED_wait=system_sta;
if(get_str)
{
get_str=0;
str_dispose();
}
if(systen_sta)
{
if(flag_30s)
{
unsigned char TH=110,TL=-20;
flag_30s=0;
EA=0;
ReadTemperature(TH,TL,0x3f);
EA=1;
tmp_now2ASC();
display();
compare_temper();
}
}
else
{
SSR=0;
clean_disp();
}
}
}
void timer0_int(void) interrupt 1 using 1
{
set_T0();
if(count_100++<high_time)
SSR=1;
else
SSR=0;
if(counter_100>99)
{
courter_100=0;
counter_6++;
if(counter_6>5)
{
counter_6=0;
flag_30s=1;
}
}
}
sbit DQ=p1^2;
unsigned char idata tmp_now[3];
extern unsigned nt rin;
void delay_18B20(unsigned inti)
{
while(i--);
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ=1;
delay_18B20(8);
DQ=0;
delay_18B20(80);
DQ=1;
delay_18B20(14);
x=DQ;
delay_18B20(20);
}
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat=0;
for(i=8;i>0;i--)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
void WriterOneChar(unsigned char dat)
{
unsigned char i=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay_18B20(5);
DQ=1;
dat>>=1;
}
}
void ReadTemperature(char TH,char TL,unsigned char RS)
{
unsigned char TMPH,TMPL,temp;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x4E);
WriteOneChar(TH);
WriteOneChar(TL);
WriteOneChar(RS);
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
delay_18B20(80);
TMPL=ReadOneChar();
TMPH=ReadOneChar();
if(TMPH>0x0f)
{
tmp_now[0]='-';
TMPH=~TMPH;
TMPL=~TMPL;
if(TMPL==255)
{
TMPL=0;
TMPH++;
}
else TMPL++;
}
else tmp_now[0]=0x20;
temp=(TMPH<<4)|(TMPL>>4);
tmp_now[1]=temp;
temp=(TMPL&0x0c)>>2;
tmp_now[2]=temp*10/4;
rin=temp*100;
}
#define uchar unsigned char
#define uint unsigned int
#define LCD_DB P0
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_E=P2^2;
void delay_n40us(uint n)
{
uint i;
uchar j;
for(i=n;i>0;i--)
for(j=0;j<2;j++)
}
void LCD_write_command(uchar dat)
{
LCD_DB=dat;
LCD_RS=0;
LCD_RW=0;
LCD_E=1;
LCD_E=0;
delay_n40us(1);
}
void LCD_write_data(uchar dat)
{
LCD_DB=dat;
LCD_RS=1;
LCD_RW=0;
LCD_E=1;
LCD_E=0;
delay_n40us(1);
}
void LCD_disp_char(uchar x,uchar y,uchar dat)
{
if(y==0) x|=0x80;
else x|=0xC0;
LCD_write_command(x);
LCD_write_data(dat);
}
void LCD_disp_ListChar(uchar x,uchar y,uchar *p)
{
while(*p!='\0')
{
if(0==y) x|=0x80;
else x|=0xC0;
LCD_write_command(x);
LCD_write_data(*p);
x++;
p++;
}
}
void LCD_init(void)
{
LCD_write_command(0x38);
LCD_write_command(0x0c);
LCD_write_command(0x06);
LCD_write_command(0x01);
delay_n40us(100);
}
void clean_disp()
{
LCD_write_command(0x01);
delay_n40us(100);
}
sbit key_sta=P2^4;
sbit key_up=P2^5;
shit key_down=P2^6;
extern bit disp_sta;
extern bit system_sta;
extern unsigned char tmp_set;
extern unsigned char idata tmp_set_ASC[10];
void delay_ms(unsigned char ms)
{
unsigned char t;
while(--ms)
for(t=0;t<114;t++)
}
void tmp_set2ASC()
{
if(tmp_set/10)
tmp_setASC[1]=tmp_set/10+0x30;
else
tmp_set_ASC[1]=0x20;
tmp_set_ASC[2]tmp_set%10+0x30;
}
void key_int(void) interrupt 0 using 2
{
EA=0;
delay_ms(15);
if(key_sta&key_up&key_down) return;
if(!key_sta)
{
clean_disp();
if(system_sta&(!disp_sta))
disp_sta=!disp_sta;
else
system_sta=!system_sta;
}
else if(!key_up)
{
if(tmp_set<22)
tmp_set++;
tmp_set2ASC();
}
else
{
if(tmp_set>16)
tmp_set--;
tmp_set2ASC();
}
EA=1;
}
extern unsigned char idata str[] ;
extern bit get_str;
unsigned char str_count=0;
void serial_T2_init()
{
T2CON=0x30;
SCON=0x40;
RCAP2H=0xff;RCAP2L=0xdc;
TH2=0xff;TL2=0xdc;
ES=1;
EA=1;
REN=1;
TR2=1;
}
void set_T1()
{
TH1=0x00;
TL1=0x00;
}
void T1_init()
{
TMOD=0x11;
set_T1();
ET1=1;
TR1=0;
}
void send_str(unsigned char *p)
{
ES=0;
while(*p!='\0')
{
SBUF=*p++;
while(!TI);
TI=0;
}
ES=1;
}
void serial_int(void) interrupt 4 using 2
{
RI=0;
str[str_count++]=SBUF;
set_T1();
TR1=1;
}
void T1_int(void) interrupt 3 using 3
{
TR1=0;
str[str_count]='\0';
str_count=0;
get_str=1;
}
#include<string.h>
#define AT 0
#define ATE 1
#define CMGF 2
#define CPMS 3
#define CNMI 4
sbit term_on=P1^4;
extern bit system_sta;
extern bit disp_sta;
extern unsigned char tmp_set;
extern unsigned char idata tmp_set_ASC[10];
unsigned char idata sta[70];
unsigned char idata phone_number[12];
void send_AT_command(unsigned char AT_command)
{
ES=0;
switch(AT_command)
{
case AT: send_sta("AT\r");
delay_ms(100);
break;
case ATE: send_str("ATE1\r");
delay_ms(100);
break;
case CMGF: send_str("AT+CMGF=1\r");
delay_ms(100);
break;
case CPMS: send_str("AT+CPMS=\"SM\",\"SM\",\"SM\"\r");
delay_ms(100);
break;
case CNMI: send_str(AT+CNMI="1,2,0,0,0\r");
delay_ms(100);
break;
default: break;
}
ES=1;
}
void send_SM(unsigned char *numb,unsigned char *SM_str)
{
send_str("AT+CMGS=\"");
seng_str(numb);
send_str("\"r");
delay_ms(100);
send_str(SM_str);
SBUF=0x1A;
delay_ms(100);
}
void str_dispose(void)
{
unsigned char *p_str;
unsigned char i;
p_str=strstr(str,"+CMT:");
if(p_str)
{
disp_sta=0;
clean_disp();
LCD_disp_ListChar(0,0,"SMS:");
p_str+=10;
for(i=0;i<11;i++)
{
phone_number[i]=*p_str++;
LCD_disp_char(i+5,0,phone_number[i]);
}
phone_number[i]='\0';
p_str+=27;
i=0;
while(*p_str!='\r')}LCD_disp_char(i++,1,*p_str++);
p_str=strstr(str,"on");
if(p_str)
{
system_sta=1;
p_str+=2;
tmp_set_ASC[1]=*p_str;tmp_set_ASC[1]=*p_str++;
tmp_set_ASC[2]=*p_str;tmp_set_ASC[2]=*p_str++;
tmp_set=(tmp_set_ASC[1]-0x30)*10+(tmp_set_ASC[2]-0x30);
// send_SM_(phone_number,"zdf");
}
if(strstr(str,"off")) system_sta=0;
}
void GSM_init(void)
{
term_on=1;
delay_ms(100);
term_on=0;
send_AT_command(AT);
seng_AT_command(ATE);
send_AT_command(CMGF);
send_AT_command(CPMS);
send_AT_command(CNMI);
}
#include<string.h>
struct PID {
unsigned int SetPoint;
unsigned int Proportion;
unsigned int Integral;
unsigned int Derivative;
unsigned int LastError;
unsigned int PrevError;
unsigned int SumErrors
};
struct PID spid;
unsigned ine rout;
unsigned int rin;
unsigned char high_time,low_time,count=0;
extern unsigned char tmp_set;
Initialize PID structure
void PIDInit(struct PID *pp)
{
memset(pp,0,sizeof(struct PID));
}
unsigned int PIDCalc(struct PID *pp,unsigned int NexPoint)
{
unsigned int dError,Error;
Error=pp->SetPoint-NexPoint;
pp->SumError+=Error;
dError=pp->LastError-pp->PrevError;
pp->PrevError=pp->LastError;
pp->LastError=Error;
return(pp->Proportion*Error
+pp->Integral*pp->SumError
+pp->Derivative*dError);
}
compare_temper()
{
unsigned char i;
if(tmp_now[0]=='-') high_time=100;
else
{
if(tmp_now[1]<tmp_set)
{
if(tmp_set-tmp_now[1]>1)
{
high_time=100;
low_time=0;
}
else
{
for(i=0;i<10;i++)
{
ReadTemperature(110,-20,0x3f);
rout=PIDCalc(&spid,rin);
}
if(high_time<=100)
high_time=(unsigned char)(rout/800);
else
high_time=100;
low_time=(100-high_time);
}
}
else
{
high_time=0;
low_time=100;
}
}
}
compiling 123.c...
123.c(2): warning C318: can't open file 'DS18B20.h'
123.c(3): warning C318: can't open file 'LCD1602.h'
123.c(4): warning C318: can't open file 'key.h'
123.c(5): warning C318: can't open file 'serial.h'
123.c(6): warning C318: can't open file 'GSM.h'
123.c(7): warning C318: can't open file 'PID.h'
123.C(42): warning C206: 'LCD_disp_ListChar': missing function-prototype
123.C(42): error C267: 'LCD_disp_ListChar': requires ANSI-style prototype
123.c - 1 Error(s), 7 Warning(s).
求各位大神幫忙看一下,急用,在這我先謝謝了?
|