当前位置:文档之家› 基于430单片机的温度传感器编程

基于430单片机的温度传感器编程

基于430单片机的温度传感器编程
基于430单片机的温度传感器编程

主程序

#include "msp430.h"

#include "cry12864.h"

#include "DS18B20.h"

typedef unsigned char uchar;

typedef unsigned int uint;

unsigned char lab[]={"温度:"};

uchar laba[]=

{ 0x00,0x00,0x00,0xC0,0x01,0x48,0x02,0x44,0x04,0x52,0xF8,0x49,0x88,0x49,0x88,0x49, 0x88,0x49,0x88,0x49,0xF8,0x49,0x04,0x52,0x02,0x44,0x01,0x48,0x00,0xC0,0x00,0x00};

//要显示的6位温度数字

uchar dN[6];

void Disp_Numb(uint temper);

/*************************主函数*************************/

void main( void )

{

/*下面六行程序关闭所有的IO口*/

P1DIR = 0XFF;P1OUT = 0XFF;

P2DIR = 0XFF;P2OUT = 0XFF;

P3DIR = 0XFF;P3OUT = 0XFF;

P4DIR = 0XFF;P4OUT = 0XFF;

P5DIR = 0XFF;P5OUT = 0XFF;

P6DIR = 0XFF;P6OUT = 0XFF;

uchar i;

WDTCTL = WDTPW + WDTHOLD; //关狗

P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换

/*------选择系统主时钟为8MHz-------*/

BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器

do

{

IFG1 &= ~OFIFG; //清除晶振失败标志

for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振

}

while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?

BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振

//计数时钟选择SMLK=8MHz,1/8分频后为1MHz

TACTL |= TASSEL_2 + ID_3;

//打开全局中断

_EINT();

Ini_Lcd();

for(i=0;i<16;i++)

Write_Data(lab[i]);

//循环读数显示

WDTCTL = WDTPW + WDTHOLD; //关狗

Ini_Lcd(); //初始化液晶

Write_Cmd(0x80); //写第一行的显示地址

for(i = 0; i < 16; i++)

Write_Data(0x00 + i); //显示0x30~0x3f对应的字符

Write_Cmd(0x90); //写第二行的显示地址

for(i = 0; i < 16; i++)

Write_Data(0x10 + i); //显示0x40~0x4f对应的字符

Write_Cmd(0x88); //写第三行的显示地址

for(i = 0; i < 16; i++)

Write_Data(0x20 + i); //显示0x50~0x5f对应的字符

Write_Cmd(0x98); //写第四行的显示地址

for(i = 0; i < 16; i++)

Write_Data(0x30 + i); //显示0x60~0x6f对应的字符

/* for(i = 1000; i > 0; i--) //延时一会

{

for(j = 1000; j > 0; j--)

_NOP();

}*/

//在显示时DDAM和GDRAM是同时显示的,也就是它们的显示结果是叠加在一起的/*SM12864液晶基本指令集控制命令测试*/

//1.设定DDRAM地址命令

Write_Cmd(0x90); //设定DDRAM地址,因为此时DDRAM地址已经溢出//2.显示状态命令

Write_Cmd(0x08); //整体显示关,游标关,游标位置关

Write_Cmd(0x0c); //整体显示开,游标关,游标位置关

Write_Cmd(0x0e); //整体显示开,游标开,游标位置关

Write_Cmd(0x0f); //整体显示开,游标开,游标位置开

//3.位址归位

Write_Cmd(0x02); //位址归位,游标回到原点

Write_Cmd(0x84); //将DDRAM地址设为0x88,游标在此闪烁

//4.点设定指令

//(以下四个命令是控制写入字符以后光标及整屏显示的移动)

Write_Cmd(0x07); //光标右移整体显示左移

Write_Data(0x20); //写入两个空格

Write_Data(0x20);

Write_Cmd(0x05); //光标左移整体显示右移

Write_Data(0x20); //写入两个空格

Write_Data(0x20);

Write_Cmd(0x06); //光标右移整体显示不移动

Write_Data(0x20); //写入两个空格

Write_Data(0x20);

Write_Cmd(0x04); //光标左移整体显示不移动

Write_Data(0x20); //写入两个空格

Write_Data(0x20);

//5.游标和显示移位控制

//(以下四个命令无需写入显示数据,直接控制光标和整屏显示的移动)Write_Cmd(0x10); //光标左移

Write_Cmd(0x14); //光标右移

Write_Cmd(0x18); //整体显示左移,光标跟随

Write_Cmd(0x1c); //整体显示右移,光标跟随

Write_Cmd(0x0c); //关闭光标

//6.进入扩展功能模式命令

Write_Cmd(0x34); //打开扩展功能模式,绘图显示关闭

//7.反白命令

Write_Cmd(0x04); //同时反白1、3行

Write_Cmd(0x04); //再次反白1、3行,相当于关闭1、3行反白Write_Cmd(0x05); //同时反白2、4行

Write_Cmd(0x05); //再次反白2、4行,相当于关闭2、4行反白//8.睡眠模式命令

Write_Cmd(0x08); //进入睡眠模式

Write_Cmd(0x0c); //退出睡眠模式

//9.待命模式命令

Write_Cmd(0x01); //进入待命模式

//10.打开GDRAM显示

Write_Cmd(0x36); //打开扩展功能模式,打开绘图显示

Draw_TX(0x80,0x84,laba); //设置16*16大小图形

Clear_GDRAM(); //清除上电复位后RAM中的随机数值

Draw_TX(0x80,0x84,laba); //重新显示设置16*16大小图形

//11.关闭GDRAM显示

Write_Cmd(0x34); //打开扩展功能模式,关闭绘图显示//12.设定基本指令集

Write_Cmd(0x30); //回到基本指令集

//13.清除显示命令

Write_Cmd(0x01); //清屏

Write_Cmd(0x80);

for(i=0;i<5;i++)

Write_Data(lab[i]);

Write_Cmd(0x90); //写第二行的显示地址

if(1)

{

Disp_Numb(Do1Convert());

Write_Data(dN[5]+0x30);

Write_Data(dN[4]+0x30);

Write_Data(0x2e); //0x2e是小数点对应的ASCII码值

Write_Data(dN[3]+0x30);

Write_Data(dN[2]+0x30);

Write_Data(dN[1]+0x30);

Write_Data(dN[0]+0x30);

}

LPM4;

}

