嵌入式软件设计第12次实验报告

学号:140201126             姓名:杨鹏飞

组别:第2组                实验地点:D19

一、实验目的:

1.掌握通过GSM短信远程与嵌入式设备进行交互的方法。

二、实验内容:

1.编写程序把嵌入式开发板采集到的温度信息通过GSM短信传送给指定号码。(每10秒发送1次)

2.编写程序,使手机可以通过短信指令的方式控制嵌入式开发板的蜂鸣器和LED灯。(比如手机编辑“BEEP_ON”和“BEEP_OFF”控制嵌入式开发板的蜂鸣器)

三、实验过程描述及结果展示:

#include "sys.h"
#include "delay.h" 
#include "usart.h" 
#include "led.h"
#include "lcd.h"
#include "key.h" 
#include "touch.h" 
#include "text.h"
#include "w25qxx.h" 
#include "malloc.h" 
#include "ff.h" 
#include "exfuns.h" 
#include <string.h>
#include "dht11.h"

const u16 POINT_COLOR_TBL[OTT_MAX_TOUCH]={RED,GREEN,BLUE,BROWN,GRED};

extern u16 USART3_RX_STA; 
extern u8 USART3_RX_BUF[400];

void LCD_Draw_Circle(u16 x0,u16 y0,u8 r);
unsigned char cnt =0;
u8 TimeCnt =0;

unsigned char *SMS = 0;
u8 SMS_string[10]={"AT+CMGR="};

//定时器6中断服务器程序
void TIM6_DAC_IRQHandler(void)
{
if(TIM_GetITStatus(TIM6,TIM_IT_Update)!=RESET)//判断是否是更新中
{
TIM_ClearITPendingBit(TIM6,TIM_IT_Update);//清除TIM6更新中断标志
TimeCnt++;
}
}

int main(void)
{

// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
uart3_init(115200);

LED_Init(); //初始化LED 
KEY_Init();
LCD_Init(); //LCD初始化 
tp_dev.init(); //触摸屏初始化

LCD_Clear(BLACK);
POINT_COLOR=YELLOW;//设置字体为黄色
BACK_COLOR = BLACK;

//以下代码初始化定时器
{
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);

//定时器初始化
TIM_TimeBaseStructure.TIM_Period = 1000-1;
TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStructure);

TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);//使能指定的TIM6中断,允许更新中断

NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化NVIC寄存器
}
TIM_Cmd(TIM6,ENABLE);//启动定时器6

//以下代码初始化温湿度传感器
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOG,&GPIO_InitStructure);

DHT11_Rst();
while(DHT11_Check());
}
//以下代码配置蜂鸣器
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_DOWN;
GPIO_Init(GPIOF,&GPIO_InitStructure);
}
//初始化SIM900A
{
unsigned char temp;
unsigned char send_string0[] = {"AT+CNMI=2,1\x0d\x0a"};
u8 send_string1[] = {"AT+CMGF=1\r\n"};
u8 send_string2[] = {"AT+CSCS=\"GSM\"\r\n"};

for(temp=0;temp<2;temp++)
{
USART_SendData(USART3,'A');
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
USART_SendData(USART3,'T');
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
USART_SendData(USART3,'0x0D');
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
USART_SendData(USART3,'0x0A');
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
}
delay_ms(100);

for(temp=0;temp<13;temp++)//发送AT+CNMI=2,1\x0d\x0a
{
USART_SendData(USART3,send_string0[temp]);
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
}
delay_ms(100);

for(temp=0;temp<11;temp++)//发送AT+CMGF=1\r\n
{
USART_SendData(USART3,send_string1[temp]);
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
}
delay_ms(100);

for(temp=0;temp<15;temp++)//发送AT+CSCS=\"GSM\"\r\n
{
USART_SendData(USART3,send_string2[temp]);
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
}
delay_ms(100);
}
USART3_RX_STA = 0;
while(1)
{
if(TimeCnt>=100)
{
TimeCnt=0;
printf("Time is out!\r\n");
//以下代码把DHT11采集到的当前温度用短信的形式发送到固定号码
{
u8 i;
u8 send_string1[] = {"AT+CMGS=\"13021257803\"\r\n"};
u8 add_ascii[]={"\x1A"};
u8 sms_temperature[]={"current temperature:"};
u8 temper[2];
u8 temperature,humidity;

DHT11_Read_Data(&temperature,&humidity);

temper[0]=(temperature/10)+0x30;
temper[1]=(temperature%10)+0x30;

strcat(sms_temperature,temper);
strcat(sms_temperature,add_ascii);

USART_ClearFlag(USART3,USART_FLAG_TC);

printf("send_string1=%s\r\n",send_string1);

for(i=0;i<23;i++)
{
USART_SendData(USART3,send_string1[i]);
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
}
delay_ms(100);

printf("sms_temperature=%s\r\n",sms_temperature); 
for(i=0;i<23;i++)
{
USART_SendData(USART3,sms_temperature[i]);
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
}
delay_ms(100);
}
}
//以下代码监控是否有驱动BEEP的短信指令
if(USART3_RX_STA & 0x8000)
{
char* p_display;
USART3_RX_BUF[USART3_RX_STA & 0x7FFF]=0;
if(p_display=strstr((const char*)USART3_RX_BUF,(const char*)"+CMTI:"))
{
p_display=p_display+12;
SMS=p_display;
{
u8 i;
u8 send_string[100] = {"AT+CMGR="};
u8 data_r_n[] = {"\r\n\n"};
char *p_display;

USART_ClearFlag(USART3,USART_FLAG_TC);

strcat(send_string,SMS);
strcat(send_string,data_r_n);

for(i=0;i<12;i++)
{
USART_SendData(USART3,send_string[i]);
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
}
}
}
if(p_display=strstr((const char*)USART3_RX_BUF,(const char*)"+32"))
{
if(strstr((const char*)USART3_RX_BUF,(const char*)"BEEP_ON"))
{
GPIO_SetBits(GPIOF,GPIO_Pin_8);
}
if(strstr((const char*)USART3_RX_BUF,(const char*)"BEEP_OFF"))
{
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
}
}
USART3_RX_STA=0;
}
}
}

