OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5830|回复: 4

这三个头文件什么作用

[复制链接]

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
发表于 2013-4-22 13:02:25 | 显示全部楼层 |阅读模式

#include<intrins.h>????
#include <string.h>????
#include<stdlib.h>???
#include "STC89C52.H"   ,还有他在定义#include "STC89C52.H"时  这句话是什么意思  #ifndef _STC12C5A60S2_H  #define _STC12C5A60S2_H
#define uchar unsigned char
#define uint unsigned int
#include "LCD1602.h"

sbit LED1 = P2^2;
sbit LED2 = P2^3;

 


#define TRY_TIME 20    //定义 尝试次数
unsigned char xdata con[]={"CONNECT.FAIL"};
unsigned char xdata sim[]={"SIM.FAIL"};
unsigned char  xdata sta[]={"START.FAIL"};
unsigned char  xdata mes[]={"MESSAGE.FAIL"};
unsigned char  xdata one[]={"ONE"};
unsigned char xdata two[]={"TWO"};
unsigned char xdata thr[]={"THREE"};
unsigned char  xdata fou[]={"FOUR"};
unsigned char  net[]    = {"*WWW.SINOVE.COM*"};
unsigned char xdata dat[56]; //串口接收数据数组
unsigned char new[2];  //存放短信数目
unsigned char flag = 0;
unsigned char n = 0;
unsigned char ring = 0;
unsigned char sm = 0;

/*******************************************************************
*功能描述:51单片机ms延时函数
*参数描述:Z的值决定了延时长短
*返回说明:无
*完成时间:2012.12.01
*作    者:上海万硅电子
*******************************************************************/

void delay_1ms(unsigned int z)
{
 unsigned int x;
 unsigned int y;
 for (x=z; x>0; x--)
  for (y=110; y>0; y--);
}


/******************************************************************
*功能描述:将data数组初始化为内部数据都为‘Z’
*参数说明:无
*返回说明:无
*完成时间:2012.04.01
*作    者:龙程电子科技
******************************************************************/

void Data_Init() //data数组初始化
{
 unsigned char i;
 for (i=0; i<55; i++)
 {
  dat = 'Z';
 }
}

/*******************************************************************
*功能描述:51单片机的串口初始化
*参数说明:无
*返回说明:无
*完成时间:2012.12.1
*作    者:万硅电子
*注      :在串口的操作中,初始化是非常重要的!
*******************************************************************/

void Uart_Init()
{
 SCON = 0X50;  //UART方式1;8位UART
 REN  = 1;     //允许串行口接收数据
 CON = 0x00;  //SMOD=0;波特率不加倍
 TMOD = 0x20;  //T1方式2,用于产生波特率
 TH1  = 0xFD;  //装初值
 TL1  = 0xFD;
 TR1  = 1;     //启动定时器1
 EA   = 1;     //打开全局中断控制
 ES   = 1;     //打开串行口中断 
}


/********************************************************************
*功能描述:51单片机的串口发送字节的函数
*参数说明:mydata:要发送的一个字节
*返回说明:无
*完成时间:2012.04.01
*作    者:上海万硅电子
********************************************************************/

void Uart_Send_Byte(unsigned char mydata)
{
 ES = 0;  //关串口中断
 TI = 0;  //发送中断标志清零
 SBUF = mydata;
 while (!TI);
 TI = 0;
 ES = 1;  //开串口中断
}


/*******************************************************************
*功能描述:51单片机串口发送字符串
*参数说明:s:指向字符串的指针
*返回说明:无
*完成时间:2012.04.01
*作    者:上海万硅电子
*******************************************************************/
void Uart_Send_Str(char *s)
{
 int len = strlen(s);
 int i;
 for (i=0; i<len; i++)
 {
  Uart_Send_Byte(s);
 }
}


/******************************************************************
*功能描述:51单片机的串口中断处理函数
*参数说明:无
*返回说明:无
*完成时间:2012.04.01
*作    者:上海万硅电子
******************************************************************/


