嵌入式系统课程设计汇本(温度检测报警系统)

合集下载

嵌入式系统课程设计温度检测报警系统

嵌入式系统课程设计温度检测报警系统

嵌入式系统课程设计姓名:班级:学号:.目录:一.系统要求二.设计方案三.程序流程图四.软件设计五.课程总结与个人体会.一、系统要求使用STM32F103作为主控CPU设计一个温度综合测控系统,具体要求:1、使用热敏电阻或者内部集成的温度传感器检测环境温度,每0.1秒检测一次温度,对检测到的温度进行数字滤波(可以使用平均法)。

记录当前的温度值和时间。

2、使用计算机,通过串行通信获取STM32F103检测到的温度和所对应的时间。

3、使用计算机进行时间的设定。

4、使用计算机进行温度上限值和下限值的设定。

5、若超过上限值或者低于下限值,则STM32进行报警提示。

.二、设计方案本次课程设计的要求是使用STM32F103设计一个温度测控系统,这款单片机集成了很多的片上资源,功能十分强大,我使用了以下部分来完成课程设计的要求:1、STM32F103内置了3个12位A/D转换模块,最快转换时间为1us。

本次课程设计要求进行温度测定,于是使用了其中一个ADC对片上温度传感器的内部信号源进行转换。

当有多个通道需要采集信号时,可以把ADC配置为按一定的顺序来对各个通道进行扫描转换,本设计只采集一个通道的信号,所以不使用扫描转换模式。

本设计需要循环采集电压值,所以使用连续转换模式。

2、本次课程设计还使用到了DMA。

DMA是一种高速的数据传输操作,允许在外部设备和储存器之间利用系统总线直接读写数据,不需要微处理器干预。

使能ADC的DMA接口后,DMA控制器把转换值从ADC数据寄存器(ADC_DR)中转移到变量ADC_ConvertedValue中,当DMA传输完成后,在main函数中使用的ADC_ConvertedValue的内容就是ADC转换值了。

3、STM32内部的温度传感器和ADCx_IN16输入通道相连接,此通道把传感器输出的电压值转换成数字值。

STM内部的温度传感器支持的温度范围:-40到125摄氏度。

