搜档网
当前位置:搜档网 › 单片机原理与应用实验报告——温度测量显示及设定

单片机原理与应用实验报告——温度测量显示及设定

《单片机原理与应用》课程实验报告

院系:

班级:

学生:

学号:

指导教师:

设计时间:

哈尔滨工业大学

1 实验的目的、内容和设备

1.1 实验的目的

单片机综合实验的目的是训练单片机应用系统的编程及调试能力,通过对一个单片机应用系统进行系统的编程和调试,掌握单片机应用系统开发环境和仿真调试工具及仪器仪表的实用,掌握单片机应用程序代码的编写和编译,掌握利用单片机硬件仿真调试工具进行单片机程序的跟踪调试和排错方法,掌握示波器和万用表等杆塔工具在单片机系统调试中应用。

1.2 实验内容

实验的内容是利用APP001开发板实现一个温度测量显示和控制的单片机应用系统,利用APP001开发板上的温度传感器测量温度,通过键盘输入一个稳定设定值,当测量温度高于设定温度时发出声音报警,开启散热风扇开关,并在LCD上显示实时温度值,设定温度值和散热风扇的开关状态,其中日期和时间利用单片机的定时器来产生,并能通过键盘来设定。通过该实验学习和掌握以下的内容:

1)MPLAB开发环境的使用,程序编写和排错及软件仿真

2)利用MPLAB和ICD2对程序进行在线仿真和调试

3)使用万用表和示波器等仪器对硬件系统进行测量和调试

4)PIC18F452单片机的I/O和PWM驱动及编程方法

5)PIC18F452单片机LCD和键盘接口及编程方法

6)PIC18F452单片机的USART编程及与PC机的通讯方法

7)利用Timer1外接32.768kHz的晶振产生RTC

1.3 实验设备

1)运行MPLAB的PC机

2)示波器、万用表

3)直流电源

4)ICD2仿真器

5)APP001多功能实验板

2 总体设计

2.1 硬件总体设计

系统组成方案

图1系统框图

2.2 软件总体设计

图2主程序框图图3 中断程序框图

3 硬件设计

1)散热风扇开发输出控制:实验中我们利用一个LED来模拟风扇状态,当散热风扇

开关打开时,LED被点亮发光,当散热风扇关闭时,LED不发光。开发板上的指示灯D11由RB2,低电平亮,高电平灭。在代码中通过TRISBbits.TRISB2=0/1来设置输出/输入,通过PORTBbits.RB2来控制RB2管脚输入高低电平。

2)字符LCD APP001:开发板配置了一个2X16的字符LCD,它和PIC18F452的接口

图如下。端口D的RD0-RD3连接到LCD模块的DB4-DB7,用来向LCD模块写入命令和数据,其中DB7可以用来作为LCD模块控制器的忙标志位:RD5是读写控制位;RD4是命令和数据标志位,当RD4=0时,RD0-RD3是读取和写入数据到LCD的命令寄存器,RD4=1时,RD0-RD3读取和写入的是要显示的数据。端口A的RA2位用来控制LCD的使能,当RA2是高电平时LCD开始工作,RA2是低电平时,LCD禁止写工作。图中的电位器VR是用来调节LCD的显示辉度。

图4 LCD电路图

3)TC74:APP001开发板上配置了一个I2C接口的温度传感器TC74.要使用TC74温

度传感器时,断开J9的5、6、7、8管脚,同时连接J10的5、6、7、8管脚。

图5 TC74电路图

4)键盘:APP001开发板上配置了2组按键,SW2和SW3连接到端口RB0和RA4

上。

4 软件设计

1)温度更新函数:实现从TC47温度传感器中读取温度值,再将它显示到LCD上。

void LCD_Temp_Update (void);

2)串口通讯函数:将当前时间和温度通过串口发送到PC机。

void send_temperature(void);

3)按键处理函数:判断按键是否按下,并根据相应的按键设定时间和报警值。

void key_response(void);

4)报警函数:通过将当前温度值与报警值进行比较,判断是否需要报警。

void alarm_response(void);

5 系统操作说明

通过STATUS按键切换设置日期、时间、设置温度报警值和完成状态,状态标志会依次在LCD上显示“Y(year)、M(month)、D(day)、h(hour)、m(minute)、s(second)、T(tempture)”,提示操作者。在相应的提示符号状态下,可以通过递增键来改变相应的值。每按以此,值加1,数值由0~9,逢9化0。.LCD上还会显示实时日期时钟、传感器测得的当前温度值及报警值。温度设定值规定为10~50度。同时单片机还会将实时时间和传感器测得的当前温

度值发送到PC机。当温度超过报警值时,打开蜂鸣器和风扇(LED 代替)。打开串口调试小助手,当程序处在运行状态时,通过串口线,单片机每隔一秒会像PC机发送包含时间和当前温度的字符串。

6调试过程和结束语

通过本次单片机实验,了解了单片机应用系统的整个设计过程,培养了设计单片机应用初步能力。提高了综合运用单片机原理、C语言及电工电子技术等课程知识进行单片机应用系统设计的能力。

(1)在调试过程中,在状态变量的指针方面遇到了较大的难题。因为年月日时分秒和温度报警值总共有7个设置量。其中日期和时间存储在dt[6]数组中。刚开始设定displaycount指针的初始值来使状态显示位依次变化,但调试结果并不按设定的顺序变化,总是相差一定的数值。最后还是修改程序形式。记录调试过程中的显示顺序,然后由显示内容找出状态提示对应的字母,将对应字母改成我们要显示的字母。

虽然表面上程序能够正常实现功能。但这次尝试说明我们对指针还不是很理解,以至于不能控制指针的精确指向。程序如下所示:

if(displaycount>=0&&displaycount<=2)

select_change=&dt[5-displaycount];

if(displaycount>=3&&displaycount<=5)

select_change=&dt[5-displaycount];

if(displaycount==6)

select_change=&alarm_value;

if(displaycount==7)

select_change=&nouse;

if(displaycount==0)

friendkey='Y';

if(displaycount==1)

friendkey='M';

if(displaycount==2)

friendkey='D';

if(displaycount==3)

friendkey='h';

if(displaycount==4)

friendkey='m';

if(displaycount==5)

friendkey='s';

if(displaycount==6)

friendkey='T';

if(displaycount==7)

friendkey='O';

}

(2)程序中关于年月日时分秒的RTC。我们使用了一个6层for循环嵌套来实现。先建立关于闰年和平年月份天数的表格,然后通过查表法知道每个月的天数。

unsigned char days[12]={31,28,31,30,31,30,31,31,30,31,30,31};

unsigned char days1[12]={31,29,31,30,31,30,31,31,30,31,30,31};

if(PIR1bits.TMR1IF=1)