/*******************************************

函数名称:Disp_Numb

功能:将从DS18B20读取的11bit温度数据转换

成液晶显示的温度数字

参数:temper--11bit温度数据

返回值:无

********************************************/

void Disp_Numb(uint temper)

{

uchar i;

for(i = 0;i < 6;i++) dN[i] = 0; //初始化显示变量

//数值转换

if(temper & BIT0)

{

dN[0] = 5;

dN[1] = 2;

dN[2] = 6;

}

if(temper&BIT1) {

dN[1] += 5;

dN[2] += 2;

dN[3] += 1;

}

if(temper & BIT2) {

dN[2] += 5;

dN[3] += 2;

if(dN[2] >= 10)

{

dN[2] -= 10;

dN[3] += 1;

}

}

if(temper&BIT3) {

dN[3] += 5;

}

if(temper & BIT4) {

dN[4] += 1;

}

if(temper & BIT5) {

dN[4] += 2;

}

if(temper & BIT6) {

dN[4] += 4;

}

if(temper & BIT7) {

dN[4] += 8;

if(dN[4] >= 10)

{

dN[4] -= 10;

dN[5] += 1;

}

}

if(temper & BIT8)

{

dN[4] += 6;

dN[5] += 1;

if(dN[4] >= 10)

{

dN[4] -= 10;

dN[5] += 1;

}

}

if(temper & BIT9)

{

dN[4] += 2;

dN[5] += 3;

if(dN[4] >= 10)

{

dN[4] -= 10;

dN[5] += 1;

}

}

if(temper & BITA)

{

dN[4] += 4;

dN[5] += 6;

if(dN[4] >= 10)

{

dN[4] -= 10;

dN[5] += 1;

}

if(dN[5] >= 10)

{

dN[5] -= 10;

}

}

}

传感器

#include typedef unsigned char uchar; typedef unsigned int uint;

#define DQ1 P1OUT |= BIT6 #define DQ0 P1OUT &= ~BIT6

#define DQ_in P1DIR &= ~BIT6

#define DQ_out P1DIR |= BIT6

#define DQ_val (P1IN & BIT6)

/*******************************************

函数名称:DelayNus

功能:实现N个微秒的延时

参数:n--延时长度

返回值:无

说明:定时器A的计数时钟是1MHz,CPU主频8MHz 所以通过定时器延时能够得到极为精确的

us级延时

********************************************/

void DelayNus(uint n)

{

CCR0 = n;

TACTL |= MC_1; //增计数到CCR0

while(!(TACTL & BIT0)); //等待

TACTL &= ~MC_1; //停止计数

TACTL &= ~BIT0; //清除中断标志

}

/*******************************************

函数名称:Init_18B20

功能:对DS18B20进行复位操作

参数:无

返回值:初始化状态标志:1--失败,0--成功

********************************************/ uchar Init_18B20(void)

{

uchar Error;

DQ_out;

_DINT();

DQ0;

DelayNus(500);

DQ1;

DelayNus(55);

DQ_in;

_NOP();

if(DQ_val)

{

Error = 1; //初始化失败

}

else

{

Error = 0; //初始化成功

}

DQ_out;

DQ1;

_EINT();

DelayNus(400);

return Error;

}

/******************************************* 函数名称:Write_18B20

功能:向DS18B20写入一个字节的数据

参数:wdata--写入的数据

返回值:无

********************************************/ void Write_18B20(uchar wdata)

