硬件设计

(末尾附文件)

仿真图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仿真程序原理图设计相关推荐

  1. 基于51单片机的L298N直流电机调速系统Proteus仿真程序

    基于51单片机的L298N直流电机调速系统Proteus仿真程序 本此设计选择STC89C52单片机作为主控芯片,选取带有光电编码器的直流电机作为被控对象,利用单片机的T0定时器产生PWM信号并送到直 ...

  2. 基于51单片机的光电测速系统测转速方案原理图设计

    系统的功能分析 (附文件) 本设计由STC89C52单片机电路+液晶LCD1602显示电路+光电测速(槽型光耦)电路+电源电路组成. 1.通过光电传感器测速,光电传感器检测轮盘上的孔数进而知道轮盘转了 ...

  3. 基于51单片机的智能饮水机烧水控制系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前温度和设定温度 2.当温度到达100℃时,蜂鸣器报警提醒水烧开了 3.按键可更改预设温度值,当温度低于设定温度5 ...

  4. 基于51单片机声音噪声分贝检测采集显示proteus仿真原理图PCB程序设计

    硬件设计 (末尾附文件) 功能说明: 1.基于STC89C51/52(与AT89S51/52.AT89C51/52通用)单片机作为主控制器 2.采用LCD1602液晶显示屏实时显示分贝值: 3.使用小 ...

  5. 基于51单片机的多路热电偶测温系统proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前检测的温度值 2.循环显示多路热电偶检测值 3.当温度超过设定温度值一定范围以后,蜂鸣器报警,同时启动升温或降温装置 ...

  6. 基于51单片机的时钟闹钟温度计LCD1602显示proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示时间/当前温度 2.按键可进行闹钟设置和温度上下限设置 3.到达闹钟时间或温度超过阈值范围,蜂鸣器报警 4.到达闹钟 ...

  7. 基于51单片机智能台灯pwm调光强光控方案原理图设计

    硬件电路的设计 (末尾附文件) 系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STC89C52单片机电路+光照检测电路(光敏电阻)+AD0832转换电路+4位高亮LED灯电路+按键电路 ...

  8. 基于51单片机的教室照明灯人数计数系统proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前时间/温度/教室人数 2.自动模式下,在工作时间内(1824时),当环境黑暗时,根据进入教室的人数开启14盏灯,其余 ...

  9. 基于51单片机的智能蓝牙路灯街灯控制系统proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.液晶实时显示时间/环境光强/工作模式 2.每隔5s向蓝牙串口发送一次信息 3.支持路灯故障检测 4.工作时间18~24时,两个路灯同时点亮,24时 ...

  10. 基于51单片机的超声波测距仪测液位及报警方案原理图设计

    系统的功能分析 (末尾附文件) 具体框图 原理图 5V电源电路设计 本系统选择5V直流电源作为系统总电源,为整个系统供电,电路简单.稳定.DC为电源的DC插座,可以直接接USB电源线,一端插在DC插座 ...

最新文章

  1. 大型商业银行数据库连接池选型策略
  2. UVA10129 Play on Words (并查集判连通+欧拉回路)
  3. GPLT2017题目
  4. 笔记:python设计模式
  5. html点击图片产生事件,jquery – 图像单击HTML5 Canvas中的事件
  6. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-10项目各种全局帮助类
  7. linux有名管道大小,Linux中的pipe与named pipe(FIFO),即管道和命名管道
  8. WinRunner介绍
  9. 未来发展人工智能的意义是什么?
  10. Java快速入门笔记-02 Java基础(基本数据类型、变量和常量、运算符、数组、字符串)
  11. 这一次,抄袭的人竟然是Facebook!美版微信要出现了吗?!
  12. 在哪打开用户和计算机,控制面板在哪 打开控制面板的几种方法
  13. 免费主机 虚拟主机 香港虚拟主机
  14. Java 媒体框架 之 JMF
  15. 使用ctex宏包出现的kpathsea错误
  16. java StringUtil之String工具类
  17. ResNet的改进系列:ResNext和Res2Net
  18. CSS 单行/多行文本溢出显示省略号(...)的实现
  19. 电力系统的延时功率流 (CPF)的计算【 IEEE-14节点】(Matlab代码实现)
  20. 陷阱技术探秘 ──动态汉化Windows技术的分析 (转)

热门文章

  1. Linux服务器查看内存型号
  2. MXNet之CNN:自定义CNN-OCR算法训练车牌数据集(umpy.ndarray格式数据)的模型实现一张新车牌照片字符预测
  3. 入门Python,胶水语言的优势和困扰
  4. 自抗扰控制器-1.跟踪微分器 TD
  5. 单例模式中的饿汉和懒汉模式
  6. 今日头条笔试题 数列
  7. IP地址被屏蔽怎么解决
  8. 微信H5开发wx.config授权invalid signature
  9. Apple苹果iOS数据丢失如何恢复?
  10. NWDS部署安装XPI Inspector