TMR1H=timer1H;

TMR1L=timer1L; // Reload 0.1 Second value to Timer1

PIR1bits.TMR1IF=0; // Clear t flag of Timer 1

cp++;

if( cp>9 )

{

cp=0;

dt[0]++; //second ++

if(dt[0]>59)

{

dt[0]=0;

dt[1]++;

if(dt[1]>59)

{

dt[1]=0;

dt[2]++;

if( dt[2]>23 )

{

dt[2]=0;

dt[3]++;

if(dt[5]%4==0||dt[5]%400==0)

{

daylimit=days1[k];

}

else

{

daylimit=days[k];

}

if(dt[3]>(daylimit-1))

{

dt[3]=0;

dt[4]++;

if(dt[4]>11)

{

dt[4]=0;

dt[5]++;

}

} }

}

}

附件1(电路原理图)

附件2(部分源代码及注释)

***************************************************************************** *****************************************************************************

主程序:时间产生和通信

#include "GROUPX_main.h"

unsigned char cp; // 100mS= T/(1/32768Hz) , T=3276.8

unsigned char dt[6]={0}; //定义储存年月日时分秒的六元素数组

unsigned char days[12]={31,28,31,30,31,30,31,31,30,31,30,31};//定义平年的每月天数表

unsigned char days1[12]={31,29,31,30,31,30,31,31,30,31,30,31};//定义闰年的每月天数表

unsigned char k=0;

unsigned char daylimit=0; //定义每月天数上限值变量

unsigned char timerflag_5s=1;

unsigned char timer1H;

unsigned char timer1L;

unsigned char alarm_value;

unsigned char nouse=0;

#pragma udata access My_RAM_1

near unsigned char Str_Len;

near unsigned char i;

near unsigned int T2_Buffer ;

near union

{

int Word ;

unsigned char Byte[2] ;

}Byte2Word ;

#pragma udata

char ASCII_StringT1[10];

char ASCII_StringT2[10];

#pragma romdata RomData

const rom char LCD_ROM_MSG1[ ]="T1=";

//const rom char LCD_ROM_MSG2[ ]="T2=";

#pragma interrupt MyHighInt

#pragma code high_vector = 0x0008

void high_direct(void)

{

_asm //begin in-line assembly

goto MyHighInt //go to isr_high function

_endasm //end in-line assembly

}

#pragma interruptlow MyLowInt

#pragma code low_vector = 0x0018

void low_direct(void)

{

_asm //begin in-line assembly

goto MyLowInt //go to isr_high function

_endasm //end in-line assembly

}

#pragma code//start code here

void MyHighInt(void)

{

;

}

void MyLowInt(void)

{

if(PIR1bits.TMR1IF=1)

TMR1H=timer1H;

TMR1L=timer1L; // Reload 0.1 Second value to Timer1

PIR1bits.TMR1IF=0; // Clear t flag of Timer 1

cp++;

if( cp>9 )

{

cp=0;

dt[0]++; //second ++

if(dt[0]>59) //满1分钟?

{

dt[0]=0;

dt[1]++;

if(dt[1]>59)// 满1小时?

{

dt[1]=0;

dt[2]++;

if( dt[2]>23 ) // 满1天?

{

dt[2]=0;

dt[3]++;

if(dt[5]%4==0||dt[5]%400==0)//判断是否是闰年

{

daylimit=days1[k]; // 满1月?

}

else

{

daylimit=days[k];

}

if(dt[3]>(daylimit-1))

{

dt[3]=0;

dt[4]++;

if(dt[4]>11) //满一年?

{

dt[4]=0;

dt[5]++;

}

}

}

}

}

LCD_Set_Cursor(1,7);

WriteDataLCD(dt[5]/10+0x30) ;

WriteDataLCD(dt[5]%10+0x30) ; //显示年

LCD_Set_Cursor(1,10);

WriteDataLCD(dt[4]/10+0x30) ;

WriteDataLCD(dt[4]%10+0x30) ; //显示月

LCD_Set_Cursor(1,13);

WriteDataLCD(dt[3]/10+0x30) ;

WriteDataLCD(dt[3]%10+0x30) ; //显示日

LCD_Set_Cursor(0,0);

WriteDataLCD(dt[2]/10+0x30) ;

WriteDataLCD(dt[2]%10+0x30) ; //显示时

LCD_Set_Cursor(0,3);

WriteDataLCD(dt[1]/10+0x30) ;

WriteDataLCD(dt[1]%10+0x30) ; //显示分

LCD_Set_Cursor(0,6);

WriteDataLCD(dt[0]/10+0x30) ;

WriteDataLCD(dt[0]%10+0x30) ; //显示秒

timerflag_5s=1;

}

}

void main(void)

{

//======initialize the MCU======//

unsigned char usartcount;

InitializePORT( );

InitializeINTs( );

InitializeAD( );

InitializeTMR1( );

Initialize_I2C_Master( );

InitializeUSART(); //初始化

alarm_value=30;//温度告警值初始值设定

select_change=&alarm_value; //指针设定

//======initialize the LCD======//

OpenLCD( );

LCD_Set_Cursor(0,0);

WriteDataLCD(dt[2]/10+0X30) ; //send hour to LCD

WriteDataLCD(dt[2]%10+0X30) ;

WriteDataLCD(':');

WriteDataLCD(dt[1]/10+0X30) ; //send minute to LCD

WriteDataLCD(dt[1]%10+0X30) ;

WriteDataLCD(':');

WriteDataLCD(dt[0]/10+0X30) ; //send second to LCD

WriteDataLCD(dt[0]%10+0x30) ;

LCD_Set_Cursor(0,9); //send status to LCD

WriteDataLCD('w') ;

LCD_Set_Cursor(0,11);

WriteDataLCD('!'); //send alarm_value to LCD WriteDataLCD(alarm_value/10+0x30) ;

WriteDataLCD(alarm_value%10+0x30) ;

putcLCD(0xDF); // Add degree symbol

putcLCD('C');

LCD_Set_Cursor(1,0);

putrsLCD(LCD_ROM_MSG1); //send "T1=" to LCD LCD_Set_Cursor(1,8);

dt[3]=1;

dt[4]=2;

dt[5]=11;

while(1)

{

if (timerflag_5s==1)

{

timerflag_5s=0;

LCD_Temp_Update() ; // 更新温度值

send_temperature(); //发送数据

}

key_response();

alarm_response();

}

}

void LCD_Temp_Update (void)

{

//*** Display TC74-A7 Temperature on LCD ***//

LCD_Set_Cursor(1,3);

Byte2Word.Word = Read_TC74_Temperature( ); // Get Current Temperature form TC74-A7 T2_Buffer=Read_TC74_Temperature();

if ( Byte2Word.Byte[1] == 0 )

{

btoa(Byte2Word.Byte[0],ASCII_StringT1); // Convert Temp. Hax to ASCII string

putsLCD(ASCII_StringT1); // Print to LCD

putcLCD(0xDF); // Add degree symbol

}

else if ( Byte2Word.Byte[1] == -1 ) // Read fail from TC74-A7, Display "--" on LCD {

putcLCD('-') ;

putcLCD('-') ;

}

}

