b多路温度采集程序

合集下载

多路信号采集显示系统设计与实现

多路信号采集显示系统设计与实现

多路信号采集显示系统设计与实现一、引言随着科技的不断发展,人们对信号采集显示系统的需求也日益增长。

多路信号采集显示系统是一种能够同时采集多种信号并进行显示的系统,广泛应用于工业控制、仪器仪表、环境监测等领域。

本文将介绍多路信号采集显示系统的设计与实现,包括硬件和软件的设计,希望能够为相关领域的研究和开发提供一定的参考。

二、系统设计1. 系统功能需求多路信号采集显示系统主要具备以下功能需求:(1)多通道信号采集功能:能够同时采集多路模拟信号,并实时转换为数字信号。

(2)数据存储功能:能够将采集到的数据进行存储,以便后续分析和处理。

(3)数据显示功能:能够实时显示采集到的数据,并提供用户界面操作。

(4)通信接口功能:能够与PC或其他设备进行通信,进行数据传输和控制。

2. 系统硬件设计多路信号采集显示系统的硬件设计主要包括传感器、采集卡、显示屏等组成。

(1)传感器:根据不同的采集需求,选择合适的传感器,如温度传感器、压力传感器、光敏传感器等。

(2)采集卡:选择合适的多通道模拟信号采集卡,能够满足采集多路信号的需求。

采集卡通常包括A/D转换器、输入端口等。

(3)显示屏:选择合适的显示屏,能够实时显示采集到的数据,提供用户友好的操作界面。

三、系统实现1. 硬件组装与连接按照系统设计,选购合适的传感器、采集卡和显示屏,并进行硬件组装和连接。

将传感器与采集卡连接,采集卡与显示屏连接,确保硬件的正常工作。

2. 软件开发与编程根据系统设计,开发相应的软件并进行编程。

实现数据采集、数据存储、数据显示和通信接口功能,并进行软件测试和调试。

3. 系统调试与优化将硬件和软件组装完毕后,进行系统调试和优化。

测试系统的各项功能是否正常,是否满足设计要求,并对系统进行优化,提高系统的稳定性和性能。

基于Zigbee的多路温度数据无线采集系统设计

基于Zigbee的多路温度数据无线采集系统设计
D I N G F a n , Z H O U Y o n g — mi n g
( S c h o o l o f P h y s i c s a n d Me c h a n i c a l &E l e c t r i c a l E n g i n e e r i n g , S h a o g u a n Co l l e g e , S h a o g u a n 5 1 2 0 0 5 , C h i n a )
t e m c a n b e w i d e l y u s e d f o r v a r i o u s t e m er p a t u r e d a a t a c q u i s i t i o n p r o j e c t b e c a u s e o f i t s s r t o n g e x t e n s i b i l i t y , l o w c o s t , e a s y i n s t a l l a t i o n
目 前, 温度数据采集 系统 大多是通过 串 口将 主控 制器采 集
到温度信 息传递到上位机 。然而 , 在一些 不便于 布线或者 高危 作业 区域 ( 如对锅炉 温度 的监 测 ) , 这 种有线 传输 的方 式 , 可扩 展性较差 , 安装和维护 比较 困难 , 成本较高 1 J 。 针对 上述情 况 , 提 出一种 以新 一代 S T M3 2嵌入式微处 理器 和Z i g b e e技 术 为核 心的 嵌入 式多 路 温度数 据无 线采 集 系统 。 该系统利 用 Z i g b e e技术功耗极低 、 系统 简单 、 组 网方 式灵活 、 成 本低 、 等待时间短等性能 , 可 以方便地 组建传感 器 网络 的特 点 ,

ds18b20多路温度采集程序

ds18b20多路温度采集程序

本程序为ds18b20的多路温度采集程序,是我自己参考其他程序后改写而成,可显示4路正负温度值,并有上下限温度报警(声音、灯光报警)。

亲测,更改端口即可使用。

