历史上的今天
返回首页

历史上的今天

今天是: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                Set_L+=10;

                                else

推荐阅读

史海拾趣

Blue Sky Research公司的发展小趣事

作为一家有社会责任感的企业,Blue Sky Research始终关注环境保护和可持续发展。公司在生产过程中采用环保材料和工艺,减少对环境的影响。同时,公司还积极参与公益事业,为社会做出贡献。通过践行社会责任,Blue Sky Research不仅赢得了社会的尊重和认可,也为企业的可持续发展注入了新的动力。

这些故事虽然基于假设和一般情况构建,但它们反映了Blue Sky Research在电子行业里可能的发展路径和战略选择。当然,实际的发展过程可能更加复杂和多元,需要更多的数据和细节来揭示。

Degson Electronics Co Ltd公司的发展小趣事

为了进一步扩大市场份额,Degson开始实施国际化战略,并积极开拓全球市场。公司参加了多个国际电子展会,与全球客户建立了广泛的联系。同时,Degson还在海外设立了多个办事处和生产基地,以便更好地服务当地客户。这些举措使Degson的产品逐渐进入了美国、德国、英国、日本等90多个国家和地区的市场,实现了全球市场的布局。

Ferroxcube公司的发展小趣事

随着全球电子行业的竞争日益激烈,Ferroxcube公司意识到,要想保持领先地位,就必须不断创新。于是,公司决定投入巨资建立一个新的研发中心,专注于磁性元件的前沿技术研究。

研发中心的建立吸引了大批优秀的科研人才加入Ferroxcube。在新的研发团队的带领下,公司相继推出了多款具有自主知识产权的新型磁性元件,这些元件在性能、稳定性和可靠性方面都达到了行业领先水平。

其中一款名为“XX磁芯”的产品,凭借其超高的磁导率和极低的损耗,在市场上引起了轰动。这款产品不仅被广泛应用于各类电子设备中,还成为了许多高校和科研机构的研究对象。Ferroxcube因此成为了行业内技术创新的佼佼者。

C-MAX Time Solutions公司的发展小趣事

随着业务的不断发展,C-MAX Time Solutions公司开始寻求与行业内其他企业的战略合作。通过与一家知名通信设备制造商的合作,C-MAX成功将其时间同步技术融入对方的设备中,从而实现了产品的互补和市场的共同开拓。这一合作不仅拓宽了C-MAX的业务范围,也提高了其品牌在行业内的知名度和影响力。

GSME Electronics公司的发展小趣事

随着生产设备的引进和技术团队的壮大,GSME Electronics开始专注于半导体器件的研发与生产。公司产品线逐渐丰富,涵盖了片式各种系列表面贴装的小信号三极管、中功率驱动三极管、肖特基、开关二极管及小功率可控硅等多种半导体分立器件。这些产品广泛应用于移动通信、计算机、消费类电子信息产品、家用电器、工业自动化控制设备等领域,满足了市场的多样化需求,推动了公司业务的快速增长。

AUK Contractors Co Ltd公司的发展小趣事

在追求经济效益的同时,AUK Contractors Co Ltd也积极履行企业社会责任。公司不仅严格遵守环保法规,还积极参与公益事业,为社会做出贡献。此外,公司还注重可持续发展,通过节能减排、循环利用等方式降低对环境的影响,实现了经济效益与社会效益的双赢。

这些故事虽然基于虚构,但反映了电子行业公司可能经历的典型情境和挑战。希望这些故事能够为您提供一些启发和参考。

问答坊 | AI 解惑

风华高科新入大学生必读宝典

风华高科新入大学生必读宝典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 ...…

查看全部问答>

新人报到,发个layout中PCELL的制作教程

在LAYOUT中,PCELL做的好能有效的提高版图的工作效率,给大家提供一个资料,希望能够帮大家学到更多的东西。 …

查看全部问答>

PIC单片机在汽车电动车窗控制器中的应用

摘  要: 针对汽车控制系统减少线束和较低成本的要求,提出了以集成CAN控制器的PIC18F258单片机为核心设计而成的汽车电动车窗控制系统,给出了系统主要硬件结构和软件设计流程。相对于传统的点对点控制方式,不仅减少了车内的线束、降低 ...…

查看全部问答>

山东嵌入式qq交流群 95106268

技术交流学习,山东片就业信息共享…

查看全部问答>

请教PROTEL99问题??

原理图导出电子表格后,填了封装后,怎么刷新,原理图中的封装才有啊??…

查看全部问答>

[求助]求一些东西

zigbee的中文说明,或者教材,特别是关于,物理层和MAC层的,最好有原理说明,就是为什么要使用这样的帧格式和这样的通信方式 CC2430的示例代码,关于它的基本操作的,或者是某个应用的整个的程序 …

查看全部问答>

请教下嵌入式系统中,无线网络的实现问题

给出一个描述把: 在ARM平台下需要实现组建一个无线的局域网, 局域网中的每个终端同样也是ARM的系统。 这个是大概的一个想法把,想请教下各位能有些什么样的实现方法呢? …

查看全部问答>

请问哪位大虾有移植过GoAhead WebServer到pSOS上的

我移植过去有很多问题,希望大家指点一二…

查看全部问答>

关于中断的程序

我想写有两个中断的程序,但是引起混乱,是不是写中断语句的时候也要像51单片机那样编号啊? #pragma vector=UART0RX_VECTOR __interrupt void UART0_RX_ISR(void) { unsigned short data=0; data=U0RXBUF; //读取接受到的数据并且发送 ...…

查看全部问答>

CadSoft EAGLE V6即将登场(2011年12月)

CadSoft EAGLE V6即将登场来自CadSoft内部消息:EAGLE V6好像9月在欧洲发布了,预计年底应该在国内上市。使用EAGLE软件或者喜欢EAGLE的工程师朋友们有福了。让我们先睹为快,来看看EAGLE V6的新功能、新特性:重新设计的XML数据库结构读取、编辑和 ...…

查看全部问答>