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

多路信号采集显示系统设计与实现一、引言随着科技的不断发展,人们对信号采集显示系统的需求也日益增长。
多路信号采集显示系统是一种能够同时采集多种信号并进行显示的系统,广泛应用于工业控制、仪器仪表、环境监测等领域。
本文将介绍多路信号采集显示系统的设计与实现,包括硬件和软件的设计,希望能够为相关领域的研究和开发提供一定的参考。
二、系统设计1. 系统功能需求多路信号采集显示系统主要具备以下功能需求:(1)多通道信号采集功能:能够同时采集多路模拟信号,并实时转换为数字信号。
(2)数据存储功能:能够将采集到的数据进行存储,以便后续分析和处理。
(3)数据显示功能:能够实时显示采集到的数据,并提供用户界面操作。
(4)通信接口功能:能够与PC或其他设备进行通信,进行数据传输和控制。
2. 系统硬件设计多路信号采集显示系统的硬件设计主要包括传感器、采集卡、显示屏等组成。
(1)传感器:根据不同的采集需求,选择合适的传感器,如温度传感器、压力传感器、光敏传感器等。
(2)采集卡:选择合适的多通道模拟信号采集卡,能够满足采集多路信号的需求。
采集卡通常包括A/D转换器、输入端口等。
(3)显示屏:选择合适的显示屏,能够实时显示采集到的数据,提供用户友好的操作界面。
三、系统实现1. 硬件组装与连接按照系统设计,选购合适的传感器、采集卡和显示屏,并进行硬件组装和连接。
将传感器与采集卡连接,采集卡与显示屏连接,确保硬件的正常工作。
2. 软件开发与编程根据系统设计,开发相应的软件并进行编程。
实现数据采集、数据存储、数据显示和通信接口功能,并进行软件测试和调试。
3. 系统调试与优化将硬件和软件组装完毕后,进行系统调试和优化。
测试系统的各项功能是否正常,是否满足设计要求,并对系统进行优化,提高系统的稳定性和性能。
多路温度采集及监控系统的设计与实现,温度采集,8051F35.

多路温度采集及监控系统的设计与实现,温度采集,8051F3520,CAN总线,A/D转换1引言温度是生产过程和科学试验中普遍且重要的物理参数。
在工业生产中,为了高效生产,必须对生产过程中的主要参数,如温度、压力、流量、速度等进行有效控制。
其中温度控制在生产过程中占有相当大的比例。
准确地测量和有效地控制温度是优质、高产、低耗和安全生产的主要条件。
2系统概述整个温度控制系统主要由计算机控制系统(上位机)、单片机测控系统(下位机)、温度传感器组、功率加热系统等部分组成。
系统采用了模块化的设计思想1 引言温度是生产过程和科学试验中普遍且重要的物理参数。
在工业生产中,为了高效生产,必须对生产过程中的主要参数,如温度、压力、流量、速度等进行有效控制。
其中温度控制在生产过程中占有相当大的比例。
准确地测量和有效地控制温度是优质、高产、低耗和安全生产的主要条件。
2 系统概述整个温度控制系统主要由计算机控制系统(上位机)、单片机测控系统(下位机)、温度传感器组、功率加热系统等部分组成。
系统采用了模块化的设计思想,组建方式灵活,并可利用多块单片机测控系统组合的方法增加测量点,具有良好的扩展性。
系统结构框图如图1所示。
温度测量采用高精度的温度传感器PT100获得物体当前温度,经过低功耗、低输入失调电压、线性好的OP07A进行信号放大,送至8051F350内部高速率24位A/D转换器,根据系统设定的目标温度(由上位机发送)和控制范围,通过6路PWM控制加热器的工作状况,使物体达到目标温度并且保持恒温状态。
同时可以利用单片机内部的Flash存储器把各通道设定的温度、系统参数存储起来。
当系统断电或复位后,可以继续运行,增强了系统的抗干扰性能。
3 系统硬件设计3.1 主控电路温度采集监控系统的主控电路采用高性能、功能强大的8051F350。
8051F350是由Cygnal公司推出的完全集成的混合信号系统级芯片(SoC),具有CIP-51微控制器内核,与MCS51指令集完全兼容;机器周期由标准的12个系统时钟降为1个系统时钟周期,处理能力大大提高,峰值速度可达25MI/s;内部集成了构成单片机数据采集或控制系统所需要的几乎所有模拟和数字外设及其他功能元件(包括PGA、ADC、DAC、电压比较器、电压基准、温度传感器、SMBus/I2C、UART、SPI、定时器、可编程计数器/定时器阵列、内部振荡器、看门狗定时器以及电源监视器等)。
单片机的多路温度采集控制系统设计方案(2)

基于51单片机的多路温度采集控制系统设计言:随着现代信息技术的飞速发展,温度测量控制系统在工业、农业及人们的日常生活中扮演着一个越来越重要的角色,它对人们的生活具有很大的影响,所以温度采集控制系统的设计与研究有十分重要的意义。
本次设计的目的在于学习基于51单片机的多路温度采集控制系统设计的基本流程。
本设计采用单片机作为数据处理与控制单元,为了进行数据处理,单片机控制数字温度传感器,把温度信号通过单总线从数字温度传感器传递到单片机上。
单片机数据处理之后,发出控制信息改变报警和控制执行模块的状态,同时将当前温度信息发送到LED进行显示。
本系统可以实现多路温度信号采集与显示,可以使用按键来设置温度限定值,通过进行温度数据的运算处理,发出控制信号达到控制蜂鸣器和继电器的目的。
我所采用的控制芯片为AT89c51,此芯片功能较为强大,能够满足设计要求。
通过对电路的设计,对芯片的外围扩展,来达到对某一车间温度的控制和调节功能。
关键词:温度多路温度采集驱动电路正文:1、温度控制器电路设计本电路由89C51单片机温度传感器、模数转换器ADC0809、窜入并出移位寄存器74LS164、数码管、和LED显示电路等组成。
由热敏电阻温度传感器测量环境温度,将其电压值送入ADC0809的IN0通道进行模数转换,转换所得的数字量由数据端D7-D0输出到89C51的P0口,经软件处理后将测量的温度值经单片机的RXD端窜行输出到74LS164,经74LS164 窜并转换后,输出到数码管的7个显示段,用数字形式显示出当前的温度值。
89C51的P2.0、P2.1、P2.2分别接入ADC0809通道地址选择端A、B、C,因此ADC0809的IN0通道的地址为F0FFH。
输出驱动控制信号由p1.0输出,4个LED 为状态指示,其中,LED1为输出驱动指示,LED2为温度正常指示,LED3为高于上限温度指示,LED4为低于下限温度指示。
当温度高于上限温度值时,有p1.0输出驱动信号,驱动外设电路工作,同时LED1亮、LED2灭、LED3亮、LED4灭。
DS18B20多路温度采集汇编程序

