历史上的今天
今天是:2024年12月31日(星期二)
2021年12月31日 | 基于51单片机的多点8路温度采集系统
2021-12-31 来源:eefocus
硬件设计
仿真图1: 总共有8路温度采集点,基于DS18B20,LCD1602以轮询的方式显示

程序设计
#include #include #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 != '