void Serve() interrupt 4 using 3 //串口中断函数
{
 if((SBUF>=65 && SBUF<=90)||(SBUF>=48 && SBUF<=59)) //只存储‘A-Z’大写字母和‘0-9’数字和”:;“
 {
  dat[n] = SBUF;
  n++;
  if(n>2)
  {
   if ((dat[n-1]=='G') && (dat[n-2]=='N'))  // 判断是否为来电 "RING"
   {
    ring = 1;      
   }
   if ((dat[n-1]=='O') && (dat[n-2]=='N'))  // 判断是否为挂断(NO CARRIER)
   {
    delay_1ms(1000);
    Data_Init();                         //数据数组初始化
    n = 0;
   }
   if ((dat[n-1]=='E') && (dat[n-2]=='I'))  // 判断是否为挂断(NO CARRIER)
   {
    delay_1ms(1000);
    Data_Init();                         //数据数组初始化
    n = 0;
   }

   if ((dat[n-1]=='T') && (dat[n-2]=='M'))  // 判断是否为短信 "+CMTI: "SM",n"
   {
    sm = 1;          
   }
   if ((dat[n-1]=='M') && (dat[n-2]=='S'))  // 判断是否为短信 "+CMTI: "SM",n"
   {
    sm = 1;          
   }
   if (sm == 1)
   {
    if ((dat[n-1]<=59) && (dat[n-1]>=48))
    {
     new[0] = dat[n-1];           //记录短信条数
    }
   }
   if ((dat[n-1]=='R') && (dat[n-2]=='E'))  // 判断是否为ERROR
   {
    delay_1ms(1000);
    Data_Init();                         //数据数组初始化
    n = 0;
   }
   if ((dat[n-1]=='R') && (dat[n-2]=='O'))  // 判断是否为ERROR
   {
    delay_1ms(1000);
    Data_Init();                         //数据数组初始化
    n = 0;
   }
  }
  
 } 
 RI = 0;
}


/************************* 主函数 ***************************/


