当前位置:文档之家› 8路温度采集系统

8路温度采集系统

实习报告课题:八路温度采集仪日期:2015.8.3目录:一、实验目的 (3)二、实验内容 (3)三、实验步骤与结果 (3)四、实验存在的问题 (14)五、总结 (14)六、附录(上位机、下位机) (14)一、实验目的:1、DXP与Labview软件的运用;2、单片机编程的掌握;3硬件的焊接与调试;4、熟练运用和掌握原理图设计、PCB板的制作、元器件焊接与调试、虚拟仪器的使用。

二、实验内容:运用单片机搭建一个小系统。

此系统可以同时采集8路温度信息(由于硬件条件的限制,没人只有4个温度传感器,所以最后只能为四路温度采集),而此信息来自与8个DS18B20,同时循环显示于数码管。

然后后期运用虚拟仪器Labview采集单片机所发送的温度信息进行处理,并形成完整的虚拟仪器。

三、实验步骤与结果:1、原理图的设计采集系统主要元器件介绍:STC89C52RC:STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。

STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。

在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。

另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

最高运作频率35MHz,6T/12T可选.其I/O口、中断的运用可以参照89C51的任何类型。

DS18B20:DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。

因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。

主要根据应用场合的不同而改变其外观。

封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。

耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

特点:(1)、只要求一个端口即可实现通信。

(2)、在DS18B20中的每个器件上都有独一无二的序列号。

(3)、实际应用中不需要外部任何元器件即可实现测温。

(4)、测量温度范围在-55。

C到+125。

C之间。

(5)、数字温度计的分辨率用户可以从9位到12位选择。

(6)、内部有温度上、下限告警设置。

使用方法:由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。

DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。

该协议定义了几种信号的时序:初始化时序、读时序、写时序。

所有时序都是将主机作为主设备,单总线器件作为从设备。

而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。

数据和命令的传输都是低位在先 DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。

对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。

DS18B20在完成一个读时序过程,至少需要60us才能完成。

DS18B20的写时序对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。

对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。

以下为原理图设计过程:1、总的电路图结构:2、USB串口模块3、单片机系统4、七段数码管显示5、DS18B202、PCB板子的制作与3D效果图:最后的实物图:3、51单片机编程:1、DS18B20的时序2、串口的打开、收发。

3、显示模块以下为各个模块代码:1、void reset(void) //reset{uint i;DS&=!DQSUM[count]; //0i=103;while(i>0) i--;DS|=DQSUM[count]; //1i=4;while(i>0) i--;}bit readbit(void) //read a bit {uint i;bit dat;DS&=!DQSUM[count];i++;DS|=DQSUM[count];i++;i++;switch(count){case 0:dat=DQ0;break;case 1:dat=DQ1;break;case 2:dat=DQ2;break;case 3:dat=DQ3;break;}i=8;while(i>0)i--;return (dat);}uchar read(void) //read a Byte{uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=readbit();dat=(j<<7)|(dat>>1);}return (dat);}void write(uchar dat){uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb) //write 1{DS&=!DQSUM[count];i++;i++;DS|=DQSUM[count];i=8;while(i>0) i--;}else //write 0{DS&=!DQSUM[count];i=8;while(i>0)i--;DS|=DQSUM[count];i++;i++;}}}void tempchange(void) //DS18B20的数据转换{reset();delay(1);write(0xcc);write(0x44);delay(80);}uint get_temp() //数据读取与处理{uchar a,b;reset();delay(1);write(0xcc);write(0xbe);a=read(); //Lb=read(); //Htemp=b;temp<<=8;temp=temp|a;f_temp=temp*0.0625;temp=f_temp*10+0.5;return temp;}void temp_turn(uint value){display[2]=value/100;display[1]=(value%100)/10;display[0]=value%10;}2、void init_com(void) //中断初始化{TMOD=0x20;PCON=0x00;SCON=0x50;TH1=0xf3;TL1=0xf3;TR1=1;}void comm(char *parr) //串口数据发送{do{SBUF=*parr++;while(!TI);TI=0;}while(*parr);}3、void delay(uint z) //10ms{uint x,y;for(x=z;x>0;x--)for(y=125;y>0;y--);}void scan(){char k;for(k=0;k<4;k++) //4位LED扫描控制{Disdata=dis_7[display[k]]; //数据显示if (k==1){DIN=0;} //小数点显示discan=scan_con[k]; //位选delay(3);}}4、Labview模块VISA串口配置数据处理、温度显示:四路可切换模块:生成表格、记录数据:效果图:四、实验存在的问题1、PCB板子虽然都已绘制完成,但是对PCB规则检测没有进行。

