历史上的今天
今天是:2025年08月07日(星期四)
2020年08月07日 | 基于STM32的温度采集报警系统
2020-08-07 来源:51hei


单片机源程序如下:
#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "LCD1602.h"
#include "led.h"
#include "ds18b20.h"
//Buzzer--------------->PB8
//LED1----------------->PB15
//LED2----------------->PA8
//Relay2--------------->PA9
//Relay1--------------->PA10
float Set_H = 35.0; //高温报警温度
float Set_L = 10.0; //低温报警温度
float Temp=0; //实时温度
unsigned char SetFlag = 0;
//初始化按键 LED 继电器 蜂鸣器端口
void PortInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_8 | GPIO_Pin_15);
/*-------------------按键初始化-------------------------*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成输入模式
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13);
}
void CoolingStart(void)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
GPIO_ResetBits(GPIOA,GPIO_Pin_9 | GPIO_Pin_8);
}
void CoolingStop(void)
{
GPIO_SetBits(GPIOB,GPIO_Pin_8);
GPIO_SetBits(GPIOA,GPIO_Pin_9 | GPIO_Pin_8);
}
void HeatStart(void)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_10);
GPIO_ResetBits(GPIOB,GPIO_Pin_15);
}
void HeatStop(void)
{
GPIO_SetBits(GPIOA,GPIO_Pin_10);
GPIO_SetBits(GPIOB,GPIO_Pin_15);
}
unsigned char KeyVal(void)
{
unsigned char key='0'; //无效返回255
uint16_t Read;
Read=GPIO_ReadInputData(GPIOB); //读取GPIOB的数值
Read >>= 10;
Read &= 0x000F;
if(0x0F!=Read)
{
delay_ms(10);
Read=GPIO_ReadInputData(GPIOB); //读取GPIOB的数值
Read >>= 10;
Read &= 0x000F;
if(0x0F!=Read)
{
switch(Read)
{
case 0x0E:
{ key = 'A'; }break; //确认按键
case 0x0D:
{ key = '-'; }break; //减
case 0x0B:
{ key = '+'; }break; //加
case 0x07:
{ key = 'S'; }break; //设置
default: break;
}
}
}
return key;
}
/*-----------------------位选函数---------------------------*/
void BitSelect(void)
{
if('S'==KeyVal())
{
while('S'==KeyVal());
SetFlag++;
if(SetFlag>5)
SetFlag=0;
}
}
void SetDisplay(void)
{
if('+'==KeyVal() || '-'==KeyVal()) //如果有按键按下
{ ; }
else
{
switch(SetFlag)
{
case 0:
{ LCD_DisChar(1,3,' '); }break;
case 1:
{ LCD_DisChar(1,4,' '); }break;
case 2:
{ LCD_DisChar(1,6,' '); }break;
case 3:
{ LCD_DisChar(1,11,' '); }break;
case 4:
{ LCD_DisChar(1,12,' '); }break;
case 5:
{ LCD_DisChar(1,14,' '); }break;
default:break;
}
}
delay_ms(120);
LCD_DisFloat(1,2,Set_H,5,1);
LCD_DisFloat(1,10,Set_L,5,1);
delay_ms(120);
}
void SetVal(void) //数值设置函数
{
if('+'==KeyVal())
{
switch(SetFlag)
{
case 0:
{
if(Set_H<90)
Set_H+=10;
else
Set_H = 100;
}break;
case 1:
{
if(Set_H<99)
Set_H+=1;
else
Set_H = 100;
}break;
case 2:
{
if(Set_H<99.8)
Set_H+=0.1;
else
Set_H = 100;
}break;
case 3: //低温限度不能高于高温限度-1
{
if(Set_L else
史海拾趣
|
风华高科新入大学生必读宝典MLCC的基础知识介绍,据说是风华高科新入职大学生的必读宝典,很经典。 附件[url=http://mlcc%20base.pdf/]MLCC Base.pdf[/url](532.11 KB) 2008-12-11 13:51, 下载次数: 50 [ 本帖最后由 chinatea 于 2008-12-11 14:31 ...… 查看全部问答> |
|
摘 要: 针对汽车控制系统减少线束和较低成本的要求,提出了以集成CAN控制器的PIC18F258单片机为核心设计而成的汽车电动车窗控制系统,给出了系统主要硬件结构和软件设计流程。相对于传统的点对点控制方式,不仅减少了车内的线束、降低 ...… 查看全部问答> |
|
给出一个描述把: 在ARM平台下需要实现组建一个无线的局域网, 局域网中的每个终端同样也是ARM的系统。 这个是大概的一个想法把,想请教下各位能有些什么样的实现方法呢? … 查看全部问答> |
|
CadSoft EAGLE V6即将登场(2011年12月) CadSoft EAGLE V6即将登场来自CadSoft内部消息:EAGLE V6好像9月在欧洲发布了,预计年底应该在国内上市。使用EAGLE软件或者喜欢EAGLE的工程师朋友们有福了。让我们先睹为快,来看看EAGLE V6的新功能、新特性:重新设计的XML数据库结构读取、编辑和 ...… 查看全部问答> |