4路DS18B20温度显示汇编程序(可设置上下限和分路查看)作者蔡雄略;操作说明:;------------------------------------------;功能说明:模式选择键按下后,选择循环显示、分路查看,上限设置,下限设置功能;每按一次模式键,对应的模式指示灯会亮起。
;循环显示模式时候,每秒显示一下各路温度状况;分路查看时界面冻结每按一次+或-键进行各路切换;上限设置时每按一次+或-键对各路上限报警进行设置;下限设置时每按一次+或-键对各路下限报警进行设置;------------------------------------------仿真效果图:程序如下:;------------------------------------------;功能说明:模式选择键按下后,选择循环显示、分路查看,上限设置,下限设置功能;循环显示模式时候,每秒显示一下各路温度状况;分路查看时界面冻结每按一次+或-键进行各路切换;上限设置时每按一次+或-键对各路上限报警进行设置;下限设置时每按一次+或-键对各路下限报警进行设置;------------------------------------------;主程序S0EQU30H;50ms计数寄存器MODE_CONT EQU S0+1;模式计数器DS18B20_CONT EQU S0+2HI_TMP_SET_IN EQU S0+3;进水口LOW_TMP_SET_IN EQU S0+4HI_TMP_SET_OUT EQU S0+5;出水口LOW_TMP_SET_OUT EQU S0+6HI_TMP_SET_FRONT EQU S0+7;前后点HI_TMP_SET_BACK EQU S0+8TMP_IN EQU S0+12TMP_OUT EQU S0+13TMP_FRONT EQU S0+14TMP_BACK EQU S0+15DISPLAY_DATA EQU P0;LED数据口KEY_PORT EQU P3;按键口COM_TEMPERL_L BIT P2.7COM_TEMPERL_H BIT P2.6COM_TEMPERH_L BIT P2.5COM_TEMPERH_H BIT P2.4COM_DS18B20_NUM BIT P2.2LED_LOW_SET BIT P3.0LED_HI_SET BIT P3.1LED_CHECK BIT P3.2LED_NORMAL BIT P3.3IN_LED_ALARM_HI BIT P1.1;ININ_LED_ALARM_LOW BIT P1.3OUT_LED_ALARM_HI BIT P1.0;INOUT_LED_ALARM_LOW BIT P1.2FRONT_LED_ALARM_HI BIT P2.0BACK_LED_ALARM_HI BIT P2.1FLAG1BIT20H.5;DS18B20存在标志位DQ1BIT P1.7DQ2BIT P1.6DQ3BIT P1.5DQ4BIT P1.4TEMPER_L EQU28HTEMPER_H EQU27H;------------------------------------------ORG0000HAJMP STARTORG000BH;T0入口LJMP T_INT;------------------------------------------;START初始化;------------------------------------------ORG100HSTART:MOV TEMPER_L,#00HMOV TEMPER_H,#00HMOV MODE_CONT,#00HMOV DS18B20_CONT,#00HMOV HI_TMP_SET_IN,#100;进水口MOV LOW_TMP_SET_IN,#10MOV HI_TMP_SET_OUT,#100;出水口MOV LOW_TMP_SET_OUT,#10MOV HI_TMP_SET_FRONT,#100MOV HI_TMP_SET_BACK,#100CLR TMP_INCLR TMP_OUTCLR TMP_FRONTCLR TMP_BACKMOV S0,#00HMOV TMOD,#01HMOV TH0,#3CH;定时器0,模式1,定时时常50mS MOV TL0,#0B0HMOV IE,#82HMOV KEY_PORT,#0F8HSETB TR0;运行T0LCALL INIT_18B20;------------------------------------------;主函数;------------------------------------------MAIN:LCALL KEYLCALL GET_TEMPER;获取各路温度LCALL DISPLAY;调用显示程序LJMP MAIN;------------------------------------------;T0中服程序,实现1秒一次切换,同时1秒一次的比较各路温度是否超标;------------------------------------------;T0中服程序T_INT:PUSH ACCPUSH PSWMOV TH0,#3CH;定时器0,模式1,定时时常50mSMOV TL0,#0B0H;------------------------------NEXT:INC S0MOV A,S0CJNE A,#14H,ZDMOV S0,#00H;到1S后进行切换INC DS18B20_CONTMOV A,DS18B20_CONTCJNE A,#04H,ZDMOV DS18B20_CONT,#00HLCALL CHECK1;判断各路温度是否超标ZD:POP PSWPOP ACCRETI;-------------------------------------------;ALARM_CHECK;判断各路温度是否超标;-------------------------------------------CHECK1:MOV R0,TMP_INMOV R1,HI_TMP_SET_INLCALL ALARM_CALJZ ALARM_HI_NORMALSETB IN_LED_ALARM_HIJMP CHECK2ALARM_HI_NORMAL:CLR IN_LED_ALARM_HICHECK2:MOV R0,TMP_INMOV R1,LOW_TMP_SET_INLCALL ALARM_CALJNZ CCSETB IN_LED_ALARM_LOWJMP DDCC:CLR IN_LED_ALARM_LOW DD:MOV R0,TMP_OUTMOV R1,HI_TMP_SET_OUTLCALL ALARM_CALJZ EESETB OUT_LED_ALARM_HIJMP DDDEE:CLR OUT_LED_ALARM_HI DDD:MOV R0,TMP_OUTMOV R1,LOW_TMP_SET_OUTLCALL ALARM_CALJNZ FFSETB OUT_LED_ALARM_LOWJMP GGFF:CLR OUT_LED_ALARM_LOW GG:MOV R0,TMP_OUTMOV R1,HI_TMP_SET_FRONTLCALL ALARM_CALJZ HHSETB FRONT_LED_ALARM_HIJMP IIHH:CLR FRONT_LED_ALARM_HI II:MOV R0,TMP_OUTMOV R1,HI_TMP_SET_BACKLCALL ALARM_CALJZ JJSETB BACK_LED_ALARM_HIJMP ALARM_RET1JJ:CLR BACK_LED_ALARM_HI ALARM_RET1:RET;------------------------------------------;R0=R1A=2,R0<R1A=0,R0>R1A=1 ;比较大小;------------------------------------------ALARM_CAL:;R0,R1MOV A,R0SUBB A,R1JC SMALLMOV A,#01HJMP COMP_RETSMALL:MOV A,#0HCOMP_RET:RET;------------------------------------------;显示子程序;时分秒显示;------------------------------------------DISPLAY:MOV DPTR,#TABMOV A,TEMPER_LMOV B,#10DIV ABMOV R4,AMOV R5,BMOV A,R5;温度低位MOVC A,@A+DPTR;显示输出MOV DISPLAY_DATA,ASETB COM_TEMPERL_LLCALL DELAY5MSCLR COM_TEMPERL_LMOV A,R4MOVC A,@A+DPTR;显示输出MOV DISPLAY_DATA,ASETB COM_TEMPERL_HLCALL DELAY5MSCLR COM_TEMPERL_HMOV A,TEMPER_H;温度高位MOV B,#10DIV ABMOV R4,AMOV R5,BMOV A,R5MOVC A,@A+DPTR;显示输出ANL A,#7FH;MOV DISPLAY_DATA,ASETB COM_TEMPERH_LLCALL DELAY5MSCLR COM_TEMPERH_LMOV A,R4MOVC A,@A+DPTRMOV DISPLAY_DATA,ASETB COM_TEMPERH_HLCALL DELAY5MSCLR COM_TEMPERH_HMOV A,DS18B20_CONTINC AMOVC A,@A+DPTR;显示输出MOV DISPLAY_DATA,ASETB COM_DS18B20_NUMLCALL DELAY5MSCLR COM_DS18B20_NUMRET;------------------------------------------;键盘扫描程序;------------------------------------------KEY:;KEY_PORT,#0FFHMOV A,KEY_PORTCPL AANL A,#0F0HJZ RET1LCALL DELAY10MSMOV A,KEY_PORTCPL AANL A,#0F0HJZ RET1JB ACC.7,MODE_CHANGEJB ACC.6,MODE_DEC_JJB ACC.5,MODE_ADD_JJB ACC.4,NUM_ADD_JRET1:RETMODE_DEC_J:LJMP MODE_DECRETMODE_ADD_J:LJMP MODE_ADDRETNUM_ADD_J:LJMP NUM_ADDRETMODE_CHANGE:INC MODE_CONTMOV A,MODE_CONTCJNE A,#04H,MODE_RETMOV MODE_CONT,#00HSETB TR0MODE_RET:LCALL MODE_DEL WAIT:LCALL DISPLAYJNB P3.7,WAITRETMODE_DEL:MOV A,MODE_CONTCJNE A,#00H,MOD_1CLR LED_LOW_SETCLR LED_HI_SETCLR LED_CHECKSETB LED_NORMALRETMOD_1:CJNE A,#01H,MOD_2CLR LED_LOW_SETCLR LED_HI_SETSETB LED_CHECKCLR LED_NORMALCLR TR0RETMOD_2:CJNE A,#02H,MOD_3CLR LED_LOW_SETSETB LED_HI_SETCLR LED_CHECKCLR LED_NORMALCLR TR0RETMOD_3:SETB LED_LOW_SETCLR LED_HI_SETCLR LED_CHECKCLR LED_NORMALCLR TR0RET;-----------------------------------;----------------------------------MODE_DEC:;模式0MOV A,MODE_CONTCJNE A,#00H,MODE_DEC_1 WAIT1:LCALL DISPLAYJNB P3.6,WAIT1RETMODE_DEC_1:;模式1CJNE A,#01H,MODE_DEC_2MOV A,DS18B20_CONTCJNE A,#00H,MODE_DEC_11MOV DS18B20_CONT,#03H WAIT2:LCALL DISPLAYJNB P3.6,WAIT2RETMODE_DEC_11:DEC DS18B20_CONTWAIT3:LCALL DISPLAYJNB P3.6,WAIT3RETMODE_DEC_2:;模式2IN口CJNE A,#02H,MODE_DEC_3MOV A,DS18B20_CONTCJNE A,#00H,MODE_DEC_21DEC HI_TMP_SET_INMOV A,HI_TMP_SET_OUTJNZ MODE_DEC_DELMOV HI_TMP_SET_IN,#64H MODE_DEC_DEL:MOV TEMPER_H,HI_TMP_SET_INMOV TEMPER_L,#00HJMP MODE_DEC_RETMODE_DEC_21:;OUT口MOV A,DS18B20_CONTCJNE A,#01H,MODE_DEC_22DEC HI_TMP_SET_OUTMOV A,HI_TMP_SET_OUTJNZ MODE_DEC_RET1MOV HI_TMP_SET_OUT,#64H MODE_DEC_RET1:MOV TEMPER_H,HI_TMP_SET_OUTMOV TEMPER_L,#00HJMP MODE_DEC_RETMODE_DEC_22:;前点CJNE A,#02H,MODE_DEC_23DEC HI_TMP_SET_FRONTMOV A,HI_TMP_SET_FRONTJNZ MODE_DEC_RET2MOV HI_TMP_SET_FRONT,#64H MODE_DEC_RET2:MOV TEMPER_H,HI_TMP_SET_FRONT MOV TEMPER_L,#00HJMP MODE_DEC_RETMODE_DEC_23:;后点DEC HI_TMP_SET_BACKMOV A,HI_TMP_SET_BACKJNZ MODE_DEC_XMOV HI_TMP_SET_BACK,#64H MODE_DEC_X:MOV TEMPER_H,HI_TMP_SET_BACK MOV TEMPER_L,#00HMODE_DEC_RET:WAIT4:LCALL DISPLAYJNB P3.6,WAIT4RET;------------------------------------;-----------------------------------MODE_DEC_3:;模式3MOV A,DS18B20_CONTCJNE A,#00H,MODE_DEC_21BDEC LOW_TMP_SET_INMOV A,LOW_TMP_SET_INJNZ MODE_DEC_DELBMOV LOW_TMP_SET_IN,#64H MODE_DEC_DELB:MOV TEMPER_H,LOW_TMP_SET_IN MOV TEMPER_L,#00HJMP MODE_DEC_RETBMODE_DEC_21B:;OUT口MOV A,DS18B20_CONTCJNE A,#01H,MODE_DEC_RETBDEC LOW_TMP_SET_OUTMOV A,LOW_TMP_SET_OUTJNZ MODE_DEC_RET1BMOV LOW_TMP_SET_OUT,#64H MODE_DEC_RET1B:MOV TEMPER_H,LOW_TMP_SET_OUT MOV TEMPER_L,#00HMODE_DEC_RETB:WAIT5:LCALL DISPLAYJNB P3.6,WAIT5RET;-----------------------------------;----------------------------------MODE_ADD:MOV A,MODE_CONTCJNE A,#00H,MODE_ADD_1WAIT6:LCALL DISPLAYJNB P3.5,WAIT6RETMODE_ADD_1:;模式1CJNE A,#01H,MODE_ADD_2MOV A,DS18B20_CONTCJNE A,#03H,MODE_ADD_11MOV DS18B20_CONT,#00HWAIT7:LCALL DISPLAYJNB P3.5,WAIT7RETMODE_ADD_11:INC DS18B20_CONTWAIT8:LCALL DISPLAYJNB P3.5,WAIT8RETMODE_ADD_2:;模式2IN口CJNE A,#02H,MODE_ADD_3MOV A,DS18B20_CONTCJNE A,#00H,MODE_ADD_21INC HI_TMP_SET_INMOV A,HI_TMP_SET_OUTCJNE A,#64H,MODE_ADD_DELMOV HI_TMP_SET_IN,#00H MODE_ADD_DEL:MOV TEMPER_H,HI_TMP_SET_IN MOV TEMPER_L,#00HJMP MODE_ADD_RETMODE_ADD_21:;OUT口MOV A,DS18B20_CONTCJNE A,#01H,MODE_ADD_22INC HI_TMP_SET_OUTMOV A,HI_TMP_SET_OUTCJNE A,#64H,MODE_ADD_RET1MOV HI_TMP_SET_OUT,#00H MODE_ADD_RET1:MOV TEMPER_H,HI_TMP_SET_OUTMOV TEMPER_L,#00HJMP MODE_ADD_RETMODE_ADD_22:;前点CJNE A,#02H,MODE_ADD_23INC HI_TMP_SET_FRONTMOV A,HI_TMP_SET_FRONTCJNE A,#64H,MODE_ADD_RET2MOV HI_TMP_SET_FRONT,#00H MODE_ADD_RET2:MOV TEMPER_H,HI_TMP_SET_FRONT MOV TEMPER_L,#00HJMP MODE_ADD_RETMODE_ADD_23:;后点INC HI_TMP_SET_BACKMOV A,HI_TMP_SET_BACKCJNE A,#64H,MODE_ADD_XMOV HI_TMP_SET_BACK,#00HMODE_ADD_X:MOV TEMPER_H,HI_TMP_SET_BACKMOV TEMPER_L,#00HMODE_ADD_RET:WAIT9:LCALL DISPLAYJNB P3.5,WAIT9RET;------------------------------------;-----------------------------------MODE_ADD_3:;模式3MOV A,DS18B20_CONTCJNE A,#00H,MODE_ADD_21BINC LOW_TMP_SET_INMOV A,LOW_TMP_SET_INCJNE A,#64H,MODE_ADD_DELBMOV LOW_TMP_SET_IN,#00H MODE_ADD_DELB:MOV TEMPER_H,LOW_TMP_SET_IN MOV TEMPER_L,#00HJMP MODE_ADD_RETBMODE_ADD_21B:;OUT口MOV A,DS18B20_CONTCJNE A,#01H,MODE_ADD_RETBINC LOW_TMP_SET_OUTMOV A,LOW_TMP_SET_OUTCJNE A,#64H,MODE_ADD_RET1BMOV LOW_TMP_SET_OUT,#64H MODE_ADD_RET1B:MOV TEMPER_H,LOW_TMP_SET_OUT MOV TEMPER_L,#00HMODE_ADD_RETB:WAIT71:LCALL DISPLAYJNB P3.5,WAIT71RET;----------------------------------;----------------------------------NUM_ADD:INC DS18B20_CONTMOV A,DS18B20_CONTCJNE A,#04H,NUM_ADD_RETMOV DS18B20_CONT,#00HNUM_ADD_RET:WAIT81:LCALL DISPLAYJNB P3.5,WAIT81RET;--------------------------------DELAY;延时程序;----------------------------------DELAY5MS:MOV R1,#2;5mS延时#5D1:MOV R2,#248D2:DJNZ R2,D2DJNZ R1,D1RET;------------------------------------------10MS DELAY DELAY10MS:MOV R3,#25;10mS延时D4:MOV R4,#200D3:DJNZ R4,D3DJNZ R3,D4RET;**********DS18B20复位程序***************** INIT_18B20:SETB DQ1SETB DQ2SETB DQ3SETB DQ4NOPNOPNOPNOPCLR DQ1CLR DQ2CLR DQ3CLR DQ4MOV R0,#0FBHTSR1:DJNZ R0,TSR1;延时SETB DQ1SETB DQ2SETB DQ3SETB DQ4MOV R0,#25HTSR2:JNB DQ1,TSR3JNB DQ2,TSR3JNB DQ3,TSR3JNB DQ4,TSR3DJNZ R0,TSR2TSR3:SETB FLAG1;置标志位,表明DS18B20存在AJMP TSR5TSR4:CLR FLAG1LJMP TSR7TSR5:MOV R0,#06BHTSR6:DJNZ R0,TSR6TSR7:SETB DQ1;表明不存在RET;********************设定DS18B20暂存器设定值************** RE_CONFIG:JB FLAG1,RE_CONFIG1RETRE_CONFIG1:MOV A,#0CCH;放跳过ROM命令LCALL WRITE_18B20MOV A,#4EHLCALL WRITE_18B20;写暂存器命令MOV A,#00H;报警上限中写入00HLCALL WRITE_18B20MOV A,#00H;报警下限中写入00HLCALL WRITE_18B20MOV A,#7FH;选择12位温度分辨率LCALL WRITE_18B20RET;*****************读转换后的温度值**************** GET_TEMPER:MOV A,MODE_CONTJZ GET_NEXT;只有模式零才GETCJNE A,#02H,AARETAA:CJNE A,#03H,GET_NEXTRETGET_NEXT:SETB DQ1SETB DQ2SETB DQ3SETB DQ4LCALL INIT_18B20JB FLAG1,TSS2RET;若不存在则返回TSS2:MOV A,#0CCH;跳过ROMLCALL WRITE_18B20MOV A,#44H;发出温度转换命令LCALL WRITE_18B20LCALL INIT_18B20MOV A,#0CCH;跳过ROMLCALL WRITE_18B20MOV A,#0BEH;发出读温度换命令LCALL WRITE_18B20MOV A,DS18B20_CONTCJNE A,#00H,READ_1LCALL READ2_18B20LCALL CHANGE1MOV TMP_IN,TEMPER_HRETREAD_1:MOV A,DS18B20_CONTCJNE A,#01H,READ_2LCALL READ2_18B20_2LCALL CHANGE1MOV TMP_OUT,TEMPER_HRETREAD_2:MOV A,DS18B20_CONTCJNE A,#02H,READ_3LCALL READ2_18B20_3LCALL CHANGE1MOV TMP_FRONT,TEMPER_HRETREAD_3:LCALL READ2_18B20_4;读两个字节的温度LCALL CHANGE1MOV TMP_BACK,TEMPER_HRET;**************************************;***************写DS18B20程序************ WRITE_18B20:MOV R2,#8CLR CWR1:CLR DQ1CLR DQ2CLR DQ3CLR DQ4MOV R3,#6DJNZ R3,$RRC AMOV DQ1,CMOV DQ2,CMOV DQ3,CMOV DQ4,CMOV R3,#23DJNZ R3,$SETB DQ1SETB DQ2SETB DQ3SETB DQ4NOPDJNZ R2,WR1SETB DQ1SETB DQ2SETB DQ3SETB DQ4RET;***********读18B20程序,读出两个字节的温度*********READ2_18B20:MOV R4,#2;低位存在29H,高位存在TEMPER_H MOV R1,#TEMPER_LRE00:MOV R2,#8RE01:CLR CSETB CNOPNOPCLR DQ1NOPNOPSETB DQ1MOV R3,#7DJNZ R3,$MOV C,DQ1MOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE01MOV@R1,ADEC R1DJNZ R4,RE00RET;***********读18B20_2程序,读出两个字节的温度********* READ2_18B20_2:MOV R4,#2;低位存在29H,高位存在TEMPER_H MOV R1,#TEMPER_LRE001:MOV R2,#8RE012:CLR CSETB CNOPCLR DQ2NOPNOPNOPSETB DQ2MOV R3,#7DJNZ R3,$MOV C,DQ2MOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE012MOV@R1,ADEC R1DJNZ R4,RE001RET;***********读18B20_3程序,读出两个字节的温度********* READ2_18B20_3:MOV R4,#2;低位存在29H,高位存在TEMPER_H MOV R1,#TEMPER_LRE002:MOV R2,#8RE013:CLR CSETB CNOPNOPCLR DQ3NOPNOPNOPSETB DQ3MOV R3,#7DJNZ R3,$MOV C,DQ3MOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE013MOV@R1,ADEC R1DJNZ R4,RE002RET;***********读18B20_3程序,读出两个字节的温度********* READ2_18B20_4:MOV R4,#2;低位存在29H,高位存在TEMPER_H MOV R1,#TEMPER_LRE003:MOV R2,#8RE014:CLR CSETB CNOPNOPCLR DQ4NOPNOPNOPSETB DQ4MOV R3,#7DJNZ R3,$MOV C,DQ4MOV R3,#23DJNZ R3,$RRC ADJNZ R2,RE014MOV@R1,ADEC R1DJNZ R4,RE003RET;************读出的温度进行数据转换**************CHANGE1:MOV A,MODE_CONTJZ CHANGE1_NEXT;只有模式零和1才GETCJNE A,#02H,BBRETBB:CJNE A,#03H,CHANGE1_NEXTRETCHANGE1_NEXT:MOV A,TEMPER_LANL A,#0FHMOV B,#6HMUL ABMOV R0,AMOV A,TEMPER_LMOV C,TEMPER_H.0;将TEMPER_H中的最低位移入C RRC AMOV C,TEMPER_H.1RRC AMOV C,TEMPER_H.2RRC AMOV C,TEMPER_H.3RRC AMOV TEMPER_H,AMOV TEMPER_L,R0RET;***********************************D1MS:MOV R7,#80;1MS延时(按12MHZ算)DJNZ R7,$RET;*************************TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND;DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,0H;共阴极LED;END。
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;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 "}; 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; //写0i = 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. 掌握多路温度监测系统的基本原理和设计方法。
2. 熟悉温度传感器的应用和特性。
3. 学会使用相关电子元件和仪器进行系统搭建。
4. 提高动手能力和实践操作技能。
二、实验原理多路温度监测系统主要利用温度传感器对多个测温点进行实时监测,并将采集到的温度数据传输到上位机进行处理和分析。
本实验采用DS18B20温度传感器和AT89C51单片机为核心控制器,通过单总线接口实现多路温度数据的采集。
三、实验仪器与设备1. 单片机开发板:AT89C512. DS18B20温度传感器:3个3. LCD1602显示屏:1个4. 按键模块:1个5. 电源模块:1个6. 蜂鸣器:1个7. 连接线:若干四、实验步骤1. 系统搭建:(1)将AT89C51单片机插入开发板,连接电源模块;(2)将3个DS18B20温度传感器通过单总线接口连接到AT89C51单片机的P3.7端口;(3)将LCD1602显示屏、按键模块、蜂鸣器等外围设备连接到相应的端口;(4)连接电源,确保系统正常工作。
2. 程序编写:(1)编写AT89C51单片机程序,实现温度采集、显示、报警等功能;(2)编写LCD1602显示屏显示程序,显示当前温度、温度状态、温度阈值等信息;(3)编写按键模块控制程序,实现温度阈值设置、模式切换等功能;(4)编写蜂鸣器报警程序,当温度超过阈值时,蜂鸣器发出报警声。
3. 系统测试:(1)启动系统,观察LCD1602显示屏是否正常显示温度信息;(2)调整按键模块,设置温度阈值,观察系统是否能够正确判断温度是否超过阈值;(3)将温度传感器放置在不同温度环境下,观察系统是否能够准确采集温度数据。
五、实验结果与分析1. 系统搭建成功,LCD1602显示屏正常显示温度信息;2. 通过按键模块设置温度阈值,系统能够正确判断温度是否超过阈值;3. 将温度传感器放置在0℃、25℃、50℃等不同温度环境下,系统能够准确采集温度数据。
多路温度采集和显示系统设计与实现

