单片机设计_单路测温系统(AT89C51、DS18B20温度传感器、LCD1602)

2023-11-18

单片机测温系统

想要更多项目私wo!!!

一、简介

此系统主要由AT89C51、DS18B20温度模块和LCD1602组成。
大致的原理是DS18B20温度采集到的数据传送给AT89C51的P3.3/INT1(外部中断1),最后通过LCD1602显示当前的实时温度。

二、效果图

模拟仿真图
在这里插入图片描述

三、源代码
/*想要更多项目私wo!!!*/
/***************   writer:shopping.w   ******************/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}

sbit DQ = P3^3;
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;

uchar code Temp_Disp_Title[]={"Current Temp :   "};
uchar Current_Temp_Display_Buffer[]={" TEMP:   "};

uchar code Temperature_Char[8] = 
{
 	0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00
};

uchar code df_Table[]=
{
 	0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
};

uchar CurrentT = 0;
uchar Temp_Value[]={0x00,0x00};
uchar Display_Digit[]={0,0,0,0};
bit DS18B20_IS_OK = 1;

void DelayXus(uint x)
{
 	uchar i;
	while(x--)
	{
	 	for(i=0;i<200;i++);
	}
}

bit LCD_Busy_Check()
{
 	bit result;
	LCD_RS = 0;
	LCD_RW = 1;
	LCD_EN = 1;
	delayNOP();
	result = (bit)(P0&0x80);
	LCD_EN=0;
	return result;
}

void Write_LCD_Command(uchar cmd)
{
	while(LCD_Busy_Check());
	LCD_RS = 0;
	LCD_RW = 0;
	LCD_EN = 0;
	_nop_();
	_nop_();
	P0 = cmd;
	delayNOP();
	LCD_EN = 1;
	delayNOP();
	LCD_EN = 0;
}

void Write_LCD_Data(uchar dat)
{
	while(LCD_Busy_Check());
	LCD_RS = 1;
	LCD_RW = 0;
	LCD_EN = 0;
	P0 = dat;
	delayNOP();
	LCD_EN = 1;
	delayNOP();
	LCD_EN = 0;
}

void LCD_Initialise()
{
 	Write_LCD_Command(0x01);
	DelayXus(5);
	Write_LCD_Command(0x38);
	DelayXus(5);
	Write_LCD_Command(0x0c);
	DelayXus(5);
	Write_LCD_Command(0x06);
	DelayXus(5);	
}

void Set_LCD_POS(uchar pos)
{
 	Write_LCD_Command(pos|0x80);	
}

void Delay(uint x)
{
 	while(--x);
}

uchar Init_DS18B20()
{
 	uchar status;
	DQ = 1;
	Delay(8);
	DQ = 0;
	Delay(90);
	DQ = 1;
	Delay(8);
	DQ = 1;
	return status;
}

uchar ReadOneByte()
{
 	uchar i,dat=0;
	DQ = 1;
	_nop_();
	for(i=0;i<8;i++)
	{
	 	DQ = 0;
		dat >>= 1;
		DQ = 1;
		_nop_();
		_nop_();
		if(DQ)
			dat |= 0X80;
		Delay(30);
		DQ = 1;
	}
	return dat;
}

void WriteOneByte(uchar dat)
{
 	uchar i;
	for(i=0;i<8;i++)
	{
	 	DQ = 0;
		DQ = dat& 0x01;
		Delay(5);
		DQ = 1;
		dat >>= 1;
	}
}

void Read_Temperature()
{
 	if(Init_DS18B20()==1)
		DS18B20_IS_OK=0;
	else
	{
		WriteOneByte(0xcc);
		WriteOneByte(0x44);
		Init_DS18B20();
		WriteOneByte(0xcc);
		WriteOneByte(0xbe);
		Temp_Value[0] = ReadOneByte(); 
		Temp_Value[1] = ReadOneByte();
		DS18B20_IS_OK=1;	
	}	
}