总结:

  本次实验主要是通过手机短息对开发板的控制,串口向手机发送温湿度的信息,手机向串口回复BEEP_ON的话蜂鸣器响,回复BEEP_OFF的话蜂鸣器不响。

转载于:https://www.cnblogs.com/yangpengfei123/p/6657868.html

嵌入式软件设计第12次实验报告相关推荐

  1. 嵌入式软件设计第12次实验报告-140201235-陈宇

    嵌入式软件设计第12次实验报告 学号:140201235             姓名:陈宇 组别:第3组                实验地点:D19 一.实验目的: 1.掌握通过GSM短信远程与 ...

  2. 嵌入式软件设计第10次实验报告

    嵌入式软件设计第10次实验报告 学号:142021234               姓名:王凯 组别:第4组                实验地点:D19 一.实验目的: 1.了解GSM模块SIM ...

  3. 嵌入式软件设计第11次实验报告

    嵌入式软件设计第11次实验报告 学号:140201101                  姓名:刘子聪 组别:第7组                        实验地点:D19 一.实验目的: ...

  4. 嵌入式软件设计第8次实验报告-140201235-陈宇

    嵌入式软件设计第8次实验报告 学号:140201235                   姓名:陈宇 组别:3                实验地点:D19 一.实验目的: 1.熟悉WWW技术中的 ...

  5. 嵌入式软件设计第7次实验报告-140201235-陈宇

    嵌入式软件设计第7次实验报告 学号:140201235                    姓名:陈宇 组别:3                                  实验地点:D19 ...

  6. 嵌入式软件设计第8次实验报告

    嵌入式软件设计第8次实验报告 学号:140201112                   姓名:孙佳文 组别:3                实验地点:D19 一.实验目的: 1.熟悉WWW技术中 ...

  7. 数据结构最短路径例题_《数据结构课程设计》最短路径问题实验报告

    <<数据结构课程设计>最短路径问题实验报告>由会员分享,可在线阅读,更多相关<<数据结构课程设计>最短路径问题实验报告(17页珍藏版)>请在人人文库网上 ...

  8. c语言程序设计报告表达式求值,数据结构 课程设计表达式求值 实验报告

    <数据结构 课程设计表达式求值 实验报告>由会员分享,可在线阅读,更多相关<数据结构 课程设计表达式求值 实验报告(21页珍藏版)>请在人人文库网上搜索. 1.实验课程名称 级 ...

  9. 计算机辅助电路仿真技术实验报告,多级放大电路的设计与测试仿真实验报告.docx...

    文档介绍: 多级放大电路的设计与测试仿真实验报告实验报告课程名称模拟电子技术实验项目多级放大电路分析仿真系别自动化学院专业班级/学号XX学生姓名实验日期成绩指导老师杨鸿波实验三多级放大电路分析仿真实验 ...

最新文章

  1. 人工智能学习框架TensorFlow必须掌握和了解的数学基础
  2. 生成模型学习笔记:从高斯判别分析到朴素贝叶斯
  3. python dlib学习(三):调用cnn人脸检测
  4. pythonweb开发需要学哪些知识,python web需要了解哪些
  5. [网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
  6. Linux shell:执行shell脚本的几种方式
  7. 领域驱动设计 pdf_什么是领域驱动设计?
  8. springboot导入项目依赖报错_最详细的 Spring Boot 多模块开发与排坑指南
  9. RCE 0day影响数万台QNAP SOHO NAS 设备
  10. java check word lock_Java多线程-新特征-锁(下)
  11. c语言输入字符串_我们一起学C语言(四)
  12. tensorflow之成品模型
  13. 防雷探测器在建筑物中的要求
  14. API函数大全(转载)
  15. wmv怎么转换成视频mp4
  16. python发送qq邮件失败_python发送QQ邮件
  17. kafka消费者理解
  18. android 手机震动功能吗,Android编程实现手机震动功能的方法
  19. 捷达vs7测试_捷达vs7碰撞测试成绩
  20. 阿里,字节,拼多多,B站挨个面试一遍,你们猜哪个待遇最高?

热门文章

  1. input输入框匹配数字(带两位小数) js--金额匹配
  2. springmvc登录拦截器访问报错 SyntaxError: expected expression, got ''
  3. 系统架构师学习笔记-操作系统(二)
  4. QML文档阅读笔记-easing.type解析与实例
  5. WEB安全基础-WEB通信
  6. vue学生作业-图书管理系统
  7. 平行志愿计算机录取顺序,几张图,看懂平行志愿全部录取过程
  8. mac mysql ngram_MySQL ngram
  9. px4 uavcan linux,PX4开发指南-12.2.2.UAVCAN固件升级
  10. js 字符串插入_Vue.js 条件与循环