void alarm_response(void)

{

if ((T2_Buffer)>=alarm_value) //TC74温度值超过告警值时报警 {

PORTCbits.RC2=1; //开蜂鸣器

PORTDbits.RD7=1; //点LED D8

}

else

{

PORTCbits.RC2=0; //观蜂鸣器

PORTDbits.RD7=0; //关LED D8

}

}

void send_temperature(void)

{

unsigned char usartcount;

//======send the time to PC======//

WriteUSART(dt[2]/10+0x30) ;

Delay1KTCYx(4) ;

WriteUSART(dt[2]%10+0x30) ;// send hour

Delay1KTCYx(4) ;

WriteUSART(':');

Delay1KTCYx(4) ;

WriteUSART(dt[1]/10+0x30) ;

Delay1KTCYx(4) ;

WriteUSART(dt[1]%10+0x30) ;// send minute

Delay1KTCYx(4) ;

WriteUSART(':');

Delay1KTCYx(4) ;

WriteUSART(dt[0]/10+0x30) ;

Delay1KTCYx(4) ;

WriteUSART(dt[0]%10+0x30) ;// send second

Delay1KTCYx(4) ;

//======send double space to PC======//

WriteUSART(' ');

Delay1KTCYx(4) ;

WriteUSART(' ');

Delay1KTCYx(4) ;

//======send TC74-A7 Temperature to PC======//

usartcount=0;

while(LCD_ROM_MSG1[usartcount])

{

WriteUSART(LCD_ROM_MSG1[usartcount++]);

Delay1KTCYx(4) ;

}

usartcount=0;

while(ASCII_StringT1[usartcount])

{

WriteUSART(ASCII_StringT1[usartcount++]);

Delay1KTCYx(4) ;

}

//======send double space to PC======//

WriteUSART(' ');

Delay1KTCYx(4) ;

WriteUSART(' ');

Delay1KTCYx(4) ;

************************************************************************************************************* *************************************************************************************************************

键盘程序

#include"GROUPX_main.h"

unsigned char displaycount=7; //指针初始化

unsigned char friendkey;//友好提示符号

unsigned char *select_change;//定义状态位指针

//======select the status======//

void changeselect(void)

{

if(displaycount>=0&&displaycount<=2)

select_change=&dt[5-displaycount];//时分秒设定指针位置

if(displaycount>=3&&displaycount<=5)

select_change=&dt[5-displaycount];//年月日设定指针位置

if(displaycount==6)

select_change=&alarm_value;//温度告警值设定指针位置

if(displaycount==7)

select_change=&nouse;

if(displaycount==0)

friendkey='Y';//year

if(displaycount==1)

friendkey='M';//month

if(displaycount==2)

friendkey='D'; //day

if(displaycount==3)

friendkey='h'; //hour

if(displaycount==4)

friendkey='m'; //minute

if(displaycount==5)

friendkey='s'; //second

if(displaycount==6)

friendkey='T'; //tempreture

if(displaycount==7)

friendkey='O'; //OK

}

//======key response======//

void key_response(void)

{

if(PORTBbits.RB0==0&&PORTAbits.RA4!=0) //判断按键情形{

displaycount++; //状态指针加1

if(displaycount>7)

displaycount=0; //状态位返回循环初始化changeselect();

LCD_Set_Cursor(0,9);

WriteDataLCD(friendkey); //显示提示符

if(displaycount==7)

WriteDataLCD('L');

else

WriteDataLCD(' ');

}

if(PORTBbits.RB0!=0&&PORTAbits.RA4==0) //判断按键情形 {

(*select_change)++;

if(dt[0]>59)

dt[0]=0;

if(dt[1]>59)

dt[1]=0;

if(dt[2]>23)

dt[2]=0;

if(dt[3]>31)

dt[3]=1;

if(dt[4]>12)

dt[4]=1; //数值位返回循环初始化

if(alarm_value>50) // 判断是否达到温度值上限

alarm_value=10; // 温度值返回循环初始化

if(nouse>200)

nouse=0;

LCD_Set_Cursor(0,0);

WriteDataLCD(dt[2]/10+0x30) ;

WriteDataLCD(dt[2]%10+0x30) ;

WriteDataLCD(':');

WriteDataLCD(dt[1]/10+0x30) ; WriteDataLCD(dt[1]%10+0x30) ;

WriteDataLCD(':');

WriteDataLCD(dt[0]/10+0x30) ;

WriteDataLCD(dt[0]%10+0x30) ;

LCD_Set_Cursor(0,12);

WriteDataLCD(alarm_value/10+0x30) ;

WriteDataLCD(alarm_value%10+0x30) ;

}

while(PORTBbits.RB0==0||POR TAbits.RA4==0); } }

基于单片机的温湿度检测及显示

1设计的意义 最近几年来,随着科技的飞速发展,单片机领域正在不断的走向社会各个角落,还带动传统控制检测日新月异更新。在实时运作和自动控制的单片机应用到系统中,单片机如今是作为一个核心部件来使用,仅掌握单片机方面知识是不够的,还应根据其具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。“单片机原理及应用课程设计”是电子类专业的学科基础科,它是继“汇编语言程序设计”,“接口技术”等课程之后开出的实践环节课程。 与此同时,现代社会越来越多的场所会涉及到温度与湿度并将其显示。由于温度与湿度不管是从物理量本身还是在实际人们的生活中都有着密切的关系,例如:冬天温度为18 至25℃,湿度为30%至80%;夏天温度为23至28℃,湿度为30%至60%。在此范围内感到舒适的人占95%以上。在装有空调的室内,室温为19 至24℃,湿度为40%至50%时,人会感到最舒适。如果考虑到温、湿度对人思维活动的影响,最适宜的室温度应是工作效率高。18℃,湿度应是40% 至60% ,此时,人的精神状态好,思维最敏捷。所以,本课程设计就是通过单片机驱动LCD1602,液晶显示温湿度,通过此设计,可以发现本设计有一定的扩展性,而且可以作为其他有关设计的基础。