void Display_Temperature()
{
 	uchar i;
	uchar t = 150, ng = 0;
	if((Temp_Value[1]&0xf8)==0xf8)
	{
	 	Temp_Value[1] = ~Temp_Value[1];
		Temp_Value[0] = ~Temp_Value[0]+1;
		if(Temp_Value[0]==0x00)
			Temp_Value[1]++;
		ng = 1;	
	}
	Display_Digit[0] = df_Table[Temp_Value[0]&0x0f];
	CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);
	Display_Digit[3] = CurrentT/100;
	Display_Digit[2] = CurrentT%100/10;
	Display_Digit[1] = CurrentT%10;
	Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0';
	Current_Temp_Display_Buffer[10] = '.';
	Current_Temp_Display_Buffer[9]  = Display_Digit[1] + '0';
	Current_Temp_Display_Buffer[8]  = Display_Digit[2] + '0';
	Current_Temp_Display_Buffer[7]  = Display_Digit[3] + '0';
	if(Display_Digit[3] == 0)
		Current_Temp_Display_Buffer[7]  = ' ';
	if(Display_Digit[2] == 0&&Display_Digit[3]==0)
		Current_Temp_Display_Buffer[8]  = ' ';
	if(ng)
	{
	 	if(Current_Temp_Display_Buffer[8]  == ' ')
			Current_Temp_Display_Buffer[8]  = '-';
		else if(Current_Temp_Display_Buffer[7]  == ' ')
			Current_Temp_Display_Buffer[7]  = '-';
		else 
			Current_Temp_Display_Buffer[6]  = '-';
	}
	Set_LCD_POS(0x00);
	for(i=0;i<16;i++)
	{
		Write_LCD_Data(Temp_Disp_Title[i]); 	
	}
	Set_LCD_POS(0x40);
	for(i=0;i<16;i++)
	{
		Write_LCD_Data(Current_Temp_Display_Buffer[i]); 	
	}		
	Set_LCD_POS(0x4d);
	Write_LCD_Data(0x00);
	Set_LCD_POS(0x4e);
	Write_LCD_Data('C');
}

