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
|
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!