基于51单片机的多点8路温度采集系统 proteus仿真程序原理图设计
硬件设计
(末尾附文件)
仿真图1: 总共有8路温度采集点,基于DS18B20,LCD1602以轮询的方式显示
程序设计
#include <AT89X52.h>
#include <Intrins.h>#define DATA P1 //1602驱动端口
//ROM操作命令
#define READ_ROM 0x33 //读ROM
#define SKIP_ROM 0xCC //跳过ROM
#define MATCH_ROM 0x55 //匹配ROM
#define SEARCH_ROM 0xF0 //搜索ROM
#define ALARM_SEARCH 0xEC //告警搜索//存储器操作命令
#define ANEW_MOVE 0xB8 //重新调出E^2数据
#define READ_POWER 0xB4 //读电源
#define TEMP_SWITCH 0x44 //启动温度变换
#define READ_MEMORY 0xBE //读暂存存储器
#define COPY_MEMORY 0x48 //复制暂存存储器
#define WRITE_MEMORY 0x4E //写暂存存储器//数据存储结构
typedef struct tagTempData
{unsigned char btThird; //百位数据 unsigned char btSecond; //十位数据unsigned char btFirst; //个位数据unsigned char btDecimal; //小数点后一位数据unsigned char btNegative; //是否为负数
}TEMPDATA;
TEMPDATA m_TempData;//引脚定义
sbit DQ = P2^7; //数据线端口
sbit RS= P2^0;
sbit RW= P2^1;
sbit E= P2^2;//DS18B20序列号,通过调用GetROMSequence()函数在P1口读出(读8次)
const unsigned char code ROMData1[8] = {0x28, 0x33, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xD7}; //U1
const unsigned char code ROMData2[8] = {0x28, 0x30, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x8E}; //U2
const unsigned char code ROMData3[8] = {0x28, 0x31, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xB9}; //U3
const unsigned char code ROMData4[8] = {0x28, 0x32, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xE0}; //U4
const unsigned char code ROMData5[8] = {0x28, 0x34, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x52}; //U5
const unsigned char code ROMData6[8] = {0x28, 0x35, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x65}; //U6
const unsigned char code ROMData7[8] = {0x28, 0x36, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x3C}; //U7
const unsigned char code ROMData8[8] = {0x28, 0x37, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x0B}; //U8//判断忙指令
void Busy()
{DATA = 0xff;RS = 0;RW = 1;while(DATA & 0x80){E = 0;E = 1;}E = 0;
}//写指令程序
void WriteCommand(unsigned char btCommand)
{Busy();RS = 0;RW = 0;E = 1;DATA = btCommand;E = 0;
}//写数据程序
void WriteData(unsigned char btData)
{Busy();RS = 1;RW = 0;E = 1;DATA = btData;E = 0;
}//清屏显示
void Clear()
{WriteCommand(1);
}//初始化
void Init()
{WriteCommand(0x0c); //开显示,无光标显示WriteCommand(0x06); //文字不动,光标自动右移WriteCommand(0x38); //设置显示模式:8位2行5x7点阵
}//显示单个字符
void DisplayOne(bit bRow, unsigned char btColumn, unsigned char btData, bit bIsNumber)
{if (bRow) WriteCommand(0xc0 + btColumn);else WriteCommand(0x80 + btColumn);if (bIsNumber) WriteData(btData + 0x30);else WriteData(btData);
}//显示字符串函数
void DisplayString(bit bRow, unsigned char btColumn, unsigned char *pData)
{while (*pData != '\0'){if (bRow) WriteCommand(0xc0 + btColumn); //显示在第1行else WriteCommand(0x80 + btColumn); //显示在第0行WriteData(*(pData++)); //要显示的数据btColumn++; //列数加一}
}//延时16us子函数
void Delay16us()
{unsigned char a;for (a = 0; a < 4; a++);
}//延时60us子函数
void Delay60us()
{unsigned char a;for (a = 0; a < 18; a++);
}//延时480us子函数
void Delay480us()
{unsigned char a;for (a = 0; a < 158; a++);
}//延时240us子函数
void Delay240us()
{unsigned char a;for (a = 0; a < 78; a++);
}//延时500ms子函数
void Delay500ms()
{unsigned char a, b, c;for (a = 0; a < 250; a++)for (b = 0; b < 3; b++)for (c = 0; c < 220; c++);
}//芯片初始化
void Initialization()
{while(1){DQ = 0;Delay480us(); //延时480usDQ = 1;Delay60us(); //延时60usif(!DQ) //收到ds18b20的应答信号{ DQ = 1;Delay240us(); //延时240usbreak; }}
}
.
文件仅供参考
链接:https://pan.baidu.com/s/1CReCdMeSYbgN_peFyJbBdg
提取码:th36
.
基于51单片机的多点8路温度采集系统 proteus仿真程序原理图设计相关推荐
- 基于51单片机的L298N直流电机调速系统Proteus仿真程序
基于51单片机的L298N直流电机调速系统Proteus仿真程序 本此设计选择STC89C52单片机作为主控芯片,选取带有光电编码器的直流电机作为被控对象,利用单片机的T0定时器产生PWM信号并送到直 ...
- 基于51单片机的光电测速系统测转速方案原理图设计
系统的功能分析 (附文件) 本设计由STC89C52单片机电路+液晶LCD1602显示电路+光电测速(槽型光耦)电路+电源电路组成. 1.通过光电传感器测速,光电传感器检测轮盘上的孔数进而知道轮盘转了 ...
- 基于51单片机的智能饮水机烧水控制系统proteus仿真原理图PCB
功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前温度和设定温度 2.当温度到达100℃时,蜂鸣器报警提醒水烧开了 3.按键可更改预设温度值,当温度低于设定温度5 ...
- 基于51单片机声音噪声分贝检测采集显示proteus仿真原理图PCB程序设计
硬件设计 (末尾附文件) 功能说明: 1.基于STC89C51/52(与AT89S51/52.AT89C51/52通用)单片机作为主控制器 2.采用LCD1602液晶显示屏实时显示分贝值: 3.使用小 ...
- 基于51单片机的多路热电偶测温系统proteus仿真原理图PCB
功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前检测的温度值 2.循环显示多路热电偶检测值 3.当温度超过设定温度值一定范围以后,蜂鸣器报警,同时启动升温或降温装置 ...
- 基于51单片机的时钟闹钟温度计LCD1602显示proteus仿真原理图PCB
功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示时间/当前温度 2.按键可进行闹钟设置和温度上下限设置 3.到达闹钟时间或温度超过阈值范围,蜂鸣器报警 4.到达闹钟 ...
- 基于51单片机智能台灯pwm调光强光控方案原理图设计
硬件电路的设计 (末尾附文件) 系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STC89C52单片机电路+光照检测电路(光敏电阻)+AD0832转换电路+4位高亮LED灯电路+按键电路 ...
- 基于51单片机的教室照明灯人数计数系统proteus仿真原理图PCB
功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前时间/温度/教室人数 2.自动模式下,在工作时间内(1824时),当环境黑暗时,根据进入教室的人数开启14盏灯,其余 ...
- 基于51单片机的智能蓝牙路灯街灯控制系统proteus仿真原理图PCB
功能: 0.本系统采用STC89C52作为单片机 1.液晶实时显示时间/环境光强/工作模式 2.每隔5s向蓝牙串口发送一次信息 3.支持路灯故障检测 4.工作时间18~24时,两个路灯同时点亮,24时 ...
- 基于51单片机的超声波测距仪测液位及报警方案原理图设计
系统的功能分析 (末尾附文件) 具体框图 原理图 5V电源电路设计 本系统选择5V直流电源作为系统总电源,为整个系统供电,电路简单.稳定.DC为电源的DC插座,可以直接接USB电源线,一端插在DC插座 ...
最新文章
- 大型商业银行数据库连接池选型策略
- UVA10129 Play on Words (并查集判连通+欧拉回路)
- GPLT2017题目
- 笔记:python设计模式
- html点击图片产生事件,jquery – 图像单击HTML5 Canvas中的事件
- net core体系-web应用程序-4asp.net core2.0 项目实战(1)-10项目各种全局帮助类
- linux有名管道大小,Linux中的pipe与named pipe(FIFO),即管道和命名管道
- WinRunner介绍
- 未来发展人工智能的意义是什么?
- Java快速入门笔记-02 Java基础(基本数据类型、变量和常量、运算符、数组、字符串)
- 这一次,抄袭的人竟然是Facebook!美版微信要出现了吗?!
- 在哪打开用户和计算机,控制面板在哪 打开控制面板的几种方法
- 免费主机 虚拟主机 香港虚拟主机
- Java 媒体框架 之 JMF
- 使用ctex宏包出现的kpathsea错误
- java StringUtil之String工具类
- ResNet的改进系列:ResNext和Res2Net
- CSS 单行/多行文本溢出显示省略号(...)的实现
- 电力系统的延时功率流 (CPF)的计算【 IEEE-14节点】(Matlab代码实现)
- 陷阱技术探秘 ──动态汉化Windows技术的分析 (转)