(主要器件:51单片机,ds18b20,lcd显示器)附有proteus仿真图,及序列号采集程序/****上限62度下限-20度****/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit ds=P1^1;sbit rs=P1^4;sbit e=P1^6;sbit sp=P1^0;sbit d1=P1^2;sbit d2=P1^3;ucharlcdrom[4][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e} ,{0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},{0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0},{0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7}};unsigned char code table0[]={"TEMPERARTURE:U "}; unsigned char code table1[]={"0123456789ABCDEF"};int f[4];int tvalue;float ftvalue;uint warnl=320;uint warnh=992;/****lcd程序****/void delayms(uint ms)//延时{uint i,j;for(i=ms;i>0;i--)for(j=110;j>0;j--);}void wrcom(uchar com)//写指令{delayms(1);rs=0;P3=com;delayms(1);e=1;delayms(1);e=0;}void wrdat(uchar dat)//写数据{rs=1;e=0;P3=dat;delayms(5);e=1;delayms(5);e=0;}void lcdinit()//初始化lcd {delayms(15);wrcom(0x38);delayms(5);wrcom(0x0c);delayms(5);wrcom(0x06);delayms(5);wrcom(0x01);delayms(5); }void display(uchar *p)//显示{while(*p!='\0'){wrdat(*p);p++;delayms(1);}}displayinit()//初始化显示{lcdinit();wrcom(0x80);display(table0);}/****ds18b20程序****/ void dsrst()//ds18b20复位{uint i;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bit dsrd0()//读一位数据{uint i;bit dat;ds=0;i++;ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return(dat);}uchar dsrd()//读1个字节数据{uchar i,j,dat;dat=0;for(i=8;i>0;i--){j=dsrd0();dat=(j<<7)|(dat>>1);}return(dat);}void dswr(uchar dat)//写数据{uint i;uchar j;bit testb;for(j=8;j>0;j--){testb=dat&0x01;dat=dat>>1;if(testb){ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0;i=8;while(i>0)i--;ds=1;i++;i++;}}}void tmstart()//初始化ds18b20{sp=1;d1=1;d2=1;dsrst();delayms(1);dswr(0xcc);dswr(0x44);}void read_dealtemp()//读取并处理温度{uchar i,j,t;uchar a,b;for(j=0;j<4;j++){dsrst();delayms(1);dswr(0x55);for(i=0;i<8;i++){dswr(lcdrom[j][i]);//发送64位序列号}dswr(0xbe);a=dsrd();b=dsrd();tvalue=b;tvalue<<=8;tvalue=tvalue|a;if(tvalue<0){d1=1;tvalue=~tvalue+1;wrcom(0xc0);wrdat(0x2d);if(tvalue>warnl){d2=0;sp=0;}else{d2=1;sp=1;}}else{d2=1;wrcom(0xc0);wrdat(' ');if(tvalue>warnh){d1=0;sp=0;}else{d1=1;sp=1;}}if(j==0){wrcom(0x8e); wrdat('2');}if(j==1){wrcom(0x8e);wrdat('3');}if(j==2){wrcom(0x8e);wrdat('4');}if(j==3){wrcom(0x8e);wrdat('5');}ftvalue=tvalue*0.0625;tvalue=ftvalue*10+0.5;ftvalue=ftvalue+0.05;f[j]=tvalue;//温度扩大十倍,精确到一位小数tvalue=f[j];t=tvalue/1000;wrcom(0x80+0x41);wrdat(table1[t]);//显示百位t=tvalue%1000/100;wrdat(table1[t]);//显示十位t=tvalue%100/10;wrdat(table1[t]);//显示个位wrdat(0x2e); //显示小数点儿t=tvalue%10/1;wrdat(table1[t]);//显示小数位delayms(5000);}}/****主函数****/void main(){d1=1;d2=1;sp=1;displayinit();//初始化显示while(1){tmstart();//初始化read_dealtemp();//读取温度}}/****序列号读取程序****/#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit DQ = P1^1; //温度传感器信号线sbit rs = P1^4; //LCD数据/命令选择端(H/L)位声明sbit lcden = P1^6; //LCD使能信号端位声明void delay(uint z); //延时函数void DS18B20_Reset(void); //DQ18B20复位,初始化函数bit DS18B20_Readbit(void); //读1位数据函数uchar DS18B20_ReadByte(void); //读1个字节数据函数void DS18B20_WriteByte(uchar dat); //向DQ18B20写一个字节数据函数void LCD_WriteCom(uchar com); //1602液晶命令写入函数void LCD_WriteData(uchar dat); //1602液晶数据写入函数void LCD_Init();//LCD初始化函数void Display18B20Rom(char Rom); //显示18B20序列号函数/**********************************************//* 主函数*//**********************************************/void main(){ uchar a,b,c,d,e,f,g,h;LCD_Init();DS18B20_Reset();delay(1);DS18B20_WriteByte(0x33);delay(1);a = DS18B20_ReadByte();b = DS18B20_ReadByte();c = DS18B20_ReadByte();d = DS18B20_ReadByte();e = DS18B20_ReadByte();f = DS18B20_ReadByte();g = DS18B20_ReadByte();h = DS18B20_ReadByte();LCD_WriteCom(0x80+0x40);Display18B20Rom(h);Display18B20Rom(g);Display18B20Rom(f);Display18B20Rom(e);Display18B20Rom(d);Display18B20Rom(c);Display18B20Rom(b);Display18B20Rom(a);while(1);}/***************************************************//* 延时函数:void delay() *//* 功能:延时函数*//***************************************************/void delay(uint z)//延时函数{uint x,y;for( x = z; x > 0; x-- )for( y = 110; y > 0; y-- );}/***************************************************//* DS18B20函数:void DS18B20_Reset() *//* 功能:复位18B20 *//***************************************************/void DS18B20_Reset(void)//DQ18B20复位,初始化函数{uint i;DQ = 0;i = 103;while( i > 0 ) i--;DQ = 1;i = 4;while( i > 0 ) i--;}/***************************************************//* DS18B20函数:void DS18B20_Readbit() *//* 功能:读1个字节数据函数*//***************************************************/bit DS18B20_Readbit(void) //读1位数据函数{uint i;bit dat;DQ = 0;i++; //i++起延时作用DQ = 1;i++;i++;dat = DQ;i = 8;while( i > 0 )i--;return( dat );}/***************************************************//* DS18B20函数:void DS18B20_ReadByte() *//* 功能:读1个字节数据函数*//***************************************************/uchar DS18B20_ReadByte(void) //读1个字节数据函数{uchar i,j,dat;dat = 0;for( i = 1; i <= 8; i++ ){j = DS18B20_Readbit();dat = ( j << 7 ) | ( dat >> 1 );}return(dat);}/***************************************************//* DS18B20函数:void DS18B20_WriteByte() *//* 功能:向DQ18B20写一个字节数据函数*//***************************************************/void DS18B20_WriteByte(uchar dat) //向DQ18B20写一个字节数据函数{uint i;uchar j;bit testb;for( j=1; j<=8; j++){testb = dat&0x01;dat= dat>>1;if(testb) //写1{DQ = 0;i++;i++;DQ = 1;i = 8;while(i>0)i--; }else{DQ = 0; //写0 i = 8;while(i>0)i--; DQ = 1;i++;i++;}}}/* LCD函数:void LCD_WriteCom() *//* 功能:向LCD写入命令*//***********************************************/void LCD_WriteCom(uchar com){rs = 0;P3= com;delay(5);lcden = 0;delay(5);lcden = 1;delay(5);lcden = 0;}/***********************************************//* LCD函数:void LCD_WriteData(uchar dat) *//* 功能:向LCD写入数据*/void LCD_WriteData(uchar dat){rs = 1; //选择LCD为写入数据状态lcden = 0;P3= dat; //将待写入数据放到总线上delay(5);lcden = 1; //给LCD使能端一个脉冲delay(5); //信号将之前放到总线上lcden = 0; //的数据写入LCDdelay(5);}/***********************************************//* LCD函数:void LCD_Init() *//* 功能:初始化LCD,设定LCD的初始状态*/void LCD_Init(){LCD_WriteCom(0x38); //LCD显示模式设定delay(15);LCD_WriteCom(0x08); //关闭LCD显示delay(3);LCD_WriteCom(0x01); //LCD显示清屏delay(3);LCD_WriteCom(0x06); //设定光标地址指针为自动加1delay(3);LCD_WriteCom(0x0c); //打开LCD显示,但不显示光标}/**********************************************//* *//* 显示18B20序列号*//* *//**********************************************/void Display18B20Rom(char Rom){uchar h,l;l = Rom & 0x0f; //取低4位h = Rom & 0xf0; //取高4位h >>= 4;if( ( h >= 0x00 )&&( h <= 0x09 ) )LCD_WriteData(h+0x30);//取ASCII码elseLCD_WriteData(h+0x37);//取ASCII码if( ( l >= 0x00 )&&( l <= 0x09 ) )LCD_WriteData(l+0x30);//取ASCII码elseLCD_WriteData(l+0x37);//取ASCII码}。

