嵌入式系统课程设计报告书
- 格式:doc
- 大小:996.50 KB
- 文档页数:18
成绩学生课程实践能力考查
题目:温度按键设定、显示、报警系统设计
课程名称:嵌入式系统开发专业班级:
学生学号: 学生姓名:
考查地点: 考查时长: 4小时
所属院部: 指导教师:
2017 — 2018学年第 2 学期
金陵科技学院教务
2017-2018学年第2学期《嵌入式系统开发》实践能力考核
任课教师签名:
日期:
温度按键设定、显示、报警系统设计
要求:
1、读取DS18B20温度,在液晶上实时显示,并显示上、下限,初始值上限32,下限26。
2、通过按键可以设置环境温度的上限与下限,
WK_UP键按下调节上限,再按下调节下限,再按下调节上限……
KEY1按下加1;
KEY0按下减1,
根据上限与下限判断当前温度有没有超出范围。
3、当温度超过上限,LED1隔1秒亮一次。超过下限,LED2隔1秒亮一次。(也可自定义报警方式)
4、串口波特率一律用9600bps。
液晶显示的信息:
STM32 test
name: xxxxxxxxx
Maximum is 32C,Minimum is 26 C
The temperature is 29 C,now!
(xxxxx就是自己的名字拼音)
目录:
第一章.系统要求
1、1设计要求
1、2设计方案
第二章.硬件设计
2、1开发板原理图
2、2 DS18B20模块
2、3按键模块
2、4 LCD显示模块
2、5 LED 模块
第三章.软件设计
3、1程序流程图
3、2程序部分代码
3、2、1主函数、main、c
3、2、2 LED 函数led、c
3、2、3温度代码 s18b20、c
3、2、4键盘代码key、c
第四章、实物效果图
第五章、课程总结
第一章.设计要求及方案
1、1设计要求
1、读取DS18B20温度,在液晶上实时显示,并显示上、下限,初始值上限32,下限26。
2、通过按键可以设置环境温度的上限与下限,
WK_UP键按下调节上限,再按下调节下限,再按下调节上限……
KEY1按下加1;
KEY0按下减1,
根据上限与下限判断当前温度有没有超出范围。
3、当温度超过上限,LED1隔1秒亮一次。超过下限,LED2隔1秒亮一次。(也可自定义报警
方式)
4、串口波特率一律用9600bps。
液晶显示的信息:
STM32 test
name: xxxxxxxxx
Maximum is 32C,Minimum is 26 C
The temperature is 29 C,now!
(xxxxx就是自己的名字拼音)
1、2设计方案
本次课程设计的要求就是使用STM32F103设计一个温度测控系统,ALIENTEK MiniSTM32 V3 版开发板选择的就是 STM32F103RCT6 作为 MCU,它拥有的资源包括:48KB SRAM、256KB FLASH、2 个基本定时器、4 个通用定时器、2 个高级定时器、2 个 DMA 控制器(共 12 个通道)、3 个SPI、2 个 IIC、5 个串口、1 个 USB、1 个 CAN、3 个 12 位 ADC、1 个 12 位 DAC、1 个 SDIO 接口及 51 个通用 IO 口。在本课程中使用了以下部分来完成课程设计的要求:
1、应用DS18B20进行温度的检测。
2、应用按键模块进行外部的上下限数值设定。
3、应用LED的闪烁进行报警。
4、应用LCD显示实时温度、上下限等信息。
第二章.硬件设计
2、2 DS18B20设计
2、3按键模块
ALIENTEK MiniSTM32 开发板总共有 3 个按键,其原理图如下:
2、4 LCD显示模块
2、5 LED 模块
其中 PWR 就是开发板电源指示灯,为蓝色。LED0 与 LED1 分别接在 PA8 与 PD2 上,PA8还可以通过 TIM1 的通道 1 的 PWM 输出来控制 DS0 的亮度。为了方便大家判断,我们选择了 DS0 为红色,DS1 为绿色的LED 灯。
第三章.软件设计
3、1程序流程图
温度显示及报警模块按键设定模块
3、2程序部分代码
3、2、1主函数、main、c
#include "led、h"
#include "delay、h"
#include "sys、h"
#include "usart、h"
#include "lcd、h"
#include "ds18b20、h"
#include "key、h"
#include
#include
#include
int temp_low = 22;
int temp_high = 32;
int zanshi_low=0;
int zanshi_hign=0;
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
TIM_TimeBaseStructure、TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值计数到5000为500ms
TIM_TimeBaseStructure、TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率
TIM_TimeBaseStructure、TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure、TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct 中指定的参数初始化TIMx的时间基数单位
TIM_ITConfig( //使能或者失能指定的TIM中断
TIM3, //TIM2
TIM_IT_Update ,
ENABLE //使能
);
NVIC_InitStructure、NVIC_IRQChannel = TIM3_IRQn; //TIM3中断
NVIC_InitStructure、NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级NVIC_InitStructure、NVIC_IRQChannelSubPriority = 3; //从优先级3级
NVIC_InitStructure、NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
TIM_Cmd(TIM3, ENABLE); //使能TIMx外设
}
u8 flag=0;
int main(void)
{
u8 t = 0;
u8 shuzu[20];
u8 keyvalue=0;
u8 gaibianshui=0;
short temperature;