{

uchar i;

_DINT();

for(i = 0; i < 8;i++)

{

DQ0;

DelayNus(6); //延时6us

if(wdata & 0X01) DQ1;

else DQ0;

wdata >>= 1;

DelayNus(50); //延时50us

DQ1;

DelayNus(10); //延时10us }

_EINT();

}

/******************************************* 函数名称:Read_18B20

功能:从DS18B20读取一个字节的数据

参数:无

返回值:读出的一个字节数据

********************************************/ uchar Read_18B20(void)

{

uchar i;

uchar temp = 0;

_DINT();

for(i = 0;i < 8;i++)

{

temp >>= 1;

DQ0;

DelayNus(6); //延时6us

DQ1;

DelayNus(8); //延时9us

DQ_in;

_NOP();

if(DQ_val) temp |= 0x80;

DelayNus(45); //延时45us

DQ_out;

DQ1;

DelayNus(10); //延时10us }

_EINT();

return temp;

}

/******************************************* 函数名称:Skip

功能:发送跳过读取产品ID号命令

参数:无

返回值:无

********************************************/ void Skip(void)

{

Write_18B20(0xcc);

}

/******************************************* 函数名称:Convert

功能:发送温度转换命令

参数:无

返回值:无

********************************************/ void Convert(void)

{

Write_18B20(0x44);

}

/*******************************************

函数名称:Read_SP

功能:发送读ScratchPad命令

参数:无

返回值:无

********************************************/ void Read_SP(void)

{

Write_18B20(0xbe);

}

/*******************************************

函数名称:ReadTemp

功能:从DS18B20的ScratchPad读取温度转换结果参数:无

返回值:读取的温度数值

********************************************/ uint ReadTemp(void)

{

uchar temp_low;

uint temp;

temp_low = Read_18B20(); //读低位

temp = Read_18B20(); //读高位

temp = (temp<<8) | temp_low;

return temp;

}

/*******************************************

函数名称:ReadTemp

功能:控制DS18B20完成一次温度转换

参数:无

返回值:测量的温度数值

********************************************/ uint Do1Convert(void)

{

uchar i;

do

{

i = Init_18B20();

}

while(i);

Skip();

Convert();

for(i = 20;i > 0;i--)

DelayNus(60000); //延时800ms以上do

{

i = Init_18B20();

}

while(i);

Skip();

Read_SP();

return ReadTemp();

}

基于51单片机的DS18B20数字温度计的实训报告

电子信息职业技术学院 暨国家示性软件职业技术学院 单片机实训 题目:用MCS-51单片机和 18B20实现数字温度计 姓名: 系别:网络系 专业:计算机控制技术 班级:计控 指导教师: * 伟 时间安排:2013年1月7日至 2013年1月11日

摘要 随着国民经济的发展,人们需要对各中加热炉、热处理炉、反应炉和锅炉中温度进行监测和控制。采用单片机来对他们控制不仅具有控制方便,简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大的提高产品的质量和数量。 在日常生活及工业生产过程中,经常要用到温度的检测及控制,温度是生产过程和科学实验中普遍而且重要的物理参数之一。在生产过程中,为了高效地进行生产,必须对它的主要参数,如温度、压力、流量等进行有效的控制。温度控制在生产过程中占有相当大的比例。温度测量是温度控制的基础,技术已经比较成熟。传统的测温元件有热电偶和二电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方法相对比较复杂,需要比较多的外部硬件支持。我们用一种相对比较简单的方式来测量。 我们采用美国DALLAS半导体公司继DS18B20之后推出的一种改进型智能温度传感器DS18B20作为检测元件,温度围为-55~125 oC,最高分辨率可达0.0625 oC。DS18B20可以直接读出北侧温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。 本文介绍一种基于AT89C51单片机的一种温度测量及报警电路,该电路采用DS18B20作为温度监测元件,测量围0℃-~+100℃,使用LED模块显示,能设置温度报警上下限。正文着重给出了软硬件系统的各部分电路,介绍了集成温度传感器DS18B20的原理,AT89C51单片机功能和应用。该电路设计新颖、功能强大、结构简单。 关键词:单片机,数字控制,温度计, DS18B20,AT89S51

MSP430单片机实验报告v3.0

MSP430单片机课程设计 一.设计要求 数字温度计 (1)用数码管(或LCD)显示温度和提示信息; (2)通过内部温度传感器芯片测量环境温度; (3)有手动测量(按测量键单次测量)和自动测量(实时测量)两种工作模式; (4)通过按键设置工作模式和自动测量的采样时间(1秒~1小时); (5)具备温度报警功能,温度过高或过低报警。 二.系统组成 系统由G2Launch Pad及其拓展板构成,单片机为MSP430G2553。 I2的通信方式对IO进行拓展,芯片为TCA6416A; 使用C 使用HT1621控制LCD; 三.系统流程 拓展的四个按键key1、key2、key3、key4分别对应单次测量、定时测量、定时时间的增、减。定时时间分别为1s,5s,15s,30s,60s。在自动测量模式下,当温度超过设定温度上限

即报警,报警时在LCD屏幕显示ERROR同时LED2闪烁,在5s后显示0℃。此时可重新开始手动或自动测量温度。 系统示意图: 四.演示 a)手动测量温度 b)自动测量温度 c)报警

显示ERROR同时LED闪烁d)设置时间界面 五.代码部分 #include "MSP430G2553.h" #include "TCA6416A.h" #include "LCD_128.h" #include "HT1621.h" #include "DAC8411.h" #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) static int t=0; long temp; long IntDeg; void ADC10_ISR(void); void ADC10_init(void); void LCD_Init(); void LCD_Display(); void GPIO_init(); void I2C_IODect(); void Error_Display(); void WDT_Ontime(void); void LCD_Init_AUTO(); void LCD1S_Display();

基于单片机的温度测量系统设计

基于STC单片机的温度测量系统的研究 摘要:本文针对现有温度测量方法线性度、灵敏度、抗振动性能较差的不足,提出了一种基于STC单片机,采用Pt1000温度传感器,通过间接测量铂热电阻阻值来实现温度测量的方案。重点介绍了,铂热电阻测量温度的原理,基于STC实现铂热电阻阻值测量,牛顿迭代法计算温度,给出了部分硬件、软件的设计方法。实验验证,该系统测量精度高,线性好,具有较强的实时性和可靠性,具有一定的工程价值。 关键词:STC单片机、Pt1000温度传感器、温度测量、铂热电阻阻值、牛顿迭代法。 Study of Temperature Measurement System based on STC single chip computer Zhang Yapeng,Wang Xiangting,Xu Enchun,Wei Maolin Abstract:A method to achieve temperature Measurement by the Indirect Measurement the resistance of platinum thermistor is proposed. It is realized by the single chip computer STC with Pt1000temperature sensor.The shortcomings of available methods whose Linearity, Sensitivity, and vibration resistance are worse are overcame by the proposed method. This paper emphasizes on the following aspects:the principle of temperature measurement by using platinum thermistor , the measurement of platinum thermistor’s resistance based on STC single chip computer, the calculating temperature by Newton Iteration Method. Parts of hardware and software are given. The experimental results demonstrate that the precision and linearity of the method is superior. It is also superior in real-time character and reliability and has a certain value in engineering application. Keywords: STC single chip computer,Pt1000temperature sensor,platinum thermistor’s resistance,Newton Iteration Method 0 引言 精密化学、生物医药、精细化工、精密仪器等领域对温度控制精度的要求极高,而温度控制的核心正是温度测量。 目前在国内,应用最广泛的测温方法有热电偶测温、集成式温度传感器、热敏电阻测温、铂热电阻测温四种方法。 (1) 热电偶的温度测量范围较广,结构简单,但是它的电动势小,灵敏度较差,误差较大,实际使用时必须加冷端补偿,使用不方便。 (2) 集成式温度传感器是新一代的温度传感器,具有体积小、重量轻、线性度好、性能稳定等优点,适于远距离测量和传输。但由于价格相对较为昂贵,在国内测温领域的应用还不是很广泛。 (3) 热敏电阻具有灵敏度高、功耗低、价格低廉等优点,但其阻值与温度变化成非线性关系,在测量精度较高的场合必须进行非线性处理,给计算带来不便,此外元件的稳定性以及互换性较差,从而使它的应用范围较小。 (4)铂热电阻具有输出电势大、线性度好、灵敏度高、抗振性能好等优点。虽然它 的价格相对于热敏电阻要高一些,但它的综合性能指标确是最好的。而且它在0~200°C范