void main()
{
 	LCD_Initialise();
	Read_Temperature();
	Delay(50000);
	Delay(50000);
	while(1)
	{
	 	Read_Temperature();
		if(DS18B20_IS_OK) 
			Display_Temperature();
		DelayXus(100);		
	}

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机设计_单路测温系统(AT89C51、DS18B20温度传感器、LCD1602) 的相关文章

  • Arduino F()宏的实现

    我试图了解 Arduino 中的 F 宏实际上对 PGMEM 和 RAM 做了什么以及运行时的影响是什么 有人可以指出定义这个宏的文件吗 这可能是旧版本 但定义它的一个地方是Wstring h as in here http andybro
  • c语言学生管理系统

    创建结构体里面包含学生的各种信息 struct xs int xh char xm 20 int gs yy wl double pj struct xs next 创建菜单 void menu printf n n printf 学生管理
  • Arduino Nano 上的 WiFi

    我无法找到的虚拟问题 我用来将 WiFi 802 11b g n 添加到 Raspberry Pi 的扩展板也可以在 Nano 上使用吗 换句话说 向 Arduino Nano 板添加 WiFi 有多容易 可行 Thanks Arduino
  • 如何在观察者中处理具有不同状态值类型的 Observables

    首先是上下文和问题 框架代码在帖子底部 我们正在创建并实现一个 C 框架 以便在 Arduino 等环境中使用 为此 我想使用观察者模式 其中任何对传感器状态变化感兴趣的组件 Observables 可以注册自己 并且它将通过 Observ
  • 在 Android 上将 USB 波特率从 9600 更改为 115200

    我有一个 Arduino 它以 115200 波特率串行发送数据 有一个应用程序以 9600 波特率从 Arduino 接收数据 代码是 Arduino USB serial converter setup Set control line
  • printf 的包装

    我在Arduino下编码 我想开发串行打印格式化功能 所以我尝试使用sprintf未知大小的缓冲区 基本上 我们可以避免谈论 Arduino 及其串行输出 并考虑将文本写入缓冲区 然后使用printf 我试过这个 include
  • Arduino:使用串口和软件串口与蓝牙模块

    我的目的是使用 Arduino 通过 HC 05 蓝牙模块在 PC 和 Android 设备之间建立通信 我使用 PC 和 Arduino 串行监视器 之间的 USB 通信以及 SoftwareSerial 来连接到 HC 05 我的问题是
  • 如何将值从 Arduino 发送到 Python,然后使用该值

    我正在构建一个使用 Python 进行远程控制的机器人 通过简单的 GUI 通过互联网发送控制消息 我的部分代码 GUI 和控制系统 运行得很好 但我陷入了困境 我正在尝试使用视差平传感器来获取与物体的距离信息Arduino Mega ht
  • DCF77 解码器与噪声信号

    我几乎完成了我的开源 DCF77 解码器项目 当我注意到标准 Arduino DCF77 库在噪声信号上表现非常差时 这一切就开始了 特别是当天线靠近计算机或洗衣机正在运行时 我永远无法从解码器中获取时间 我的第一个方法是向输入信号添加 数
  • sim800L GPRS 发布请求

    我一直在研究 LoNet 迷你 GSM 模块 SIM800L 并将其与 Arduino 连接 我已插入 SIM 移动卡并且可以连接互联网 通过串行监视器 我可以毫无问题地与它通信 但是当向网络服务器页面发出 GET 或 POST 请求时 它
  • 同时使用 GPRS 和 GSM

    我正在尝试使用 GSM GPRS 调制解调器的 GPRS 功能将数据发送到远程服务器 但我无法这样做 我在 Arduino 论坛上发布了一个问题 但没有得到任何回复 这是问题的链接 https robotics stackexchange
  • ESP32 Arduino-ide如何获取唯一id

    我试图自动为每个 esp32 设置一个唯一的 id 在我使用提供该方法的 ESP IDF 框架对设备进行编程之前esp efuse mac get default 这将返回一个 8 字节值 该值在我手上的所有设备上都是唯一的 在arduin
  • Arduino从SD卡读取最后一行

    我对 Arduino 业务还很陌生 如何从 SD 卡读取最后一行 通过以下代码片段 我可以读取第一行 n 之前的所有字符 现在我想添加一个 向后 声明 或其他内容 到目前为止我的代码 include
  • 在 Arduino 上将整数/小数转换为十六进制?

    如何将整数或小数变量转换为十六进制字符串 我可以做相反的事情 将十六进制转换为整数 但我无法找出其他方法 这是为了Serial print 数组中的十六进制值 查看 Arduino 字符串教程here http arduino cc en
  • SIM900 GSM/GPRS 未获得正确的 AT+CREG?回答

    我使用的是带有 IComsat SIM900 GSM GPRS 扩展板的 Arduino UNO 使用以下教程 Arduino 实时 GPS 追踪器 http www samaria me uk 2011 12 arduino live g
  • 使用 Ardulink 命令 Arduino Uno

    我试图在我的 JAVA 应用程序中使用 Ardulink 库来命令我的 Arduino Uno 但没有成功 我不知道我错过了什么 这是我的代码 Link link Link getDefaultInstance boolean connec
  • 在声明对象之前在全局函数中使用类的成员函数

    我有一个事件处理函数 在该函数中调用了类的成员函数 事件处理函数在类 cpp 文件中声明 但不是类的一部分 它不是成员函数 当我编译代码时 编译器表示该函数在范围内 因为它正在调用全局事件处理函数中的成员函数 我的问题如下 有没有办法在全局
  • 通过iPhone音频插孔读取数据

    我正在寻找一种方法来读取通过 iPhone 的音频插孔从 Arduino 发送的原始数据 我搜索了很多并发现this https github com sanjibahmad Is Headphone Plugged In tree mas
  • 在链接时合并全局数组/从多个编译单元填充全局数组

    我想定义一系列的东西 比如事件处理程序 的内容 该数组在编译时是完全已知的 但定义在 多个编译单元 分布在多个库中 至少在最终 静态 链接之前是相当解耦的 我想要 也保持这种方式 因此添加或删除编译单元将 还可以自动管理事件处理程序 而无需
  • Python串口通信

    我正在开发一个 Arduino 项目 由于内存限制 我将其与 Python 脚本连接起来 在Python方面 我有一个二维矩阵 其中包含各自的x y坐标值 并且在此列表中有26000个坐标对 因此 为了向大家澄清数据结构 pathlist

随机推荐

  • Game101现代计算机图形学入门学习笔记(七)

    光线追踪 一 光线追踪 1 为什么要使用光线追踪 二 基础光线追踪算法 1 光线 2 光线投射 1 着色过程 3 递归光线追踪 Whitted Style 1 基本过程 2 光线 表面相交 1 光线方程 3 轴对称包围盒 AABB 1 Un
  • pod指定路径下载第三方库

    pod指定路径下载第三方库 pod 版本库名 git gt 版本库地址 pod xxx git gt https github com xxx xxx ios git 如果下载下来发现缺少了文件 应该是未指定版本号 使用pod 路径 版本号
  • 运用flask时对于数据操作会保留前面的数据咋办?

    Base metadata drop all Base metadata create all 每次传入数据后补上 就会自动删除上次的上传数据 对于同一个数据库里面的同一张表
  • 并行计算初步—1—用向量之和食用一个栗子

    代码我都加上注释了 耐心看完就行了 23333 不是作者菜 是没耐心看完代码 作者就是菜 这段代码由lvxiangyu11编写 转载请注明出处 https blog csdn net lvxiangyu11 include cuda run
  • 在Unity中使用键盘操作UI

    在Unity中使用键盘操作UI 效果预览 相关技术 Navigation EventSystem 效果预览 相关技术 Navigation 可被选中的组件中的 Navigation 属性 例如 Button 每一个Button及所有可被选中
  • HarmonyOS开发详解(五)——鸿蒙高级组件数据动态绑定案例实践

    本文将专门花一篇来讲述ListContainer和PageSlider ListContainer主要是参考官方例子 PageSlider在原有官方例子上进行了一些升级改造 原有例子添加固定的文字 通过改造动态读取本地json内容和本地图片
  • UDP传送和接受结构体结构的消息--Qt

    前言 最近的项目用到UDP接收结构体 以为和普通的传送字符串的一样 没想到我还是太天真 要能够接收或者传送结构体 一个很重要的知识点是 结构体字节对齐 废话不多说 小课堂开始了 结构体对齐 参考https www cnblogs com c
  • 嵌入式小白学习--STM32F103C8T6基于HAL库移植uC-COSIII系统

    本次将介绍基于HAL库的uC COSIII移植 以及通过uC COSIII系统实现三个任务的同时进行 目录 Part1 要求总述 Part2 uC COSIII的原理介绍 Part3 移植过程 3 1 工程建立 3 2 移植过程 Part4
  • VsCode系列(三):添加Vue.js智能提示-插件

    VsCode添加Vue js智能提示 插件 在这篇文章中将为大家介绍如何为VsCode添加Vue js智能提示的方法 开始添加vetur 首先我们需要先下载并安装汉化Vs Code 可以看我之前的文章 VsCode下载安装及汉化 并打开VS
  • 【git】强制使用远程分支(git pull -f ?)

    git reset hard origin your branch 参考 https stackoverflow com questions 1125968 how do i force git pull to overwrite loca
  • 【windows】windows核心编程读书笔记

    关于Unicode编码 微软对对U n i c o d e支持的情况 Windows 2000既支持U n i c o d e 也支持A N S I 因此可以为任意一种开发应用程序 Windows 98只支持A N S I 只能为A N S
  • 华为OD机试 - 最长的指定瑕疵度的元音子串(Java )

    最长的指定瑕疵度的元音子串 题目描述 开头和结尾都是元音字母 aeiouAEIOU 的字符串为元音字符串 其中混杂的非元音字母数量为其瑕疵度 比如 a aa 是元音字符串 其瑕疵度都为0 aiur 不是元音字符串 结尾不是元音字符 abir
  • 六、STL容器:mySTL

    6 mySTL 6 1 复数类模板 complex lt gt include Complex h Test complextest cpp 6 2 容器 6 2 1 顺序容器 vector lt gt list lt gt deque l
  • 【CV】第 1 章:人工神经网络基础

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • ubuntu不能上网解决方法

    可能会是Network Manager 有BUG引起的 解决方法如下 首先 卸载掉Network Manager sudo apt get remove network manager 然后 手动配置网卡 在终端输入 sudo gedit
  • Shell之字符串、数组、内置命令、运算符

    文章目录 Shell字符串变量 Shell字符串变量 格式介绍 字符串的3种格式 字符串的3种格式区别 获取字符串的长度 小结 字符串拼接方式 Shell字符串变量 字符串截取 案例 小结 Shell索引数组变量 Shell索引数组变量 定
  • 神经网络的梯度下降法--基于手写数字识别神经网络(二)

    仅供个人学习使用 学习资料来源于 3Blue1Brown官方账号 上一节讲了神经网络的结构 本节主要讲神经网络是怎样进行学习 主要涉及两个内容 1 梯度下降的思想 Gtadient descent 2 隐含层神经元的真实目的 一 梯度 计算
  • C++报错无效的预处理命令include_C语言:全局变量在多个c文件中公用的方法!

    用C语言编写程序的时候 我们经常会遇到这样一种情况 希望在头文件中定义一个全局变量 然后包含到两个不同的c文件中 希望这个全局变量能在两个文件中共用 举例说明 项目文件夹project下有main c common c和common h三个
  • strapi的使用(一)

    一 strapi strapi是一个基于nodejs的CMS 内容管理系统 服务基于koa2 可以通过可视化页面简单的操作数据库建表 修改数据 配置权限等等 前端可以根据RESTful API 设计规范请求strapi默认配置的接口 获取到
  • 单片机设计_单路测温系统(AT89C51、DS18B20温度传感器、LCD1602)

    单片机测温系统 想要更多项目私wo 一 简介 此系统主要由AT89C51 DS18B20温度模块和LCD1602组成 大致的原理是DS18B20温度采集到的数据传送给AT89C51的P3 3 INT1 外部中断1 最后通过LCD1602显示