2设计原理 2.1设计目标 2.1.1基本功能 检测温度、湿度 显示温度、湿度 过限报警 2.1.2主要技术参数 温度检测范围:-30℃至+55℃ 测量精度:2℃ 湿度检测范围:20%-90%RH 检测精度:5%RH 显示方式:温度:四位显示湿度:四位显示 报警方式:三极管驱动的蜂鸣器报警 2.2设计原理 温湿度监测系统要满足以下条件:温湿度监测系统能完成数据采集和处理、显示、串行通信、输出控制信号等多种功能。由数据采集、数据调理、单片机、数据显示等4个大的部分组成。该测控系统具有实时采集(检测粮库内的温湿度)、实时显示(对监测到的进行显示)、实时警报(根据监测的结果,超出预设定的值的进行蜂鸣警告)的功能。 传感器是实现测量首要环节,是监测系统的关键部件,如果没有传感器对原始被测信号进行准确可靠的捕捉和转换,一切准确的测量和控制都将无法实现。工业生产过程的自动化测量和控制,几乎主要依靠各种传感器来检测和控制生产过程中的各种参量,使设备和系统正常运行在最佳状态,从而保证生产的高效率和高质量。 一般温湿度控制系统中的温湿度测量均采用热敏电阻与湿敏电容,这种传统的模拟式温湿度传感器一般都需要设计信号调理电路并经过复杂的校准和标定过程,

单片机温度采集与显示

1、课程设计目的 (1)利用单片机及相应温度传感器设计单检测节点或多检测节点数字温度计 (2)精度误差:0.5摄氏度以内;测温范围:10-50摄氏度 (3)LED数码管或LCD直接显示 (4)完成对设计系统测试 2、数字温度计正文 摘要:随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术,本文主要介绍了一个基于89C52单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行介绍,该系统可以方便的实现温度采集和显示,并可根据需要任意设定上下限报警温度,使用起来相当方便,适合于我们日常生活和嵌入其它系统中,作为其AT89C52结合最简温度检测系统,该系统恶劣环境下进行现场温度测量,有广泛的应用前景。本文将介绍一种基于单片机往制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。 关键词:单片机,数字控制,温度计,DSIBB20, AT89C52 2.1引言 随着科技的不断发展,现代社会对各种信息参数的准确度和精确度的要求都有了几何级的增长,而如何准确而又迅速的获得这些参数就需要受制于现代信息基础的发展水平。在三大信息信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技构中,传感器属于信息技术的前沿尖端产品,尤其是温度传感器技术,在我国各领域己经引用的非常广泛,可以说是渗透到社会的每一个领域,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。 测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段 ①传统的分立式温度传感器 ②模拟集成温度传感器 ③智能温度传感器 目前的智能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的,它是微电子技术、计算机技术和自动测试技术(ATE)的结晶,特点是能输出温度数据及相关的温度控制量,适配各种微控制器(MCU)。社会的发展使人们对传感器的要求也越来越高,现在的温度传感器正在基于单片机的基础上从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展,并朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展,本文将介绍智能集成温度传感器DS18B20的结构特征及控制方法,并对以此传感器,AT89C52单片机为控制器构成的数字温度测量装置的工作

单片机实验报告—— 数码管显示温度

XXXX学院 实验报告 Experimentation Report of Taiyuan Normal University 系部计算机年级大三课程单片机原理与接口技术姓名同组者日期 学号 项目数码管显示温度 一、实验目的 1、了解单片机顺序执行的特点; 2、掌握C语言的编写和keilc51的使用; 3、熟悉DS18B20温度传感器的使用。 二、实验仪器 硬件资源:单片机开发板笔记本电脑; 软件资源:软件 Keil uVision5; 三、实验原理 1、流程图

2、连接图

四、实验结果 数码管显示当前温度,用手握住温度传感器,数码管显示的温度值变 大。 四、实验代码及分析 //主函数 void main() { while(1) { LcdDisplay(Ds18b20ReadTemp()); //显示读取到的温度值} } void LcdDisplay(int temp) //lcd显示 { float tp; if(temp< 0) //当温度值为负数 { DisplayData[0] = 0x40; //因为读取的温度是实际温度的补码,所以减1,再取反求出原码 temp=temp-1; temp=~temp; tp=temp; temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点后面的数自动去掉,

//不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5 //的就算加上0.5,还是在小数点后面。 } else { DisplayData[0] = 0x00; tp=temp; //因为数据处理有小数点所以将温度赋给一个浮点型变量 //如果温度是正的那么,那么正数的原码就是补码它本身 temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换//为整型的时候把小数点后面的数自动去掉,不管是否大于0.5,而+0.5之//后大于0.5的就是进1了,小于0.5的就算加上0.5,还是在小数点后面。 } DisplayData[1] = DIG_CODE[temp / 10000]; DisplayData[2] = DIG_CODE[temp % 10000 / 1000]; DisplayData[3] = DIG_CODE[temp % 1000 / 100] | 0x80; DisplayData[4] = DIG_CODE[temp % 100 / 10]; DisplayData[5] = DIG_CODE[temp % 10]; DigDisplay(); //扫描显示 } //使用数码管显示 void DigDisplay()

单片机原理与应用实验报告——温度测量显示及设定

《单片机原理与应用》课程实验报告 院系: 班级: 学生: 学号: 指导教师: 设计时间: 哈尔滨工业大学

1 实验的目的、内容和设备 1.1 实验的目的 单片机综合实验的目的是训练单片机应用系统的编程及调试能力,通过对一个单片机应用系统进行系统的编程和调试,掌握单片机应用系统开发环境和仿真调试工具及仪器仪表的实用,掌握单片机应用程序代码的编写和编译,掌握利用单片机硬件仿真调试工具进行单片机程序的跟踪调试和排错方法,掌握示波器和万用表等杆塔工具在单片机系统调试中应用。 1.2 实验内容 实验的内容是利用APP001开发板实现一个温度测量显示和控制的单片机应用系统,利用APP001开发板上的温度传感器测量温度,通过键盘输入一个稳定设定值,当测量温度高于设定温度时发出声音报警,开启散热风扇开关,并在LCD上显示实时温度值,设定温度值和散热风扇的开关状态,其中日期和时间利用单片机的定时器来产生,并能通过键盘来设定。通过该实验学习和掌握以下的内容: 1)MPLAB开发环境的使用,程序编写和排错及软件仿真 2)利用MPLAB和ICD2对程序进行在线仿真和调试 3)使用万用表和示波器等仪器对硬件系统进行测量和调试 4)PIC18F452单片机的I/O和PWM驱动及编程方法 5)PIC18F452单片机LCD和键盘接口及编程方法 6)PIC18F452单片机的USART编程及与PC机的通讯方法 7)利用Timer1外接32.768kHz的晶振产生RTC 1.3 实验设备 1)运行MPLAB的PC机 2)示波器、万用表

3)直流电源 4)ICD2仿真器 5)APP001多功能实验板 2 总体设计 2.1 硬件总体设计 系统组成方案 图1系统框图

基于单片机的温度数据采集系统实验报告