多路温度检测系统的设计与研究

多路温度检测系统的设计与研究

1 绪论温度是一个很重要的物理参数,自然界中任何物理、化学过程都紧密地与温度相联系。

在工业生产过程中,温度检测和控制都直接和安全生产、产品质最、生产效率、节约能源等重大技术经济指标相联系,因此在国民经济的各个领域中都受到普遍重视。

温度检测类仪表作为温度计量工具,也因此得到广泛应用。

随着科学技术的发展,这类仪表的发展也日新月异。

特别是随着计算机技术的迅猛发展,以单片机为主的嵌入式系统已广泛应用于工业控制领域,形成了智能化的测量控制仪器,从而引起了仪器仪表结构的根本性变革。

1.1 温度检测类仪表的现状传统的机械式温度检测仪表在工矿企业中己经有上百年的历史了。

一般均具有指示温度的功能,由于测温原理的不同,不同的仪表在报警、记录、控制变送、远传等方面的性能差别很大。

例如热电阻温度计,它的测温范围是-200℃~650℃,测量准确,可用于低温或温差测量,能够指示报警、远传、控制变送,但维护工作量大并且不能记录;光学温度计测温范围是300℃~3200℃,携带使用方便,价格便宜,但是它只能目测,也就是说必须熟练才能测准,而且不能报警、远传、控制变送。

