温度传感器检测温度报警装置
该项目有四项要求:
(1)检测温度
(2)检测温度超出限定温度,启动报警装置
(3)报警装置启动时,跑马灯进行工作,闪烁起来
(4)利用串口,实时传输温度数据
下面是源代码,运行是完全没有问题的,若读者有更佳的方式,希望可以交流一下.
delay.c
![](https://code.csdn.net/assets/CODE_ico.png)
- /*
- *参数 :t(0 - 255)
- *延时时间 :约2 * t + 12
- */
- void delay_us(unsigned char t)
- {
- while(--t);
- }
- void delay_ms(unsigned char t)
- {
- while(t--)
- {
- delay_us(245);
- delay_us(245);
- }
- }
- // void delay_s(unsigned char t)
- // {
- // while(t--)
- // {
- // delay_ms(200);
- // delay_ms(200);
- // delay_ms(200);
- // delay_ms(200);
- // delay_ms(200);
- // }
- // }
delay.h
![](https://code.csdn.net/assets/CODE_ico.png)
- #ifndef _DELAY_H_
- #define _DELAY_H_
- extern void delay_us(unsigned char t);
- extern void delay_ms(unsigned char t);
- // extern void delay_s(unsigned char t);
- #endif
lcd.c
![](https://code.csdn.net/assets/CODE_ico.png)
- #include "./lcd/lcd.h"
- #define LCDPORT P0
- #define LCD_WRITE_DATA 1
- #define LCD_WRITE_COM 0
- sbit RS = P2^4;
- sbit RW = P2^5;
- sbit E = P2^6;
- void lcd_init()
- {
- delay_ms(15);
- lcd1602_write(0x38,LCD_WRITE_COM); //设置8位数据接口,两行显示,5x7点阵字符
- delay_ms(5);
- lcd1602_write(0x38,LCD_WRITE_COM); //设置8位数据接口,两行显示,5x7点阵字符
- delay_ms(5);
- lcd1602_write(0x38,LCD_WRITE_COM); //设置8位数据接口,两行显示,5x7点阵字符
- delay_ms(5);
- lcd1602_write(0x38,LCD_WRITE_COM); //设置8位数据接口,两行显示,5x7点阵字符
- delay_ms(5);
- lcd1602_write(0x08,LCD_WRITE_COM); //关闭显示,关闭光标和闪烁
- delay_ms(5);
- lcd1602_write(0x01,LCD_WRITE_COM); //清屏
- delay_ms(5);
- lcd1602_write(0x06,LCD_WRITE_COM); //设置指针方式,画面不平移
- delay_ms(5);
- lcd1602_write(0x0c,LCD_WRITE_COM); //设置指针方式,画面不平移
- delay_ms(5);
- }
- void lcd1602_write(unsigned char byte,unsigned char flag)
- {
- if(flag)
- {
- RS = 1;
- }
- else
- {
- RS = 0; //选择输入数据为数据
- }
- RW = 0; //写
- E = 1; //选中LCD
- LCDPORT = byte;
- delay_us(5);
- E = 0; //失能LCD
- }
- void lcd_dis_char(unsigned char x, unsigned char y, unsigned char byte)
- {
- if((x > 15) || (y > 1))
- {
- return ;
- }
- if(0 == y)
- {
- lcd1602_write(0x80 + x,LCD_WRITE_COM);
- }
- else
- {
- lcd1602_write(0x80 + 0x40 + x,LCD_WRITE_COM);
- }
- lcd1602_write(byte,LCD_WRITE_DATA);
- }
- /*显示字符串*/
- void lcd1602_dis_str(unsigned char x, unsigned char y, unsigned char *str)
- {
- if((x > 15) || (y > 1))
- {
- return ;
- }
- if(0 == y)
- {
- lcd1602_write(0x80 + x,LCD_WRITE_COM);
- }
- else
- {
- lcd1602_write(0x80 + 0x40 + x,LCD_WRITE_COM);
- }
- while(*str != '\0')
- {
- lcd1602_write(*str,LCD_WRITE_DATA);
- str++;
- }
- }
- void lcd_dis_self()
- {
- lcd1602_write(0x40,LCD_WRITE_COM);
- lcd1602_write(0x07,LCD_WRITE_DATA);
- lcd1602_write(0x05,LCD_WRITE_DATA);
- lcd1602_write(0x07,LCD_WRITE_DATA);
![](https://code.csdn.net/assets/CODE_ico.png)
- lcd1602_write(0x0,LCD_WRITE_DATA);
- lcd1602_write(0x0,LCD_WRITE_DATA);
- lcd1602_write(0x0,LCD_WRITE_DATA);
- lcd1602_write(0x0,LCD_WRITE_DATA);
- lcd1602_write(0x0,LCD_WRITE_DATA);
- lcd1602_write(0x80 + 0x40 + 13,LCD_WRITE_COM);
- lcd1602_write(0x0,LCD_WRITE_DATA);
lcd.h
![](https://code.csdn.net/assets/CODE_ico.png)
- <span style="font-size:18px;"><strong>#ifndef __LCD1602_H__
- #define __LCD1602_H__
- #include "./delay/delay.h"
- #include <reg52.h>
- extern void lcd_init();
- extern void lcd1602_write(unsigned char byte,unsigned char flag);
- extern void lcd_dis_char(unsigned char x, unsigned char y, unsigned char byte);
- extern void lcd1602_dis_str(unsigned char x, unsigned char y, unsigned char *str);
- extern void lcd_dis_self();
- #endif</strong></span>
uart.c
![](https://code.csdn.net/assets/CODE_ico.png)
- #include <reg52.h>
- #include <stdio.h>
- #include "./delay/delay.h"
- void uart_init()
- {
- SCON = 0x50;
- TMOD |= 0x20;
- TH1 = 0xfd;
- TR1 = 1;
- }
uart.h
![](https://code.csdn.net/assets/CODE_ico.png)
- #ifndef _UART_H_
- #define _UART_H_
- extern void uart_init();
- // extern void uart_send_byte(unsigned char byte);
- // extern void uart_send_str(unsigned char *s);
- #endif
主函数:ds18b20.c
![](https://code.csdn.net/assets/CODE_ico.png)
- #include <reg52.h>
- #include <intrins.h>
- #include <stdio.h>
- #include "./lcd/lcd.h"
- #include "./delay/delay.h"
- #include "./uart/uart.h"
- #define LEDPORT P1
- sbit ds = P2^3;
- sbit beep = P2^7;
- bit ack = 0;
- void ds_reset()
- {
- ds = 1; //总线拉高
- ds = 0;
- delay_us(200);
- delay_us(200);
- ds = 1; //释放总线
- delay_us(30);
- if(0 == ds) //检测是否被拉低
- {
- ack = 1;
- }
- else
- {
- ack = 0;
- }
- delay_us(200);
- delay_us(100);
- }
- void ds_send_byte(unsigned char byte)
- {
- unsigned char i;
- for(i = 0; i < 8; i++)
- {
- ds = 0;
- _nop_();
- _nop_(); //1us
- ds = byte & 0x01; //最低位开始赋值
- byte >>= 1;
- delay_us(30);
- ds = 1;
- }
- delay_us(30);
- }
- bit ds_read_bit()
- {
- bit tmp;
- ds = 1;
- ds = 0;
- _nop_();
- _nop_();
- ds = 1;
- tmp = ds;
- delay_us(30);
- return tmp;
- }
- unsigned char ds_read_byte()
- {
- unsigned char i,j,k;
- for(i = 0; i < 8; i++)
- {
- j = ds_read_bit();
- k = (j << 7) | (k >> 1);
- }
- return k;
- }
- void main()
- {
- unsigned char a;
- unsigned int b;
- unsigned char i;
- unsigned int temp;
- unsigned char num = 0x7f;
- unsigned char disbuf[20];
- float wendu;
- lcd_init();
- uart_init();
- while(1)
- {
- ds_reset();
- ds_send_byte(0xcc);
- ds_send_byte(0x44);
- ds_reset();
- ds_send_byte(0xcc);
- ds_send_byte(0xbe);
- a = ds_read_byte();
- b = ds_read_byte();
- temp = (b << 8) | a;
- wendu = (float)temp * 0.0625;
- sprintf(disbuf,"%6.2f",wendu);
- lcd1602_dis_str(4,0,"WELCOME!");
- lcd1602_dis_str(1,1,"wendu:");
- lcd1602_dis_str(7,1,disbuf);
- lcd_dis_self();
- lcd_dis_char(14,1,'C');
- if(wendu > 30)
- {
- LEDPORT = _crol_(num,1);
- num = LEDPORT;
- delay_us(50);
- for(i = 0; i < 100; i++)
- {
- beep = ~beep;
- delay_us(100);
- }
- }
- TI = 1; //发送中断标志位
- printf("temperature is : %f\n",wendu);
- }
- }
![](http://static.blog.csdn.net/images/save_snippets.png)
温度传感器检测温度报警装置相关推荐
- 毕设一:老年人摔倒检测及报警装置
我的毕设:老年人摔倒检测及报警装置 小白上路 任务要求 基本思路 基本实施方案 论文摘要 硬件原理图 APP界面 小白上路 哈哈哈,毕业了3个月的我已然逐渐融入公司的生活,现在想总结一下我大学里的毕业 ...
- 毕设四:老年人摔倒检测及报警装置
毕设四:老年人摔倒检测及报警装置 最近工作比较忙,刚转正,没有记录完自己的毕设,今天空闲,想再说说,并把论文以及一些工具上传.记得我前面说过,我这个毕设的GPS模块还是挺坑人的,在室内定位都没有信号, ...
- 毕设二:老年人摔倒检测及报警装置
毕设二:老年人摔倒检测及报警装置 在上一篇文章中说了大致的思路,在这里补充一些在调试过程中遇到的问题,由于当时水平有限,对于STM32理解的还不是很透彻,代码都是东拼西凑的移植,规范性不是很好,后面会 ...
- 【001】基于51单片机的DS18B20温度检测与报警装置的proteus仿真设计
一.设计资料内容(私信获取) 1. 包含proteus仿真一份: 2. keil源代码一份: 3. 包含基于51单片机的DS18B20温度监测与报警的proteus仿真设计课程报告一份: 4. 包含基 ...
- 基于arduino的一套农业智能检测与报警装置
[本文为笔者第一篇blog,对于排版与代码部分细节处理不到位,请海涵] 项目介绍 笔者利用"arduino创客主板"制作了一套可以实时监测农业大棚室内温度.湿度.光照强度.火焰相关 ...
- 毕设三:老年人摔倒检测及报警装置
接着说 周末到了,咱再接着说说哈哈哈哈- 上一集咱们说到在腾讯云服务器上运行workerman-master文件下的port-6610文件.下一步就测试看看咱们的通讯是否正常,也就是说我们向腾讯云服务 ...
- 毕设五:老年人摔倒检测及报警装置
好久没写了,最近有同学私信我说,APP的制作过程,有一说一我忘得也差不多了,翻翻以前的代码,还有一个副本,下面大概回忆一下制作过程,给同学们一个大概的流程. Android Studio 我使用的是这 ...
- 【单片机】温度感应报警装置的设计与制作(说明书)
前 言 这是本人在大学期间的<单片机控制技术实训>课程中,所作的结课作业项目,该项目是制作一个温度感应形式的装置,而这种类似的装置,在生活中很常见,很多公共场合也有相关的装置,并且也有 ...
- ADC0809检测报警c语言,51单片机ADC0809+AD590温度检测、报警程序
#include "reg52.h"//头文件 #include "intrins.h" #define uchar unsigned char//宏定义 #d ...
最新文章
- php运行cpu利用率低,PHP-如何减低php程序的cpu使用率?
- ECS应用管理最佳实践
- mysql 左连接 例子_mysql左连接自连接例子
- java焦点图_javascript焦点图(能够自己主动切换 )
- Parameter 对象
- GetLastError函数使用及返回代码对照
- SOA架构设计经验分享—架构、职责、数据一致性
- 数字图像处理实验5图像复原
- jQuery-input输入框下拉提示层
- 都说如果朋友都是有钱人,你也会更容易发财
- textarea的maxlength属性兼容解决方案
- 文献格式 ShareLaTeX and Overleaf
- 数据结构二叉树算法c语言实现,数据结构与算法 :AVL平衡二叉树C语言实现
- 清明节偷偷训练“熊猫烧香”,结果我的电脑为熊猫“献身了”!
- css实现多余图片隐藏
- 【国庆特辑】43份元宇宙报告
- 认识计算机教案流程图,流程图教案信息技术.doc
- Mixed Precision Training混合精度训练笔记及框架代码
- GreenHills基本操作:通过 R寄存器和上下文变量 定位异常
- 简易Android专注模式的实现
热门文章
- 分布模型的均值与方差
- python write函数参数_Python函数-函数参数、返回值
- 程序算法编程学习网站
- 周立功: 我的25年嵌入式生涯——非常诚恳之谈
- MCU_AT24C02存储芯片
- 熟练掌握R语言的Meta分析全流程和不确定性分析,并结合机器学习等方法讲解Meta分析在文献大数据的延伸应用
- Ubuntu16.04下Opencv3.4.5的卸载与带cuda安装
- 教你如何解决网络所面临的安全问题?
- 一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)
- 生成一维码条码码,扫码查询相关条码信息