基于51单片机的温度警报器的设计

西安文理学院物理与机械电子工程学院课程设计任务书

目录 摘要 (3) 1 引言 (3) 1.1课题背景 (3) 1.2研究内容和意义 (5) 2 芯片介绍 (5) 2.1 DS18B20概述 (5) 2.1.1 DS18B20封装形式及引脚功能 (6) 2.1.2 DS18B20内部结构 (6) 2.1.3 DS18B20供电方式 (9) 2.1.4 DS18B20的测温原理 (10) 2.1.5 DS18B20的ROM命令 (11) 2.2 AT89C52概述 (13) 2.2.1单片机AT89C52介绍 (13) 2.2.2功能特性概述 (13) 3 系统硬件设计 (13) 3.1 单片机最小系统的设计 (13) 3.2 温度采集电路的设计 (14) 3.3 LED显示报警电路的设计 (15) 4 系统软件设计...................................................15 4.1 流程图........................................................15 4.2 温度报警器程序.................................................16 4.3 总电路图..................................................... 19 5总结 (20)

摘要 随着时代的进步和发展,温度的测试已经影响到我们的生活、工作、科研、各个领域,已经成为了一种非常重要的事情,因此设计一个温度测试的系统势在必行。 本文主要介绍了一个基于AT89C52单片机的数字温度报警器系统。详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现温度的采集和报警,并可以根据需要任意上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当做温度处理模块潜入其他系统中,作为其他主系统的辅助扩展。DS18B20与AT89C52结合实现最简温度报警系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。 关键词:单片机;温度检测;AT89C52;DS18B20; 1 引言 1.1课题背景 温度是工业对象中主要的被控参数之一,如冶金、机械、食品、化工各类工业生产中,广泛使用的各种加热炉、热处理炉、反应炉等,对工件的温度处理要求严格控制。随着科学技术的发展,要求温度测量的范围向深度和广度发展,以满足工业生产和科学技术的要求。 基于AT89C51单片机提高了系统的可移植性、扩展性,利于现代测控、自动化、电气技术等专业实训要求。以单片机为核心设计的温度报警器,具有安全可靠、操作简单方便、智能控制等优点。 温度对于工业生产如此重要,由此推进了温度传感器的发展。温度传感器主要经过了三个发展阶段[1]: (1)模拟集成温度传感器。该传感器是采用硅半导体集成工艺制成,因此亦称硅传感器或单片集成温度传感器。此种传感器具有功能单一(仅测量温度)、

单片机实验报告

院系:计算机科学学院专业:智能科学与技术年级: 2012 学号:2012213865 姓名:冉靖 指导教师:王文涛 2014年 6月1日

一. 以下是端口的各个寄存器的使用方式: 1.方向寄存器:PxDIR:Bit=1,输出模式;Bit=0,输入模式。 2.输入寄存器:PxIN,Bit=1,输入高电平;Bit=0,输入低电平。 3.输出寄存器:PxOUT,Bit=1,输出高电平;Bit=0,输出低电平。 4.上下拉电阻使能寄存器:PxREN,Bit=1,使能;Bit=0,禁用。 5.功能选择寄存器:PxSEL,Bit=0,选择为I/O端口;Bit=1,选择为外设功能。6.驱动强度寄存器:PxDS,Bit=0,低驱动强度;Bit=1,高驱动强度。 7.中断使能寄存器:PxIE,Bit=1,允许中断;Bit=0,禁止中断。 8.中断触发沿寄存器:PxIES,Bit=1,下降沿置位,Bit=0:上升沿置位。 9.中断标志寄存器:PxIFG,Bit=0:没有中断请求;Bit=1:有中断请求。 二.实验相关电路图: 1 MSP430F6638 P4 口功能框图: 主板上右下角S1~S5按键与MSP430F6638 P4.0~P4.4口连接: 2按键模块原理图: 我们需要设置两个相关的寄存器:P4OUT和P4DIR。其中P4DIR为方向寄存器,P4OUT 为数据输出寄存器。 主板上右下角LED1~LED5指示灯与MSP430F6638 P4.5~P4.7、P5.7、P8.0连接:

3 LED指示灯模块原理图: P4IN和P4OUT分别是输入数据和输出数据寄存器,PDIR为方向寄存器,P4REN 为使能寄存器: #define P4IN (PBIN_H) /* Port 4 Input */ #define P4OUT (PBOUT_H) /* Port 4 Output */ #define P4DIR(PBDIR_H) /* Port 4 Direction */ #define P4REN (PBREN_H) /* Port 4 Resistor Enable */ 三实验分析 1 编程思路: 关闭看门狗定时器后,对P4.0 的输出方式、输出模式和使能方式初始化,然后进行查询判断,最后对P4.0 的电平高低分别作处理来控制LED 灯。 程序流程图: 2 关键代码分析: #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 P4DIR |= BIT5; // 设置4.5口为输出模式 P4OUT |= BIT0; // 选中P4.0为输出方式 P4REN |= BIT0; // P4.0使能 while (1) // Test P1.4 { if (P4IN & BIT0) //如果P4.0为1则执行,这是查询方式按下去后是低,否则为高

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

电路实物图如下图所示: C 语言程序如下所示: /******************************************************************** zicreate ----------------------------- Copyright (C) https://www.doczj.com/doc/5d9491328.html, -------------------------- * 程序名; 基于DS18B20的测温系统 * 功 能: 实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来 * 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限 * 调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s 左右自动 * 退出;按一下K3进入查看下限温度模式,显示1s 左右自动退出;按一下K4消除 * 按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能, * K1是实现减1功能,K3是用来设定上下限温度正负的。 * 编程者:Jason * 编程时间:2009/10/2 *********************************************************************/ #include //将AT89X52.h 头文件包含到主程序 #include //将intrins.h 头文件包含到主程序(调用其中的_nop_()空操作函数延时) #define uint unsigned int //变量类型宏定义,用uint 表示无符号整形(16位) #define uchar unsigned char //变量类型宏定义,用uchar 表示无符号字符型(8位) uchar max=0x00,min=0x00; //max 是上限报警温度,min 是下限报警温度 bit s=0; //s 是调整上下限温度时温度闪烁的标志位,s=0不显示200ms ,s=1显示1s 左右 bit s1=0; //s1标志位用于上下限查看时的显示 void display1(uint z); //声明display1()函数 #include"ds18b20.h" //将ds18b20.h 头文件包含到主程序 #include"keyscan.h" //将keyscan.h 头文件包含到主程序 #include"display.h" //将display.h 头文件包含到主程序

单片机温度传感器设计报告

泰州职业技术学院 电子与信息工程系 课程名称: 51单片机开发 课题名称:用1602LCD与DS18B20设 计的温度报警器 班级: 10信息 课题小组成员:林淑云朱翠竹 刘苏慧 指导老师:蔡菁

摘要 现代社会是信息社会,随着现代农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度,所以对于温度的测量控制具有十分重要的意义。 随着全球温度的普遍升高,高温火灾更是无处不在:电气线路短路、过载、接触电阻过大等引发高温火灾;静电产生高温火灾;雷电等强电入侵导致高温火灾;最主要是机房内电脑、空调等用电设备长时间工作,导致设备老化,空调发生故障,而不能降温。因此,机房内所属的电子产品发热快,在短时间内机房温度升高超出设备正常温度,导致系统瘫痪或产生火灾,这时温度报警系统就会发挥应有的功能。 本课题介绍的就是利用温度传感DS18B20制作的温度报警器,自动测量当前环境温度。由单片机AT89C52控制,并通过1602LCD显示,若当前环境温度超过此温度,系统发出报警。

目录 一、系统总体设计要求 二、系统硬件设计 三、系统程序设计 四、调试与性能分析 五、源程序清单 六、心得体会

一、系统总体设计要求 1. 本设计采用集成温度传感器的的s18b20,设计一个数字显示的温度报警器。定安全温度值范围为20°C~30°C(可根据具体需要在程序中进行调整),对在这一范围内的温度变化采集后送入A/D转换器,A/D转换器的模拟电压范围为0~5V。例如传感器采集的温度为25°C,则对应液晶显示器的显示值为25°C。而温度高出30°C或者低于20°C时,不在安全温度范围之内,喇叭会进行报警、二极管发光显示 2 总体设计框图 本设计采用AT89C52作为主控芯片,蜂鸣器作为输出设备产生报警声,LCD1602能够实时的显示当前的的温度。其中P3.3和P3.2外接按键,P0口用作LCD输出数据端口,P2.3接蜂鸣器端口。详细原理图见附件 设计框图如图一所示。

南理工 王宏波 MSP430F6638单片机实验报告

MSP430单片机应用技术 实验报告 学号:XXXXXXXX

实验1 一、实验题目:UCS实验 二、实验目的 设置DCO FLL reference =ACLK=LFXT1 = 32768Hz, MCLK = SMCLK = 8MHz,输出ACLK、SMCLK,用示波器观察并拍照。 UCS,MCLK、 SMCLK 8MHz 的 1 2 六、实验结果 实验2 一、实验题目:FLL+应用实验 二、实验目的

检测P1.4 输入,遇上升沿进端口中断,在中断服务程序内翻转P4.1 状态。 三、实验仪器和设备 计算机、开发板、示波器、信号源、电源、Code Comeposer Studio v5 四、实验步骤 1、用电缆连接开发板USB2口和电脑USB口,打开电源开关SW1,电源指示灯D5点亮; 2、运行CCSV5; WDT 1、用电缆连接开发板USB2口和电脑USB口,打开电源开关SW1,电源指示灯D5点亮; 2、运行CCSV5; 3、新建工作空间workspace; 4、新建工程project与源文件main.C; 5、编写程序; 6、编译、调试、下载程序到单片机;

7、观察、分析、保存运行结果。 五、实验程序 实验4 一、实验题目:WDT_A实验 二、实验目的 定时模式 1 2 六、实验结果 实验5一、实验题目:Timer_A实验