void main()
{
 unsigned char time;
 LCDInit();
 Uart_Init();
 Data_Init();
 DisplayString(0, 1, net);    //显示www.sinove.com
 /***** 判断是否连接
 ****** 通过发送“AT”返回“ATOK”判断模块与单片机的连接****/

 time=0;
 do
 {
  Uart_Send_Str("AT\r");
  time++;
  delay_1ms(1000);
  if (time==TRY_TIME)
  {
    DisplayString(0, 0, con);
  }

  if ((dat[0] == 'A') && (dat[1] == 'T'))  //检测GSM模块返回值中的关键字
  {
   flag = 1;
  //  DisplayString(0, 0, net);
  }
  else
  {
   flag = 0;
  }

  Data_Init();  //数据数组初始化
  n = 0;    //数据数组标号清零,以便再次从头写入数据
 }
 while(flag == 0); //一直发送AT(+回车),直到返回ATOK

   /* 此时单片机与模块连接成功 */
 flag = 0; //标志清零
 time = 0; //次数清零

   /** 判断是否注册
   *** 通过查询本地短信中心号码来判断是否注册;
   **  发送"AT+CSCA?\r",返回“AT+CSCA? +CSCA: "+8613800210500",145 OK”**/

 do
 {
  Uart_Send_Str("AT+CSCA?\r");
  time++;
  delay_1ms(1000);
  if (time==TRY_TIME)
  {
   DisplayString(0, 0, sim); // 超过尝试次数
  }
  if ((dat[6] == 'C') && (dat[7] == 'S'))  //检测GSM模块返回值中的关键字
  {           //验证是否返回本地短信中心号码
   flag = 1;       
  }
  else
  {
   flag = 0;
  }
  Data_Init();  //数据数组初始化

  n = 0; //数据数组标号清零,以便再次从头写入数据
 }
 while(flag == 0); //一直发“AT+CSCA?\r",直到返回本地短信中心号码
  
  /* 此时可以确认 已经SIM卡网络注册成功*/
 flag = 0;  //标志清零
 time = 0;  //次数清零

 /*********** 短信初始化 *****************************************************
 ************ AT+CNMI=1,1,2;\r 为设置来短信提醒,有短信会返回 “+CMTI: "SM",n”
 ************ 发送“AT+CNMI=1,1,2;\r”,模块返回“AT+CNMI=1,1,2;OK”*************/

 do
 {
  Uart_Send_Str("AT+CNMI=1,1,2;\r");   //短信初始化
  time++;
  delay_1ms(1000);
  if (time==TRY_TIME)
  {
   DisplayString(0, 0, sta); // 超过尝试次数,
  }
  if ((dat[2] == 'C') && (dat[3] == 'N'))  //查询返回值的关键字 验证是否返回本地短信中心号码
  {
   flag = 1;
  }
  else
  {
   flag = 0;
  }
  Data_Init();  //数据数组初始化

  n = 0;    //数据数组标号清零,以便再次从头写入数据
 }
 while(flag == 0); //一直发"AT+CNMI=1,1,2;\r",直到返回有效信息
  
   /* 此时可以确认 短信初始化完成 */
 flag = 0;  //标志清零
 time = 0;  //次数清零

 /**************** 短信模式初始化
 ***************** AT+CMGF=1\r 为 TEXT 模式
 ***************** 发送“AT+CMGF=1\r” 返回“AT+CMGF=1 OK” *******************/
 do
 {
  Uart_Send_Str("AT+CMGF=1\r");   //短信初始化 为TEXT模式
  time++;
  delay_1ms(1000);
  if (time==TRY_TIME)
  {
   DisplayString(0, 0, mes); // 超过尝试次数,
  }
  if ((dat[4] == 'G') && (dat[5] == 'F'))  //查询返回值的关键字 验证是否返回正确信息
  {
   flag = 1;
  }
  else
  {
   flag = 0;
  }
  Data_Init();  //数据数组初始化

  n = 0;    //数据数组标号清零,以便再次从头写入数据
 }
 while(flag == 0); //一直发,直到返回正确信号

    /* 此时,短信模式选择完成  */
 flag = 0; //标志清零
 time = 0; //次数清零

           
  /*********************至此,GSM 初始化工作完成 ************************/

 delay_1ms(1000);
 Data_Init();  //数据数组初始化


   /****条件总为1,死循环  处理短信和来电(来电自动接听) ******/

   while(1) 
   {
  /************ 不断检测是否有新短信和新来电 *************/

  do
  {
   if (ring == 1)
   {
    Uart_Send_Str("ATA\r"); // 来电自动应答
    ring = 0;
    delay_1ms(200);
    Data_Init();  //数据数组初始化
   }

   delay_1ms(1000);
      
   if (sm == 1)  //验证是否有短信
   {
    
    delay_1ms(500);
    sm = 0;
    flag = 1;   
   }
   else
   {
    flag = 0;
   }
     
  }
  while(flag==0);   //一直检测,直到有短信时跳出
   
  delay_1ms(1000);

  /***********如果有新短信,进行解读**************/
 
  if (flag == 1)
  {
   /**** 发送 读短信命令"AT+CMGR=n\r" *******/

   Uart_Send_Str("AT+CMGR=");
   Uart_Send_Byte(new[0]);
   Data_Init(); //发送读取短信命令前,将数组清空
   n = 0;
   Uart_Send_Str("\r");
  
   delay_1ms(4000);  //适当延时   

   /*GSM模块返回内容为: */
   /*
   AT+CMGR=n
   +CMGR: "REC UNREAD","+8615921004272",,"12/04/01,14:00:47+32"
   O1
   OK 
   */
   /** O1 为短信内容


   /******** 下面为命令解析并执行 *********/

   if (dat[50] == 'O')   //Open
   {
    if (dat[51] == '1')
    {
     DisplayString(0, 0, one);//1602显示one
    }
    if (dat[51] == '2')
    {
     DisplayString(0, 0, two);//1602显示two
    }
    if (dat[51] == '3')
    {
     DisplayString(0, 0, thr);//1602显示three
    }
    if (dat[51] == '4')
    {
     DisplayString(0, 0, fou);//1602显示four
    }
   }

   if (dat[50] == 'C')   //Close
   {
    if (dat[51] == '1')
    {
     LED1  = 0;//P1^2输出低电平,关灯

    }
    if (dat[51] == '2')
    {
     LED1  = 1;//P1^2输出高电平,开灯
    }
    if (dat[51] == '3')
    {
     LED2 = 0;//P1^3输出低电平,关灯
    }
    if (dat[51] == '4')
    {
     LED2 = 1;//P1^3输出高电平,开灯
    }
   }
   
     /****** 删除当前短信 *******/

   Uart_Send_Str("AT+CMGD=");
   Uart_Send_Byte(new[0]);
   Uart_Send_Str("\r");
   
   delay_1ms(4000);

   /****** 数据初始化 ********/
   Data_Init();
   n = 0;
   flag = 0;
   
  }
    }  
  
}

   

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-22 14:03:31 | 显示全部楼层
回复 支持 反对

使用道具 举报

22

主题

2254

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4486
金钱
4486
注册时间
2013-4-22
在线时间
337 小时
发表于 2013-4-22 16:09:06 | 显示全部楼层
那几个都是库文件
回复 支持 反对

使用道具 举报

79

主题

233

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2012-10-21
在线时间
45 小时
 楼主| 发表于 2013-4-22 17:59:48 | 显示全部楼层
回复【3楼】三叶草:
---------------------------------我的意思是 它调用后总得用它吧  我在看程序时也没看出了他用哪个函数可 我就知道int len = strlen(s);必须声明它#include <string.h>  ,但是那两个库文件也没有用呀
回复 支持 反对

使用道具 举报

22

主题

2254

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4486
金钱
4486
注册时间
2013-4-22
在线时间
337 小时
发表于 2013-4-23 12:48:49 | 显示全部楼层
回复【4楼】神祗:
---------------------------------
注释掉,你再编译一下,看有没有报错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-21 02:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表