近年来由于微电子学的进步以及计算机应用的日益广泛,智能化测量控制仪表己经取得了巨大的进展。

我国的单片机开发应用始于80 年代。

在这20 年中单片机应用向纵深发展,技术日趋成熟。

智能仪表在测量过程自动化,测量结果的数据处理以及功能的多样化方面。

都取得了巨大的进展。

目前在研制高精度、高性能、多功能的测量控制仪表时,几乎没有不考虑采用单片机使之成为智能仪表的。

从技术背景来说,硬件集成电路的不断发展和创新也是一个重要因素。

各种集成电路芯片都在朝超大规模、全CMOS 化的方向发展,从而使用户具有了更大选择范围。

这类仪器能够解决许多传统仪器不能或不易解决的问题,同时还能简化仪表电路,提高仪表的可靠性,降低仪表的成本以及加快新产品的开发速度。

智能化控制仪表的整个工作过程都是在软件程序的控制下自动完成的。

多路温度巡检仪操作指引

多路温度巡检仪操作指引
品名型号 设备编号 一.所需物料名称
三.作业步骤
1.用标有通道数字的温 度探头线放进待测温度 点的灯具内,
2.按下菜单键用上下左 右键设定温度上下限
3.设定好参数后按储存 键,
4.按巡检键,开始测试
5.探头线上标示的通道 数字与温度显示屏上所 测试的通道名称对应
6.测试完毕后管掉电源
东莞励晶电子科技有限公司操作指引
3.严格按作业指导书作 业,保持工位整洁. 4.每天在用仪器测试前点检一次,并填好仪器点检表记录。
5.当点检异常时,立刻启用经校准的备用仪器,并对前段测试的产品进行评估重测.
制作:
曹伟峰
审核:
王仁彬O: LACSOP-PZ-008
多路温度巡检仪(HE 130X) LAC-YQ-0005
规格
物料编码
HE 130X
***
工位名称 站位
测试位 ***
用量 二.作业工具
1PCS
电桥测试仪
四.图片示意
文件编号 版本编号
LACSOP-PZ-04 A0
数量
一套
注意事项 1.作业前配戴好静电手
环2.,发静现电同手一环个要位紧置贴连于续
pb
出现2-3次不良现象,

多路温度巡检仪操作规程

