51单片机+HC4051+DS18B20多点温度测量+Proteus仿真

51单片机+HC4051+DS18B20多点温度测量+Proteus仿真


  • Proteus仿真
    在这里插入图片描述

主程序代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
单片机八路温度采集系统
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
#include <reg52.h>
#include "delay.h"
#include "lcd1602.h"
#include "DS18B20.h"

#define uchar unsigned char //对数据类型定义
#define uint unsigned int

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*端口定义\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
/\*----74HC4051端口定义------------\*/

sbit HC4051_A=P2^0;
sbit HC4051_B=P2^1;
sbit HC4051_C=P2^2;

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*定义变量\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
float Temp[8]; //温度变量
uchar Temp_Str[3]; //数组变量存放温度数据
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*函数声明\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/

void HC4051\_CH(uchar ch);//HC4051通道选择函数

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\* 函 数 名 : 主函数
\* 函数功能 :
\* 输 入 : 无
\* 输 出 : 无
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
void main()
{
uchar i;
Lcd1602\_Init(); //1602初始化
Lcd1602\_Write\_Cmd(0x01); //清屏
for(i=0;i<8;i++) //8个温度传感器初始化
{
HC4051\_CH(i); //选择通道
DS18B20\_Init(); //温度传感器初始化
}
while(1)
{
for(i=0;i<8;i++) //读取8路温度传感器温度值
{
HC4051\_CH(i); //选择通道
Temp[i]=DS18B20\_ReadTemp(); //读取温度值
if(Temp[i]>0) //正温度
{
Temp_Str[0]=(int)Temp[i]/100+48; //提取温度百、十、个位
Temp_Str[1]=((int)Temp[i]%100)/10+48;
Temp_Str[2]=(int)Temp[i]%10+48;
}
else //负温度
{
Temp[i]=-Temp[i]; //将负数转换为正数
Temp_Str[0]='-'; //显示“—”号
Temp_Str[1]=((int)Temp[i]%100)/10+48; //提取温度个、十位
Temp_Str[2]=(int)Temp[i]%10+48;
Temp[i]=-Temp[i]; //将温度恢复
}
LcdShowStr(0+4\*(i%4),i/4,Temp_Str);//将温度显示在LCD上
}
Delay\_Ms(30);
}
}
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\* 函 数 名 : HC4051\_CH(uchar ch)
\* 函数功能 : HC4051通道选择函数
\* 输 入 : ch:选择的通道
\* 输 出 : 无
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
void HC4051\_CH(uchar ch)
{
HC4051_A=ch%2;
HC4051_B=(ch%4)/2;
HC4051_C=ch/4;
}

由于程序文件比较多,不一一列出,资料在下方提供

程序源码和仿真资源

1
2
3
链接:https://pan.baidu.com/s/1mFRC_1KUIxFfX58ELRLqog 
提取码:rja4