单片机——温度传感器
来源:互联网 发布:网络监控软件破解版 编辑:程序博客网 时间:2024/05/16 12:50
今天利用数字温度传感器DS18B20与单片机结合写了一段程序,利用数字温度传感器DS18B20测量温度信号,计算后在1602显示屏上显示出当前的室内温度。其测量的温度范围为-55~125摄氏度,基本上符合我们正常的温度需求。
有关DS18B20的详细资料,可以点击这里,首先我们需要根据DS18B20的时序图特性写代码进行初始化,启动温度转换,读暂存器等一些操作。将读好的数据转换成我们需要的float型的数据显示在1602显示屏上,下面是具体的实现代码:
#include <reg51.h>#include <intrins.h>#include <stdio.h>#define dataport P0unsigned char code b[10]={'0','1','2','3','4','5','6','7','8','9'} ;unsigned char temp[3] ;#define RS_CLR RS=0#define RS_SET RS=1 #define RW_CLR RW=0#define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1 sbit RS = P2^6 ;sbit RW = P2^5 ;sbit EN = P2^7 ;void delayms(unsigned int xms) { unsigned int i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);}void DelayUs2x(unsigned char t){ while(--t);}sbit DQ = P3^7 ;bit DS18B20_Init(){ bit dat; DQ = 1; DelayUs2x(5); DQ = 0; //给一个下降沿 DelayUs2x(200); DelayUs2x(200); //延时480us < t < 960us DQ = 1; DelayUs2x(50); //15~60us以后,在60~240us之间,接受应答信号 dat = DQ; //dat = 0 初始化成功 dat = 1 初始化失败// UART_SendStr(); DelayUs2x(25); //延时后返回 return dat;}void write_char(unsigned char dat){ unsigned char i; for (i = 0; i < 8; i++) { DQ = 0; DelayUs2x(5); DQ = dat & 0x01; //发送数据 DelayUs2x(25); //延时15~60us DQ = 1; dat >>= 1; }}unsigned char ReadChar(){ unsigned char dat,i; for (i = 0; i < 8; i++) { DQ = 0; dat >>= 1; DQ = 1; if (DQ) { dat |= 0x80; } DelayUs2x(25); } return dat; }unsigned int ReadTemp(void){ unsigned char Temp_L = 0; unsigned int Temp_H = 0; unsigned int Temp; DS18B20_Init(); //初始化 write_char(0xCC); //跳过ROM write_char(0x44); //启动温度转换 delayms(10); //等待转换结果 DS18B20_Init(); write_char(0xCC); write_char(0xBE); //读温度暂存器(共9字节),一般只读前两个,第一个是低八位,第二个是高八位 Temp_L = ReadChar(); Temp_H = ReadChar(); Temp_H <<= 8; Temp = Temp_L + Temp_H; return Temp;}void LCD_Write_Comand(unsigned char comand)//写指令{ delayms(5) ; RS_CLR ; RW_CLR ;EN_SET;dataport = comand ; _nop_() ;EN_CLR ; }void LCD_Write_Data(unsigned char data1) //写数据{ delayms(5) ; RS_SET ;RW_CLR ;EN_SET ;dataport = data1 ; _nop_() ;EN_CLR ; }void Init() //对1602显示器进行初始化{ EN_CLR ; LCD_Write_Comand(0x38) ; delayms(5) ; LCD_Write_Comand(0x38) ; delayms(5) ; LCD_Write_Comand(0x38) ; delayms(5) ; LCD_Write_Comand(0x38) ; LCD_Write_Comand(0x08) ; //显示关闭 LCD_Write_Comand(0x01) ; //显示清屏 LCD_Write_Comand(0x06) ; //显示光标移动设置 LCD_Write_Comand(0x0C) ; //显示开及光标设置}void LCD_Clear()//清屏{ LCD_Write_Comand(0x01) ;delayms(5) ;}void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) //显示屏上写入字符串{ if(y == 0) { LCD_Write_Comand(0x80+x) ; } else { LCD_Write_Comand(0xC0+x) ; } while(*s) { LCD_Write_Data(*s) ; // delayms(255) ; s++; }}void main() { unsigned char wendu[16] ; float i ; int a; DS18B20_Init(); Init() ; LCD_Clear() ; while(1) { a = ReadTemp(); i = (float)a*0.0625 ; sprintf(wendu,"%f",i) ; LCD_Write_String(0,0,"Temperature:") ; LCD_Write_String(3,1,wendu) ; } }
0 0
- 单片机——温度传感器
- 51单片机DS18B20温度传感器详解
- 通过PIC单片机使用DHT21温度传感器
- AVR单片机(ATmega16L)DS18B20温度传感器驱动程序
- 51单片机(STC89C52)DS18B20温度传感器驱动程序
- PIC单片机(PIC16F877A)DS18B20温度传感器驱动程序
- STM32单片机学习(11) DS18B20温度传感器实验
- STM32单片机学习(11) DS18B20温度传感器实验
- 温度传感器
- 基于单片机的温度传感器18b20的C语言程序
- 利用STM32F103R8T6内部的温度传感器测量单片机的温度
- [南工程单片机课设]温度传感器温度检测项目
- STM32F103单片机软件模拟IIC并读取TMP112数字温度传感器
- 基于51单片机及DS18B20温度传感器的数字温度计设计
- 水温控制系统设计(AVRmega16单片机)代码编写(包含显示器、单片机、温度传感器)
- 基于S3C2440的嵌入式Linux驱动——DS18B20温度传感器(添加使用platform总线机制)
- 基于S3C2440的嵌入式Linux驱动——DS18B20温度传感器(添加使用platform总线机制)
- 基于S3C2440的嵌入式Linux驱动——DS18B20温度传感器(添加使用platform总线机制)
- HPM人脸器官定位分析
- MXNet学习7——Logistic Regression
- Google Java编程风格指南
- linux内存管理---伙伴系统算法
- 贝叶斯公式的共轭分布
- 单片机——温度传感器
- android无限轮播广告的简单实现
- 串口开发
- openssl rsa 命令行 用法
- Python 3基础教程37-tkinter添加图片和文本
- Yogurt factory
- 使用Python实现质因式分解算法
- Java 8新特性 全新的日期时间API
- React-Navigation之TabNavigator 配置