多路温度巡检仪操作规程
6.3注意:
A.U盘存储过程中,若想取下U盘,先按左方向键,防止数据丢失;
B.每次开始存储,仪器将删除上次存储的信息,请拷贝防止数据丢失;
7.热电偶型号:JK-8U最多可配置8组,每组热电偶的型号可以不同,可以选择K,J,T三种型号的热电偶,未配置热电偶的组显示为“—”
8.热电偶检测:主菜单中选择热电偶检测,按“菜单”键开始检测,检测结束后显示检测结果:前面是通道号,后面是组号
9.波特率:波特率需要 根据上位机软件支持的波特率设置;上下键选择,左右键选择其他
10.温度选择:按方向键切换显示华氏/摄氏温标
11.时间设置:上下键选择设置项;按“菜单”键进入设置项,左右键选择位,上下键修改选择位;按“菜单”键返回上一级
12.仪器调试:(返回勿动)
13.注意事项:
A.若个别通道出现测量异常,可通过仪器检测热电偶是否开路;
5.温度上下限:最多可设置8个温度上下限,分别用于不同的通道,但各温限之间有包含覆盖功能
5.1温限1:上下键修改温限号,“菜单”键进入设置改组的开关,上下键设置开关,按“菜单”键返回上一级;
5.2应用范围:按“菜单”键选择应用范围,上下键选择,“菜单”键进入设定,左右键切换组/通道设置,上下键选择第几组或第几通道,“菜单”键返回上一级
5.3.上限,下限:按“菜单”键进入设定温限数值,左右键选择要修改的位,上下键修改该位的数值。温度上限要大于下限。
6.存储设置:
6.1存储类型:上下键选择存储类型,显示已用存储空间百分比;
6.2间隔:存储时间间隔最大可设置9时59分59秒;按“菜单”键进入时间间隔设定,按方向键修改数值;巡检时间间隔最小为N*1.5秒,N为配置组数;定点间隔最小为1S
B.环境温度-20-70℃

安柏(AT)多路温度测试仪(AT4708V~64V)用户手册说明书

安柏(AT)多路温度测试仪(AT4708V~64V)用户手册说明书

Rev.C1AT4708V~64V多路温度测试仪AT4708V~64V 用户手册2有限担保和责任范围3 3声明根据国际版权法,未经常州安柏精密仪器有限公司(Applent Instruments Inc.)事先允许和书面同意,不得以任何形式复制本文内容。

安全信息为避免可能的电击和人身安全,请遵循以下指南进行操作。

免责声明用户在开始使用仪器前请仔细阅读以下安全信息,对于用户由于未遵守下列条款而造成的人身安全和财产损失,安柏仪器将不承担任何责任。

仪器接地为防止电击危险,请连接好电源地线。

不可在爆炸性气体环境使用仪器不可在易燃易爆气体、蒸汽或多灰尘的环境下使用仪器。

在此类环境使用任何电子设备,都是对人身安全的冒险。

不可打开仪器外壳非专业维护人员不可打开仪器外壳,以试图维修仪器。

仪器在关机后一段时间内仍存在未释放干净的电荷,这可能对人身造成电击危险。

不要使用工作异常的仪器如果仪器工作不正常,其危险不可预知,请断开电源线,不可再使用,也不要试图自行维修。

不要超出本说明书指定的方式使用仪器超出范围,仪器所提供的保护措施将失效。

警告:不要加超过350V的直流电压或超过230V的交流电压到测试端,否则会损坏仪器。

安全标志:设备由双重绝缘或加强绝缘保护废弃电气和电子设备(WEEE) 指令2002/96/EC切勿丢弃在垃圾桶内4有限担保和责任范围5 5有限担保和责任范围常州安柏精密仪器有限公司(以下简称安柏)保证您购买的每一台仪器在质量和计量上都是完全合格的。

此项保证不包括保险丝以及因疏忽、误用、污染、意外或非正常状况使用造成的损坏。

本项保证仅适用于原购买者,并且不可转让。

自发货之日起,安柏提供贰年免费保修,此保证也包括VFD或LCD。

保修期内由于使用者操作不当而引起仪器损坏,维修费用由用户承担。

贰年后直到仪表终生,安柏将以收费方式提供维修。