基于单片机的温度数据采集系统实验报告 班级:电技10—1班 姓名:田波平 学号:1012020108 指导老师:仲老师

题目:基于单片机的温度数据采集系统 一.设计要求 1.被测量温度范围:0~120℃,温度分辨率为0.5℃。 2.被测温度点:2个,每5秒测量一次。 3.显示器要求:通道号2位,温度4位(精度到小数点后一位)。 显示方式为定点显示和轮流显示。 4.键盘要求: (1)定点显示设定;(2)轮流显示设定;(3)其他功能键。 二.设计内容 1.单片机及电源模块设计 单片机可选用AT89S51及其兼容系列,电源模块可以选用7805等稳压组件,本机输入电压范围9-12v。 2.存储器设计 扩展串行I2C存储器AT24C02。 要求: AT24C02的SCK接P3.2 AT24C02的SDA接P3.4 2.传感器及信号转换电路 温度传感器可以选用PTC热敏电阻,信号转换电路将PTC输出阻值转换为0-5V。 3.A/D转换器设计 A/D选用ADC0832。 要求: ADC0832的CS端接P3.5 ADC0832的DI端接P3.6 ADC0832的DO端接P3.7 ADC0832的CLK端接P2.1 4.显示器设计。 6位共阳极LED显示器,段选(a-h)由P0口控制,位选由P2.2-P2.7控制。数码管由2N5401驱动。 5.键盘电路设计。 6个按键,P2.2-P2.7接6个按键,P3.4接公共端,采用动态扫描方式检测键盘。 6.系统软件设计。 系统初始化模块,键盘扫描模块,数据采集模块,标度变换模块、显示模块等。 三.设计报告要求 设计报告应按以下格式书写: (1)封面; (2)设计任务书; (3)目录; (4)正文;

51单片机课程设计数字温度计报告

电子毕业设计 数 字 温 度 计 题目:数显温度计学院:电子信息学院班级: 学号: : 指导老师: 日期:

数字温度计设计任务书 一、课程设计目的 1、加强学生理论联系实际的能力,提高学生的动手能力; 2、学会基本电子元器件的识别和检测; 3、学会应用EDA软件Proteus进行电路的设计和仿真; 4、基本掌握单片机的基本原理,并能将其应用于系统的设计。 5、通过实训,提高学生的学习兴趣,激发自主学习能力,培养创新意识。 二、设计任务 先焊制一个单片机最小系统,并以制作的单片机最小系统为核心,设计并制作一个数字式温度计应用系统。 三、设计要求具有以下功能: (1)采用DS18B20作为温度传感器进行温度检测; (2)对采集温度进行显示(显示温度分辨率0.1℃); (3)采集温度数值应采用数字滤波措施,保证显示数据稳定; (4)显示数据,无数据位必须消隐。

目录 数字温度计设计任务书 (2) 1、设计思路 (1)设计原理 (4) (2)系统方案及总体设计框图 (4) 2、数字温度计应用系统的硬件设计 (1)单片机小系统基本组成及硬件图 (2)外围电路工作原理及系统硬件图 (3)主要芯片及其功能 3、系统软件程序的设计 软件流程框图 4、系统调试 (1)仿真器介绍 (2)调试结果及其分析 (3)系统设计电路的特点和方案的优缺点 5、课程设计心得体会 参考文献 附录程序清单及注释

一、 设计思路: 设计方案及其总体设计框图 温度计设计系统流程图 系统设计原理: 本次课程设计是基于单片机的数字温度计设计,在开始课程设计的时候我们要理解并掌握对单片机 的开发,学会使用KEIL 及Proteus 等仿真软件。根据设计任务要求选

单片机原理与应用实验报告——温度测量显示及设定

单片机原理与应用实验报告——温度测量显示及设定实验目的: 掌握单片机温度测量的原理和方法,了解温度传感器的工作原理,学会通过单片机控制显示屏显示温度,并可以通过按键设定温度。 实验器材: 1.单片机(如STC89C52) 2.温度传感器(如DS18B20) 3.电阻、电容等基本元件 4.1602液晶显示屏 5.按键开关 6.杜邦线、面包板等 实验原理: 1.单片机温度测量原理: 单片机温度测量原理主要是通过温度传感器将温度转化为电压信号,然后单片机通过模拟口接收信号并进行数字转换得到温度数值。 2.温度传感器工作原理: 温度传感器内部有一个温度敏感元件,它能根据温度的变化产生相应的电压信号,然后通过数字转换将电压信号转化为数值。 3.单片机与1602显示屏的连接:

将1602显示屏的数据线接到单片机的IO口,通过控制IO口输出不同的信号来控制1602的显示。 实验步骤: 1.连接电路: 将单片机、温度传感器、1602显示屏等元件连接在一起,确保电路正确连接。 2.编写程序: 编写单片机程序,根据单片机型号和编程软件的不同,具体编写方式可能会有所不同,但主要目的是通过单片机读取温度传感器的值,并将其转化为温度,最后通过1602显示屏显示温度。 3.调试程序: 4.实验数据: 在实验过程中需要记录下实验数据,包括温度传感器的电压值、转化的温度值等。 5.结果分析: 根据实验数据和实验结果进行分析,对实验结果进行分析和总结。实验总结: 通过本次实验,我掌握了单片机温度测量的原理和方法,了解了温度传感器的工作原理,并成功通过单片机控制1602显示屏显示温度。通过实验,我体会到了实验设计和实验过程中的困难和挑战,但我也学到了很

《传感器原理及应用》DHT11温湿度检测计实验报告

《传感器原理及应用》DHT11温湿度检测计实验报告基于DHT11温湿度传感器的温湿度计设计 1.实验功能要求 使用DHT11实现温湿度的测量 2.实验所用传感器原理 DHT11: 单片机通过如下几个步骤完成读取DHT11的数据 步骤一: DHT11上电后(DHT11上电后要等待1S以越过不稳定状态在此期间不能发送任何指令),测试环境温湿度数据,并记录数据,同时DHT11的DATA数据线由上拉电阻拉高一直保持高电平;此时DHT11的DATA引脚处于输入状态,时刻检测外部信号。 步骤二: 微处理器的I/O设置为输出同时输出低电平,且低电平保持时间不能小于18ms(最大不得超过30ms),然后微处理器的I/O设置为输入状态,由于上拉电阻,微处理器的I/O即DHT11的DATA数据线也随之变高,等待DHT11作出回答信号。

