1、简介
一种基于51单片机的多路温度采集系统。该设计采用数字温度传感器DS18B20,此传感器读取被测量温度值并进行转换。将转换后的多路数据送到单片机处理,再通过LCD1602显示出来。
2、主要功能
通过LCD1602依次显示当前温度值,温度测量范围:0-99摄氏度。
3、环境搭建
资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频
仿真版本:Proteus8.6及以上版本
编译平台:Keil C51
编程语言:C语言
4、源程序
使用keil C51软件(内附安装包)实现程序编写与编译。
#include <AT89X52.h>
#include <Intrins.h>
#define DATA P0 //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点阵
}
5、proteus8.6仿真
采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。
当前温度:
6、设计资料清单
设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等,设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。由于不定期更新,最新的资料包不一定与下面图片完全一致,但主要资料都有。
7、资料获取方式
有偿,下载地址:EE03基于51单片机的多路温度采集系统设计(一)