对于VFD或LCD的更换,其费用以当前成本价格收取。

如发现产品损坏,请和安柏取得联系以取得同意退回或更换的信息。

一种基于RS_485总线的多路温度数据采集系统设计

一种基于RS_485总线的多路温度数据采集系统设计
一种基于 RS2485 总线的多路温度数据采集系统设计 文章编号 :1000 - 8829 (2001) 04 - 0011 - 03
ห้องสมุดไป่ตู้
·11 ·
一种基于 RS2485 总线的多路温度数据采集系统设计
De sign of Multi2channel Te mp erature Data Acquisitio n Syste m Ba sed o n RS2485 Bus
采用 RS2485 标准总线技术对现场数据进行采集 、 管理 ,相对于如 FF ,CAN ,LonWorks , Profibus 等的现场
收稿日期 :2000 - 08 - 04 作者简介 :吴林 (1975 —) ,男 ,硕士研究生 ,主要研究方向为工 业数据采集系统 、小波变换与图像处理 ;仲崇权 (1966 —) ,男 , 副教授 ,中国仪器仪表协会现场总线基金委员会常委 ,中国计 算机学会工控专委控制网络协作网委员 ,主要从事现场数据采 集技术 、现场总线技术等方向的研究 。
[ Z] . 1993.

北京长城航空测控技术研究所科技发展部 VXI 测试平台 电话 : (010) 65682811 ,6568629128417
一种基于 RS2485 总线的多路温度数据采集系统设计
·13 ·
类间共性来确定 ,这样代码紧凑 ,复用性好 。CGraphics Object 是图形类的基类 ,定义了绘制模式 、绘制区域 、 绘制边界 、数据源 、数据范围 、字体 、背景色等属性 ,实 现了读数据源 、数据区域进出栈等方法 , 定义了创建 、 移动 、绘制 、删除等接口 。CWLLine 是图形类的子类 , 实现创建 、移动 、绘制 、删除等接口 ,绘制数据的曲线 。 CGraphicsItem 是项目类的基类 ,定义了项目管理的接 口 (如选中 ,重绘 ,鼠标左 、右 、双击等) 及项目逻辑联系 等属性 。CGraphicsTool 是辅助的工具类的基类 , 在程 序中是静态对象 ,截获用户的鼠标事件 ,操作项目对 象 。类 CProcolData 封装了研华协议 、松下协议 ,提供 统一的操作方法 。类 CGridData 定义了操作数据源的 接口 ,子类 CFileData ,CDBData 是实现了 CGridData 接口 的文件数据源类和数据库数据源类 。图形类对象包含 该数据类 。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本程序为ds18b20 的多路温度采集程序,是我自己参考其他程序后改写而成,可显示 4 路正负温度值,并有上下限温度报警(声音、灯光报警)亲测,更改端口即可使用。