2、单片机对于DS18B20传感器的第一个有时完全接收不到数据(应该时序没有严格按照规则)。

3、LABVIEW的单独模块的内容还不够多。

五、总结:通过本次小学期的实习基本掌握DXP与LABVIEW的使用,同时对PCB板的绘制有了进一步的提高。

对单片机小系统的架构有了初步的认识。

但是对于单片机系统和LABVIEW 的学习还是太少,所以在小学期之后还有巩固强化本次课题的内容。

六、附录:上位机:下位机:#include<reg52.h>#include<stdio.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define DS P1#define Disdata P0#define discan P2sbit DQ0=P1^0;sbit DQ1=P1^1;sbit DQ2=P1^2;sbit DQ3=P1^3; //温度传感器的4个数据端口sbit DIN=P0^7;uint count;uint temp;float f_temp;unsigned char DQSUM[4]={0x01,0x02,0x04,0x08};//温度传感器选择,依次对应传感器的0-5uchar code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0xff,0xbf};//"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-"uchar code scan_con[4]={0x70,0xb0,0xd0,0xe0}; //列扫描控制字uchar data display[5]={0x00,0x00,0x00}; //显示单元数据,共4个数据和一个运算暂用void delay(uint z) //10ms{uint x,y;for(x=z;x>0;x--)for(y=125;y>0;y--);}void scan(){char k;for(k=0;k<4;k++) //4位LED扫描控制{Disdata=dis_7[display[k]]; //数据显示if (k==1){DIN=0;} //小数点显示discan=scan_con[k]; //位选delay(3);}}void reset(void) //reset{uint i;DS&=!DQSUM[count]; //0i=103;while(i>0) i--;DS|=DQSUM[count]; //1i=4;while(i>0) i--;}bit readbit(void) //read a bit{uint i;bit dat;DS&=!DQSUM[count];i++;DS|=DQSUM[count];i++;i++;switch(count){case 0:dat=DQ0;break;case 1:dat=DQ1;break;case 2:dat=DQ2;break;case 3:dat=DQ3;break;}i=8;while(i>0)i--;return (dat);}uchar read(void) //read a Byte{uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=readbit();dat=(j<<7)|(dat>>1);}return (dat);}void write(uchar dat){uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb) //write 1{DS&=!DQSUM[count];i++;i++;DS|=DQSUM[count];i=8;while(i>0) i--;}else //write 0{DS&=!DQSUM[count];i=8;while(i>0)i--;DS|=DQSUM[count];i++;i++;}}}void tempchange(void) //DS18B20的数据转换{reset();delay(1);write(0xcc);write(0x44);delay(80); //很重要}uint get_temp() //数据读取与处理{uchar a,b;reset();delay(1);write(0xcc);write(0xbe);a=read(); //Lb=read(); //Htemp=b;temp<<=8;temp=temp|a;f_temp=temp*0.0625;temp=f_temp*10+0.5;return temp;}void temp_turn(uint value){display[2]=value/100;display[1]=(value%100)/10;display[0]=value%10;}void init_com(void) //中断初始化{TMOD=0x20;PCON=0x00;SCON=0x50;TH1=0xf3;TL1=0xf3;TR1=1;}void comm(char *parr) //串口数据发送{do{SBUF=*parr++;while(!TI);TI=0;}while(*parr);}void main(){int i,j;uchar buff[10];init_com();while(1){for(count=0;count<4;count++){for(j=250;j>0;j--){P2=0xe0;switch(count){case 0:P0=0xf9;break;case 1:P0=0xa4;break;case 2:P0=0xb0;break;case 3:P0=0x99;break;}delay(6);}tempchange();temp_turn(get_temp());for(i=250;i>0;i--){scan();}buff[0]='C';buff[1]='H';buff[2]=count+'0';buff[3]=':';buff[4]=temp/100+'0';buff[5]=(temp%100)/10+'0';buff[6]='.';buff[7]=temp%10+'0';buff[8]='\r';buff[9]='\n';comm(buff);}}}21。

相关主题