单片机温度采集与显示
基于单片机的温度采集与液晶显示
1 绪论1.1 本课题研究的背景和意义温度,一个在日常生活和生产过程甚至科学实验中普遍而且重要的物理参数。
近年来,随着社会的发展和科技的进步,温度控制系统以及测温仪器已经广泛应用于社会生活的各个领域,尤其是在工业自动化控制中占有非常重要的地位。
人们通过温度计来采集温度,经过人工操作进行加热、通风和降温。
从而来控制温度,但是对于这些控制对象惯性大,滞后性严重,而且还存在有许多不定的因素,从而根本难以建立精确的数学模型。
这样不仅控制精度低、实时性差,而且操作人员的劳动强度大,并且有许多工业生产环节是人们不能直接介入的。
因此智能化已然成为现代温度控制系统发展的主流方向。
针对这一种实际情况,设计个温度控制系统,具有非常广泛的应用前景和实际意义[1]。
随着电子信息技术和微型计算机技术的飞速发展。
单片机技术也得到了飞速的发展。
尤其是在高集成度、高速度、低功耗还有高性能方面取得了巨大的进展。
使得单片机在电子产品当中的应用越来越广泛。
使用单片机对温度进行控制的技术也油然而生。
它不仅可以克服温度控制系统中存在的严重的滞后现象,同时还可以在提高采样频率的基础上很大程度的提高控制的效果和控制的精度。
并且随着技术日益发展和完善,相信越来越能显现出它的优越性。
1.2 目前国内外研究现状在国内外温度控制成了一门广泛应用于很多领域的技术。
像电力、化工、石油、冶金、航空航天、机械制造、粮食存储、酒类生产等。
温度控制系统虽然在国内各行各业的应用已十分广泛,但是从温度控制器的生产角度来看,总体的发展水平仍不高。
跟美德日等先进国家相比,仍有着较大的差距。
“点位”控制和常规的PID控制器占领了成熟产品的主体份额。
但它只可以适用于一般的温度系统控制,而难于控制复杂、滞后、时变的温度控制系统。
此外,适于较高控制场合的智能化、自适应控制仪表,目前在国内还没有取得较好的研究成果。
并且,在形成商品化和仪表控制参数的自整定方面,一些先进国家虽已经有一批成熟的产品。
单片机的温度采集系统 源代码
dat=DS;
i=8;while(i>0)i--;
return(dat);
}
void tmpwritebyte(uchar dat) //写一个字节到DS18B20里
{
uint i;uchar j;bit testb;
for(j=1;j<=8;j++)
temp=tt*10+0.5; //放大十倍,将小数点后第一位转换为可显示数字,再四舍五入
return temp;
}
uchar tmpread(void) //读一个字节
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P3^3; //定义DS18B20接口
int temp; //全局温度变量
{
dsreset(); //初始化DS18B20
tmpwritebyte(0xcc); //跳过序列号命令
tmpwritebyte(0x44); //发送温度转换命令
}
int tmp() //获得温度
{
float tt;uchar a,b;
dsreset();
{
P2=0; //LED段选,共阴极 送1点亮某段
单片机ADC采集NTC温度
单⽚机ADC采集NTC温度通常会将100kNTC串联⼀个100K电阻⽤于测量温度,温度变化时NTC阻值也发⽣变化,反应到ADC上就是电压变化,只需⽤ADC时时的采样NTC上的电压计算出电阻,即可根据阻值表计算出NTC的温度。
项⽬合作,吹⽜扯淡,交朋友请联系:186********static const char adclab[111][2] = {{0x03,0xbf},{0x03,0xbc},{0x03,0xb9},{0x03,0xb6},{0x03,0xb2},{0x03,0xab},{0x03,0xa7},{0x03,0xa3},{0x03,0x9e},{0x03,0x9a},{0x03,0x96},{0x03,0x91},{0x03,0x8c},{0x03,0x87},{0x03,0x82},{0x03,0x7d},{0x03,0x78},{0x03,0x72},{0x03,0x6d},{0x03,0x67},{0x03,0x61},{0x03,0x5a},{0x03,0x54},{0x03,0x4e},{0x03,0x47},{0x03,0x41},{0x03,0x3a},{0x03,0x33},{0x03,0x2c},{0x03,0x24},{0x03,0x1d},{0x03,0x15},{0x03,0x0e},{0x03,0x06},{0x02,0xfe},{0x02,0xf6},{0x02,0xee},{0x02,0xe5},{0x02,0xdd},{0x02,0xd4},{0x02,0xcc},{0x02,0xc3},{0x02,0xba},{0x02,0xb1},{0x02,0xa8},{0x02,0x9f},{0x02,0x96},{0x02,0x8d},{0x02,0x84},{0x02,0x7b},{0x02,0x72},{0x02,0x68},{0x02,0x5f},{0x02,0x56},{0x02,0x4c},{0x02,0x43},{0x02,0x3a},{0x02,0x30},{0x02,0x27},{0x02,0x1e},{0x02,0x15},{0x02,0x0b},{0x02,0x02},{0x01,0xf9},{0x01,0xf0},{0x01,0xf0},{0x01,0xe7},{0x01,0xde},{0x01,0xd5},{0x01,0xcc},{0x01,0xc3},{0x01,0xbb},{0x01,0xb2},{0x01,0xaa},{0x01,0xa1},{0x01,0x99},{0x01,0x91},{0x01,0x89},{0x01,0x81},{0x01,0x79},{0x01,0x71},{0x01,0x69},{0x01,0x61},{0x01,0x5a},{0x01,0x53},{0x01,0x4b},{0x01,0x44},{0x01,0x3d},{0x01,0x36},{0x01,0x30},{0x01,0x29},{0x01,0x22},{0x01,0x1c},{0x01,0x16},{0x01,0x0f},{0x01,0x09},{0x01,0x03},{0x00,0xfd},{0x00,0xf8},{0x00,0xf2},{0x00,0xed},{0x00,0xe7},{0x00,0xe2},{0x00,0xdd},{0x00,0xd8},{0x00,0xd3},{0x00,0xce},{0x00,0xc9},{0x00,0xc4},{0x00,0xc0},{0x00,0xba},};unsigned char culTemp(unsigned int adTmp){unsigned char numLab = 0;unsigned char tempVal = 0;unsigned int cntlab = 0;unsigned int minlab = 0;unsigned int maxlab = 0;minlab = (unsigned int)((adclab[0][0]<<8)|adclab[0][1]);cntlab = minlab;maxlab = (unsigned int)((adclab[100][0]<<8)|adclab[100][1]);if(minlab < adTmp){tempVal = 0;}else if(maxlab > adTmp){tempVal = 100;}else{while( cntlab >= adTmp){if(numLab < 101){numLab++;cntlab = (unsigned int)((adclab[numLab][0]<<8)|adclab[numLab][1]);}else{break;}}if(numLab == 101){tempVal = 100;}else{tempVal = numLab;}}return tempVal;}if(swAinBuz == 0){if(adcStp == 0){ADMD = 0x90 | C_ADC_PA1; // Select AIN0(PA0) pad as ADC input//ADMD = 0x90 | C_ADC_PA0;ADMDbits.START = 1; // Start a ADC conversion sessionwhile(ADMDbits.EOC);adcStp = 1;}else if(adcStp == 1){if(ADMDbits.EOC == 1){adcStp = 0;adcCnt++;R_AIN0_DATA_LB += ( 0x0F & ADR);R_AIN0_DATA += ADD;if(adcCnt == 8){adcCnt = 0;R_AIN0_DATA <<= 4; // R_AIN0_DATA shift left 4 bit//R_AIN0_DATA_LB &= 0xF0; // Only get Bit7~4R_AIN0_DATA += R_AIN0_DATA_LB; // R_AIN0_DATA + R_AIN0_DATA_LB R_AIN0_DATA >>=5; // R_AIN0_DATA divided 8adcVal = R_AIN0_DATA; // output val 0~1024R_AIN0_DATA = 0;R_AIN0_DATA_LB = 0;if(buzEn){swAinBuz = 1;PACON = 0x00;IOSTA &= 0xfd;}}}}}。
单片机在数据采集与处理中的应用
单片机在数据采集与处理中的应用随着科技的不断进步和发展,单片机作为一种功能强大且灵活的微型计算机,被广泛应用于各个领域,尤其在数据采集与处理方面发挥着重要的作用。
本文将以单片机在数据采集与处理中的应用为核心,介绍单片机的基本原理、常见应用场景及其在数据采集与处理中发挥的作用。
一、单片机的基本原理单片机是一种集成了处理器、内存、输入输出接口及其他外设的微型计算机系统,其核心是一个微处理器。
在数据采集与处理中,单片机通过外部传感器或接口设备对需要采集的数据进行实时监测,并对采集到的数据进行处理和存储。
单片机的基本原理包括输入输出、计算与控制、存储与通信等方面。
二、单片机在数据采集中的应用1. 温度和湿度采集:在气象、农业、环境监测等领域,通过连接温湿度传感器和单片机,可以实时采集环境中的温度和湿度数据,并根据采集到的数据做出相应的控制和决策。
2. 压力和力的采集:在工业自动化、航天航空、汽车工程等领域,通过连接压力传感器和单片机,可以实时采集各种设备的压力和力数据,用于分析设备的工作状态和负荷情况。
3. 光线和声音的采集:在照明控制、声音分析、环境监测等领域,通过连接光线传感器和声音传感器与单片机,可以实时采集光线和声音的强度和频率,并做出相应的反应与处理。
三、单片机在数据处理中的应用1. 数据处理算法:通过单片机内部的计算和运算功能,可以进行各种数据处理算法,如滤波算法、傅里叶变换、数据压缩算法等,从而更好地处理采集到的数据,并提取出有价值的信息。
2. 数据存储与管理:单片机通过内部的存储器或外部存储介质,如闪存、SD卡等,可以将采集到的数据进行存储,并实现对数据的管理和查找,方便后续的数据分析和应用。
3. 数据通信与传输:单片机可以通过串口、网络接口等方式与外部设备或其他单片机进行数据通信和传输,实现数据的共享和互联,使得数据采集与处理更加高效和便捷。
四、单片机在数据采集与处理中的优势1. 灵活性:单片机具有自主控制和计算能力,能够根据实际需求对数据采集和处理进行灵活调整和配置。
基于51单片机——Ds18B20温度采集,LCD显示汇编程序(附带proteus仿真图)
TEMP_ZH EQU 24H ;实测温度值存放单元TEMPL EQU 25HTEMPH EQU 26HTEMP_TH EQU 27H ;高温报警值存放单元TEMP_TL EQU 28H ;低温报警值存放单元TEMPHC EQU 29H ;正、负温度值标记TEMPLC EQU 2AHTEMPFC EQU 2BHK1 EQU P1.4 ;查询按键K2 EQU P1.5 ;设置/调整键K3 EQU P1.6 ;调整键K4 EQU P1.7 ;确定键BEEP EQU P3.7 ;蜂鸣器RELAY EQU P1.3 ;指示灯LCD_X EQU 2FH ;LCD 字符显示位置LCD_RS EQU P2.0 ;LCD 寄存器选择信号 LCD_RW EQU P2.1 ;LCD 读写信号LCD_EN EQU P2.2 ;LCD 允许信号FLAG1 EQU 20H.0 ;DS18B20是否存在标志 KEY_UD EQU 20H.1 ;设定按键的增、减标志 DQ EQU P3.3 ;DS18B20数据信号ORG 0000HLJMP MAINORG 0030HMAIN: MOV SP,#60HMOV A,#00HMOV R0,#20H ;将20H~2FH 单元清零MOV R1,#10HCLEAR: MOV @R0,AINC R0DJNZ R1,CLEARLCALL SET_LCDLCALL RE_18B20START: LCALL RST ;调用18B20复位子程序JNB FLAG1,START1 ;DS1820不存在LCALL MENU_OK ;DS1820存在,调用显示正确信息子程序MOV TEMP_TH,#055H ;设置TH初值85度MOV TEMP_TL,#019H ;设置TL初值25度LCALL RE_18B20A ;调用暂存器操作子程序LCALL WRITE_E2 ;写入DS18B20LCALL TEMP_BJ ;显示温度标记JMP START2START1: LCALL MENU_ERROR ;调用显示出错信息子程序 LCALL TEMP_BJ ;显示温度标记SJMP $START2: LCALL RST ;调用DS18B20复位子程序JNB FLAG1,START1 ;DS18B20不存在MOV A,#0CCH ;跳过ROM匹配命令LCALL WRITEMOV A,#44H ;温度转换命令LCALL WRITELCALL RSTMOV A,#0CCH ;跳过ROM匹配LCALL WRITEMOV A,#0BEH ;读温度命令LCALL WRITELCALL READ ;调用DS18B20数据读取操作子程序LCALL CONVTEMP ;调用温度数据BCD 码处理子程序LCALL DISPBCD ;调用温度数据显示子程序LCALL CONV ;调用LCD显示处理子程序LCALL TEMP_COMP ;调用实测温度值与设定温度值比较子程序LCALL PROC_KEY ;调用键扫描子程序SJMP START2 ;循环;*************************** 键扫描子程序*****************************PROC_KEY:JB K1,PROC_K1LCALL BEEP_BLJNB K1,$MOV DPTR,#M_ALAX1MOV A,#1LCALL LCD_PRINTLCALL LOOK_ALARMJB K3,$LCALL BEEP_BLJMP PROC_K2PROC_K1: JB K2,PROC_ENDLCALL BEEP_BLJNB K2,$MOV DPTR,#RST_A1MOV A,#1LCALL LCD_PRINTLCALL SET_ALARMLCALL RE_18B20 ;将设定的TH,TL值写入DS18B20LCALL WRITE_E2PROC_K2: LCALL MENU_OKLCALL TEMP_BJPROC_END:RET;*************************** 设定温度报警值TH、TL ***************************SET_ALARM:LCALL LOOK_ALARMAS0: JB K1,AS00LCALL BEEP_BLJNB K1,$CPL 20H.1 ;UP/DOWN 标记AS00: JB 20H.1,ASZ01 ;20H.1=1,增加JMP ASJ01 ;20H.1=0,减小ASZ01: JB K2,ASZ02 ;TH值调整(增加)LCALL BEEP_BLINC TEMP_THMOV A,TEMP_THCJNE A,#120,ASZ011MOV TEMP_TH,#0ASZ011: LCALL LOOK_ALARMLCALL DELAYJMP ASZ01ASZ02: JB K3,ASZ03 ;TL值调整(增加) LCALL BEEP_BLINC TEMP_TLMOV A,TEMP_TLCJNE A,#99,ASZ021MOV TEMP_TL,#00HASZ021: LCALL LOOK_ALARMMOV R5,#10LCALL DELAYJMP ASZ02ASZ03: JB K4,AS0 ;确定调整LCALL BEEP_BLJNB K4,$RETASJ01: JB K2,ASJ02 ;TH值调整(减少) LCALL BEEP_BLDEC TEMP_THMOV A,TEMP_THCJNE A,#0FFH,ASJ011ASJ011: LCALL LOOK_ALARMMOV R5,#10LCALL DELAYJMP AS0ASJ02: JB K3,ASJ03 ;TL值调整(减少)LCALL BEEP_BLDEC TEMP_TLMOV A,TEMP_TLCJNE A,#0FFH,ASJ021JMP ASJ022ASJ021: LCALL LOOK_ALARM ;MOV R5,#10LCALL DELAYJMP AS0ASJ022: CPL 20H.1JMP ASZ01ASJ03: JMP ASZ03RETRST_A1: DB " SET ALERT CODE " ,0;*********************** 实测温度值与设定温度值比较子程序**********************TEMP_COMP:MOV A,TEMP_THSUBB A,TEMP_ZH ;减数>被减数,则JC CHULI1 ;借位标志位C=1,转 MOV A,TEMPFCCJNE A,#0BH,COMPSJMP CHULI2COMP: MOV A,TEMP_ZHSUBB A,TEMP_TL ;减数>被减数,则JC CHULI2 ;借位标志位C=1,转MOV DPTR,#BJ5LCALL TEMP_BJ3CLR RELAY ;点亮指示灯RETCHULI1: MOV DPTR,#BJ3LCALL TEMP_BJ3SETB RELAY ;熄灭指示灯LCALL BEEP_BL ;蜂鸣器响RETCHULI2: MOV DPTR,#BJ4LCALL TEMP_BJ3SETB RELAY ;熄灭指示灯LCALL BEEP_BL ;蜂鸣器响RET;-----------------------------------------TEMP_BJ3: MOV A,#0CEHLCALL WCOMMOV R1,#0MOV R0,#2BBJJ3: MOV A,R1MOVC A,@A+DPTRLCALL WDATAINC R1DJNZ R0,BBJJ3RETBJ3: DB ">H"BJ4: DB "<L"BJ5: DB " !";;**************************** 显示温度标记子程序***************************TEMP_BJ: MOV A,#0CBHLCALL WCOMMOV DPTR,#BJ1 ;指针指到显示消息MOV R1,#0MOV R0,#2BBJJ1: MOV A,R1MOVC A,@A+DPTRLCALL WDATAINC R1DJNZ R0,BBJJ1RETBJ1: DB 00H,"C";******************************** 显示正确信息子程序***************************MENU_OK: MOV DPTR,#M_OK1 ;指针指到显示消息MOV A,#1 ;显示在第一行LCALL LCD_PRINTMOV DPTR,#M_OK2 ;指针指到显示消息MOV A,#2 ;显示在第一行LCALL LCD_PRINTRETM_OK1: DB " DS18B20 OK ",0M_OK2: DB " TEMP: ",0;******************************** 显示出错信息子程序***************************MENU_ERROR:MOV DPTR,#M_ERROR1 ;指针指到显示消息MOV A,#1 ;显示在第一行LCALL LCD_PRINTMOV DPTR,#M_ERROR2 ;指针指到显示消息1MOV A,#2 ;显示在第一行LCALL LCD_PRINTRETM_ERROR1: DB " DS18B20 ERROR ",0M_ERROR2: DB " TEMP: ---- ",0;****************************DS18B20复位子程序*****************************RST: SETB DQNOPCLR DQMOV R0,#6BH ;主机发出延时复位低脉冲MOV R1,#04HTSR1: DJNZ R0,$MOV R0,#6BHDJNZ R1,TSR1SETB DQ ;拉高数据线NOPNOPNOPMOV R0,#32HTSR2: JNB DQ,TSR3 ;等待DS18B20回应DJNZ R0,TSR2JMP TSR4 ; 延时TSR3: SETB FLAG1 ; 置1标志位,表示DS1820存在JMP TSR5TSR4: CLR FLAG1 ; 清0标志位,表示DS1820不存在 JMP TSR7TSR5: MOV R0,#06BHTSR6: DJNZ R0,$ ; 时序要求延时一段时间TSR7: SETB DQRET;************************ DS18B20暂存器操作子程序***************************RE_18B20:JB FLAG1,RE_18B20ARETRE_18B20A:LCALL RSTMOV A,#0CCH ;跳过ROM匹配LCALL WRITEWR_SCRAPD:MOV A,#4EH ;写暂器LCALL WRITEMOV A,TEMP_TH ;TH(报警上限)LCALL WRITEMOV A,TEMP_TL ;TL(报警下限)LCALL WRITEMOV A,#7FH ;12位精度LCALL WRITERET;************************ 复制暂存器子程序*******************************WRITE_E2:LCALL RSTMOV A,#0CCH ;跳过ROM匹配LCALL WRITEMOV A,#48H ;把暂存器里的温度报警值拷贝到EEROMLCALL WRITERET;*********************** 重读EEROM子程序********************************READ_E2:LCALL RSTMOV A,#0CCH ;跳过ROM匹配LCALL WRITEMOV A,#0B8H ;把EEROM里的温度报警值拷贝回暂存器LCALL WRITERET;************************ 将自定义字符写入LCD的CGRAM中*********************STORE_DATA:MOV A,#40HLCALL WCOMMOV R2,#08HMOV DPTR,#D_DATAMOV R3,#00HS_DATA: MOV A,R3MOVC A,@A+DPTRLCALL WDATA ;写入数据INC R3DJNZ R2,S_DATARETD_DATA: DB 0CH,12H,12H,0CH,00H,00H,00H,00H;*********************** DS18B20数据写入操作子程序************************WRITE: MOV R2,#8 ;一共8位数据CLR CWR1: CLR DQ ;开始写入DS18B20总线要处于复位(低)状态MOV R3,#07DJNZ R3,$ ;总线复位保持16微妙以上RRC A ;把一个字节DATA 分成8个BIT 环移给CMOV DQ,C ;写入一位MOV R3,#3CHDJNZ R3,$ ;等待100微妙SETB DQ ;重新释放总线NOPDJNZ R2,WR1 ;写入下一位SETB DQRET;********************** DS18B20数据读取操作子程序**************************READ: MOV R4,#4 ;将温度低位、高位、TH、TL从DS18B20中读出MOV R1,#TEMPL ;存入25H、26H、27H、28H单元RE00: MOV R2,#8RE01: CLR CYSETB DQNOPNOPCLR DQ ;读前总线保持为低NOPNOPNOPSETB DQ ;开始读总线释放MOV R3,#09 ;延时18微妙DJNZ R3,$MOV C,DQ ;从DS18B20总线读得一位MOV R3,#3CHDJNZ R3,$ ;等待100微妙RRC A ;把读得的位值环移给ADJNZ R2,RE01 ;读下一位MOV @R1,AINC R1DJNZ R4,RE00RET;************************ 温度值BCD 码处理子程序*************************CONVTEMP: MOV A,TEMPH ;判温度是否零下ANL A,#08HJZ TEMPC1 ;温度零上转CLR CMOV A,TEMPL ;二进制数求补(双字节)CPL A ;取反加1ADD A,#01HMOV TEMPL,AMOV A,TEMPHCPL AADDC A,#00HMOV TEMPH,AMOV TEMPHC,#0BH ;负温度标志MOV TEMPFC,#0BHSJMP TEMPC11TEMPC1: MOV TEMPHC,#0AH ;正温度标志MOV TEMPFC,#0AHTEMPC11: MOV A,TEMPHCSWAP AMOV TEMPHC,AMOV A,TEMPLANL A,#0FH ;乘0.0625MOV DPTR,#TEMPDOTTABMOVC A,@A+DPTRMOV TEMPLC,A ;TEMPLC LOW=小数部分 BCDMOV A,TEMPL ;整数部分ANL A,#0F0H ;取出高四位SWAP AMOV TEMPL,AMOV A,TEMPH ;取出低四位ANL A,#0FHSWAP AORL A,TEMPL ;重新组合MOV TEMP_ZH,ALCALL HEX2BCD1MOV TEMPL,AANL A,#0F0HSWAP AORL A,TEMPHC ;TEMPHC LOW = 十位数BCDMOV TEMPHC,AMOV A,TEMPLANL A,#0FHSWAP A ;TEMPLC HI = 个位数BCDORL A,TEMPLCMOV TEMPLC,AMOV A,R4JZ TEMPC12ANL A,#0FHSWAP AMOV R4,AMOV A,TEMPHC ;TEMPHC HI = 百位数BCDANL A,#0FHORL A,R4MOV TEMPHC,ATEMPC12: RET;************************ 二-十进制转换子程序*****************************HEX2BCD1: MOV B,#064HDIV ABMOV R4,AMOV A,#0AHXCH A,BDIV ABSWAP AORL A,BRETTEMPDOTTAB: DB 00H,00H,01H,01H,02H,03H,03H,04H ; 小数部分码表DB 05H,05H,06H,06H,07H,08H,08H,09H;********************** 查询温度报警值子程序***************************LOOK_ALARM: MOV DPTR,#M_ALAX2 ;指针指到显示信息区MOV A,#2 ;显示在第二行LCALL LCD_PRINTMOV A,#0C6HLCALL TEMP_BJ1MOV A,TEMP_TH ;加载TH数据MOV LCD_X,#3 ;设置显示位置LCALL SHOW_DIG2H ;显示数据MOV A,#0CEHLCALL TEMP_BJ1MOV A,TEMP_TL ;加载TL数据MOV LCD_X,#12 ;设置显示位置LCALL SHOW_DIG2L ;显示数据RETM_ALAX1: DB " LOOK ALERT CODE",0M_ALAX2: DB "TH: TL: ",0TEMP_BJ1: LCALL WCOMMOV DPTR,#BJ2 ;指针指到显示信息区 MOV R1,#0MOV R0,#2BBJJ2: MOV A,R1MOVC A,@A+DPTRLCALL WDATADJNZ R0,BBJJ2RETBJ2: DB 00H,"C";************************** LCD显示子程序**********************************SHOW_DIG2H: MOV B,#100DIV ABADD A,#30HPUSH BMOV B,LCD_XLCALL LCDP2POP BMOV A,#0AHXCH A,BDIV ABADD A,#30HINC LCD_XPUSH BMOV B,LCD_XLCALL LCDP2INC LCD_XMOV A,BMOV B,LCD_XADD A,#30HLCALL LCDP2RETSHOW_DIG2L: MOV B,#100DIV ABMOV A,#0AHXCH A,BDIV ABADD A,#30HPUSH BMOV B,LCD_XLCALL LCDP2POP BINC LCD_XMOV A,BMOV B,LCD_XADD A,#30HLCALL LCDP2RET;************************ 显示区BCD 码温度值刷新子程序**********************DISPBCD: MOV A,TEMPLCANL A,#0FHMOV 70H,A ;小数位MOV A,TEMPLCSWAP AANL A,#0FHMOV 71H,A ;个位MOV A,TEMPHCANL A,#0FHMOV 72H,A ;十位MOV A,TEMPHCSWAP AANL A,#0FHMOV 73H,A ;百位DISPBCD2: RET;*************************** LCD 显示数据处理子程序*************************CONV: MOV A,73H ;加载百位数据MOV LCD_X,#6 ;设置位置CJNE A,#1,CONV1JMP CONV2CONV1: CJNE A,#0BH,CONV11MOV A,#"-" ;"-"号显示JMP CONV111CONV11: MOV A,#" " ;"+"号不显示CONV111: MOV B,LCD_XLCALL LCDP2JMP CONV3CONV2: LCALL SHOW_DIG2 ;显示数据CONV3: INC LCD_XMOV A,72H ;十位LCALL SHOW_DIG2INC LCD_XMOV A,71H ;个位LCALL SHOW_DIG2INC LCD_XMOV A,#'.'MOV B,LCD_XLCALL LCDP2MOV A,70H ;加载小数点位INC LCD_X ;设置显示位置LCALL SHOW_DIG2 ;显示数据RET;*************************** 第二行显示数字子程序*************************SHOW_DIG2:ADD A,#30HMOV B,LCD_XLCALL LCDP2RET;*************************** 第二行显示数字子程序*************************LCDP2: PUSH ACCMOV A,B ;设置显示地址ADD A,#0C0H ;设置LCD的第二行地址LCALL WCOM ;写入命令POP ACC ;由堆栈取出ALCALL WDATA ;写入数据RET;*************************** 对LCD 做初始化设置及测试*************************SET_LCD: CLR LCD_ENLCALL INIT_LCD ;初始化 LCDLCALL STORE_DATA ;将自定义字符存入LCD的CGRAM RET;****************************** LCD初始化***********************************INIT_LCD: MOV A,#38H ;2行显示,字形5*7点阵LCALL WCOMLCALL DELAY1MOV A,#38HLCALL WCOMLCALL DELAY1MOV A,#38HLCALL WCOMLCALL DELAY1MOV A,#0CH ;开显示,显示光标,光标不闪烁 LCALL WCOMLCALL DELAY1MOV A,#01H ;清除 LCD 显示屏LCALL WCOMLCALL DELAY1RET;***************************** 清除LCD的第一行字符**************************CLR_LINE1:MOV A,#80H ;设置 LCD 的第一行地址LCALL WCOMMOV R0,#24 ;设置计数值C1: MOV A,#' ' ;载入空格符至LCDLCALL WDATA ;输出字符至LCDDJNZ R0,C1 ;计数结束RET;************************* LCD的第一行或第二行显示字符**********************LCD_PRINT:CJNE A,#1,LINE2 ;判断是否为第一行LINE1: MOV A,#80H ;设置 LCD 的第一行地址LCALL WCOM ;写入命令LCALL CLR_LINE ;清除该行字符数据MOV A,#80H ;设置 LCD 的第一行地址LCALL WCOM ;写入命令JMP FILLLINE2: MOV A,#0C0H ;设置 LCD 的第二行地址LCALL WCOM ;写入命令LCALL CLR_LINE ;清除该行字符数据MOV A,#0C0H ;设置 LCD 的第二行地址LCALL WCOMFILL: CLR A ;填入字符MOVC A,@A+DPTR ;由消息区取出字符CJNE A,#0,LC1 ;判断是否为结束码RETLC1: LCALL WDATA ;写入数据INC DPTR ;指针加1JMP FILL ;继续填入字符RET;*************************** 清除1行LCD 的字符****************************CLR_LINE: MOV R0,#24CL1: MOV A,#' 'LCALL WDATADJNZ R0,CL1RETDE: MOV R7,#250DJNZ R7,$RET;**************************** LCD 间接控制方式命令写入*************************WCOM: MOV P0,A ;写入命令CLR LCD_RS ;RS=L,RW=L,D0-D7=指令码,E=高脉冲 CLR LCD_RWSETB LCD_ENLCALL DELAY1CLR LCD_ENRET;**************************** LCD 间接控制方式数据写入*************************WDATA: MOV P0,A ;写入数据SETB LCD_RSCLR LCD_RWSETB LCD_ENLCALL DELCALL DERET;************************** 在LCD的第一行显示字符**************************LCDP1: PUSH ACCMOV A,B ;设置显示地址ADD A,#80H ;设置LCD的第一行地址LCALL WCOM ;写入命令POP ACC ;由堆栈取出ALCALL WDATA ;写入数据RET;****************************** 声光报警子程序*******************************BEEP_BL: MOV R6,#100BL2: LCALL DEX1CPL BEEPCPL RELAYDJNZ R6,BL2MOV R5,#10RETDEX1: MOV R7,#180DE2: NOPDJNZ R7,DE2RET;****************************** 延时子程序*******************************DELAY: MOV R6,#50DL1: MOV R7,#100DJNZ R7,$DJNZ R6,DL1DJNZ R5,DELAYRETDELAY1: MOV R6,#25 ;延时5毫秒DL2: MOV R7,#100DJNZ R7,$DJNZ R6,DL2RETEND。
单片机(基于AT89C51的温度采集与显示系统设计)
基于AT89C51的温度采集与显示系统设计摘要:以AT89C51单片机为核心控制元件介绍了与DS18B20和MAX7219显示驱动组成的温度采集系统的设计方案利用单片机空余I/O口以及上述元件的特性,构成该系统。
通过Proteus进行仿真。
关键词:温度采集,AT89C51,DS18B20,MAX7219目录1、系统概述……………………………………………………………….2、硬件介绍……………………………………………………………….3、软件设计……………………………………………………………….4、仿真结果……………………………………………………………….5、小结…………………………………………………………………….6、参考文献……………………………………………………………….1、系统概述温度传感器选用目前常用的数字温度传感器DS18B20,采用数码LED显示,显示驱动为MAX7219,首先设计系统的总体原理图如下:系统可以简单地分为为5个模块,由外部提供8V-24V直流电源供电。
电源模块将输入8-24V的电源电压转换为5V,为系统中的芯片供电,可以使用7805等常用的三端稳压器芯片;温度传感器采集温度信号,温度传感器有模拟输出和数字输出两种形式,这里选择具有数字输出的DS18B20;单片机是系统的核心,选用AT89C51;系统采用LED数码显示器显示温度值,LED显示屏采用独立的显示驱动芯片MAX7219,单片机将待显示的字符写入MAX7219后,MAX7219将会动态的刷新显示内容,无需占用单片机过多的资源。
尽管DS18B20的分辨率可已达到0.0625°C,但测量精确度为0.5°C,因此设计4位数的LED数码显示管就可以了,显示3位整数,1位小数。
2、硬件介绍:1、数字温度传感器DS18B20DS18B20数字温度计提供9位-24位(二进制)温度读数,以指示器件的温度,数据经过单线接口送入DS18B20或从DS18B20送出,因此从主机CPU到DS18B20仅需要一条DQ。
c51单片机实验温度采集控制报告
(一)试验要求
1、在数码管的第一、二个显示当前环境温度,第三、六个数码管熄灭,第四、五个数码管显示设定温度,第七、八个数码管显示电机转速;设定温度初值25,利用“+”“-”两个按键可以加减该温度数值,范围在16~30之间,按键按下蜂鸣器响0.2s。
2、根据设定温度和实际环境温度的温差驱动直流电机。设定温度等于环境温度,直流电机停转;设定温度和环境温度温差的绝对值越大,直流电机转速越快(要求最大转速控制在100以内)。
八、对本实验过程及方法、手段的改进建议
九、附录
温度采集控制实验程序
/*
main.c
LM75A数字温度计
*/
#include "I2C.h"
#include <reg51.h>
#include <string.h>
#include <absacc.h>
#include <CTYPE.H>
//定义显示缓冲区(由定时中断程序自动扫描)
3、I2C工作原理
1)I2C总线概述
I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需
的包括总线裁决和高低速器件同步功能的高性能串行总线。
2)I2C信号线
I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。
基于单片机的温度采集系统的设计
基于单片机的温度采集系统的设计本系统选用AT89C52 单片机作为数据处理与控制单元,单片机控制数字温度传感器,把温度信号通过单总线从数字温度传感器传递到单片机上。
系统选用AT89S52 作为主处理器,LCD模块选用LM6029作为人机接口。
外围电路有数字温度传感器DS18B20 ,通过单片机进行温度数据的运算处理,竟单片机串口传输温度信息到PC机上,实现检测记录变化曲线。
标签:单片机;温度传感器;显示1 引言温度检测在工农业等场所占有重要地位。
对于环境检测和监控数据的分析,并且对于数据进行处理,显示数据/信息存储并做到实时控制非常必要。
随工业科技、农业科技的发展,温度检测来提高生产效率及产品质量的检测,能源节约等都有重要的作用。
本系统可被广泛的应用于温度实时显示和动态记录的温度检测系统中,对实现物联网应用方向的智能化有很好的应用价值。
2 温度采集系统的整体设计本设计采用STC89C52单片机作为数据处理与控制单元,首先单片机控制DS18B20数字温度传感器,把温度采集信号传送至单片机进行数据处理,单片机发出控制信息,在LCD上每隔一定时间进行动态显示温度信息。
温度的传输通过按键,从存储器中提取温度信息发送出去,并通过单片机串口送至PC机上,PC 机可通过串口调试软件接受现实数据。
总体硬件框图如图1。
3 温度采集系统硬件构成系统硬件包括单片机处理器、温度检测单元、温度储存单元、温度数据传输和显示部分(LCD 与按键)五个电路模块。
3.1 单片机控制器由于控制系统方案比较简单,数据处理量不大,考虑到经济性和可扩展性,选用AT89S52作为主控制器,AT89C52是一个低功耗,高性能CMOS 型单片机,内含8KB的Flash存储器和256 B的随机存储器(RAM),并有在系统可编码ISP 功能,兼容标准MCS-51指令系统,便于软件调试和程序修改,可以缩短系统设计开发时间。
3.2 数据存储单片机AT89C52 内有256个字节的RAM,高8位字节与特殊功能寄存器地址重复,进行分时复用。
单片机的数据采集与存储方法解析
单片机的数据采集与存储方法解析随着科技的不断发展,单片机在各个领域都有着广泛的应用。
其中,数据采集与存储是单片机应用中非常重要的一部分。
本文将对单片机数据采集与存储方法进行解析,帮助读者更好地理解和应用单片机。
一、数据采集方法1. 模拟信号采集单片机通过ADC(模拟数字转换器)可以将模拟信号转换为数字信号。
ADC的输入引脚连接模拟信号源,将模拟信号转换为数字信号后,单片机可以通过读取ADC寄存器的值来获取模拟信号的数值。
ADC的分辨率决定了数字信号的精度,一般为8位、10位或12位。
2. 数字信号采集单片机的GPIO(通用输入输出)口可以采集数字信号,常见的数字信号有开关、光电传感器等。
通过配置GPIO口的输入模式,将数字信号连接到相应的引脚上,单片机可以通过读取GPIO口状态寄存器的值来获取数字信号的状态。
3. 串口采集单片机内部集成了多个串口模块,可以通过串口采集外部设备发送的数据。
通过配置串口的波特率、数据位、停止位等参数,将单片机的串口连接到外部设备的串口上,单片机可以通过读取串口接收寄存器的值来获取外部设备发送的数据。
二、数据存储方法1. 寄存器存储单片机内部有一些特定的寄存器用于存储数据。
通过将数据写入到相应的寄存器,单片机可以将数据存储在寄存器中。
具体的存储位置和方式与单片机的型号和架构有关。
对于需要长期保存的数据,寄存器存储并不适用,因为寄存器的内容会在单片机掉电时丢失。
2. 内部存储器单片机的内部存储器一般分为闪存和RAM。
闪存用于存储程序和常量等数据,而RAM用于存储变量和临时数据。
通过将数据存储在内部存储器的特定地址中,单片机可以随时读取和修改数据。
3. 外部存储器有些应用场景下,需要存储大量的数据,此时单片机的内部存储器可能无法满足需求,就需要使用外部存储器。
常见的外部存储器包括EEPROM、Flash、存储卡等。
通过与外部存储器进行通信,单片机可以将数据写入到外部存储器中或从外部存储器中读取出数据。
基于单片机的温度数据采集系统实验报告
基于单片机的温度数据采集系统实验报告
班级:192202
姓名:张尧
学号:123241
指导老师:
一、实验目的
1、了解温度传感器电路的工作原理;
2、了解闭环控制的基本原理;
3、进一步熟悉A/D变换原理和编程方法;
4、进一步熟悉键盘、显示接口电路使用和编程方法;
5、掌握单片机应用系统硬件及软件的设计方法;
二、实验内容及要求
内容:①根据各自设计方案,选择并连接各小模块电路构成温度采集与控制的实验电路,编写并调试程序,实现对温度的采集、检测、进行控制计算等处理后输出显示。
②控制加热机构,实现温度闭环控制。
(选做)
③采用PID算法控制温度在一定值上,实现恒温控制。
(选做)
要求:实现对温度的采集、检测、进行控制计算处理后输出显示;其温度控制为开环控制,采用发光二极管亮时表示加热状态,灭时为不加热状态。
显示采用7279显示板实时显示温度值。
三、实验设计思路单片机温度采集与控制实验报告。
基于51单片机的数字温度计设计
基于51单片机的数字温度计设计数字温度计是一种广泛使用的电子测量设备,通过传感器将温度转化为数字信号,并显示出来。
本文将介绍基于51单片机的数字温度计的设计。
该设计将使得使用者能够准确、方便地测量温度,并实时显示在液晶显示屏上。
1. 硬件设计:- 传感器选择:在设计数字温度计时,我们可以选择使用NTC(负温度系数)热敏电阻或者DS18B20数字温度传感器作为温度传感器。
这里我们选择DS18B20。
- 信号转换:DS18B20传感器是一种数字传感器,需要通过单总线协议与51单片机进行通信。
因此,我们需要使用DS18B20专用的驱动电路,将模拟信号转换为数字信号。
- 51单片机的选择:根据设计要求选择合适的51单片机,如STC89C52、AT89S52等型号。
单片机应具备足够的IO口来与传感器和液晶显示屏进行通信,并具备足够的计算和存储能力。
- 显示屏选择:为了实时显示温度,我们可以选择使用1602型字符液晶显示屏。
该显示屏能够显示2行16个字符,足够满足我们的需求。
通过与51单片机的IO口连接,我们可以将温度数据显示在屏幕上。
2. 软件设计:- 采集温度数据:通过51单片机与DS18B20传感器进行通信,采集传感器传输的数字温度数据。
通过解析传感器发送的数据,我们可以获得当前的温度数值。
- 数据处理:获得温度数据后,我们需要对其进行处理。
例如,可以进行单位转换,从摄氏度到华氏度或者开尔文度。
同时,根据用户需求,我们还可以对数据进行滤波、校准等处理。
- 显示数据:通过与液晶显示屏的连接,我们可以将温度数据显示在屏幕上。
可以使用51单片机内部的LCD模块库来控制液晶显示屏,显示温度数据以及相应的单位信息。
- 用户交互:可以设置一些按键,通过与51单片机的IO口连接,来实现用户与数字温度计的交互。
例如,可以设置一个按钮来进行温度单位的切换,或者设置一个按钮来启动数据保存等功能。
3. 功能拓展:- 数据存储:除了实时显示当前温度,我们还可以考虑增加数据存储功能。
基于51单片机DS18B20温度采集器详解
一核心器件的基本构成及特性1.1 AT89S51功能特性89C51是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。
它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51基础型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能。
89C51内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
此外,89C51还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。
在空闲模式下冻结CPU 而RAM定时器、串行口和中断系统维持其功能。
掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。
89C51有PDIP(40pin)和PLCC(44pin)两种封装形式。
1.2 AT89S51管脚介绍AT89C51单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。
如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM)、并行I/O口(4个8位I/O口)、串行口、定时器/计数器、中断系统及特殊功能寄存器。
它们都是通过片内单一总线连接而成,其基本结构依旧是微处理器(CPU)加上外围芯片的传统结构模式。
但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式,以实现不同的功能。
AT89C51单片机如图所示。
1.1.1引脚功能介绍Vcc(40引脚):接+5V电源。
Vss(20引脚):接地。
XTAL1(19引脚):片内振荡器反相放大器和时钟发生器电路的输入端。
XTAL2(18引脚):片内震荡器反相放大器的输出端。
RST:复位引脚,高电平有效。
基于LM35的单片机温度采集显示系统
基于LM35的单片机温度采集显示系统王思淼;陈战胜;胡正坤【期刊名称】《佳木斯大学学报(自然科学版)》【年(卷),期】2012(000)006【摘要】基于 AT89S51单片机开发了温度控制采集显示系统,着重介绍了系统核心硬件设计和软件设计。
利用 LM35温度传感器采集温度、经 LM358放大10倍后输入到 A/D 采样电路,由TLC549将数字值传送给 AT89S52单片机,最后由单片机驱动数码管显示温度。
测试结果表明,在外部环境温度变化较大时该系统响应时间短,灵敏度较高,工作稳定可靠。
% A temperature control acquisition and display system was developed based on AT 89S51 single-chip microcomputer(SCM).The core hardware design and software design were mainly discussed .The system uses LM35 temperature sensor to collect temperature .The acquisition temperature was input into the A /D sam-pling circuit by magnified 10 times through LM358, the digital value was passed to the AT89S51 SCM by TLC549 , and the digital tube was used to display temperature .Furthermore, the results demonstrate the system have short response time, high sensitivity, stable and reliable operation when large temperature changes in the external environment.【总页数】4页(P900-902,906)【作者】王思淼;陈战胜;胡正坤【作者单位】北京联合大学应用科技学院,北京 102200;北京联合大学应用科技学院,北京 102200; 北京交通大学计算机与信息技术学院,北京 100044;北京联合大学应用科技学院,北京 102200【正文语种】中文【中图分类】TP277【相关文献】1.基于935单片机的多点温度采集及显示系统的设计 [J], 裴勇生2.基于Android系统与单片机的无线蓝牙温度采集系统 [J], 常喜;贺五洋;王立忠;车艳蕊;王广德3.基于ARM7和LM35的温度采集系统设计 [J], 沈瑞;于海勋;王耀文4.一种基于8051单片机的温度采集显示系统设计 [J], 魏磊;刘曌5.基于单片机的多点定时温度采集与图形显示 [J], 汤正新;刘哲;方成栋因版权原因,仅展示原文概要,查看原文内容请购买。
基于51单片机的温度数据采集系统
8 | 电子制作 2018年11月格的,比如:工厂在生产某一种产品时温度要求范围在25到30摄氏度之间,只有在这个温度范围内才可以生产出合格的产品,还有在进行某些科研实验时对温度的要求就会更加严格,有的精确到1摄氏度以内,甚至有的精确到0.5摄氏度以内。
因此我想设计一个“电子温度计”,基本功能是对温度的采集与显示。
在温度采集的设计上必须要A/D 转换,也就是将模拟信号转化为数字信号,因此我选择了DS18B20温度传感器模块,该模块不仅可以对温度进行实时测控,并且具有较高的灵敏度。
在数据的显示方面我选择了LCD1602显示模块,整个系统采用STC89C52单片机控制。
本设计在Altium Designer 上画出原理图,然后通过热转印制作PCB 板,完成硬件部分。
此次设计在大量科学知识的支持下具有较高的可行性和实用性。
1 系统工作原理该系统是在C 语言编程以及51单片机知识为基础上进行设计的,同时采用了DS18B20温度传感器模块以及LCD1602显示模块,利用KEIL 软件进行软件编程,将编写好的程序录入51单片机中,在51单片机的控制下实现温度数据的采集。
图1 系统整体结构框图整个实时数据采集系统满足以下功能指标:线和表格中。
2 硬件系统设计图2 总体系统结构此系统以STC89C52单片机为控制核心,采用了数字温度传感器模块DS18B20,该模块将采集到的温度数据转化为数字信号,并将信号传送给单片机,单片机处理数据后,通过LCD1602液晶显示器将温度显示出来。
在整个作品上首先提到的是硬件系统的设计,然后就是各个模块的工作原理以及工作特点,详细介绍系统的硬件设计,在给出系统的连接图,通过PROTEL 99SE 进行系统电路原理图的绘制,生成相应的PCB 板,并分析系统的工作原理,在软件方面对整体和各个模块的程序进行设计,在KEIL 中进行编写,在编写过程中如果出现理论错误,系统会给与提示,编程结束后也可手动调试来改正错误,或者修改程序功能。
基于STM32单片机的心率计步体温显示系统设计
基于STM32单片机的心率计步体温显示系统设计设计一个基于STM32单片机的心率计步体温显示系统,主要包括以下几个方面的内容:系统功能设计、硬件设计、软件设计、系统测试等。
一、系统功能设计:1.心率测量功能:通过传感器测量用户心率,将数据显示在液晶屏上。
2.计步功能:通过加速度传感器测量用户的步数,将数据显示在液晶屏上。
3.体温测量功能:通过温度传感器测量用户体温,将数据显示在液晶屏上。
4.数据存储功能:将心率、步数、体温等数据保存在存储设备中,以便后续查询和分析。
二、硬件设计:1.主控芯片:选用STM32单片机作为主控芯片,具有强大的计算和控制能力。
2.传感器:选择专业的心率传感器、加速度传感器和温度传感器,提供准确的测量数据。
3.显示模块:采用液晶屏显示传感器测量的数据和其他相关信息。
4.存储设备:使用闪存芯片或SD卡作为数据的存储设备,保证数据的可靠性和安全性。
5.电源模块:设计适配器和电池两种供电方式,保证系统的持续工作时间。
三、软件设计:1.硬件初始化:对主控芯片和传感器进行初始化设置,配置相关参数。
2.数据采集:通过传感器采集心率、步数和体温等数据,并进行滤波处理。
3.数据显示:将采集到的数据通过液晶屏显示出来,包括心率、步数和体温等信息。
4.数据存储:将采集到的数据存储到闪存芯片或SD卡中,以便后续查询和分析。
5.数据上传:设计数据上传功能,可以通过USB接口或蓝牙等方式将数据上传到电脑或手机。
6.参数设置:设计参数设置功能,用户可以根据需要设置心率、步数和体温的阈值,系统会发出警报。
四、系统测试:1.系统功能测试:逐步测试各个功能模块,验证数据的准确性和功能的稳定性。
2.整体性能测试:对整个系统进行测试,验证系统的性能指标是否符合设计要求。
3.用户体验测试:邀请用户进行测试,收集用户的反馈意见和建议,进行优化和改进。
这个系统可以作为一款便携式的健康监测设备,可以方便用户随时随地监测自己的心率、步数和体温等健康数据,有助于用户及时发现和预防潜在的健康问题。
基于51单片机的多路温度采集系统
基于单片机的多路温度采集系统一、摘要:本设计利用单片机及Keil编程软件编程和PROTEUS单片机仿真软件和电子电工等方面知识,用Keil编程软件编程,用PROTEUS单片机仿真软件仿真。
最后制作实物,将程序下载到单片机中,利用(I/O)口采集来自多路温度的数据,根据各路温度的不同,集中准确的显示出来,并且根据所设温度的上下限通过驱动蜂鸣器进行听觉上的报警,同时还可以通过LED灯协助进行视觉上的报警,从而达到多点温度的采集和报警的目的。
以Keil编程软件和PROTEUS软件来进行仿真、分析,调试,为设计提供了一个方便、快捷的途径,为设计节约了设计时间。
关键词:AT89S52单片机温度采集报警二、设计要求1、检测的温度范围:0℃~100℃。
2、检测分辨率 0.1℃。
3、显示的多路的温度值不相互干扰,而且对各个传感器的所属温度都能进行报警。
三、硬件电路设计1、系统的设计思路本设计采用单片机作为数据处理与控制单元,为了进行数据处理,单片机控制数字温度传感器,把温度信号通过单总线从数字温度传感器传递到单片机上。
单片机数据处理之后,发出控制信息改变报警和控制执行模块的状态,同时将当前温度信息发送到LCD进行显示。
本系统可以实现多路温度信号采集与显示,可以使用程序来设置温度限定值,通过进行温度数据的运算处理,发出控制信号达到控制蜂鸣器和LED进行报警。
2、系统总体设计方案系统总体主要由对单片机进行编程后得到控制,系统的其他功能部件分别接至单片机的对应I/O口。
整体模块如图:3、主控制器本次设计选择Atmel 公司生产的AT89C51作为控制芯片。
AT89C51是高性能的CMOS8位单片机,片内含有4K bytes 的可反复擦写的只读程序存储器和128的随机存取数据存储器。
AT89系列与MCS-51系列单片机相比有两大优势:第一,片内程序存储器采用闪速存储器,使程序的写入更加方便;第二,提供了更小尺寸的芯片,使整个电路体积更小。
基于单片机的温度控制系统设计
基于单片机的温度控制系统设计温度控制系统是现代生活中不可或缺的一部分,常见于家庭的的空调、电饭煲、烤箱等家用电器,以及工业生产中的各种自动化设备。
本文基于单片机设计针对室内温度控制系统的实现方法进行说明,包括温度采集、温度控制器的实现和人机交互等方面。
一、温度采集温度采集是温度控制系统的核心部分。
目前比较常见的温度采集器主要有热电偶、热敏电阻和半导体温度传感器。
在本文中我们以半导体温度传感器为例进行说明。
常见的半导体温度传感器有DS18B20、LM35等,本次实验中采用DS18B20进行温度采集。
DS18B20是一种数字温度传感器,可以直接与单片机通信,通常使用仅三根导线连接。
其中VCC为控制器的电源正极,GND为电源负极,DATA为数据传输引脚。
DS18B20通过快速菲涅耳射线(FSR)读取芯片内部的温度数据并将其转换为数字信号。
传感器能够感知的温度范围通常为-55℃至125℃,精度通常为±0.5℃。
为了方便使用,DS18B20可以通过单片机内部的1-Wire总线进行控制和数据传输。
具体实现方法如下:1.首先需要引入相关库文件,如:#include <OneWire.h> //引用1-Wire库#include <DallasTemperature.h> //引用温度传感器库2.创建实例对象,其中参数10代表连接传感器的数字I/O引脚:OneWire oneWire(10); //实例化一个1-Wire示例DallasTemperature sensors(&oneWire); //实例化一个显示温度传感器示例3.在setup中初始化模块:sensors.begin(); // 初始化DS18B204.在主循环中,读取传感器数据并将温度值输出到串口监视器:sensors.requestTemperatures(); //请求温度值float tempC = sensors.getTempCByIndex(0); // 读取温度值Serial.println(tempC); //输出温度值二、温度控制器的实现温度控制器是本次实验的关键部件,主要实现对温度的控制和调节,其基本原理是根据温度变化情况来控制输出电压或模拟脚电平,驱动继电器控制电器设备工作。
第10章 AT89C51单片机应用实例【精选】
10.1 单片机系统设计方法
单片机系统本身就是一个硬件和软件结合非常紧密的系统, 要求设计者具有硬件设计和软件设计方面的综合能力,具有对单片机 以及各种外围设备的接口电路和驱动电路的应用能力。
单片机应用系统的设计应按照以下几个步骤来进行。
总体方பைடு நூலகம்设计
可行性分析、单片机的选型、对系统各项功能的划分。
系统硬件设计
各个模块的硬件部分设计、硬件系统功能框图、电路图及PCB板
系统软件设计
单片机系统的软件设计
系统调试
可使用仿真器进行系统功能的调试
系统完善与升级
10.2 温度采集与显示系统的设计
电源输入 8V~24VDC
电源模块
显示驱动
LED显示屏
温度传感器
单片机
温度采集与显示系统原理框图
第十章at89c51单片机应用实例101单片机系统设计方法102温度采集与显示系统的设计1021温度采集与显示系统原理1022一总线1wire数字温度传感器ds18b201023at89c51单片机与ds18b20的接口1024at89c51单片机读取ds18b20温度值的编程1025显示驱动芯片max72191026at89c51单片机与max7219的接口与编程1027温度的采集处理与显示程序101单片机系统设计方法单片机系统本身就是一个硬件和软件结合非常紧密的系统要求设计者具有硬件设计和软件设计方面的综合能力具有对单片机以及各种外围设备的接口电路和驱动电路的应用能力
第十章 AT89C51单片机应用实例
10.1 单片机系统设计方法 10.2 温度采集与显示系统的设计
10.2.1 温度采集与显示系统原理 10.2.2 一总线(1-Wire)数字温度传感器DS18B20 10.2.3 AT89C51单片机与DS18B20的接口 10.2.4 AT89C51单片机读取DS18B20温度值的编程 10.2.5 显示驱动芯片MAX7219 10.2.6 AT89C51单片机与MAX7219的接口与编程 10.2.7 温度的采集处理与显示程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1.系统分析与设计 (2)1.1系统分析 (2)1.2数字温度计总体设计方案.............................. 错误!未定义书签。
1.2.1数字温度计总体设计框图....................... 错误!未定义书签。
2.软件控制 (3)2.1作用 (3)2.2技术方案 (3)2.3 RS232通讯原理 (4)2.4单片机与PC机串口通讯 (4)3.课程设计总结 (13)4.参考文献 (14)1.系统分析与设计1.1系统分析要想实现微数字温度计的显示,从理论上分析,最简单的方法就是用开关控数码管的亮灭来控制温度的显示与否,也可以直接将温度显示在液晶显示屏上。
也就是说,只要用单片机直接控制数码管的显示温度就可以了。
为了实现更加人性化的便捷操作,通过PC上位机来显示温度更加的便利,PC上位机的显示界面可以同时显示多个温度值,极大地提高了需要严格控制温度时的场合,便于工作人员及时的调整需要,也提高了工作人员的工作效率,实现了现代工业的自动化与便利性。
1.2 数字温度计总体设计方案1.2.1数字温度计总体设计框图如图1所示。
控制器采用单片机A289S51,温度传感器采用DS18B20,用3位LED数码管以串口传送数据实现温度显示以及在上位机界面上显示温度值。
图1总体设计方框图主控制器:单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计。
显示电路:显示电路采用3位共阳LED数码管,从P0口输出段码,P2口输出位选。
温度传感器:DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。
DS18B20的性能特点如下:(1)独特的单线接口仅需要一个端口引脚进行通信;(2)多个DS18B2。
可以并联在惟一的三线上,实现多点组网功能;(3)无须外部器件;(4)可通过数据线供电,电压范围为3. 0-5. 5V;(5)零待机功耗;(6)温度以9或12位数字;(7)用户可定义报警设置:(8)报警搜索命令识别并标志超过程序限定温度〔温度报警条件)的器件:(9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;2.软件控制2.1作用利用单片机实现数字温度计一个优点是可以利用软件控制温度的显示与否,从而将计算机软件和硬件动作联系起来,通过上位机的界面显示温度更加方便用户对环境的温度的测定。
采用串口通信的方式连接上位计算机和单片机有若干好处。
首先,对于危机而言,控制外部设备的接口有多种多样,如并口、串口、PCI、ISA等。
从电路设计的简便性考虑,利用串口最为理想这是因为,一般的微机均带有4个以上的串行接口,而并口只有一个,机箱和微机的生产厂家不可能仅仅为了活动门而占用微机有限的并口资源。
同样,使用PCI、ISA插槽不仅占用了主板资源,更是需要开发独立的驱动,开发成本较高;此外,从开发的成本和复杂性上考虑,采用串口无疑是最为简便而低廉的设计方案。
2.2技术方案用户通过软件界面直接观测温度值。
控制界面和单片机相当于是上、下位机的关系。
控制界面通过串口通信接受来至下位机数据并且可以对数据进行保存。
2.3 RS232通讯原理串行端口的本质功能是作为CPU和串行设备间的编码转换器。
当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。
在接收数据时,串行的位被转换为字节数据。
串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
典型地,串口用于ASCII码字符的传输。
通信使用3根线完成:a地址线、b发送、c 接收。
由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
其他线用于握手,但是不是必须的。
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
对于两个进行通行的端口,这些参数必须匹配:(1)波特率:这是一个衡量通信速度的参数。
它表示每秒钟传送的bit的个数。
(2)数据位:这是衡量通信中实际数据位的参数。
(3)停止位:用于表示单个包的最后一位。
典型的值为1,1.5和2位。
(4)奇偶校验位:在串口通信中一种简单的检错方式。
有四种检错方式:偶、奇、高和低。
2.4单片机与PC机串口通讯51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。
进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。
我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。
这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。
全双工的串行通讯口原理图如图4.1所示:图4.1全双工的串行通讯口原理图上位机主要是对数字温度计的多个温度值的显示。
(1)控制界面如下(2)上位机程序如下:using System;using System.Collections.Generic; using ponentModel; using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using System.IO.Ports;namespace WEUDUCELIANG{public partial class Form1 : Form{public Form1(){InitializeComponent();timer1.Interval = 1000;//设置timer控件时间间隔timer1.Enabled = false;serialPort1.DataBits = 8;serialPort1.StopBits = System.IO.Ports.StopBits.One;serialPort1.ReadBufferSize = 500000;serialPort1.RtsEnable = true; //如果是RS232转RS485,此句必须要,否则不能通讯serialPort1.NewLine = "\r\n";}private void button1_Click(object sender, EventArgs e){if (!serialPort1.IsOpen) //如果串口是关闭的{//设定串口信息和波特率serialPort1.PortName = boBox1.SelectedItem.ToString(); serialPort1.BaudRate =Convert.ToInt32(boBox2.SelectedItem.ToString());serialPort1.Parity = Parity.None;serialPort1.DataBits =Convert.ToInt16(boBox4.SelectedItem.ToString());serialPort1.StopBits = StopBits.One;try{serialPort1.Open(); //打开串口 btnOpen.Text = "关闭串口"; //改变按钮上的字符comboBox1.Enabled = false;comboBox2.Enabled = false;comboBox3.Enabled = false;comboBox4.Enabled = false;comboBox5.Enabled = false;}catch{MessageBox.Show("串口打开失败!\n可能是串口已被占用!"); }}else//如果串口是打开的{serialPort1.Close(); //关闭串口 btnOpen.Text = "打开串口"; //改变按钮上的字符comboBox1.Enabled = true ;comboBox2.Enabled = true;comboBox3.Enabled = true;comboBox4.Enabled = true;comboBox5.Enabled = true;}}private void btnCJ_Click(object sender, EventArgs e){try{if (serialPort1.IsOpen){serialPort1.Write("\r\n");if (Convert.ToInt32(serialPort1.ReadLine()) != 1820){MessageBox.Show("没有找到您要找的设备");return;}serialPort1.Write("\r\n");double k = Convert.ToDouble(serialPort1.ReadLine());double wendu = k * 0.0001;textBox1.Text = "温度:" + wendu.ToString() + ";" + "时间:" + DateTime.Now.ToString();btnCJ.Text = "停止采集";timer1.Start();}else{timer1.Stop();MessageBox.Show("串口未打开请先打开串口!");}}catch{MessageBox.Show("没找到设备");timer1.Stop();serialPort1.Close();serialPort1.Dispose();btnCJ.Text = "开始采集";}}private void button2_Click(object sender, EventArgs e) //清除listbox 控件中的内容{textBox1.Text = "";}private void button3_Click(object sender, EventArgs e) //保存温度数据{System.IO.FileStream objfile;saveFileDialog1.ShowDialog();objfile = System.IO.File.Create(@saveFileDialog1.FileName);objfile.Close();objfile.Close();objfile.Dispose();System.IO.StreamWriter objfiles = newStreamWriter(@saveFileDialog1.FileName);objfiles.Write(textBox1.Text);objfiles.Close();objfiles.Dispose();}private void timer1_Tick(object sender, EventArgs e){serialPort1.Write("\r\n");double k = Convert.ToDouble(serialPort1.ReadLine());double wendu = k * 0.0001;textBox1.Text = "温度:" + wendu.ToString() + ";" + "时间:" + DateTime.Now.ToString();btnCJ.Text = "停止采集";}private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {this.serialPort1.PortName = boBox1.SelectedItem.ToString(); }private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) {this.serialPort1.BaudRate =Convert.ToInt32(boBox2.SelectedItem);}private void comboBox3_SelectedIndexChanged(object sender, EventArgs e) {switch (boBox3.SelectedItem.ToString()){case"None":this.serialPort1.Parity = Parity.None;break;case"Even":this.serialPort1.Parity = Parity.Even;break;case"Odd":this.serialPort1.Parity = Parity.Odd;break;default: this.serialPort1.Parity = Parity.None;break;}}private void comboBox4_SelectedIndexChanged(object sender, EventArgs e) {this.serialPort1.DataBits =Convert.ToInt16(boBox4.SelectedItem);}private void comboBox5_SelectedIndexChanged(object sender, EventArgs e) {switch (Convert.ToInt16(boBox5.SelectedItem)){case 1:this.serialPort1.StopBits = StopBits.One;break;case 2:this.serialPort1.StopBits = StopBits.Two;break;default:this.serialPort1.StopBits = StopBits.One;break;}}private void Form1_Load(object sender, EventArgs e){#region ------以下各赋值语句都会触发相应的SelectedIndexChanged事件,同时会对串口进行初始化设------boBox1.SelectedItem = boBox1.Items[0];//"COM1";boBox2.SelectedItem = boBox2.Items[3];//9600;boBox3.SelectedItem = boBox3.Items[0]; //8;boBox4.SelectedItem = boBox4.Items[0];//Parity.None;boBox5.SelectedItem = boBox5.Items[0];///StopBits.One#endregion}}}3.课程设计总结通过此次课程设计,使我更加扎实的掌握了有关高频电子线路方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。