目录第一章多路温度采集显示系统的设计要求与设计方案 (3)1.1系统设计任务与要求 (13)1.2系统总体方案的设计 (3)第二章主控模块的设计 (6)2.1 8051单片机的特点及引脚 (6)2.2 8051芯片的引脚 (6)2.3 8051单片机的扩展及系统电路 (8)第三章信号输入通道与信号采样模块的设计 (11)3.1 A/D芯片的选用及说明 (11)3.2信号采样模块的电路设计 (15)第四章显示系统、报警系统及键盘控制 (19)4.1显示系统的设计 (19)4.2报警系统的设计 (23)4.3 键盘控制的设计 (25)第五章系统的电源设计 (26)5.1电源系统的组成 (26)5.2电源设计原理 (26)5.3电路 (27)第六章系统软件设计 (28)6.1 主控模块的程序设计 (28)6.2 LED显示程序设计 (32)6.3 报警系统的程序设计 (33)结论 (36)致谢 (37)参考文献 (38)附录1:程序清单 (39)摘要基于51单片机的车用数字温度仪表设计与实现众所周知,车辆仪表作为驾驶员与汽车进行信息交流的重要接口和平台,是车辆安全行驶的重要保证。
随着电子技术的广泛应用,传统汽车仪表逐渐被微处理器为核心的电子控制数字仪表取代已成为必然趋势。
然而,目前国内车辆仪表数字化水平还不高,绝大部分仪表还是模拟式的,而大多数模拟仪表表头的体积较大、数量多,使得显示系统拥挤不堪,影响美观;另外一些模拟仪表故障率高,增加了用户的经济负担,减小了车辆行使的安全系数。
为克服这些缺点,文中提出用51单片机、模/数转换器件ADC0809及霍尔开关及数字式温度传感器DS18B20等对其进行技术改进,设计并实现了新型全数字仪表系统,该仪表系统有显示直观准确、灵敏度高、使用寿命长、灵巧美观、成本低等优点。
本文设计是以MCS-51单片机系统为基础的,通过热电阻变送器对热电阻随温度的变化而得到的模拟信号进行采集,连接多路模拟开关实现多路模拟信号的采集,并通过A/D转换器对模拟信号进行数模转换,把转换得到的数字信号按照顺序分别送入单片机或把指定的那路信号送入单片机,通过单片机进行控制操作,通过对单片机的数据存储器的扩展和程序存储器的扩展来提高片内存储器.数据存储器的容量,以便于在单片机的应用中满足单片机在定时器、中断、串行口等方面的要求;本设计是通过LED来实现单片机的现实系统的,通过单片机对多路模拟开关的控制进行多选一,把其中一路的信号经过A/D转换器的转换,在通过单片机把采集到的信号送到LED电路当中进行显示,此设计中LED显示使用的串行接口来显示的,它是通过人的视觉斩留特性,只观赏感觉是连续点亮的;本文通过单片机报警系统来实现热电阻传感器随测量的温度范围200~700摄氏度,若超出这个温度范围则报警。
多路信号采集显示系统设计与实现