(主要器件:51单片机,ds18b20,lcd 显示器)附有proteus 仿真图,及序列号采集程序/**** 上限62 度下限-20 度****/#include<>#define uchar unsigned char#define uint unsigned intsbit ds=P1A1;sbit rs=P1A4;sbit e=P1A6;sbit sp=P1A0;sbit d1=P1A2;sbit d2=P1A3;uchar lcdrom[4][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e},{0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9},{0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0},{0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7}}; unsigned char code table0[]={"TEMPERARTURE:U "}; int f[4];int tvalue;float ftvalue;uint warnl=320;uint warnh=992;/****lcd 程序****/void delayms(uint ms)// 延时{uint i,j;for(i=ms;i>0;i--) for(j=110;j>0;j--);}void wrcom(uchar com)// 写指令{ delayms(1); rs=0;P3=com; delayms(1); e=1;delayms(1);e=0;}void wrdat(uchar dat)// 写数据{rs=1;e=0;P3=dat;delayms(5);e=1;delayms(5);e=0;}void lcdinit()// 初始化lcd{delayms(15);wrcom(0x38);delayms(5);wrcom(0x0c);delayms(5);wrcom(0x06);delayms(5);wrcom(0x01);delayms(5); }void display(uchar *p)// 显示{while(*p!='\0')wrdat(*p);p++;delayms(1);}}displayinit()// 初始化显示{lcdinit();wrcom(0x80);display(table0);}/****ds18b20 程序****/ void dsrst()//ds18b20 复位{ uint i;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;bit dsrd0()// 读一位数据{uint i;}bit dat;ds=0;i++;ds=1;i++;i++;dat=ds; i=8;while(i>0)i--; return(dat); }uchar dsrd()// 读1 个字节数据{uchar i,j,dat; dat=0;for(i=8;i>0;i--){j=dsrd0();dat=(j<<7)|(dat>>1);}return(dat);}void dswr(uchar dat)// 写数据uint i;uchar j;bit testb;for(j=8;j>0;j--){testb=dat&0x01;dat=dat>>1;if(testb){{ds=0; i++;i++;ds=1; i=8;while(i>0)i--; }else{ds=0; i=8;while(i>0)i--;ds=1; i++;i++;}}}void tmstart()// 初始化ds18b20{sp=1;d1=1;d2=1;dsrst();delayms(1);dswr(0xcc); dswr(0x44);}void read_dealtemp()// 读取并处理温度{uchar i,j,t;uchar a,b;for(j=0;j<4;j++){dsrst();delayms(1);dswr(0x55);for(i=0;i<8;i++){dswr(lcdrom[j][i]);//发送64 位序列号dswr(0xbe);a=dsrd();}b=dsrd();tvalue=b;tvalue<<=8; tvalue=tvalue|a;if(tvalue<0){d1=1;tvalue=~tvalue+1; wrcom(0xc0);wrdat(0x2d); if(tvalue>warnl){d2=0;sp=0;}else{d2=1;sp=1;}}else{d2=1; wrcom(0xc0); wrdat(' ');if(tvalue>warnh) {d1=0;sp=0;}else{d1=1;sp=1;}}if(j==0){wrcom(0x8e);wrdat('2');}if(j==1)wrcom(0x8e);wrdat('3');}if(j==2){{wrcom(0x8e);wrdat('4');}if(j==3){wrcom(0x8e);wrdat('5');} ftvalue=tvalue*;tvalue=ftvalue*10+;ftvalue=ftvalue+;f[j]=tvalue;// 温度扩大十倍,精确到一位小数tvalue=f[j];t=tvalue/1000;wrcom(0x80+0x41);wrdat(table1[t]);// 显示百位t=tvalue%1000/100; wrdat(table1[t]);// 显示十位t=tvalue%100/10;wrdat(table1[t]);// 显示个位显示小数点儿wrdat(0x2e); //t=tvalue%10/1;显示小数位wrdat(table1[t]);//delayms(5000);}}/**** 主函数****/void main(){d1=1;d2=1;sp=1;displayinit();// 初始化显示while(1){tmstart();// 初始化read_dealtemp();// 读取温度}}/**** 序列号读取程序****/#include <>#define uchar unsigned char#define uint unsigned intsbit DQ = P1A1; // 温度传感器信号线sbit rs = P1A4; //LCD 数据/命令选择端(H/L) 位声明sbit lcden = P1A6; //LCD 使能信号端位声明void delay(uint z);//延时函数void DS18B20_Reset(void); //DQ18B20复位,初始化函数bit DS18B20_Readbit(void);//读 1 位数据函数uchar DS18B20_ReadByte(void);//读 1 个字节数据函数void DS18B20_WriteByte(uchar dat);// 向DQ18B20写一个字节数据函数void LCD_WriteCom(uchar com); //1602 液晶命令写入函数void LCD_WriteData(uchar dat); //1602 液晶数据写入函数void LCD_Init(); //LCD 初始化函数数void Display18B20Rom(char Rom); // 显示18B20 序列号函/********************************************/* 主函数*//********************************************void main(){ uchar a,b,c,d,e,f,g,h;LCD_Init();DS18B20_Reset();delay(1);DS18B20_WriteByte(0x33);delay(1);a = DS18B20_ReadByte();b = DS18B20_ReadByte();c = DS18B20_ReadByte();d = DS18B20_ReadByte();e = DS18B20_ReadByte();f = DS18B20_ReadByte();g = DS18B20_ReadByte();h = DS18B20_ReadByte(); LCD_WriteCom(0x80+0x40);Display18B20Rom(h);Display18B20Rom(g);Display18B20Rom(f);Display18B20Rom(e);Display18B20Rom(d);Display18B20Rom(c);Display18B20Rom(b);Display18B20Rom(a);while(1);}/************************************************* /* 延时函数:void delay()*//* 功能:延时函数*/ /************************************************* void delay(uint z)// 延时函数{uint x,y;for( x = z; x > 0; x-- )for( y = 110; y > 0; y-- );}***********************************************/* DS18B20 函数:void DS18B20_Reset() *//* 功能:复位18B20*/ /***************************************************/ void DS18B20_Reset(void)//DQ18B20 复位,初始化函数uint i;DQ = 0;i = 103;while( i > 0 ) i--;DQ = 1;i = 4;while( i > 0 ) i--;/***************************************************//* DS18B20 函数:void DS18B20_Readbit() *//* 功能:读1 个字节数据函数*//***************************************************/ bitDS18B20_Readbit(void) //读 1 位数据函数{uint i; bit dat; DQ = 0;i++; //i++ 起延时作用 DQ = 1; i++; i++; dat = DQ; i = 8;while( i > 0 )i--; return( dat );}/***************************************************/ /* DS18B20 函数:void DS18B20_ReadByte()*/ /* 功能:读 1 个字节数据函数*/uchar DS18B20_ReadByte(void) //{uchar i,j,dat; dat = 0;for( i = 1; i <= 8; i++ )***********************************************读 1 个字节数据函数j = DS18B20_Readbit(); dat = ( j << 7 ) | ( dat >> 1 ); } return(dat);}/***************************************************/ /* DS18B20 函数:void DS18B20_WriteByte()*/ /* 功能:向DQ18B20写一个字节数据函数*/void DS18B20_WriteByte(uchar dat) // 字节数据函数{uint i; uchar j; bit testb;for( j=1; j<=8; j++) {testb = dat&0x01; dat= dat>>1;if(testb) //写 1***********************************************向 DQ18B20写一个{DQ = 0;i++;i++;DQ = 1;i = 8;while(i>0)i--;}else{DQ = 0; // 写0 i = 8;while(i>0)i--;DQ = 1;i++;i++;}}}/***********************************************//* LCD 函数:void LCD_WriteCom()*//* 功能:向LCD写入命令*/ void LCD_WriteCom(uchar com)*******************************************{rs = 0;P3= com; delay(5);lcden = 0; delay(5);lcden = 1; delay(5);lcden = 0;}/***********************************************//* LCD 函数:void LCD_WriteData(uchar dat) *//* 功能:向LCD写入数据*/ /*********************************************void LCD_WriteData(uchar dat){rs = 1; //择LCD为写入数据状态lcden = 0;P3= dat; // 到总线上将待写入数据放delay(5);lcden = 1; 能端一个脉冲delay(5); // 前放到总线上 lcden = 0; //入 LCDdelay(5);}/***********************************************//* LCD 函数:void LCD_I nit() *//* 功能:初始化LCD 设定LCD 的初始状态 *///给LCD 使******************************************* void LCD_Init(){信号将之的数据写LCD_WriteCom(0x38); //LCDdelay(15);LCD_WriteCom(0x08); delay(3);LCD_WriteCom(0x01); delay(3);// //LCD显示模式设关闭LCD 显示显示清屏针为自动加 1delay(3);LCD_WriteCom(0x0c); // 但不显示光标*/ /* 显示 18B20 序列号*/ /* */void Display18B20Rom(char Rom){uchar h,l;l = Rom & 0x0f; // 取低 4 位 h = Rom & 0xf0; // 取高 4 位 h >>= 4; if( ( h >= 0x00 )&&( h <= 0x09 ) )LCD_WriteData(h+0x30);ASCII 码****************************************** LCD_WriteCom(0x06);//设定光标地址指打开LCD 显示,****************************************** //}/*elseLCD_WriteData(h+0x37); // 取ASCII 码if( ( l >= 0x00 )&&( l <= 0x09 ) )取LCD_WriteData(l+0x30); //ASCII 码elseLCD_WriteData(l+0x37); // 取ASCII 码}。

相关文档
最新文档