步骤三: DHT11的DATA引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后DHT11的DATA引脚处于输出状态,输出83微秒的低电平作为应答信号,紧接着输出87微秒的高电平通知外设准备接收数据,微处理器的I/O此时处于输入状态,检测到I/O有低电平(DHT11回应信号)后,等待87微秒的高电平后的数据接收。 步骤四: 由DHT11的DATA引脚输出40位数据,微处理器根据I/O电平的变化接收40位数据,位数据“0”的格式为:54微秒的低电平和23-27微秒的高电平,位数据“1”的格式为:54微秒的低电平加68-74微秒的高电平。 低电平的时间一致,本质比较的是高电平的时间 3.实验电路

4.实验过程 一.单片机上机后1s内不读取 二. 主机(单片机)发送起始信号: 1.主机先拉高data。 2.拉低data延迟18ms。 3.拉高data(通过此操作将单片机引脚设置为输入)。 三.DHT11收到起始信号后进行应答: 拉低data,单片机读取到引脚被输出低电平持续80us后换为高电平,持续80us,直到高电平结束,意味着主机可以开始接受数据。 四. 主机开始接收数据: 1.单片机先输出高电平。 2.DHT11输出低电平,单片机读取电平,直到低电平结束(大约50us),DHT11输出高电平,延迟40us左右(28~70us之间)单片机再次读取data线电平,如果为低电平,则为“0”,如果为高电平,则为“1”。

单片机温度计课程设计报告

单片机温度计课程设计报告 摘要:本次课程设计旨在利用单片机实现一个温度计,能够实时测量环境温度并将温度值显示在数码管上。通过该设计,能够熟悉单片机的基本原理和编程方法,并且加深对温度测量原理的理解。 1. 引言 温度是我们日常生活中非常重要的一个参数,对于很多应用来说,温度的准确测量和控制是至关重要的。而单片机作为一种常用的嵌入式系统,具有体积小、功耗低、成本低等优点,因此被广泛应用于温度测量和控制系统中。 2. 设计原理 本设计采用了DS18B20温度传感器作为温度测量模块,并通过单片机的IO口与之连接。DS18B20传感器具有精度高、体积小、响应速度快等优点,是目前市场上常用的温度传感器之一。通过单片机与DS18B20传感器的通信,可以获取到当前环境的温度值。 3. 硬件设计 本设计所需的硬件主要包括单片机、DS18B20传感器、数码管、电阻、电容等。其中单片机负责控制和数据处理,DS18B20传感器用于测量温度,数码管则用于显示温度值。 3.1 单片机选择

在本设计中,选择了常用的STC89C52单片机作为控制核心。STC89C52是一款8051系列的单片机,具有丰富的外设资源和强大的计算能力,非常适合本次设计的要求。 3.2 传感器连接 DS18B20传感器与单片机的连接采用一根三线制,其中VCC连接到单片机的电源正极,GND连接到单片机的电源负极,DATA连接到单片机的IO口。 3.3 数码管连接 数码管的连接比较简单,将数码管的8个引脚分别连接到单片机的8个IO口即可。需要注意的是,数码管的引脚顺序可能因不同厂家而异,应根据具体数码管的型号选择正确的引脚连接方式。 4. 软件设计 本设计的软件主要包括单片机的初始化配置和温度测量显示功能。 4.1 单片机初始化 在使用单片机之前,需要对其进行初始化配置,包括设置IO口的输入输出方向、定时器的初始化、中断的使能等。通过这些初始化配置,可以确保单片机正常工作并准备好接收温度传感器的数据。 4.2 温度测量显示 温度测量显示功能主要包括与温度传感器的通信和数码管的显示。

51单片机温度采集与显示设计

51单片机温度采集与显示设计前言 在现代科技快速发展的时代,物联网技术已经深入各行各业,其广 泛应用促使了传感器技术的日益普及。而温度传感器作为一种常用的 传感器类型,广泛应用于环境监测、工业自动化以及生活中的智能家 居等领域。本文将介绍如何利用51单片机进行温度采集与显示的设计。 一、硬件设计 1.1 温度传感器选择 在温度传感器的选择方面,我们可以根据不同的应用需求选择不同 类型的传感器。例如,当我们需要测量较高温度范围时,可以选择热 电偶传感器;而当需要测量精度较高的低温范围时,可以选择PT100 温度传感器。根据具体应用需求选择合适的温度传感器非常重要。 1.2 电路设计 对于51单片机温度采集与显示设计,我们需要设计一个简单的电 路来连接温度传感器和单片机。电路主要包括温度传感器、AD转换芯 片以及显示模块。具体电路连接关系如下图所示: (图略) 二、软件设计 2.1 单片机编程环境搭建

在进行51单片机编程之前,我们需要搭建相应的编程环境。常用的51单片机编程软件有Keil MDK等,我们根据实际情况选择适合自己的编程软件,并进行相应的安装和配置。 2.2 代码编写 在代码编写方面,我们可以利用C语言编写相应的程序来实现温度采集与显示的功能。首先,我们需要初始化相应的引脚和寄存器,配置AD转换芯片以及显示模块。接着,我们可以借助单片机的AD转换功能获取温度传感器的电压信号,并通过相应的算法将电压转换为温度数值。最后,将获取到的温度数值通过显示模块展示出来。 三、实验结果与应用 3.1 实验结果 通过实验,我们成功地设计出了一个基于51单片机的温度采集与显示系统。系统可以准确地采集温度传感器的信号,并将温度数值以数字形式显示在屏幕上。通过对比实际温度和显示数值,可以发现系统具有较高的测量精度和稳定性。 3.2 应用前景 基于51单片机的温度采集与显示系统可以广泛应用于各个领域。在工业自动化中,可以用于实时监测设备的温度,并及时采取措施以防止设备过热。在智能家居中,可以用于室内温度的监测和调节,提高生活的舒适度。此外,该系统还可以应用于环境监测、气象观测等领域,具有广阔的市场前景。

单片机原理及应用实验报告

单片机原理及应用实验报告 一、引言 单片机(Microcontroller Unit,简称MCU)是一种集成电路芯片,内部集成了微处理器、存储器、输入输出接口和定时器等功能模块,广泛应用于各种电子设备和控制系统中。本实验报告将介绍单片机的基本原理以及其在实际应用中的实验。 二、单片机的基本原理 单片机的核心是微处理器,它负责执行程序指令。单片机的存储器包括程序存储器(Program Memory)和数据存储器(Data Memory)。程序存储器用于存储程序指令,数据存储器用于存储数据和中间结果。单片机通过输入输出接口与外部设备进行通信,通过定时器来控制程序的执行时间。 三、单片机的应用实验 1. LED闪烁实验 LED闪烁实验是单片机入门实验的经典案例。通过控制单片机的输出口,周期性地改变LED的状态,从而实现LED的闪烁效果。这个实验可以帮助初学者了解单片机编程的基本概念和操作。 2. 温度测量实验 温度测量实验可以通过连接温度传感器和单片机的输入口,实时地获取环境温度,并通过数码管或LCD显示器来显示温度数值。这个

