新闻中心

EEPW首页>嵌入式系统>设计应用> 基于GSM模块的大棚环境参数传输与控制

基于GSM模块的大棚环境参数传输与控制

作者: 时间:2016-11-29 来源:网络 收藏
void send_16_Hex(uchar c) //发送16进制函数{ES=0; //关串口中断SBUF=c;while(TI!=1); //等待发送完成TI=0; //清除发送中断标志位ES=1; //开串口中断}bit panduan(uchar *a,uchar *b) //判断是否成功返回值函数{ if(strstr(a,b)!=NULL) //如果a包含了b,则1;否则0return 1;elsereturn 0;}void Tiqu_num() //提取来电号码函数函数{uchar i;for(i=0;i<11;i++) {num[i]=Huancun[i+36];}}void GSM_Text_Message(uchar *num,uchar *Huifu) //Text模式短信发送{send_ASCII("AT"); //发送联机命令send_16_Hex(0x0d); //发送回车符send_16_Hex(0x0a); //发送换行符 delay_GSM(200); send_ASCII("AT+CMGF=1"); //发送TXET命令send_16_Hex(0x0d); //发送回车符send_16_Hex(0x0a); //发送换行符 delay_GSM(200); send_ASCII("AT+CSCS=GSM"); send_16_Hex(0x0d); //发送回车符send_16_Hex(0x0a); //发送换行符 delay_GSM(200); send_ASCII("AT+CSMP=17,167,0,0"); send_16_Hex(0x0d); //发送回车符send_16_Hex(0x0a); //发送换行符 delay_GSM(200); send_ASCII("AT+CMGS="); //接收短信手机号send_ASCII(num);send_16_Hex(0x0d); //发送回车符send_16_Hex(0x0a); //发送换行符 delay_GSM(200); send_ASCII(Huifu); //发送发送成功命令send_ASCII("x1a"); //16进制结束标志 delay_GSM(200); } void GSM_Call(uchar *num) //拨打电话函数{send_ASCII("ATD");send_ASCII(num);send_ASCII("F;");send_16_Hex(0x0d); //发送回车符send_16_Hex(0x0a);delay_GSM(200);}/****************************18b20函数*****************************/void init_18b20(){uchar a; DQ_wen=1; //DQ复位 delay_18b20(8); //稍做延时 DQ_wen=0; //单片机将DQ拉低 delay_18b20(80); //精确延时大于480us DQ_wen=1; //拉高总线 delay_18b20(14); //延时a=DQ_wen; //稍做延时后 如果a=0则初始化成功 a=1则初始化失败 delay_18b20(100);}void write_18b20_dat(uchar dat) //18b20写入字符函数{uchar i;for(i=0;i<8;i++){DQ_wen=0;DQ_wen=dat&0x01;delay_18b20(5);DQ_wen=1;dat>>=1;}}uchar read_18b20_dat() //18b20读出字符函数{uchar i,dat=0;DQ_wen=1;for(i=0;i<8;i++){DQ_wen=0;_nop_();_nop_();dat>>=1;DQ_wen=1;_nop_();_nop_();if(DQ_wen)dat|=0x80;delay_18b20(30);DQ_wen=1;}return dat;}uchar read_18b20_temp_zs() //18b20温度整数读取函数{uchar a,b,c;init_18b20();write_18b20_dat(0xcc);write_18b20_dat(0x44);init_18b20();write_18b20_dat(0xcc);write_18b20_dat(0xbe);a=read_18b20_dat();b=read_18b20_dat();c=a&0x0f;b<<=4;b+=(a&0xf0)>>4;return b;}uchar read_18b20_temp_xs() //18b20温度小数读取函数{uchar a,b,c;init_18b20();write_18b20_dat(0xcc);write_18b20_dat(0x44);init_18b20();write_18b20_dat(0xcc);write_18b20_dat(0xbe);a=read_18b20_dat();b=read_18b20_dat();c=a&0x0f;b<<=4;b+=(a&0xf0)>>4;return c;}/****************************dht11函数*****************************/void dht11_init(void) //dht11初始化复位函数{uchar i;for(i=0;i<8;i++) {flag=2; while((!DQ_shi)&&flag++);delay_dht11_D(2);tm=0;if(DQ_shi)tm=1;flag=2;while((DQ_shi)&&flag++); if(flag==1)break; dat<<=1;dat|=tm; } }uchar read_dht11(void) //dht11读取湿度函数{uchar wet_L,temp_L,temp_H,wet_H,JY;DQ_shi=0;delay_dht11_C(180);DQ_shi=1;delay_dht11_D(4); DQ_shi=1; if(!DQ_shi) {flag=2; while((!DQ_shi)&&flag++);flag=2;while((DQ_shi)&&flag++); dht11_init();wet_H=dat;dht11_init();wet_L=dat;dht11_init();temp_H=dat;dht11_init();temp_L=dat;dht11_init();JY=dat;DQ_shi=1;tm=(temp_H+temp_L+wet_H+wet_L);if(tm==JY){temp=temp_H;wet=wet_H;}}return wet;}void chuli_wen_wet_light() //采集数据处理函数{uchar temp_zs,temp_xs,wet_zs;temp_zs=read_18b20_temp_zs(); //读取18b20温度整数temp_xs=read_18b20_temp_xs(); //读取18b20温度小数wet_zs=read_dht11(); //dht11湿度整数Huifu_wsg[6]=temp_zs%10+0; //数据转化为字符存入字符数组Huifu_wsg[5]=temp_zs/10+0;Huifu_wsg[9]=temp_xs%10+0;Huifu_wsg[8]=temp_xs/10+0;Huifu_wsg[17]=wet_zs%10+0; Huifu_wsg[16]=wet_zs/10+0;}void timer4() interrupt 4 using 1{ ES=0; //关串口中断,防止中断嵌套if(TI) //如果是发送中断,则不做任何处理TI=0; //清除发送中断标志位if(RI) //如果是接送中断,则进行处理{RI=0; //清除接收中断标志位Huancun[i]=SBUF; //将接收到的字符串存到缓存中i++; //缓存指针向后移动if(i>200) //如果缓存满,将缓存指针指向缓存的首地址i=0;}ES = 1; //开启串口中断}
上一页 1 2 下一页

评论


技术专区

关闭