利用下列公式得出温度温度(°C) = {(V25 - VSENSE) / Avg_Slope} + 25式中V25是 VSENSE在25摄氏度时的数值(典型值为1.42V))曲线的平均斜率(典型值为4.3mV/C是温度与Avg_SlopeVSENSE利用均值法对转换后的温度进行滤波,将得到的温度通过串口输出。

嵌入式系统课程设计(温度检测报警系统)

嵌入式系统课程设计(温度检测报警系统)

嵌入式系统课程设计姓名:班级:学号:目录:一.系统要求二.设计方案三.程序流程图四.软件设计五.课程总结与个人体会一、系统要求使用STM32F103作为主控CPU设计一个温度综合测控系统,具体要求:1、使用热敏电阻或者内部集成的温度传感器检测环境温度,每0.1秒检测一次温度,对检测到的温度进行数字滤波(可以使用平均法)。

记录当前的温度值和时间。

2、使用计算机,通过串行通信获取STM32F103检测到的温度和所对应的时间。

3、使用计算机进行时间的设定。

4、使用计算机进行温度上限值和下限值的设定。

5、若超过上限值或者低于下限值,则STM32进行报警提示。

二、设计方案本次课程设计的要求是使用STM32F103设计一个温度测控系统,这款单片机集成了很多的片上资源,功能十分强大,我使用了以下部分来完成课程设计的要求:1、STM32F103内置了3个12位A/D转换模块,最快转换时间为1us。

本次课程设计要求进行温度测定,于是使用了其中一个ADC对片上温度传感器的内部信号源进行转换。

当有多个通道需要采集信号时,可以把ADC配置为按一定的顺序来对各个通道进行扫描转换,本设计只采集一个通道的信号,所以不使用扫描转换模式。

本设计需要循环采集电压值,所以使用连续转换模式。

2、本次课程设计还使用到了DMA。

DMA是一种高速的数据传输操作,允许在外部设备和储存器之间利用系统总线直接读写数据,不需要微处理器干预。

使能ADC的DMA接口后,DMA控制器把转换值从ADC 数据寄存器(ADC_DR)中转移到变量ADC_ConvertedValue中,当DMA 传输完成后,在main函数中使用的ADC_ConvertedValue的内容就是ADC转换值了。

3、STM32内部的温度传感器和ADCx_IN16输入通道相连接,此通道把传感器输出的电压值转换成数字值。

STM内部的温度传感器支持的温度范围:-40到125摄氏度。

利用下列公式得出温度温度(°C) = {(V25 - VSENSE) / Avg_Slope} + 25式中V25是 VSENSE在25摄氏度时的数值(典型值为1.42V)Avg_Slope是温度与VSENSE曲线的平均斜率(典型值为4.3mV/C)利用均值法对转换后的温度进行滤波,将得到的温度通过串口输出。

嵌入式系统课程设计温度检测报警系统解读

嵌入式系统课程设计温度检测报警系统解读

嵌入式系统课程设计姓名:班级:学号:目录:一.系统要求二.设计方案三.程序流程图四.软件设计五.课程总结与个人体会一、系统要求使用STM32F103作为主控CPU设计一个温度综合测控系统,具体要求:1、使用热敏电阻或者内部集成的温度传感器检测环境温度,每0.1秒检测一次温度,对检测到的温度进行数字滤波(可以使用平均法)。

记录当前的温度值和时间。

2、使用计算机,通过串行通信获取STM32F103检测到的温度和所对应的时间。

3、使用计算机进行时间的设定。

4、使用计算机进行温度上限值和下限值的设定。

5、若超过上限值或者低于下限值,则STM32进行报警提示。

二、设计方案本次课程设计的要求是使用STM32F103设计一个温度测控系统,这款单片机集成了很多的片上资源,功能十分强大,我使用了以下部分来完成课程设计的要求:1、STM32F103内置了3个12位A/D转换模块,最快转换时间为1us。

本次课程设计要求进行温度测定,于是使用了其中一个ADC对片上温度传感器的内部信号源进行转换。

当有多个通道需要采集信号时,可以把ADC配置为按一定的顺序来对各个通道进行扫描转换,本设计只采集一个通道的信号,所以不使用扫描转换模式。

本设计需要循环采集电压值,所以使用连续转换模式。

2、本次课程设计还使用到了DMA。

DMA是一种高速的数据传输操作,允许在外部设备和储存器之间利用系统总线直接读写数据,不需要微处理器干预。

使能ADC的DMA接口后,DMA控制器把转换值从ADC 数据寄存器(ADC_DR)中转移到变量ADC_ConvertedValue中,当DMA 传输完成后,在main函数中使用的ADC_ConvertedValue的内容就是ADC转换值了。

3、STM32内部的温度传感器和ADCx_IN16输入通道相连接,此通道把传感器输出的电压值转换成数字值。

STM内部的温度传感器支持的温度范围:-40到125摄氏度。

利用下列公式得出温度温度(°C) = {(V25 - VSENSE) / Avg_Slope} + 25式中V25是 VSENSE在25摄氏度时的数值(典型值为1.42V)Avg_Slope是温度与VSENSE曲线的平均斜率(典型值为4.3mV/C)利用均值法对转换后的温度进行滤波,将得到的温度通过串口输出。

温度测控与报警系统(18b20)

温度测控与报警系统(18b20)

西安邮电学院测控仪器课程设计报告书题目:温度测控与报警系统院部名称:自动化学院学生姓名:专业名称:班级:时间:摘要本文主要通过温度传感(DS18B20)采集温度信号然后在数码管上显示,首先根据DS18B20的内部结构来设计硬件电路和软件电路的,本次设计采用了3个按键来控制,通过按键之间的协调来温度设定值,由于温度的不同,我们采用不同的信息来作为信号处理,所以硬件电路中用蜂鸣器来报警提醒。

本系统包括温度传感器,数据传输模块,温度显示模块和断电自动保存模块。

其中温度传感器为数字温度传感器DS18B20。

显示模块为液晶显示12864文中对每个部分功能、实现过程作了详细介绍。

关键词:单片机STC89C52RC温度传感(DS18B20),液晶显示12864,按键设定控制AbstractThis paper DS18B20 done mainly through sensors to measure temperature and throught it to set the temperature.DS18B20 is the frist in_depth understanding of and in accordance with the internal strucrure of DS18B20 to design hardware and software.by taking into account the temperature settings TH and TL so this design uses four buttons to control,through the coordinating role between information to different as signal,processing.hardware Circu it used as a warning to reind the buzzerThis system include temperature sensor and data transmission, the module displays module and thermoregulation driven circuit from the sensors into figures of the temperature sensors ds18b20, including a list of the data output circuit. the text of every part of the functions and procedure at present.Keyword:TDP stc89c52rc the controller DS18B20 schematics and procedures目录摘要Abstract关键词第一章绪论第二章系统方案设计1、方案设计2、系统总体框图结构第三章方案论证1、单片机方案的比较2、温度检测模块论证3、显示模块论证第四章电路与程序控制系统设计(一)、电源模块(二)温度检测模块(三)单片机最小系统模拟电路(四)程序设计第五章理论分析与测试1、理论分析2、结果测试第六章设计总结与心得体会第七章附录图7附录图(一)电源模块附录图(二)温度检测附录图(三)模拟测试的电路附录图(四)主要程序第一章绪论温度是工业生产中主要的被控参数之一,与之相关的各种温度控制系统广泛应用于冶金、化工、机械、食品等领域。

单片机课程设计---温度检测报警系统的设计

单片机课程设计---温度检测报警系统的设计

《单片机原理及接口》课程设计报告题目:专业名称:班级:学号:姓名:2010年 12月课程论文首页温度检测报警系统的设计摘要: proteus具有强大的仿真功能,通过proteus仿真可以为更快的对一些系统进行设计和性能测试,直到仿真系统可以运行。

该温度报警系统是用温度传感器18B20对温度进行采集,通过单总线结构与单片机AT89C52进行通信。

在此基础上,添加一个时钟芯片DS1302用来时钟计时。

并用液晶显示器对温度和时间进行显示,同时可以用控制按键可以切换“时间”、“日期”和“温度报警上下限”的显示,而且可以对温度报警上下限进行按键动态调整。

关键词:proteus 温度报警 AT89C52 单片机1、引言Proteus ISIS 是英国 Labcenter 公司开发的电路分析与实物仿真软件。

它运行于 Windows 操作系统上,可以仿真、分析各种模拟器件和集成电路,该软件的特点是:①实现了单片机仿真和SPICE 电路仿真相结合。

②支持主流单片机系统的仿真。

③提供软件调试功能。

④具有强大的原理图绘制功能。

总之,该软件是一款集单片机和SPICE 分析于一身的仿真软件,功能极其强大。

本文是基于 PROTEUS 的单片机温度采集系统的仿真设计,由单片机对温度进行采集,由温度传感提供温度,然后通过数码管显示温度值,并通过按键设置报警温度的上下限,当温度超出范围时报警。

同时具有时间计时的功能。

2、功能及操作说明2.1 功能说明:a.具有温度采集功能。

b.具有时间计时功能。

c.液晶分两行显示,上一行显示“温度”,下一行可以对“时间”、“日期”和“温度上下限”进行切换显示。

d.可以对温度上下限进行动态设置,在超过温度的上限或低于温度的下限时蜂鸣器会响,进行报警。

e.初始化(复位)功能。

2.2 操作说明:a.按下proteus中的运行按键。

b.按下“K1”键对“时间”、“日期”和“温度上下限”进行切换显示。

图2-1 切换显示c.在显示“温度”和“温度上下限”的时候,按下“K2”键,进入“温度上下限”调整状态,调整位闪烁显示,如(图2)所示。

嵌入式温度监测与报警系统设计设计Word

嵌入式温度监测与报警系统设计设计Word

学号14112200224毕业设计(论文)题目: 嵌入式温度监测与报警系统设计作者易康乐届别 2015届院别信息与通信工程学院专业电子信息指导教师万忠民职称教授完成时间2015年5月10日摘要本设计采用了ARM COTEX—M3 系列芯片STM32F103RCT6为主控芯片,对DS18B20温度传感器进行控制,实现温度采集功能,并在TFTLCD液晶显示屏上显示实时温度。

软件采用μC/OS-Ⅱ嵌入式实时内核与μC/GUI图形界面库来实现多任务管理和UI界面的功能。

利用μC/GUI设计一个具有显示实时温度折线图和控制窗口的UI界面,从而减少按键数量。

同时调用μC/OS-Ⅱ嵌入式实时内核实现多任务管理和利用μC/GUI实现对触摸按键的设置,通过TFTLCD触摸屏上设置的按键进行温度采集的控制。

通过利用软件模拟按键从而简化了系统的软硬件设计,更便于使用人员进行控制操作,同时提高了系统的可维护性和可操作性,达到了节约成本和具有更高效率的目的。

关键词:微控制器;TFTLCD, DS18B20;温度监测;嵌入式AbstractSystem uses ARM COTEX-M3 chips STM32F103RCT6 as main controller that controls the temperature sensor DS18B20 to achieve temperature acquisition function,and displays real-time temperature on the TFT LCD screen. The software uses the μC/OS - Ⅱ embedded real-time kernel and μC/GUI graphical interface library to implement the multiple task management and UI interface functions. Using the μC/GUI design a interface which display a real-time line graph of temperature and control window’s UI to reduce the number of buttons. At the same time, calling the μC/OS - Ⅱsystem manage the multiple task and using μC/GUI implement settings of ing the TFT LCD touch screen buttons control the temperature acquisition. By using simulation keys to simplify the design of system hardware and software,more easier to operator to control the operation.Meanwhile it can improve the maintainability of the system and operability, and achieve the purpose of saving cost and higher efficiency.Keywords:Microcontroller; TFTLCD, DS18B20; Temperature monitoring; Embedded目录摘要 (I)Abstract (II)第1章绪论 (1)1.1 课题设计背景及意义 (1)1.2 行业技术发展概况 (1)1.3 课题设计的主要内容 (2)第2章温度监测与报警系统总体设计 (4)2.1 系统基本框图 (4)2.2 硬系统工作原理图及工作原理 (4)2.2.1 系统工作原理图 (4)2.2.2 系统工作原理 (4)2.3 硬件元件介绍 (5)2.3.1 STM32F103RCT6介绍 (5)2.3.2 DS18B20介绍 (5)2.3.3 TFT-LCD介绍 (6)2.3.4 蜂鸣器介绍 (7)第3章温度监测与报警系统硬件设计 (8)3.1 硬件接口框图 (8)3.2 MCU设计 (8)3.3 JTAG设计 (9)3.4 TFTLCD电路设计 (10)3.5 蜂鸣器电路设计 (11)3.6 DS18B20设计 (12)第4章软件设计 (13)4.1软件简介 (13)4.2主函数分析 (14)4.3 主要任务分析 (15)4.3.1 Task_wave任务 (15)4.3.2 Task_TOUCH任务 (16)4.3.3 TASK_beep任务 (17)4.3.4 Task_DS18B20任务 (17)第5章调试结果及分析 (19)总结 (22)参考文献 (23)致谢 (24)附录一硬件原理图 (25)附录二程序 (26)第1章绪论1.1 课题设计背景及意义当今现代化建设和国民经济发展迅速。

基于嵌入式系统数字温度的测试系统设计

基于嵌入式系统数字温度的测试系统设计

基于嵌入式系统数字温度的测试系统设计基于嵌入式系统数字温度的测试系统设计温度传感器是一类被广泛应用且被最先开发的传感器。

但大多数温度传感器没有对数字信号分析及处理,达到自动化控制的效果。

因此,本设计基于这种情况,利用相关软硬件提高了温度传感器的实用价值。

下面一起来看看吧!2.总体设计2.1系统功能模块设计从需求分析可以看出,该系统的功能模块应包括以下几个部分:实时温度采集与更新模块、自定义温度警报模块、超温报警模块。

DS18B20采用了单总线方式的传输协议,即只需要一根管脚就可以对输入输出进行控制。

此种单总线传输协议在实际应用中有很大优势,使用此种协议的芯片不需要任何外围电路,对硬件设计时的复杂性大大简化了许多。

2.2系统软件设计方案2.2.1嵌入式操作系统选择在本设计当中,硬件平台完全支持Linux、开发便捷迅速、资料众多、内核小、效率高等优点决定了在本设计当中的稳定性等优点,均使得本设计采用了Linux作为开发的操作系统。

2.2.2应用层程序语言选择应用程序使用C语言进行开发,使用Linux标准C语言接口,与驱动层进行交互。

3.硬件设计3.1整体硬件电路设计根据硬件设计方案,在开发中用到的硬件有Tiny6410开发板、DS18B20数字温度传感器、USB转串口数据线。

3.2硬件连接方式将USB转串口线一端接在Tiny6410的串口1上,另一端连接PC 机USB接口。

两个DS18B20传感器的VCC与GND管脚并联起来,与Tiny6410开放的电源与地线接口相连,两个传感器的数据接口一起连接在S3C6410的GPIO的管脚上。

4.软件设计4.1嵌入式系统架构本系统在软件方面主要由Linux内核裁剪和移植、底层驱动程序开发、上层应用程序开发三部分组成。

其中,Linux内核的运行需要有引导程序BootLoader、内核的配置裁剪与编译、根文件系统的编译三个部分支持。

4.2驱动程序设计在本设计当中,对DS18B20数字温度传感器根据其数据手册上的传输协议及参数进行驱动编写,首先要明确其控制参数及流程。

基于嵌入式技术的温度测量系统设计

基于嵌入式技术的温度测量系统设计

基于嵌入式技术的温度测量系统设计
1.引言
嵌入式系统是能够运行操作系统的软、硬件综合体,且多数系统的应用软件和操作系统
是紧密结合在一起的。

选配好RTOS(Real-Time Operating System)开发平台,就能合理的实现多任务调度,系统资源利用。

嵌入式系统较一般单片机系统而言,软件资源利用率较高,开发周期短;系统精度较高;实时性也更好。

特别适合于数据处理量较大,有联网、通信等要求的场合。

为了利用嵌入式系统构造一个分布式多点温度测控系统,本文做了一些前期的尝试和开
发工作。

结合可编程单总线数字式温度传感器DS18B20,用嵌入式系统构造了一个具有温
度测量、相关数据处理以及与上位机通信等功能的现场温度测量单元,上位机则主要完成系统监控和人机交互等功能。

2.系统组成及工作原理
温度测量系统总体结构如图1所示。

图1 系统总体结构图
本文中,下位机由嵌入式系统组成。

根据实际需要,其核心采用了低端的LPC2104芯片。

它包含一个支持仿真的ARM7TDMI-S CPU,128K 字节FLASH存储器和64K字节SRAM以及片内总线。

数字式温度传感器DS18B20连到LPC2104的一个GPIO管脚P0.8上。

LPC2104通过该管脚发送命令和接收温度值,并对读到的温度值进行数字滤波、二
—十进制转换等数据处理,还设置了温度超限报警等功能。

下位机还可与上位机实时通信,
一方面接受上位机的各种指令,另一方面,将测得的温度值传送到上位机。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式系统课程设计:班级:学号:目录:一.系统要求二.设计方案三.程序流程图四.软件设计五.课程总结与个人体会一、系统要求使用STM32F103作为主控CPU设计一个温度综合测控系统,具体要求:1、使用热敏电阻或者部集成的温度传感器检测环境温度,每0.1秒检测一次温度,对检测到的温度进行数字滤波(可以使用平均法)。

记录当前的温度值和时间。

2、使用计算机,通过串行通信获取STM32F103检测到的温度和所对应的时间。

3、使用计算机进行时间的设定。

4、使用计算机进行温度上限值和下限值的设定。

5、若超过上限值或者低于下限值,则STM32进行报警提示。

二、设计方案本次课程设计的要使用STM32F103设计一个温度测控系统,这款单片机集成了很多的片上资源,功能十分强大,我使用了以下部分来完成课程设计的要求:1、STM32F103置了3个12位A/D转换模块,最快转换时间为1us。

本次课程设计要求进行温度测定,于是使用了其中一个ADC对片上温度传感器的部信号源进行转换。

当有多个通道需要采集信号时,可以把ADC配置为按一定的顺序来对各个通道进行扫描转换,本设计只采集一个通道的信号,所以不使用扫描转换模式。

本设计需要循环采集电压值,所以使用连续转换模式。

2、本次课程设计还使用到了DMA。

DMA是一种高速的数据传输操作,允许在外部设备和储存器之间利用系统总线直接读写数据,不需要微处理器干预。

使能ADC的DMA接口后,DMA控制器把转换值从ADC 数据寄存器(ADC_DR)中转移到变量ADC_ConvertedValue中,当DMA 传输完成后,在main函数中使用的ADC_ConvertedValue的容就是ADC转换值了。

3、STM32部的温度传感器和ADCx_IN16输入通道相连接,此通道把传感器输出的电压值转换成数字值。

STM部的温度传感器支持的温度围:-40到125摄氏度。

利用下列公式得出温度温度(°C) = {(V25 - VSENSE) / Avg_Slope} + 25式中V25是 VSENSE在25摄氏度时的数值(典型值为1.42V)Avg_Slope是温度与VSENSE曲线的平均斜率(典型值为4.3mV/C)利用均值法对转换后的温度进行滤波,将得到的温度通过串口输出。

4、本设计采用了USART1作为串行通信接口,来进行时间、温度的传输,以及进行时间和温度上下限的设定。

5、当温度超过上下限时,开发板上的灯会相应亮起作为警报,使用了GPIO配置引脚。

6、时间计时使用了systick时钟,并配置其中断,由此进行一秒定时,实现时钟的实时显示。

7、时间设定部分参考了一个两位数字读取的函数,在进入主循环前设定参数,从而避免了在串口中断中输入只能一次性输入所有参数的弊端。

三、程序流程图四、软件设计用到的库文件:stm32f10x_adc.h,stm32f10x_dma.h,stm32f10x_flash.h,stm32f10x_gpio.h,stm32f10x_rcc.h,stm32f10x_usart.h,misc.h 自己编写的文件:main.c,stm32f10x_it.c,stm32f10x_it.hmain文件:#include "stm32f10x.h"#include "stdarg.h"#include "stdio.h"#define ADC1_DR_Address ((uint32_t)0x4001244C)extern __IO u16 ADC_ConvertedValue;extern __IO u16 calculated_temp;__IO u16 Current_Temp;unsigned char sec=0,min=0,hour=0;typedef struct{int tm_sec;int tm_min;int tm_hour;}rtc_time;rtc_time systmtime;__IO u16 upper_bound;__IO u16 lower_bound;//static uint8_t USART_Scanf(uint32_t value);void Time_Regulate(rtc_time *tm);unsigned int TimingDelay=0;unsigned int KEY_ON;unsigned int KEY_OFF;void Delay(u32 count){u32 i=0;for(;i<count;i++);}void LED_GPIO_Config(){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); // 使能PD端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;//LED0-->PD.8端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 速度50MHzGPIO_Init(GPIOD, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5}void SysTick_Init(){if (SysTick_Config(SystemCoreClock / 1000)){while(1);}SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;//关闭滴答定时器//SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;//开启滴答定时器}void Delay_ms(__IO u32 nTime){TimingDelay=nTime;SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;//打开while(TimingDelay != 0);}void RCC_Config(void)//配置时钟{RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//DMA RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);//ADC1 and GPIOCRCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);//USARTRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); // 使能PD端口时钟LED}void GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStructure;/***Config PA.01 (ADC1)***/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOC, &GPIO_InitStructure);/***Config LED ***/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 速度50MHzGPIO_Init(GPIOD, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5/***Config USART ***//* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure USART1 Rx (PA.10) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);}void DMA_Config(void){/* DMA channel1 configuration */DMA_InitTypeDef DMA_InitStructure;DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; /*ADC??*/DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;DMA_InitStructure.DMA_BufferSize = 16;DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord;DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;DMA_InitStructure.DMA_Priority = DMA_Priority_High;DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;DMA_Init(DMA1_Channel1, &DMA_InitStructure);/* Enable DMA channel1 */DMA_Cmd(DMA1_Channel1, ENABLE);}void ADC1_Config(void){ ADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;ADC_InitStructure.ADC_ScanConvMode = ENABLE ;ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel = 1;ADC_Init(ADC1, &ADC_InitStructure);/* ADC1 regular channel16 configuration */ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_55Cycles5);ADC_TempSensorVrefintCmd(ENABLE);ADC_DMACmd(ADC1, ENABLE);ADC_Cmd(ADC1, ENABLE);ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1));ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1));ADC_SoftwareStartConvCmd(ADC1, ENABLE);}void USART1_Config(void){USART_InitTypeDef USART_InitStructure;USART_ART_BaudRate = 9600;USART_ART_WordLength = USART_WordLength_8b;USART_ART_StopBits = USART_StopBits_1;USART_ART_Parity = USART_Parity_No ;USART_ART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_ART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);// USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //接收使能// USART_ITConfig(USART1,USART_IT_TXE,ENABLE); //发送使能USART_Cmd(USART1,ENABLE); //启动串口}static uint8_t USART_Scanf(uint32_t value)//字符串读取函数{uint32_t index = 0;uint32_t tmp[2] = {0, 0};while (index < 2){/* Loop until RXNE = 1 */while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) ==RESET) {}tmp[index++] = (USART_ReceiveData(USART1));if ((tmp[index - 1] < 0x30) || (tmp[index -1] > 0x39)){printf("\n\r请输入有效数字0 到9 -->: ");index--;}}index = (tmp[1] - 0x30) + ((tmp[0] - 0x30) * 10);/* Checks */if (index > value){printf("\n\r请输入有效数字0 到%d", value);return 0xFF;}return index;}void Time_Regulate(rtc_time *tm)//时间设定函数{uint32_t Tmp_HH =0xFF, Tmp_MI = 0xFF, Tmp_SS = 0xFF; uint32_t Tmp_up = 0xff,Tmp_low = 0xff;printf("\r\n 设定温度围");printf("\r\n 输入温度上限: ");while (Tmp_up == 0xFF){Tmp_up = USART_Scanf(99);}printf("\n\r 温度上限为%0.2d C\n\r", Tmp_up);upper_bound = Tmp_up;//-------------------printf("\r\n 输入温度下限: ");while (Tmp_low == 0xFF){Tmp_low = USART_Scanf(99);}printf("\n\r 温度下限为%0.2d C\n\r", Tmp_low); lower_bound = Tmp_low;printf("\r\n 设定时间");Tmp_HH = 0xFF;printf("\r\n 设定小时: ");while (Tmp_HH == 0xFF){Tmp_HH = USART_Scanf(23);}printf("\n\r 设定小时为%d\n\r", Tmp_HH ); tm->tm_hour= Tmp_HH;Tmp_MI = 0xFF;printf("\r\n 设定分钟: ");while (Tmp_MI == 0xFF){Tmp_MI = USART_Scanf(59);}printf("\n\r 设定分钟为%d\n\r", Tmp_MI);tm->tm_min= Tmp_MI;Tmp_SS = 0xFF;printf("\r\n 设定秒: ");while (Tmp_SS == 0xFF){Tmp_SS = USART_Scanf(59);}printf("\n\r 设定秒为%d\n\r", Tmp_SS);tm->tm_sec= Tmp_SS;}int fputc(int ch, FILE *f)//重定向函数{USART_SendData(USART1, (unsigned char) ch);// while (!(USART1->SR & USART_FLAG_TXE));while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);return (ch);}/*****************************主函数***********************************************/int main(void){#ifdef DEBUG#endifSysTick_Init();LED_GPIO_Config();RCC_Config();GPIO_Config();DMA_Config();ADC1_Config();USART1_Config();Delay(5000);Time_Regulate(&systmtime);GPIO_SetBits(GPIOD, GPIO_Pin_8); GPIO_SetBits(GPIOD, GPIO_Pin_9); GPIO_SetBits(GPIOD, GPIO_Pin_10); GPIO_SetBits(GPIOD, GPIO_Pin_11);sec=systmtime.tm_sec;min=systmtime.tm_min;hour=systmtime.tm_hour;while(1){sec++;if(sec==60){ sec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;}}}printf("\r\n 当前时间:%d :%d :%d \r\n", hour,min,sec);printf("\r\n 当前温度:%02d C 温度上限:%02d C 温度下限:%02d C \r\n",Average_Temp,upper_bound,lower_bound);GPIO_SetBits(GPIOD, GPIO_Pin_8);GPIO_SetBits(GPIOD, GPIO_Pin_9);GPIO_SetBits(GPIOD, GPIO_Pin_10);GPIO_SetBits(GPIOD, GPIO_Pin_11);if(((int)Current_Temp) > ((int)upper_bound)){GPIO_ResetBits(GPIOD, GPIO_Pin_8);}else if(((int)Current_Temp) < ((int)lower_bound)){GPIO_ResetBits(GPIOD, GPIO_Pin_11);}else{GPIO_SetBits(GPIOD, GPIO_Pin_8);GPIO_SetBits(GPIOD, GPIO_Pin_9);GPIO_SetBits(GPIOD, GPIO_Pin_10);GPIO_SetBits(GPIOD, GPIO_Pin_11);}Delay_ms(1000);}}stm32f10x_it.c文件:/* Includes ------------------------------------------------------------------*/#include "stm32f10x_it.h"/* Private functions---------------------------------------------------------*/void display(void){unsigned char ad_data,ad_value_max,ad_value_min;ad_data=Current_Temp;if(ad_sample_cnt==0){ad_value_max=ad_data;ad_value_min=ad_data;}else if(ad_data<ad_value_min){ad_value_min=ad_data;}else if(ad_data>ad_value_max){ad_value_max=ad_data;}ad_value_sum+=ad_data;ad_sample_cnt++;if(ad_sample_cnt==10){ad_value_sum-=ad_value_min;ad_value_sum-=ad_value_max;ad_value_sum/=8;calculated_temp=ad_value_sum;ad_sample_cnt=0;ad_value_min=0;ad_value_max=0;}}void SysTick_Handler(void){TimingDelay--;ADC_tempValueLocal = ADC_ConvertedValue;//printf("\n %02d \n, ADC_ConvertedValue");Current_Temp=(V25-ADC_tempValueLocal)/Avg_Slope+25;temp_sum+=Current_Temp;temp_cnt++;if(temp_cnt>=10){temp_cnt=0;temp_sum/=10;Average_Temp=temp_sum;temp_sum=0;}//printf("\r\n The current temperature = %02d C\r\n", calculated_temp);}五、课程总结与个人体会嵌入式开发是自动化专业的主要课程之一,现实生活中,嵌入式在应用可以说得是无处不在。

相关文档
最新文档