/*8位***陽數碼管,18b20接P3^3,11.0592晶振*/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar th,tl;//存放采集溫度高8位,低8位
uchar temp_int,temp_dot;//存放轉換後的溫度整數部分和小數部分
sbit dq=P3^3; //18b20數據接口
bit stat_18b20; //18b20初始化返回狀態
uchar ctrl_z=0x1a;//GPRS數據發送結束標識ctrl+z鍵16進制碼
uchar ATCLPORT[]="AT+CLPORT=\"TCP\",\"5256\"\r"; //設置本地GPRS通信協議以及端口號
uchar ATCIPSTART[]="AT+CIPSTART=\"TCP\",\"121.233.142.158\",\"6000\"\r"; //連接TCP服務器
uchar ATCIPSEND[]="AT+CIPSEND\r"; //啟動數據發送命令
void uart_init(); //串口初始化
void delayus(uint xus); //延時微秒
void delayms(uint xms); //延時毫秒
init_18b20(); //18b20初始化
readchar(); //讀壹個字節
void writechar(uchar dat); //寫壹個字節
void get_temp(); //取溫度
void temp_convert(); //轉換溫度
void send_string(uchar *gprs_string); //給GPRS模塊發送字符串
void send_char(uchar);
void gprs_init(); //GPRS模塊初始化
void send_temp(); //通過GPRS模塊發送溫度
//--------------下面為主函數----------------
void main(void)
{
uart_init();
gprs_init();
while(1)
{
get_temp();
temp_convert();
send_temp();
}
}
void uart_init()
{
TMOD=0X20;
SCON=0X50;
TH1=0XFD;
TL1=0XFD;
TR1=1;
}
//--------------下面為延時操作函數----------------
void delayus(uint xus)
{
for(;xus>0;xus--);
}
void delayms(uint xms)
{
uint i;
uchar j;
for(i=0;i<xms;i++)
for(j=0;j<112;j++);
}
//--------------下面為DS18B20操作函數----------------
init_18b20()
{
stat_18b20=1;
dq=1;
delayus(5);
dq=0;
delayus(50);
dq=1;
delayus(5);
stat_18b20=dq;
delayus(60);
dq=1;
return(stat_18b20);
writechar(0x4e);
writechar(0x02);
writechar(0x01);
writechar(0x7f);
}
readchar()
{
uchar i,dat;
for(i=8;i>0;i--)
{
dq=0;
dat=dat>>1;
dq=1;
if(dq)
dat=dat|0x80;
delayus(4);
}
return(dat);
}
void writechar(uchar dat)
{
uchar i;
for(i=8;i>0;i--)
{
dq=0;
dq=dat&0x01;
delayus(5);
dq=1;
dat=dat>>1;
}
}
void get_temp()
{
init_18b20();
if(stat_18b20==0)
{
writechar(0xcc);
writechar(0x44);
delayms(50);
init_18b20();
writechar(0xcc);
writechar(0xbe);
tl=readchar();
th=readchar();
}
else
{
; //錯誤處理模塊
}
}
void temp_convert()
{
temp_int=((th&0x07)<<4)|((tl&0xf0)>>4);
temp_dot=tl&0x0f;
}
//--------------下面為SIM300操作函數----------------
void send_string(uchar *gprs_string)//指令字符串發送指令
{
while(*gprs_string)
{
SBUF = *gprs_string;
while(TI==0);
TI=0;
gprs_string++;
}
}
void send_char(uchar x)
{
SBUF=x;
while(TI==0);
TI=0;
}
void gprs_init()
{
send_string(ATCLPORT);
delayms(1000);
send_string(ATCIPSTART);
delayms(1000);
}
void send_temp()
{
send_string(ATCIPSEND);
send_char(temp_int);
send_char(temp_dot);
send_char(ctrl_z);
delayms(1000);
}