版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Ø 八路温度监控系统目录一、 课程设计目的- 4 -二、 课程设计题目及任务要求- 4 -1.题目- 4 -2.任务要求- 4 -3.设计流程图- 4 -三、 电路分析- 5 -1 运用Proteus软件画出电路图如下- 5 -2 发送端电路设计分析- 6 -3 接收端电路分析- 7 -4 键盘电路设计- 8 -四、 程序分析- 9 -1 发送端程序- 9 -2 接收端程序- 16 -五、 硬件电路介绍- 20 -1 RS-232串口通信总线及其接口- 20 -2 MAX232芯片- 21 -3 74LS245芯片- 22 -4 DS18B20温度传感器- 23 -六、 在课程设计过
2、程中遇到的问题- 24 -1.使用Protues软件画图时问题- 24 -2.程序编写遇到问题- 24 -七、 总结- 25 -1、 设计目的 通过两个单片机最小系统、时钟芯片、RS-232通讯接口以及DS18B20单线数字传感器来实现远程温度的采集,远程控制。2、 设计题目及任务要求1. 题目 基于RS232串行通信的8路温度采集监控系统 2. 任务要求 通过两个单片机实现数据传送。主机循环采集监控8个通道的温度值通过RS-232通讯接口传送给从机,从机实现显示自动控制,自动控制模式下每3秒更换一个通道,每个循环更换8次,一直循环下去,更换成手动后,按下手动按键,开始手动控制,按下UP键,通
3、道加一,按下DOWN键,通道减一。3. 设计流程图 基于RS232串行通信的8路温度采集监控系统设计流程图,如图1所示。图1 流程图3、 电路分析1 运用Proteus软件画出电路图如下 基于RS232串行通信的8路温度采集监控系统>由两片单片机构成,发送端通过传感器采集温度发送给接收端,接收端使用按键控制模式转换和数码管显示温度。图2电路图 2 发送端电路设计分析 发送端使用DS18B20温度传感器采集温度通过RS-232通信接口电路传送给接收端。 (1) DQ引脚电路 DS18B20是支持“一线总线”接口的温度传感器,能通过一个单线接口进行发送或接受信息。在电路设计上,可以把8个DS
4、18B20的DQ引脚分别接到P2口的8个引脚。另外,每个DQ引脚还需要接上拉电阻4.7K和电源。(2) 供电方式选择工作任务要求测量温度范围在-55+125。如果选择寄生电源方式,当温度高于100时,DS18B20的漏电流比较大,通信可能无法进行,同时为了提高温度测量速度,选择外部供电方式。在VDD引脚接入一个外部电源,GND引脚接地,GND引脚不能悬空。 发送端电路图如下: 图3 发送端电路图3 接收端电路分析 接收端电路由按键电路和显示电路组成。通过RS-232通信接口技术接收发送端传来的数据,由数码管显示。(1)显示电路设计 显示采用数码管,数码管显示有静态串行显示和动态扫描显示等方式,
5、这里选择数码管动态扫描显示。数码管动态扫描显示电路由6个共阴极数码管、74LS245及电阻组成。P0口输出显示段码,经由一片74LS245驱动输出给数码管,P1口输出位码(片选),如图4所示。图4 显示电路图4 键盘电路设计8路温度采集监控系统有两种工作模式。用手动按键进行工作模式切换,在手动模式下按UP键通道加1,按DOWN键通道减1。这3个按键分别接P2口的P2.0、P2.1和P2.2引脚,如图5所示。图5 显示电路图4、 程序分析1 发送端程序 #include<at89x52.h>#include<intrins.h>#define uchar unsigned
6、 char#define uint unsigned int/温度传感器定义sbit DQ_0 = P20 ; /定义ds18B20总线IOsbit DQ_1 = P21 ;sbit DQ_2 = P22 ;sbit DQ_3 = P23 ;sbit DQ_4 = P24 ;sbit DQ_5 = P25 ;sbit DQ_6 = P26 ;sbit DQ_7 = P27 ;long uint tvalue;/温度值uchar tflag;/温度正负标志uchar move;/温度传感器的选择 void delay1ms(unsigned int ms)/延时1毫秒(不够精确的) unsign
7、ed int i,j; for(i=0;i<ms;i+) for(j=0;j<100;j+); void putc(uchar c) /传送一个字节 SBUF = c;while(TI = 0);TI = 0;/*ds1820程序*/ /*/void Delay(int num) /延时函数 while(num-) ;/-111111111/*/void Init_DS18B20_1(void)/初始化ds1820DQ_0 = 1; /DQ复位Delay(8); /稍做延时DQ_0 = 0; /单片机将DQ拉低Delay(80); /精确延时 大于 480usDQ_0 = 1; /
8、拉高总线Delay(14);Delay(20);/*/unsigned char ReadOneChar_1(void)/读一个字节unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-)DQ_0 = 0; / 给脉冲信号dat>>=1;DQ_0 = 1; / 给脉冲信号if(DQ_0)dat|=0x80;Delay(4);return(dat);/*/void WriteOneChar_1(unsigned char dat)/写一个字节unsigned char i=0;for (i=8; i>0; i-)DQ
9、_0 = 0;DQ_0 = dat&0x01;Delay(5);DQ_0 = 1;dat>>=1;/-222222222/*/void Init_DS18B20_2(void)/初始化ds1820DQ_1 = 1; /DQ复位Delay(8); /稍做延时DQ_1 = 0; /单片机将DQ拉低Delay(80); /精确延时 大于 480usDQ_1 = 1; /拉高总线Delay(14);Delay(20);/*/unsigned char ReadOneChar_2(void)/读一个字节unsigned char i=0;unsigned char dat = 0;f
10、or (i=8;i>0;i-)DQ_1 = 0; / 给脉冲信号dat>>=1;DQ_1 = 1; / 给脉冲信号if(DQ_1)dat|=0x80;Delay(4);return(dat);/*/void WriteOneChar_2(unsigned char dat)/写一个字节unsigned char i=0;for (i=8; i>0; i-)DQ_1 = 0;DQ_1 = dat&0x01;Delay(5);DQ_1 = 1;dat>>=1;/-33333333/*/void Init_DS18B20_3(void)/初始化ds1820
11、DQ_2 = 1; /DQ复位Delay(8); /稍做延时DQ_2 = 0; /单片机将DQ拉低Delay(80); /精确延时 大于 480usDQ_2 = 1; /拉高总线Delay(14);Delay(20);/*/unsigned char ReadOneChar_3(void)/读一个字节unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-)DQ_2 = 0; / 给脉冲信号dat>>=1;DQ_2 = 1; / 给脉冲信号if(DQ_2)dat|=0x80;Delay(4);return(dat);/*/
12、void WriteOneChar_3(unsigned char dat)/写一个字节unsigned char i=0;for (i=8; i>0; i-)DQ_2 = 0;DQ_2 = dat&0x01;Delay(5);DQ_2 = 1;dat>>=1;/-44444444/*/void Init_DS18B20_4(void)/初始化ds1820DQ_3 = 1; /DQ复位Delay(8); /稍做延时DQ_3 = 0; /单片机将DQ拉低Delay(80); /精确延时 大于 480usDQ_3 = 1; /拉高总线Delay(14);Delay(20)
13、;/*/unsigned char ReadOneChar_4(void)/读一个字节unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-)DQ_3 = 0; / 给脉冲信号dat>>=1;DQ_3 = 1; / 给脉冲信号if(DQ_3)dat|=0x80;Delay(4);return(dat);/*/void WriteOneChar_4(unsigned char dat)/写一个字节unsigned char i=0;for (i=8; i>0; i-)DQ_3 = 0;DQ_3 = dat&0
14、x01;Delay(5);DQ_3 = 1;dat>>=1;/-55555555/*/void Init_DS18B20_5(void)/初始化ds1820DQ_4 = 1; /DQ复位Delay(8); /稍做延时DQ_4 = 0; /单片机将DQ拉低Delay(80); /精确延时 大于 480usDQ_4 = 1; /拉高总线Delay(14);Delay(20);/*/unsigned char ReadOneChar_5(void)/读一个字节unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-)DQ_4 =
15、 0; / 给脉冲信号dat>>=1;DQ_4 = 1; / 给脉冲信号if(DQ_4)dat|=0x80;Delay(4);return(dat);/*/void WriteOneChar_5(unsigned char dat)/写一个字节unsigned char i=0;for (i=8; i>0; i-)DQ_4 = 0;DQ_4 = dat&0x01;Delay(5);DQ_4 = 1;dat>>=1;/-66666666/*/void Init_DS18B20_6(void)/初始化ds1820DQ_5 = 1; /DQ复位Delay(8);
16、 /稍做延时DQ_5 = 0; /单片机将DQ拉低Delay(80); /精确延时 大于 480usDQ_5 = 1; /拉高总线Delay(14);Delay(20);/*/unsigned char ReadOneChar_6(void)/读一个字节unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-)DQ_5 = 0; / 给脉冲信号dat>>=1;DQ_5 = 1; / 给脉冲信号if(DQ_5)dat|=0x80;Delay(4);return(dat);/*/void WriteOneChar_6(unsi
17、gned char dat)/写一个字节unsigned char i=0;for (i=8; i>0; i-)DQ_5 = 0;DQ_5 = dat&0x01;Delay(5);DQ_5 = 1;dat>>=1;/-77777777/*/void Init_DS18B20_7(void)/初始化ds1820DQ_6 = 1; /DQ复位Delay(8); /稍做延时DQ_6 = 0; /单片机将DQ拉低Delay(80); /精确延时 大于 480usDQ_6 = 1; /拉高总线Delay(14);Delay(20);/*/unsigned char ReadOn
18、eChar_7(void)/读一个字节unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-)DQ_6 = 0; / 给脉冲信号dat>>=1;DQ_6 = 1; / 给脉冲信号if(DQ_6)dat|=0x80;Delay(4);return(dat);/*/void WriteOneChar_7(unsigned char dat)/写一个字节unsigned char i=0;for (i=8; i>0; i-)DQ_6 = 0;DQ_6 = dat&0x01;Delay(5);DQ_6 = 1;da
19、t>>=1;/-88888888/*/void Init_DS18B20_8(void)/初始化ds1820DQ_7 = 1; /DQ复位Delay(8); /稍做延时DQ_7 = 0; /单片机将DQ拉低Delay(80); /精确延时 大于 480usDQ_7 = 1; /拉高总线Delay(14);Delay(20);/*/unsigned char ReadOneChar_8(void)/读一个字节unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-)DQ_7 = 0; / 给脉冲信号dat>>=1
20、;DQ_7 = 1; / 给脉冲信号if(DQ_7)dat|=0x80;Delay(4);return(dat);/*/void WriteOneChar_8(unsigned char dat)/写一个字节 unsigned char i=0; for (i=8; i>0; i-) DQ_7 = 0;DQ_7 = dat&0x01;Delay(5);DQ_7 = 1;dat>>=1; /*/unsigned int ReadTemperature(void)/读取温度 unsigned char a=0; unsigned char b=0; unsigned in
21、t t=0; float tt=0; switch(move) case 0 : Init_DS18B20_1(); WriteOneChar_1(0xCC); / 跳过读序号列号的操作 WriteOneChar_1(0x44); / 启动温度转换 Init_DS18B20_1(); WriteOneChar_1(0xCC); /跳过读序号列号的操作 WriteOneChar_1(0xBE); /读取温度寄存器 a=ReadOneChar_1(); /读低8位 b=ReadOneChar_1(); /读高8位 break; case 1 : Init_DS18B20_2(); WriteOne
22、Char_2(0xCC); / 跳过读序号列号的操作 WriteOneChar_2(0x44); / 启动温度转换 Init_DS18B20_2(); WriteOneChar_2(0xCC); /跳过读序号列号的操作 WriteOneChar_2(0xBE); /读取温度寄存器 a=ReadOneChar_2(); /读低8位 b=ReadOneChar_2(); /读高8位 break; case 2 : Init_DS18B20_3(); WriteOneChar_3(0xCC); / 跳过读序号列号的操作 WriteOneChar_3(0x44); / 启动温度转换 Init_DS18
23、B20_3(); WriteOneChar_3(0xCC); /跳过读序号列号的操作 WriteOneChar_3(0xBE); /读取温度寄存器 a=ReadOneChar_3(); /读低8位 b=ReadOneChar_3(); /读高8位 break; case 3 : Init_DS18B20_4(); WriteOneChar_4(0xCC); / 跳过读序号列号的操作 WriteOneChar_4(0x44); / 启动温度转换 Init_DS18B20_4(); WriteOneChar_4(0xCC); /跳过读序号列号的操作 WriteOneChar_4(0xBE); /读
24、取温度寄存器 a=ReadOneChar_4(); /读低8位 b=ReadOneChar_4(); /读高8位 break; case 4 : Init_DS18B20_5(); WriteOneChar_5(0xCC); / 跳过读序号列号的操作 WriteOneChar_5(0x44); / 启动温度转换 Init_DS18B20_5(); WriteOneChar_5(0xCC); /跳过读序号列号的操作 WriteOneChar_5(0xBE); /读取温度寄存器 a=ReadOneChar_5(); /读低8位 b=ReadOneChar_5(); /读高8位 break; cas
25、e 5 : Init_DS18B20_6(); WriteOneChar_6(0xCC); / 跳过读序号列号的操作 WriteOneChar_6(0x44); / 启动温度转换 Init_DS18B20_6(); WriteOneChar_6(0xCC); /跳过读序号列号的操作 WriteOneChar_6(0xBE); /读取温度寄存器 a=ReadOneChar_6(); /读低8位 b=ReadOneChar_6(); /读高8位 break; case 6 : Init_DS18B20_7(); WriteOneChar_7(0xCC); / 跳过读序号列号的操作 WriteOne
26、Char_7(0x44); / 启动温度转换 Init_DS18B20_7(); WriteOneChar_7(0xCC); /跳过读序号列号的操作 WriteOneChar_7(0xBE); /读取温度寄存器 a=ReadOneChar_7(); /读低8位 b=ReadOneChar_7(); /读高8位 break; case 7 : Init_DS18B20_8(); WriteOneChar_8(0xCC); / 跳过读序号列号的操作 WriteOneChar_8(0x44); / 启动温度转换 Init_DS18B20_8(); WriteOneChar_8(0xCC); /跳过读
27、序号列号的操作 WriteOneChar_8(0xBE); /读取温度寄存器 a=ReadOneChar_8(); /读低8位 b=ReadOneChar_8(); /读高8位 break; default : break; tvalue=b; tvalue<<=8; tvalue=tvalue|a;if(tvalue<0x0fff) tflag=0; else tvalue=-tvalue&0x0fff; tflag=1; tvalue=tvalue*0.0625; tvalue= tvalue*10+0.5; return(tvalue);/*传送程序*/void
28、 wdout()/温度传送uint z,k,t;uchar a;a=tflag;z=tvalue%100;z=z/10;k=tvalue%1000;k=k/100;t=tvalue/1000;putc(t); /传送温度的百位putc(z); /传送温度的个位putc(k); /传送温度的十位putc(move); /传送温度的路数putc(a); /传送温度的正负标志位/*温度初值初始化并传送*/void cxh()ReadTemperature();/读取温度wdout(); /传送温度move+;if(move=8)move=0;/*主程序*/ void main() SCON = 0x
29、50; /打开串口2TMOD = 0x20;PCON = 0x00;TH1 = 0xfd;TL1 = 0xfd;TI = 0;RI = 0;TR1 = 1;IE = 0x90; while(1) cxh(); void time() interrupt 32 接收端程序#include<at89x52.h>#define uchar unsigned char#define uint unsigned int#define LEFT_KEY (!(P2_0)#define UP_KEY (!(P2_1)#define DOWN_KEY (!(P2_2)uchar i=0; ucha
30、r a=0; /接收路数标志bit mode=1; /手动,自动标志位,mode=1为自动,mode=0为手动uchar b=0; /显示路数标志uchar date85=0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,;uchar duanma = /段码数据 0x3f, / 0 00 0x06, / 1 01 0x5b, / 2 02 0x4f, / 3 03 0x66, / 4 04 0x6d, / 5 05 0x7d, / 6 06 0x07, / 7 07 0
31、x7f, / 8 08 0x6F, / 9 09 0x40, / - 10; void delay1ms(unsigned int ms)/延时1毫秒(不够精确的) unsigned int i,j; for(i=0;i<ms;i+) for(j=0;j<100;j+); void display(uchar a)P1=0xfb; /接收正负标志位if(datea4=0)P0=0;else P0=duanma10;delay1ms(2);P1=0xf7;P0=duanmadatea0; /接收百位delay1ms(2);P1=0xef;P0=duanmadatea2; /接收十位d
32、elay1ms(2);P1=0xdf;P0=duanmadatea1; /接收个位delay1ms(2);P1=0xfe;P0=duanmadatea3; /接收路数delay1ms(2);void main()SCON = 0x50; /打开串口2TMOD = 0x20;PCON = 0x00;TH1 = 0xfd;TL1 = 0xfd;TI = 0;RI = 0;TR1 = 1;IE = 0x90; while(1) if(LEFT_KEY) / 切换显示模式 delay1ms(2); if(LEFT_KEY) mode = mode; while(LEFT_KEY)display(b);
33、 if(UP_KEY && mode=0) / 通道+1 delay1ms(2); if(UP_KEY) b+; if (b=8) b=0; while(UP_KEY)display(b); if(DOWN_KEY && mode=0) / 通道-1 delay1ms(2); if(DOWN_KEY) if (b=0) b=7; else b=b-1; while(DOWN_KEY)display(b); display(b); uchar count=0;void time_0() interrupt 4 if(RI) RI = 0;dateai=SBUF;
34、/把数据传送到date中,a为温度的通道数i+; /i=0:传送温度的百位if(i=5)/i=1:传送温度的个位 /i=2:传送温度的十位i=0;/i=3:传送温度的路数 a+;/i=4:传送温度的正负标志位 if(a=8)a=0; if(mode=1) count+; if(count=200) /中断200次切换下一路,修改可改变显示间隔时间 b+; if(b=8) b=0; count=0; 5、 硬件电路介绍1 RS-232串口通信总线及其接口RS-232是使用最早、应用最多的一种异步串行通信总线标准,它主要用来定义计算机系统的一些数据终端设备和数据电路终接设备之间的接口的电气特性。R
35、S-232采用按位串行方式。RS-232传递信息的格式标准对所传递的信息规定如下:(1)信息的开始为起始位,信息的结尾为停止位,它可以是1位、1.5位或2位:(2)信息本身可以是5、6、7、8位再加以为奇偶校验位;(3)如果两个信息之间无信息,则应写“1”,表示空。RS-232传送的比特率(b/s)规定为19200、9600、4800、2400、600、300、150、110、75、50,RS-232接口总线的传送距离一般不超过50m.由于RS-232的电平不是+5V和地,它使用下面的负逻辑:低电平“0”:+5V+15V;高电平“1”:-5V-15V。因此,RS-232不能和TTL电平直接相连,使用时必须加上适当的接口,否则将使TTL电路烧坏。实际使用时,RS-232和TTL电平之间必须进行电平转换,可采用MAX232集成电路转换。2 MAX232芯片 图6 Max232芯片第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。 第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。 其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。 8脚(R2IN)、9脚(R2OU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国公路信息化行业市场发展分析及竞争格局与投资价值研究报告
- 2026高性能磁铁制造工艺与成本效益分析报告
- 2026锂电池隔膜材料技术迭代路径专题分析报告
- 2026铝合金轻量化趋势下市场需求变化及产能布局规划研究报告
- 2026铜基合金市场供需关系及价格走势预测报告
- 2026钛合金材料市场发展分析及未来趋势与投资策略研究报告
- 2026金属注塑成型技术突破及精密零件应用报告
- 2026金属材料在消费电子领域的创新应用与发展趋势研究报告
- 2026年天津理工大学中环信息学院单招职业适应性考试题库附参考答案详解(典型题)
- 2023年全国尾矿库安全风险统计报告
- 医疗肺结节科普宣教课件
- 多因子量化投资策略及实证检验
- (正式版)HGT 22820-2024 化工安全仪表系统工程设计规范
- 2024年青岛市高三一模英语高考模拟试卷试题(含答案详解)
- 先天性高胰岛素血症性低血糖诊治专家共识
- 2024年全国初中数学联赛试题及答案(修正版)
- 继电保护基本知识-电力系统三种状态(继电保护运行检修课件)
- 急性肺动脉栓塞的护理查房课件
- 沙洲电厂“1014”电气误操作全厂停电事故通报
- 肝硬化患者护理查房
- 下肢静脉曲张的护理
评论
0/150
提交评论