实验可以帮助学生掌握单片机输入输出口的使用方法,以及模拟信号的处理和显示。 3. 蜂鸣器控制实验 蜂鸣器控制实验可以通过连接蜂鸣器和单片机的输出口,实现对蜂鸣器的控制。通过编写程序,可以使蜂鸣器发出不同的声音,如单调的蜂鸣声、警报声等。这个实验可以帮助学生学习单片机的数字输出和PWM(脉冲宽度调制)技术。 4. 电机控制实验 电机控制实验可以通过连接电机和单片机的输出口,实现对电机的控制。通过编写程序,可以控制电机的转动方向和速度。这个实验可以帮助学生理解单片机输出口的电流和电压特性,以及电机的控制原理。 5. 红外遥控实验 红外遥控实验可以通过连接红外接收器和单片机的输入口,实现对红外遥控信号的解码和处理。通过编写程序,可以实现对各种红外遥控器的解码和按键处理。这个实验可以帮助学生学习单片机输入口的中断处理和红外通信原理。 四、总结 本实验报告介绍了单片机的基本原理以及其在实际应用中的实验。单片机作为一种重要的集成电路芯片,在各种电子设备和控制系统

基于单片机的数字温度计设计与实现可行性研究报告

基于单片机的数字温度计设计与实现可行性研究报告 基于单片机的数字温度计设计与实现可行性研究报告 摘要 数字温度计是一种广泛应用于科学研究和工业控制领域的温度测量设备。本研究旨在设计并实现一款基于单片机的数字温度计,通过对电学原理和编程技术的研究,探讨其可行性和应用前景。实验结果表明,基于单片机的数字温度计具有准确快速的温度测量能力,适用于各种场景。 1. 引言 随着科学技术的不断进步,温度测量在许多领域中都起着重要的作用。传统的温度计主要采用玻璃温度计,存在测量精度低、响应速度慢等问题。而基于单片机的数字温度计则具有温度测量精度高、响应速度快等优点,因此在今天得到广泛的应用。本研究旨在通过对基于单片机的数字温度计的设计与实现,探讨其可行性和应用前景。 2. 设计方案 本研究选择使用DS18B20数字温度传感器作为温度检测模块,通过单片机进行数据采集和处理,并将温度数据显示在液晶屏上。设计方案如下: 2.1 硬件设计 该数字温度计的硬件主要由DS18B20传感器、单片机、电源电路、显示屏等组成。其中,DS18B20传感器能在较大温度范围 内提供高精度的温度测量结果,单片机负责数据采集和处理,而显示屏则用于实时展示温度值。 2.2 软件设计 温度计的主要功能是实时测量和显示温度值。软件方面,基于

单片机我们可以采用C语言编写程序,通过设置单片机的输入输出端口,实现与传感器的通信,同时借助单片机的ADC模块来实现对传感器输出信号的模数转换。控制程序可以通过不断读取传感器的数据,计算并显示相应的温度值。 3. 实验与结果 为了验证基于单片机的数字温度计的可行性,我们进行了一系列实验。在实验中,我们对温度计的精度、响应速度和稳定性进行了测试。 3.1 精度测试 通过将数字温度计与已知精度可靠的温度计对比,我们得出了数字温度计的测量精度为±0.5℃。实验结果表明,该数字温 度计能够满足大多数实际应用场景的要求。 3.2 响应速度测试 我们将数字温度计置于不同温度环境中,观察其响应速度。结果显示,数字温度计能够在1秒内获取到相应温度值,并实时显示。 3.3 稳定性测试 持续监测温度计的输出值,并观察其变化情况。实验结果显示,数字温度计具有较好的稳定性,能够长时间持续准确地测量温度。 4. 结论 基于单片机的数字温度计设计与实现是可行的。该温度计具有准确快速的温度测量能力,适用于各种场景。通过对数字温度计的实验测试,我们验证了其在精度、响应速度和稳定性方面的表现,结果表明该数字温度计能够满足大多数实际应用场景的要求。 尽管本研究已经取得了一定的研究结论,但仍然存在一些

单片机原理与应用实验报告

单片机原理与应用实验报告 摘要:本实验报告主要介绍了单片机的原理及其在实际应用中的一些 常用实验。首先简要介绍了单片机的基本原理和工作方式,然后详细说明 了几个单片机应用实验,包括LED灯控制、数码管显示和温度测量等。通 过这些实验的学习和实践,我们更好地理解了单片机的原理和应用。 1.引言 单片机是一种完整系统集成在一个芯片上的微型计算机,具有存储器、时钟、输入输出接口以及运算器等功能。随着科技的不断发展,单片机在 各个领域得到了广泛的应用,例如家电控制、通信、仪器设备等。本实验 主要通过一系列实验来深入理解单片机的原理和应用。 2.单片机基本原理 单片机是由微处理器、存储器、I/O接口和时钟电路组成的,其工作 原理如下:首先,根据程序存储器中的指令,将指令送到控制器中进行译 码和执行;然后,通过数据总线将数据从存储器中读取到寄存器中进行运算;最后,将结果通过I/O接口送出。 3.实验一:LED灯控制 实验目的:通过控制单片机的I/O接口,控制LED灯的亮灭。 实验原理:单片机的I/O接口是与外部设备进行数据交流和控制的重 要通道。通过控制I/O接口的高低电平,可以实现对外部设备的控制。本 实验中,我们通过控制I/O接口的高低电平,实现了对LED灯的亮灭控制。实验步骤: 1)连接电路:将LED灯的一端连接到单片机的I/O口,另一端接地。

2)编写程序:使用C语言编写程序,设置相应的I/O口为输出并控制其高低电平。 4)调试程序:通过观察LED灯的亮灭情况,调试程序,确保LED灯的控制正确。 4.实验二:数码管显示 实验目的:通过控制单片机的I/O接口,实现对数码管的数字显示。 实验原理:数码管由多个LED灯组成,通过控制不同的LED灯亮灭,可以实现对数字的显示。本实验中,我们通过控制单片机的I/O接口,将相应的LED灯控制为亮或灭,从而实现数字的显示。 实验步骤: 1)连接电路:将数码管的共阴极连接到单片机的I/O口,并用电源提供共阳极的电源。 2)编写程序:使用C语言编写程序,设置相应的I/O口为输出并控制其高低电平,控制数码管的亮灭。 4)调试程序:通过观察数码管的数字显示情况,调试程序,确保数字的显示正确。 5.实验三:温度测量 实验目的:通过连接温度传感器和单片机,实现对温度的测量。 实验原理:温度传感器是一种可以将温度转换为电信号的传感器,通过将温度传感器的电信号输入到单片机的模拟输入引脚,可以实现对温度

单片机中的温度传感器原理与应用