二、实验目的 比较模式-Timer_A0,两路PWM 输出,增减计数模式,时钟源SMCLK,输出模式7 TACLK = SMCLK = default DCOCLKDIV。PWM周期CCR0 = 512-1,P1.6 输出PWM占空比CCR1 = 37.5%,P1.7输出PWM占空比CCR1 =12.5%。 要求: (1)用示波器观察两路PWM 输出的波形并拍照,测量周期、正脉宽等参数,与理论值进行对比分析。 (2 (3 1 2 实验6 一、实验题目:ADC12实验 二、实验目的 ADC12 单次采样A0 端口,根据转换结果控制LED 状态。

基于51单片机DS18B20温度传感器的C语言程序和电路

基于51单片机DS18B20温度传感器的C语言程序和电路 DS18B20在外形上和三极管很像,有三只脚。电压范围为3.0 V至5.5 V 无需备用电源测量温度位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置应用范围包敏感系统。 下面是DS18B20的子程序,本人用过完全可行的: #include #include #define uchar unsigned char #define uint unsigned int sbit DQ=P2^0; void reset(); //DS18B20 void write_byte(uchar val); //DS18B20写命令函数 uchar read_byte(void); //DS18B20读1字节函数 void read_temp(); //温度读取函数 void work_temp(); //温度数据处理函数 uchar data temp_data[2]={0x00,0x00}; uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //对于温度显示值值 uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x0数部分查表 main() { while(1) { 自己添加; } } void delay1(uint t) { for(;t>0;t--); } ///////温度控制子函数 void reset() { uchar presence=1; while(presence) { while(presence) {

基于单片机数字控温器实验报告

重庆交通大学 课外实践报告 题目:基于单片机数字控温器 姓名:罗杰 专业:电子信息工程 班级:2011 级4 班 学号:631106020405 指导老师:王淑良

目录 设计目的-------------------------------------------------------------------------- 1 设计要求----------------------------------------------------------- ---------------1 设计方案--------------------------------------------- 1 系统工作原理-------------------------------------------------------------------- 2 各部分电路的设计和芯片的结构功能作用-------------------------------- 2 单片机程序(C语言程序)------------------------------------------------------ 11 设计总结------------------------------------------- 20 一、设计目的

1、系统地运用已学的理论知识解决实际问题的能力和查阅资料的能力。培养一定 的自学能力和独立分析问题、解决问题的能力,和团队协作能力,能通过独立思考、查阅工具书、参考文献,寻找解决方案。 2、能设计、安装和调试数显温度测试控制系统,并能利用模拟和数字电路和单片 机的知识分析和解决设计、安装和调试中遇到的实际问题。 3、能熟练的设计并良好的印制PCB电路板。 4、对温度的控制要求尽量的高效,精确。 二、设计要求 1、 (1)温度控制范围为30度~100度之间; (2)可键盘设置控制温度值,并显示; (3)数字显示水的实际温度; (4)设置温度控制值和检测值之间的误差在±1度; 2、发挥部分 (1)设计温度报警电路; (2)升温或降温在5—10分钟之内完成; 三、设计方案 方案:用控制器MCS-51系列单片机和数字传感器DS18B20来进行控制,并用七段数码显示管来显示温度,在程序中来设置温度的上下限,当温度超出上下限时,由单片机发出控制信号,外界控制电路接收信号并作相应的响应来调节温度。此为全控制型,最为简便。 四、系统工作原理 1、系统的总体结构图如下:

430单片机点亮LED实验报告

430单片机点亮LED实验报告 一.安装实验软件IAR 二.编写点亮LED灯程序 1.使P1.0口LED灯会不停的闪烁着,程序 #include typedef unsigned int uint; typedef unsigned char uchar; /*延时函数*/ void Delay_Ms(uint x) { uint i; while(x--)for(i=0;i<250;i++); } /*主函数*/ int main( void ) { WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timer to prevent time out reset P2DIR|=BIT0;//定义P1口为输出 while(1)//死循环 { P2OUT^=BIT0;//P1.0口输出取反

Delay_Ms(600);//稍作延时 } } 下载进去看到了P1.0口LED灯会不停的闪烁着。 2.实验目的让两盏灯交换闪烁程序 #include"msp430g2553.h" void main(void) { void Blink_LED(); WDTCTL=WDTPW+WDTHOLD; //关闭看门狗 P1DIR=BIT6; P2DIR=BIT0; while(1) { Blink_LED(); } } void Blink_LED() { _delay_cycles(1000000); //控制第二个LED P1OUT^=BIT6; _delay_cycles(1000000); //控制第一个LED P2OUT^=BIT0;

AT89C51单片机温度控制系统

毕业设计(论文) 论文题目:AT89C51单片机温度控制系统 所属系部:电子工程系 指导老师:职称: 学生姓名:班级、学号: 专业:应用电子技术 2012 年05 月15 日

毕业设计(论文)任务书 题目:AT89C51单片机温度控制系统 任务与要求:设计并制作一个能够控制1KW电炉的温度控制系统,控制温度恒定在37--38度之间。 时间:年月日至年月日 所属系部:电子工程系 学生姓名:学号: 专业:应用电子技术 指导单位或教研室:测控技术教研室 指导教师:职称: 年月日

摘要 本设计是以一个1KW电炉为控制对象,以AT89C51为控制系统核心,通过单片机系统设计实现对保电炉温度的显示和控制功能。本温度控制系统是一个闭环反馈调节系统,由温度传感器DS18B20对保炉内温度进行检测,经过调理电路得到合适的电压信号。经A/D转换芯片得到相应的温度值,将所得的温度值与设定温度值相比较得到偏差。通过对偏差信号的处理获得控制信号,去调节加热器的通断,从而实现对保温箱温度的显示和控制。本文主要介绍了电炉温度控制系统的工作原理和设计方法,论文主要由三部分构成。①系统整体方案设计。②硬件设计,主要包括温度检测电路、A/D转换电路、显示电路、键盘设计和控制电路。③系统软件设计,软件的设计采用模块化设计,主要包括A/D转换模块、显示模块等。 关键词:单片机传感器温度控制

目录 绪论 (1) 第一章温度控制系统设计和思路 (2) 1.1温度控制系统设计思路 (2) 1.2 系统框图 (2) 第二章 AT89C51单片机 (3) 2.1 AT89C51单片机的简介 (3) 2.2 AT89C51单片机的主要特性 (3) 2.3 AT89C51单片机管脚说明 (4) 第三章温度控制的硬件设备 (6) 3.1温度传感器简介 (6) 3.2 DS18B20工作原理 (7) 3.3 DS18B20使用中注意事项 (8) 第四章系统硬件设计 (9) 4.1温度采集电路 (9) 4.2 数码管温度显示电路 (9) 4.2.1 数码管的分类 (9) 4.2.2 数码管的驱动方式 (10) 4.2.3 恒流驱动与非恒流驱动对数码管的影响 (11) 4.3 单片机接口电路 (12) 4.3.1 P0口的上拉电阻原理 (12) 4.3.2 上拉电阻的选择 (14) 4.4 单片机电源及下载线电路 (14) 4.5 温度控制电路 (15) 第五章温度控制的软件设计 (17) 5.1 数码管动态显示 (17) 5.2 DS18B20初始化 (17) 5.3 系统流程图 (19) 谢辞 (20) 参考文献 (21) 附录 (22)

温度传感器实验设计概要

成都理工大学工程 技术学院 单片机课程设计报告 数字温度计设计

摘要 在这个信息化高速发展的时代,单片机作为一种最经典的微控制器,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,作为自动化专业的学生,我们学习了单片机,就应该把它熟练应用到生活之中来。本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。本文设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。 关键词:单片机,数字控制,数码管显示,温度计,DS18B20,AT89S52。

目录 1概述 (4) 1.1设计目的 (4) 1.2设计原理 (4) 1.3设计难点 (4) 2 系统总体方案及硬件设计...................................................... 错误!未定义书签。 2.1数字温度计设计方案论证 (4) 2.2.1 主控制器 (5) 2.4 系统整体硬件电路设计 (7) 3系统软件设计 (8) 3.1初始化程序 (8) 3.2读出温度子程序 (9) 3.3读、写时序子程序 (10) 3.4 温度处理子程序 (11) 3.5 显示程序 (12) 4 Proteus软件仿真 (13) 5硬件实物 (14) 6课程设计体会 (15) 附录1: (14) 附录2: (21)

1概述 1.1设计目的 随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。 本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,可广泛用于食品库、冷库、粮库、温室大棚等需要控制温度的地方。目前,该产品已在温控系统中得到广泛的应用。 1.2设计原理 本系统是一个基于单片机AT89S52的数字温度计的设计,用来测量环境温度,测量范围为-50℃—110℃度。整个设计系统分为4部分:单片机控制、温度传感器、数码显示以及键盘控制电路。整个设计是以AT89S52为核心,通过数字温度传感器DS18B20来实现环境温度的采集和A/D转换,同时因其输出为数字形式,且为串行输出,这就方便了单片机进行数据处理,但同时也对编程提出了更高的要求。单片机把采集到的温度进行相应的转换后,使之能够方便地在数码管上输出。LED采用三位一体共阳的数码管。 1.3设计难点此设计的重点在于编程,程序要实现温度的采集、转换、显示和上下限温度报警,其外围电路所用器件较少,相对简单,实现容易。 2 系统总体方案及硬件设计 2.1数字温度计设计方案论证 由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D 转换电路,感温电路比较麻烦。进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。 2.2总体设计框图 温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用3位共阴LED数码管以串口传送数据实现温度显示。

MSP430单片机实验报告

MSP430单片机实验报告 专业: 姓名: 学号:

MSP430单片机实验报告 设计目标:使8位数码管显示“5201314.”,深入了解串行数据接口。 实现过程:主要分为主函数、驱动8位数码管函数、驱动1位数码管函数及延时函数。 延时函数:采用for循环。 驱动1位数码管子函数:设置74HC164的时钟传输和数传输,声明变量,使数据表中每一个要表示的字符的每一位都与shift做与运算从而进行传输,上升沿将传输数据传送出去。驱动1位数码管子函数的流程图如图1所示。 图1 驱动1位数码管子函数流程图 驱动8位数码管子函数:调用8次驱动1位数码管子函数。驱动8位数码管子函数流程图如图2所示。 图2 驱动8位数码管流程图

while 图3 主函数流程图 实验结果:供电后,数码管显示“5201314.”字样。 源程序: /************* 程序名称:5201314.*************/ /***程序功能:通过模拟同步串口控制8个共阳数码管***/ /*******P5.1 数据管脚,P5.3 同步时钟管脚*******/ #include // 头文件 void delay(void); // 声明延迟函数void seg7_1 (unsigned char seg7_data); // 声明驱动1 位数码管函数void seg7_8 ( unsigned char seg7_data7, unsigned char seg7_data6, unsigned char seg7_data5, unsigned char seg7_data4, unsigned char seg7_data3, unsigned char seg7_data2,

单片机实训实验报告

单片机实训实验报告 课题:单片机实训 院系:电子信息工程学院 班级 学号: 姓名: 指导老师:熊老师、罗老师 日期:2011.6.10

一、硬件系统 1、自制单片机实验板由七部分组成: (1).8路跑马灯 (2)动态扫描共阳型数码管 (3)4X4矩阵键盘 (4)蜂鸣器 (5)4路独立键盘 (6)温度传感器 (7)I2C通信方式的EEPROM芯片24C02 二、Keil C u Vision2 简述与使用 1.打开 u Vision2 2.新建工程:菜单【project】→【New Project】选择工程存放的路径,并输入工程文件名,然后点“保存” 3.进入器件选择界面树列表框内选择“Atmel”→“AT89C52”,然后点“确定”完成器件选择。 4.编辑源程序: 新建文件:菜单【File】→【new…】。然后输入代码,编辑完成后菜单【File】→【Save】或【Save As…】把代码文件存入硬盘。C源文件存为.C后缀,汇编源文件存为.a或.src后缀,并存放在同一个工程文件夹下。 5.加入源文件到工程中: 在左边浮动窗口【File】选项卡里展开“Target 1”树,在“Source Group 1”上右键单击,弹出菜单,选【Add File to Group“Source Group 1”】,选择需要加入的源文件,点“Add”按钮加入,加入完成后按“Close”关闭。 6.设置编译选项:先选中左边浮动窗口【File】选项卡里“Target1“树节点,然后选菜单【Project】→【Options for Target “Target 1”】。 7.在弹出的“Options for Target “Target 1””对话框中选择[output]选项卡,勾选“Create HEX File”然后按“确定”完成设置。 8.按“F7”开始编译,编译成功后会在工程文件夹内生成.Hex目标文件生成的.hex文件就可以用来对AT89S52芯片进行编程和运行了。 三.STC-ISP V29 Beta5 下载软件的使用 1.连接好电源线与串口线(附件中的九孔对九孔线分别连接电脑和点偏激开发板)。 2.检查电源板上电源指示灯是否亮起,如果亮起则检查USB电源线,如果已亮则关掉电源看后面的步骤。 3.启动软件。 4.选择好STC单片机的型号(STC89CF52RC). 5.选择好你使用的计算机串口号. 6.点击OPEN FILE选择你用KEIL编译好的HEX文件.

基于单片机的数字温度计设计课程设计

摘要 温度的检测与控制是工业生产过程中比较典型的应用。本设计以AT89C52单片机为核心,采用DS18B20温度传感器检测温度,由温度采集、温度显示,温度报警等功能模块组成。基于题目基本要求,本系统对温度采集和温度显示系统行了重点设计。本系统大部分功能能由软件实现,吸收了硬件软件化的思想。实际操作时,各功能在开发板上也能完美实现。本系统实现了要求的基本功能,其余发挥部分也能实现。 关键字:AT89C52单片机、DS18B20温度传感器、数码管显示、温度采集

目录 一.绪论 .............................................................................................................

二.设计目的..................................................................................................... 三.设计要求..................................................................................................... 四.设计思路..................................................................................................... 五.系统的硬件构成及功能................................................................. 5.1主控制器............................................................................................... 5.2显示电路............................................................................................... 5.3温度传感器.......................................................................................... 六.系统整体硬件电路................................................................................. 七.系统程序设计 .......................................................................................... 八.测量及其结果分析 ................................................................................... 九.设计心得体会............................................................................................ 十.参考文献..................................................................................................... 附录1 源程序 附录2 元件清单及PCB图 一.绪论

温度传感器报告

温度传感器是指能感受温度并能转换成可用输出信号的传感器。温度是和人类生活环境有着密切关系的一个物理量,是工业过程三大参量(流量、压力、温度)之一,也是国际单位制(SI)中七个基本物理量之一。温度测量是一个经典而又古老的话题,很久以来,这方面己有多种测温元件和传感器得到普及,但是直到今天,为了适应各工业部门、科学研究、医疗、家用电器等方面的广泛要求,仍在不断研发新型测温元件和传感器、新的测温方法、新的测温材料、新的市场应用。要准确地测量温度也非易事,如测温元件选择不当、测量方法不宜,均不能得到满意结果。 据有关部门统计,2009年我国传感器的销售额为327亿元人民币,其中温度传感器占整个传感器市场的14%,主要应用于通信电子产品、家用电器、楼宇自动化、医疗设备、仪器仪表、汽车电子等领域。 温度传感器的特点 作为一个理想的温度传感器,应该具备以下要求:测量围广、精度高、可靠性好、时漂小、重量轻、响应快、价格低、能批量生产等。但同时满足上述条件的温度传感器是不存在的,应根据应用现场灵活使用各种温度传感器。这是因为不同的温度传感器具有不同的特点。 ● 不同的温度传感器测量围和特点是不同的。 几种重要类型的温度传感器的温度测量围和特点,如表1所示。 ● 测温的准确度与测量方法有关。 根据温度传感器的使用方法,通常分为接触测量和非接触测量两类,两种测量方法的特点如 ● 不同的测温元件应采用不同的测量电路。 通常采用的测量电路有三种。“电阻式测温元件测量电路”,该测量电路要考虑消除非线性误差和热电阻导线对测量准确度的影响。“电势型测温元件测量电路”,该电路需考虑线性化和冷端补偿,信号处理电路较热电阻的复杂。“电流型测温元件测量电路”,半导体集成温度传感器是最典型的电流型温度测量元件,当电源电压变化、外接导线变化时,该电路输出电流基本不受影响,非常适合远距离测温。 温度测量的最新进展 ● 研制适应各种工业应用的测温元件和温度传感器。 铂薄膜温度传感器膜厚1μm,可置于极小的测量空间,作温度场分布测量,响应时间不超过1ms,偶丝最小直径25μm,热偶体积小于1×10-4mm3,质量小于1μg。 多色比色温度传感器能实时求出被测物体发射率的近似值,提高辐射测温的精

相关主题
文本预览
相关文档 最新文档