多路信号采集显示系统设计与实现多路信号采集显示系统是一种用于获取并显示多路信号的设备。
它通常由多个信号采集单元、信号处理单元和显示单元组成。
在多路信号采集显示系统中,每个信号采集单元负责采集一路信号。
这些信号可以是来自于传感器、电压、电流、温度、压力等等。
采集的信号经过信号处理单元进行预处理,包括放大、滤波、变换等操作,以消除干扰、增强信号质量。
处理后的信号再经过显示单元进行实时显示。
1. 信号采集单元的设计。
信号采集单元要能够接受不同类型的信号输入,并进行适当的处理和转换。
采集单元需要有高精度、高速度和低噪声的特性,以确保采集到的信号准确可靠。
2. 信号处理单元的设计。
信号处理单元负责对采集到的信号进行预处理,包括放大、滤波、变换等操作。
预处理的目的是提高信号的质量,减少干扰和噪声。
3. 显示单元的设计。
显示单元用于实时显示经过处理的信号。
它可以采用液晶显示器、LED显示屏等设备,具有高清晰度、高对比度和高刷新率等特点。
显示单元还可以支持图像、曲线和图表等多种显示方式,以满足不同用户的需求。
4. 系统的集成与调试。
系统的集成是将采集单元、处理单元和显示单元进行连接和组装,确保它们能够正常工作。
在调试过程中,需要进行实时监测和数据分析,以确认系统的稳定性和可靠性。
多路信号采集显示系统广泛应用于工业自动化、医疗检测、科研实验、环境监测等领域。
它可以实时采集和显示多种类型的信号,帮助用户了解和分析现场情况,提高工作效率和质量。
多路信号采集显示系统的设计与实现是一项技术复杂且具有挑战性的任务。
它需要综合考虑硬件和软件的要求,并具备高精度、高速度和高稳定性的特点。
只有通过精心设计和严谨调试,才能保证系统的正常运行和可靠性使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖北理工学院课程设计报告课程名称:电子设计开放性试验设计题目:多路温度采集及显示系统系别:数理学院专业:应用物理学班级:学生姓名:学号:起止日期:指导教师:教研室主任:ﻩ答辩记录摘要在工业控制领域中,温度就就是一个十分重要得参考量,准确而实时得控制温度对于我们得工作有事半功倍得效果。
而在一些传统得温度测控系统中,存在着数据显示方式单一、数据无法长期存储、调用以及系统接口过于复杂得问题,寻求这些问题得解决方案成为当前研究得焦点。
多路温度采集系统由主控制器、温度采集电路、温度显示电路、报警控制电路及键盘输入控制电路组成。
它利用单片机P87C51做控制及数据处理器、ADC0809N做温度检查器、LED数码显示管做温度显示输出设备。
硬件电路比较简单,成本较低,测温范围大,测量精度高,读数显示直观,使用方便。
近年来单线多点数字化测量技术得发展使温度检测技术实现了快速、可靠、低成本、数字化与网络化。
新型得温度采集系统能采用新型单线智能化温度传感器,能以数字形式直接输出被测点温度值,具有测温误差小、分辨率高、抗干扰能力强、成本低、能远程传输数据等优点。
关键词: 单片机控制;温度测量;模数转换电路;数码管显示器目录设计内容、要求及分工 (1)1实现方案及总体设计ﻩ12 原理图得设计ﻩ32、1 温度采集电路设计ﻩ32、2显示电路设计 (4)3 系统程序设计 (5)3、1主程序设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、53、2子程序设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、64详细仪器清单、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、95 总结与思考及致谢 (9)参考文献1ﻩ0附录一:原理图 (11)附录二:PCB图 (12)附录三:程序、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、12多路温度采集及显示系统设计内容、要求及分工温度就就是一种最基本得环境参数,人们得生活与环境温度息息相关,因此研究温度得测量方法与装置具有重要得意义。
温度测量装置得关键就就是温度传感器,温度传感器得发展经历了三个发展阶段:(1)传统得分立式温度传感器,(2)模拟集成温度传感器,(3)智能集成温度传感器。
目前,国际上新型温度传感器正从模拟式向数字式,从集成化向智能化、网络化得方向飞速发展。
本人选择多路温度采集系统设计。
系统主要技术指标:(1)4路温度采集电路;(2)A/D转换;(3)电子开关;(4)实时温度显示,采用LED数码管显示。
本次设计我们由五人为一组,朱其攀就就是我们小组得组长,负责实验报告部分;胡仲祥负责课程设计部分;黄治雄主要负责部分,黄明负责原理图与PCB图得完成;胡永志则负责软件部分得设计及其调试。
1实现方案及总体设计P87C51RA2/RB2/RC2/RD2 单片8 位微控制器采用先进得CMOS 工艺制造,就就是80C51 微控制器家族得派生品。
其指令集与80C51指令集完全相同。
该器件可通过并行编程得方法对一个OTP 位进行编程,从而选择6时钟或12时钟模式。
此外,也可通过时钟控制寄存器CKCON 中得X2 位选择6 时钟或12 时钟模式。
该器件还包含有4 个8 位I/O 口、个16 位定时/计数器、多个中断-4中断优先级-嵌套得中断结构、1个型UART、片内振荡器及实序电路。
新增得特性使得P87C51RA2/RB2/RC2/RD2成为功能更强大得微控制器,更地支持应用于脉宽调制,高速I/O 递增/递减计数能力如电机控制等场合。
图1 数字式多路温度采集系统结构框图采用智能温度传感器采集环境温度并进行简单得模数转换;单片机P87C51执行程序对温度传感器传输得数据进行进一步得分析处理,转换成环境对应得温度值,通过I/O 口输出到数码显示管(L ED )显示;由键盘输入控制选择某采集电路检测温度及显示;报警电路对设定得最高最低报警温度进行监控报警。
主要由温度传感器、P87C51单片机微控制器、以及数据传输显示三部分组成。
图2系统原理简易图 本系统采用得主要硬件元件分别为P 87C 51单片机作为微控制器,使用单总线温度传感器芯片AD C0809N 作为温度传感器。
温度传感器采集温度数据,温度传感器采集完一次数据后,经过A/D 转换后,再由微控制器根据现场对数据得不同要求可以选择L CD 显示以及上机PC 机显示两种方式来显示数据。
2原理图得设计温度传感器单片机P87C51 温度显示器2、1温度采集电路设计温度采样处理电路由温度传感器、放大电路、A/D转换电路等组成。
采用分块结构得温度采样处理电路,其硬件电路结构复杂,也不便于数据得处理。
采用智能温度传感器采样处理电路,能够方便得进行温度得采集及简单得数据处理。
并且可以达到设计得技术指标要求。
本系统选择智能温度传感器ADC0809N作为温度采集电路得核心器件。
图3 芯片图2、1、1温度采集电路结构温度采集电路结构如图所示。
工作时,由程序控制读取某智能温度传感器ADC0809N采集得温度数据,送单片机处理。
单片机控制电路核心就就是单片机芯片,其加上工作基本电路,就可以展开控制工作。
图4单片机P87C51引脚图2、2显示电路结构显示电路由单片机P87C51得P1、0端作数据输出,连接到低位SN54F04J 得数据输入引脚端。
单片机P87C51得P3、0、P3、1端分别接到一个与门电路得输入端。
显示电路结构图如图4所示。
图5 温度显示部分3系统程序设计3、1 主程序设计主程序主要功能就就是控制调用子程序,实现温度得实时显示、读出并处理ADC0809N得测量温度值(温度测量每1s进行一次)。
其程序流程图如图6所示。
图6数字式多路温度采集系统主程序流程图3、2子程序设计(1)键盘扫描子程序键盘扫描子程序对按下得键进行判断,并转到按下得相应键对应得程序段,执行相应得功能。
其程序流程图如图7所示。
(2)温度转换命令子程序温度转换命令子程序主要就就是发送温度转换开始命令。
在发送匹配ROM 命令后,紧跟着发送要进行测温得ADC0809N得64位ROM序列(这个序列号一般由厂方提供或通过实验得方式获得)。
采用12位分辨率,转换时间约为750ms。
其程序流程图如图8所示。
图7 键盘扫描子程序流程图 图8 温度转换命令子程序流程图(3)读出温度子程序读出温度子程序主要功能就就是读出R AM 中得9个字节,在读出时需进行CRC 校验,校验有错时不进行温度数据得改写。
其程序流程图如图9所示。
(4)计算温度子程序从AD C0809N 读取出得二进制值必须先转换成十进制值,才能用于字符得显示。
在系统采用12位转换精度,温度寄存器里得值就就是以0、0625为步进得,即温度值为温度寄存器里得二进制值乘以0、0625,就就就是实际得十进制温度值。
通过观察可以发现一个十进制值与二进制值之间有很明显得关系。
低字节得高半字节乘以0、0625恰好就就就是原整数。
因此,把二进制得高字节得低半字节与低字节得高半字节组成一个字节,这个字节得二进制值化为十进制值后,就恰好就就是温度值得百、十、个位值;剩下得低字节得低半字节化成十进制后,就就就是温度值得小数部分。
小数部分因为就就是半个字节,所以二进制值范围就就是0~F,转换成十进制小数值就就就是0、0625得倍数。
这样需要4位得数码管来显示小数部分,实际应用不必有这么高得精度,采用1位数码管来显示小数,可以精确到0、1℃。
表5就就就是二进制与十进制小数得近似对应关系。
其程序流程图如图10所示。
表1 小数部分二进制与十进制得近似对应关系表小数部分 二进制数 0 1 2 3 4 5 6 7 8 9 A B C D E F 十进制数67889图9 读出温度子程序流程图 图10 计算温度子程序流程图(5)显示数据刷新子程序显示数据刷新子程序[9]主要就就是对显示缓冲区中得显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。
其程序流程图如图11所示。
图11显示数据刷新子程序流程图4详细仪器清单编号元件名称型号及规格数量1单片机芯片P87C112移位寄存器SN54ALS02J 23七段数码显示器LED 24串转并芯片SN54F04J 1ADC0815A/D转换器09N6 开关-- 4SN74ALS17 逻辑电路304N8 电阻10K 129 电阻8、2K 110 可变电阻-- 811 电容10UF 112 电容30PF 25 总结与思考及致谢本文设计了一种以P87C51单片机为核心控制器、以SN54ALS02作为温度传感器得多路温度采集与显示系统,该系统结构简单、低功耗、方便实用,并且硬件实现简单,得到了比教理想得实验效果。
本系统能够通过单片机灵活编程进行各种功能得设定与修改。
特别适用于大中型企业生产过程中多点温度得巡回测量与监控。
本设计说明了集成化得优点及作用,也表明了科技发展得重要性,也让我们瞧到了单片机得未来生产控制中得地位,让我认识到了学习单片机得重要性。
在本次课程设计中朱其攀为我们组得组长,在她得带领下,我们各组员都积极配合,很好得完成了自己得任务。
我主要负责撰写课程设计报告,朱其攀开始绘制系统原理图与PCB图,在原理图与PCB图得绘制过程中胡永志也开始了软件部分得设计,黄志雄也很好得完成了她得设计。
在本次设计得过程中确确实实遇到很多问题,从而发现自己得很多不足。
如何将自己所学在所用展现出来就就是自己在本次课程设计中得到得最大收获。
几人为一小组得分配方式也让同学之间深深体会到了团队得重要性,每人出一份力才能事半功倍。
很多问题在老师得指导下也迎刃而解。
在这里我们特别感谢余宏生老师对我们孜孜不倦得辅导以及同学们热心得帮助,同时也感谢学校给我们这样好得机会来学习单片机设计。
从本次设计中得到很多宝贵得经验,同时也学习了很多知识。
参考文献[1]蔡明文,冯先成。
单片机课程设计、武汉:华中科技大学出版社,2007、3。