单片机中的温度传感器原理与应用单片机(Microcontroller)是一种集成了处理器核心、存储器和外设接口等功能于一体的集成电路芯片。温度传感器则是一种用于测量环境温度并将其转换为电信号的装置。在许多单片机应用中,温度传感器被广泛使用以监测和控制温度。 本文将探讨单片机中常用的温度传感器原理与应用。 一、温度传感器原理 温度传感器是一种能够将温度转换成电信号的传感器。常见的温度传感器有电阻温度计(RTD)、热电偶(Thermocouple)和半导体温度传感器等。 1. 电阻温度计(RTD) 电阻温度计是一种使用金属材料电阻随温度变化的特性来进行温度测量的传感器。最常见的电阻温度计材料之一是铂金,其中常用的有白金电阻温度计(Pt100)和铂铑电阻温度计(Pt1000)。电阻温度计通过测量电阻值变化来计算温度。 2. 热电偶 热电偶是一种利用两种不同金属的热电效应来测量温度的传感器。热电偶由两种不同金属的导线组成,两个导线的接合处称为热电偶焊点。当热电偶的焊点处于不同温度下时,会产生一个电动势。通过测量这个电动势来计算温度。

3. 半导体温度传感器 半导体温度传感器是一种利用半导体材料的电阻随温度变化的特性进行温度测量的传感器。常见的半导体温度传感器有硅(Silicon)温度传感器和石墨烯(Graphene)温度传感器等。半导体温度传感器通常采用微型芯片方式制造,具有体积小、精度高、响应速度快等优点。 二、温度传感器在单片机中的应用 单片机中的温度传感器广泛应用于温度检测、温度控制、温度补偿等场景。以下介绍几种常见的应用案例。 1. 温度检测 单片机可以通过温度传感器来实时检测环境的温度。例如,温度传感器可以被用于室内温度监测系统中,单片机可以实时读取传感器输出的温度值,并根据温度变化进行相应的控制操作,如开启或关闭空调、加热等。 2. 温度控制 单片机可以根据温度传感器的反馈信号来实现温度控制。例如,温度传感器可以用于温度控制器中,单片机可以根据实时的温度值与设定的目标温度进行比较,并通过控制输出来调节加热或制冷设备,以维持恒温状态。 3. 温度补偿

51系列单片机闭环温度控制实验报告

成绩: 综合实验报告 题目:51系列单片机闭环温度控制 班级: 小组成员: 指导教师: 完成时间:2015年11月

一、实验名称: 51系列单片机闭环温度控制实验 ——基于Protuse仿真实验平台实现 基本情况: 1.实验项目组长: 2. 小组成员: 3.具体分工:负责程序编写,主要负责查询资料与实验报告撰写。 4.实验要求: ①设计硬件电路: 温度检测:采用热电偶或热电阻 温度给定:采用电位器进行模拟电压给定,0——5V AD转采用12位转换 显示采用8位LED,或者LCD1602显示 键盘4X4,PID等参数通过键盘设置。 ②软件 控制算法:数字PID,参数在线修改。 显示窗口:显示温度的设置值SV、温度的实际值PV。 实际温度值,温度峰值、峰值时间等通过串口上传到上位机(选做)

二、实验内容 1、系统基本原理(实验原理介绍) 根据实验要求,温度闭环控制,即对加温速度、超调量、调节时间级误差参数,选择PID控制参数级算法,实现对温度的自动控制。 闭环温度控制系统原理图如下: 2、PID算法的数字实现 本次试验通过8031通过OVEN 是模拟加热的装置,加一定的电压便开始不停的升温,直到电压要消失则开始降温。仿真时,U形加热器为红色时表示正在加热,发红时将直流电压放过来接,就会制冷,变绿。T端输出的是电压,温度越高,电压就越高。 8031对温度的控制是通过可控硅调控实现的。可控硅通过时间可以通过可控硅控制板上控制脉冲控制。该触发脉冲想8031用软件在P1.3引脚上产生,受过零同步脉冲后经光偶管和驱动器输送到可控硅的控制级上。偏差控制原理是要求对所需温度求出偏差值,然后对偏差值处理而获得控制信号去调节加热装置的温度。 PID控制方程式: 式中e是指测量值与给定值之间的偏差 TD 微分时间 T 积分时间 KP 调节器的放大系数

基于51单片机环境温度检测及显示

摘要 本次的温度检测设计及显示以AT89C51单片机系统进行温度采集, AT89C51单片机系统进行控制,温度信号由温度传感器18b20采集,通过8255键盘控制输入89C51,温度数据传输采用12864液晶显示模块来实现。 本次设计实现了: ⏹检测温度范围:0℃--100℃。 ⏹检测器单元可显示检测的温度值。 ⏹采用12864液晶显示模块显示。 ⏹采用8255控制键盘。 本次的温度检测及显示设计主要研究了单片机与12864液晶显示模块、温度检测芯片18b20接口之间的作用,学会根据外围电路设计进行软件编程及系统调试,练习撰写实训总结报告,培养我们运用专业知识设计智能仪器的能力。为以后的改进和发展奠定了很好的基础。 关键词:温度检测、AT89C51单片机系统、温度传感器18b20、8255键盘、12864液晶显示模块

目录 第一章绪论 (3) 1.1 环境温度检测的概述 (3) 1.2 环境温度检测的现状和发展前景 (3) 1.2.1 环境温度检测的现状 (3) 1.2.2 环境温度检测的发展前景 (3) 1.3 环境温度检测研究的主要内容 (4) 第二章环境温度检测及显示总体的设计方案 (5) 2.1 环境温度检测及显示的各个部分的设计方案 (5) 2.1.1 测量部分 (5) 2.1.2 远程通信部分 (5) 2.1.3 显示部分 (5) 2.2 环境温度检测及显示的总体的设计结构 (6) 第三章环境温度检测及显示主要模块的组成 (7) 3.1 温度检测芯片DS18B20模块 (7) 3.1.1 DS18B20的技术参数 (7) 3.1.2 DS18B20数字温度计的封装与外形尺寸 (7) 3.1.3 DS1820使用中注意事项 (7) 3.2 12864液晶显示模块 (7) 3.2.1 OCM4X8C汉字液晶屏引脚表 (8) 3.2.2 OCM4X8C接口方式与时序 (8) 3.3 8255按键模块 (9) 3.3.1 引脚说明 (9) 3.3.2 内部结构 (10) 3.3.3 工作方式控制电路 (10) 3.3.4 总线数据缓冲器 (11) 3.3.5 8255三种基本工作方式 (11) 3.3.6 读/写控制逻辑电路 (11) 第四章系统的软件实现 (12) 4.1 主程序的流程图 (12) 4.2 按键的流程图 (12) 4.3 时间功能的流程图 (13)

相关主题