b多路温度采集程序
- 格式:docx
- 大小:48.52 KB
- 文档页数:22
多路信号采集显示系统设计与实现一、引言随着科技的不断发展,人们对信号采集显示系统的需求也日益增长。
多路信号采集显示系统是一种能够同时采集多种信号并进行显示的系统,广泛应用于工业控制、仪器仪表、环境监测等领域。
本文将介绍多路信号采集显示系统的设计与实现,包括硬件和软件的设计,希望能够为相关领域的研究和开发提供一定的参考。
二、系统设计1. 系统功能需求多路信号采集显示系统主要具备以下功能需求:(1)多通道信号采集功能:能够同时采集多路模拟信号,并实时转换为数字信号。
(2)数据存储功能:能够将采集到的数据进行存储,以便后续分析和处理。
(3)数据显示功能:能够实时显示采集到的数据,并提供用户界面操作。
(4)通信接口功能:能够与PC或其他设备进行通信,进行数据传输和控制。
2. 系统硬件设计多路信号采集显示系统的硬件设计主要包括传感器、采集卡、显示屏等组成。
(1)传感器:根据不同的采集需求,选择合适的传感器,如温度传感器、压力传感器、光敏传感器等。
(2)采集卡:选择合适的多通道模拟信号采集卡,能够满足采集多路信号的需求。
采集卡通常包括A/D转换器、输入端口等。
(3)显示屏:选择合适的显示屏,能够实时显示采集到的数据,提供用户友好的操作界面。
三、系统实现1. 硬件组装与连接按照系统设计,选购合适的传感器、采集卡和显示屏,并进行硬件组装和连接。
将传感器与采集卡连接,采集卡与显示屏连接,确保硬件的正常工作。
2. 软件开发与编程根据系统设计,开发相应的软件并进行编程。
实现数据采集、数据存储、数据显示和通信接口功能,并进行软件测试和调试。
3. 系统调试与优化将硬件和软件组装完毕后,进行系统调试和优化。
测试系统的各项功能是否正常,是否满足设计要求,并对系统进行优化,提高系统的稳定性和性能。
本程序为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 化的方向发展,从而使用户具有了更大选择范围。
这类仪器能够解决许多传统仪器不能或不易解决的问题,同时还能简化仪表电路,提高仪表的可靠性,降低仪表的成本以及加快新产品的开发速度。
智能化控制仪表的整个工作过程都是在软件程序的控制下自动完成的。
Rev.C1AT4708V~64V多路温度测试仪AT4708V~64V 用户手册2有限担保和责任范围3 3声明根据国际版权法,未经常州安柏精密仪器有限公司(Applent Instruments Inc.)事先允许和书面同意,不得以任何形式复制本文内容。
安全信息为避免可能的电击和人身安全,请遵循以下指南进行操作。
免责声明用户在开始使用仪器前请仔细阅读以下安全信息,对于用户由于未遵守下列条款而造成的人身安全和财产损失,安柏仪器将不承担任何责任。
仪器接地为防止电击危险,请连接好电源地线。
不可在爆炸性气体环境使用仪器不可在易燃易爆气体、蒸汽或多灰尘的环境下使用仪器。
在此类环境使用任何电子设备,都是对人身安全的冒险。
不可打开仪器外壳非专业维护人员不可打开仪器外壳,以试图维修仪器。
仪器在关机后一段时间内仍存在未释放干净的电荷,这可能对人身造成电击危险。
不要使用工作异常的仪器如果仪器工作不正常,其危险不可预知,请断开电源线,不可再使用,也不要试图自行维修。
不要超出本说明书指定的方式使用仪器超出范围,仪器所提供的保护措施将失效。
警告:不要加超过350V的直流电压或超过230V的交流电压到测试端,否则会损坏仪器。
安全标志:设备由双重绝缘或加强绝缘保护废弃电气和电子设备(WEEE) 指令2002/96/EC切勿丢弃在垃圾桶内4有限担保和责任范围5 5有限担保和责任范围常州安柏精密仪器有限公司(以下简称安柏)保证您购买的每一台仪器在质量和计量上都是完全合格的。
此项保证不包括保险丝以及因疏忽、误用、污染、意外或非正常状况使用造成的损坏。
本项保证仅适用于原购买者,并且不可转让。
自发货之日起,安柏提供贰年免费保修,此保证也包括VFD或LCD。
保修期内由于使用者操作不当而引起仪器损坏,维修费用由用户承担。
贰年后直到仪表终生,安柏将以收费方式提供维修。
对于VFD或LCD的更换,其费用以当前成本价格收取。
如发现产品损坏,请和安柏取得联系以取得同意退回或更换的信息。
UT3200系列多路温度测试仪说明书前言多路温度测试仪感谢您购置优利德,为了确保正确使用本仪器,在操作仪器之前请仔细阅读手册,特别是有关“安全信息”部分。
如已阅读完手册,建议您将此手册妥善保管,以便在将来使用过程中进行查阅。
版权信息UNI-T 优利德科技(中国)股份有限公司版权所有。
UNI-T 产品受中国或其他国家专利权的保护,包括已取得或正在申请的专利。
本公司保留更改产品规格和价格的权利。
UNI-T 保留所有权利。
许可软件产品由UNI-T及其子公司或提供商所有,受国家版权法及国际条约规定的保护。
本文中的信息将取代所有以前出版的资料中的信息。
UNI-T 是优利德科技(中国)股份有限公司(Uni-Trend Technology(China)Co.,Ltd)的注册商标。
保修服务仪器自购买之日起保修期壹年,在保修期内由于使用者操作不当而损坏仪器的,维修费及由于维修所引起的费用由用户承担,仪器由本公司负责终身维修。
如果原购买者自购该产品之日一年内,将该产品出售或转让给第三方,则保修期应为自原购买者从UNI-T或授权的UNI-T分销商购买该产品之日起一年内。
电源线及其他附件和保险丝等不受此保证的保护。
如果在适用的保修期内证明产品有缺陷,UNI-T可自行决定是修复有缺陷的产品且不收部件和人工费用,或用同等产品(由UNI-T决定)更换有缺陷的产品。
UNI-T作保修用途的部件、模块和更换产品可能是全新的,或者经修理具有相当于新产品的性能。
所有更换的部件、模块和产品将成为UNI-T的财产。
以下提到的“客户”是指据声明本保证所规定权利的个人或实体。
为获得本保证承诺的服务,“客户”必须在适用的保修期内向UNI-T通报缺陷,并为服务的履行做适当安排。
客户应负责将有缺陷的产品装箱并运送到UNI-T指定的维修中心,同时预付运费并提供原购买者的购买证明副本。
如果产品要运到UNI-T维修中心所在国范围的地点,UNI-T应支付向客户送返产品的费用。
多路温度测试仪操作指引1.准备工作a.确保多路温度测试仪被完全充电或连接到电源。
b.插入合适的探头类型到相应的测试通道。
c.打开仪器电源,确保仪器处于正常工作状态。
d.检查仪器显示屏是否正常显示。
2.设置参数a.根据需要选择温度单位(摄氏度、华氏度等)。
b.调整显示屏亮度和对比度以获得清晰的显示效果。
c.如果需要,设定报警上下限值以监测温度异常。
d.如有需求,选择采样率和记录时间间隔。
3.开始测试a.确定温度测量范围并选择通道。
b.将探头放置在要测量的温度对象上,并等待数秒,直到温度值稳定。
c.按下相应通道的“测量”按键,记录测量结果。
d.如需连续测量,将探头移动到下一个测试点,并重复上述步骤。
4.数据保存和导出a.将测量结果保存到内部存储器或外部存储设备中。
b.如果需要导出数据,连接多路温度测试仪到计算机,将数据传输到计算机。
c.使用相应的软件或工具来处理和分析数据。
5.报告生成a.如果需要,使用数据处理软件生成测量报告。
b.选择合适的报告模板并填入相关数据。
c.添加必要的图表、图像和说明以增强报告的可读性和理解性。
d. 导出报告为常见的文件格式(如PDF、Word文档等)。
6.仪器校准和维护a.定期校准多路温度测试仪以确保测量准确性。
b.清洁仪器外表面和探头以保持仪器的清洁状态。
c.遵循使用说明书中的指导进行维护和保养工作。
d.如有需要,及时更换电池或维修仪器。
7.安全注意事项a.在使用多路温度测试仪时,遵循所有相关的安全操作规程。
b.避免暴露于高温、高湿度和高压等环境。
c.谨慎操作探头,避免探头受损或浸入液体中。
d.学习并理解急救措施,以应对可能发生的意外情况。
以上是关于多路温度测试仪的详细操作指引,希望能够帮助使用者正确使用仪器,提高工作效率和准确性。
在任何操作中,请仔细阅读和遵循仪器的使用说明书,并根据具体需求进行相应的操作。
本程序为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 码}。