/********************************************************************
* 文件名 : CSM短消息无线传输的设计.c
* 描述 : 该文件实现了GSM数据监测与温度采集和显示
* 创建人 : CX.2013年4月6日
* 版本号 : 1.0
***********************************************************************/
#include<reg52.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
#define jump_ROM 0xCC
#define start 0x44
#define read_EEROM 0xBE
#define Delay_Time 20 //延时长度
sbit DQ = P2^3; //DS18B20数据口
unsigned char TMPH,TMPL;
uint temperature=0;
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char i = 0; //定义缓存指针
unsigned char Rec_Buf[200]; //定义缓存数组
uchar code num[]={"AT+CMGS=15042436110\n"};
uchar code content1[]={"The current temperature is:"};
uchar code content2[]={"The temperature is out of control!"};
/********************************************************************
* 名称 : delay()
* 功能 : 延时函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay(uint N)
{
int j;
for(j=0; j<N; j++)
;
}
/********************************************************************
* 名称 : Delay_ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Delay_100ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_100ms(uint i)//1ms延时
{
uchar x,j,l;
for(j=0;j<i;j++)
for(x=0;x<=148;x++)
for(l=0;l<100;l++);
}
/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率1200,使能了串口中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void) //11.0592M晶振
{
TMOD = 0x20; //定时器工作在定时器1的方式2
PCON = 0x00; //不倍频
SCON = 0x50; //串口工作在方式1,并且启动串行接收
TH1 = 0xe8; //设置波特率 1200
TL1 = 0xe8;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
}
/********************************************************************
* 名称 : Send_ASCII()
* 功能 : 串口发送字符串
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Send_ASCII(uchar *b)
{
ES = 0; //关串口中断
for (b; *b!='\0';b++)
{
SBUF = *b;
while(TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
}
ES = 1; //开串口中断
}
/********************************************************************
* 名称 : Send_Hex()
* 功能 : 串口发送字符
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Send_Hex(uchar c)
{
ES = 0; //关串口中断
SBUF = c;
while(TI!=1); //等待发送完成
TI = 0; //清除发送中断标志位
ES = 1; //开串口中断
}
/******************************************************************/
/*名称:void CLR_Buf()
/*功能:清除缓存数据
/*输入:无
/*输出:无
/**********************************************************************/
void CLR_Buf(void)
{
unsigned char k;
for(k=0;k<200;k++) //将缓存内容清零
{
Rec_Buf[k] = 0;
}
i = 0; //接收字符串的起始存储位置
}
/*****************判断缓存中是否含有指定的字符串函数******************/
/*名称:bit Hand(unsigned char *a)
/*功能:判断缓存中是否含有指定的字符串
/*输入:unsigned char *a 指定的字符串
/*输出:bit 1---含有 0---不含有
/*******************************************************************/
bit Hand(unsigned char *a)
{
if(strstr(Rec_Buf,a)!=NULL)
return 1;
else
return 0;
}
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Int() interrupt 4
{
ES = 0; //关串口中断,防止中断嵌套
if(TI) //如果是发送中断,则不做任何处理
{
TI = 0; //清除发送中断标志位
}
if(RI) //如果是接送中断,则进行处理
{
RI = 0; //清除接收中断标志位
Rec_Buf[i] = SBUF; //将接收到的字符串存到缓存中
i++; //缓存指针向后移动
if(i>200) //如果缓存满,将缓存指针指向缓存的首地址
{
i = 0;
}
}
ES = 1; //开启串口中断
}
/********************************************************************
* 名称 : Reset()
* 功能 : 复位DS18B20
* 输入 : 无
* 输出 : 无
***********************************************************************/
uchar Reset(void)
{
uchar deceive_ready;
DQ = 0;
delay(29);
DQ = 1;
delay(3);
deceive_ready = DQ;
delay(25);
return(deceive_ready);
}
/********************************************************************
* 名称 : read_bit()
* 功能 : 从DS18B20读一个位值
* 输入 : 无
* 输出 : 从DS18B20读出的一个位值
***********************************************************************/
uchar read_bit(void)
{
uchar i;
DQ = 0;
DQ = 1;
for(i=0; i<3; i++);
return(DQ);
}
/********************************************************************
* 名称 : write_bit()
* 功能 : 向DS18B20写一位
* 输入 : bitval(要对DS18B20写入的位值)
* 输出 : 无
***********************************************************************/
void write_bit(uchar bitval)
{
DQ=0;
if(bitval==1)
DQ=1;
delay(5);
DQ=1;
}
/********************************************************************
* 名称 : read_byte()
* 功能 : 从DS18B20读一个字节
* 输入 : 无
* 输出 : 从DS18B20读到的值
***********************************************************************/
uchar read_byte(void)
{
uchar i,m,receive_data;
m = 1;
receive_data = 0;
for(i=0; i<8; i++)
{
if(read_bit())
{
receive_data = receive_data + (m << i);
}
delay(6);
}
return(receive_data);
}
/********************************************************************
* 名称 : write_byte()
* 功能 : 向DS18B20写一个字节
* 输入 : val(要对DS18B20写入的命令值)
* 输出 : 无
***********************************************************************/
void write_byte(uchar val)
{
uchar i,temp;
for(i=0; i<8; i++)
{
temp = val >> i;
temp = temp & 0x01;
write_bit(temp);
delay(5);
}
}
/********************************************************************
* 名称 : Temp_LCD()
* 功能 : 获得温度并显示在数码管
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Temp_LED()
{
Reset();
write_byte(jump_ROM);
write_byte(start);
Reset();
write_byte(jump_ROM);
write_byte(read_EEROM);
TMPL = read_byte();
TMPH = read_byte();
temperature = TMPL / 16 + TMPH * 16;
P0 = table[temperature/10%10];
P2 = 0x0fbf;
Delay_ms(5);
P0 = table[temperature%10];
P2 = 0x7f;
Delay_ms(5);
}
/********************************************************************
* 名称 : GSM_Init()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void GSM_Init()
{
/* Delay_100ms(Delay_Time); //延时
Send_ASCII("AT+CPMS=\"MT\",\"MT\",\"MT\"");//所有操作都在MT(模块终端)中进行
Send_Hex(0x0d); //发送回车符
Send_Hex(0x0a); //发送换行符
Delay_100ms(Delay_Time); //延时
while(!Hand("OK")); //等待设置成功
CLR_Buf(); //清除缓存内容
Delay_100ms(Delay_Time); //延时
Send_ASCII("AT+CNMI=2,1");//设置当有新短信到来时提示
Send_Hex(0x0d
GSM.rar_C# wavecom
版权申诉
125 浏览量
2022-09-19
20:55:23
上传
评论
收藏 3KB RAR 举报
alvarocfc
- 粉丝: 112
- 资源: 1万+
最新资源
- 编译原理:正规式转NFA(有穷自动机)
- 通过 Navicat 备份文件读取连接信息和解析密码
- Linux下开箱即用的C++单元测试demo示例,public成员函数单元测试
- 连接Redis服务器 在使用Redis之前,首先需要使用redis-cli工具连接到Redis服务器 redis-cli是Re
- 连接Redis服务器 在使用Redis之前,首先需要使用redis-cli工具连接到Redis服务器 redis-cli是Red
- 连接Redis服务器 在使用Redis之前,首先需要使用redis-cli工具连接到Redis服务器 redis-cli是Red
- redis命令实践 详细教程
- redis命令实践 详细教程
- redis命令实践 详细教程
- redis命令实践 详细教程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