单片机课程设计方案简易数字温度报警系统.docx

上传人:b****4 文档编号:5614363 上传时间:2023-05-08 格式:DOCX 页数:34 大小:206.07KB
下载 相关 举报
单片机课程设计方案简易数字温度报警系统.docx_第1页
第1页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第2页
第2页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第3页
第3页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第4页
第4页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第5页
第5页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第6页
第6页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第7页
第7页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第8页
第8页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第9页
第9页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第10页
第10页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第11页
第11页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第12页
第12页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第13页
第13页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第14页
第14页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第15页
第15页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第16页
第16页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第17页
第17页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第18页
第18页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第19页
第19页 / 共34页
单片机课程设计方案简易数字温度报警系统.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计方案简易数字温度报警系统.docx

《单片机课程设计方案简易数字温度报警系统.docx》由会员分享,可在线阅读,更多相关《单片机课程设计方案简易数字温度报警系统.docx(34页珍藏版)》请在冰点文库上搜索。

单片机课程设计方案简易数字温度报警系统.docx

单片机课程设计方案简易数字温度报警系统

 

单片机课程设计

——简易数字温度报警系统

 

姓名:

班级:

学号:

指导老师:

完成时间:

 

单片机课程设计任务书

班级:

姓名:

指导老师:

设计题目:

简易数字温度报警系统

做一个基于单片机的简易数字温度报警系统。

1.测量温度范围:

-55°C—125°C。

2.数字显示位数为4位,显示精度为±0.1°C。

3.响应时间<5s。

4.上限下限值设置。

5.声光报警。

1.调研、查找并收集资料。

2.总体设计,画出框图。

3.单元电路设计:

4.绘制电器原理图。

5.列写元器件明细表。

6.撰写设计说明书<字数约2500字左右)。

7.参考资料目录

康华光主编电子技术基础高等教育出版社

阎石主编数字电子技术基础高等教育出版社

陈坤等编著电子设计技术电子科技大学出版社

王炳勋主编电工实习教程机械工业出版社

教研室主任签字:

年月日

 

目录

1.引言...........................................................................................................3

2.总体设计方案....................................................3

2.1数字温度计设计方案论证............................................3

2.2方案二的总体设计框图..............................................3

2.3各个电路模块电路图................................................8

2.4系统整体硬件电路..................................................11

2.5数字温度计简要使用说明………………………………………………………13

3系统软件算法分析.................................................14

3.1主程序.............................................................14

4总结与体会.........................................................15

5附录.................................................................15

附录1程序代码……………………………………………………………………………15

简易数字温度报警系统

摘要:

随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度。

关键词:

单片机,数字控制,温度计,DS18B20,ATMEGA16

1引言

在日常生活及工农业生产中经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。

而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调式复杂,制作成本高。

随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。

本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用ATMEL公司生产的ATMEGA16L单片机芯片1,测温传感器使用DS18B20,用4位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。

2总体设计方案

2.1数字温度计设计方案论证

2.1.1方案一

由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。

2.1.2方案二

进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

与方案一相比,方案二:

①电路简单:

DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,而热敏电阻103不能,必须要有辅助电路的处理,才能达到目的,

②测温精度高:

对温度的测量精确值达0.5度.比热敏电阻103要精确.

③稳定性好:

由于方案二电路结构简单,与方案一相比,少了很多附带电路,所以系统的稳定性就要高些.

1.能用数码管显示环境温度

2.设定一固定温度,当环境温度达到固定温度时,启动报警。

综上所述,我们选择方案二。

2.2方案二的总体设计框图

温度计电路设计总体设计方框图如图一所示,控制器采用ATMEGA16L单片机,温度传感器采用DS18B20,用4位LED数码管以串口传送数据实现温度显示。

图一总体设计方框图

2.2.1主控制器

Atmega16性能指标

1)高性能、低功耗的8位AVR®微处理器

2)先进的RISC结构

–131条指令–大多数指令执行时间为单个时钟周期

–32个8位通用工作寄存器

–全静态工作

–工作于16MHz时性能高达16MIPS

–只需两个时钟周期的硬件乘法器

3)非易失性程序和数据存储器

–16K字节的系统内可编程Flash

擦写寿命:

10,000次

–具有独立锁定位的可选Boot代码区

通过片上Boot程序实现系统内编程

真正的同时读写操作

–512字节的EEPROM

擦写寿命:

100,000次

–1K字节的片内SRAM

–可以对锁定位进行编程以实现用户程序的加密

4)JTAG接口(与IEEE1149.1标准兼容>

–符合JTAG标准的边界扫描功能

–支持扩展的片内调试功能

–通过JTAG接口实现对Flash、EEPROM、熔丝位和锁定位的编程

5)外设特点

–两个具有独立预分频器和比较器功能的8位定时器/计数器

–一个具有预分频器、比较功能和捕捉功能的16位定时器/计数器

–具有独立振荡器的实时计数器RTC

–四通道PWM

–8路10位ADC

8个单端通道

TQFP封装的7个差分通道

2个具有可编程增益<1x,10x,或200x)的差分通道

–面向字节的两线接口

–两个可编程的串行USART

–可工作于主机/从机模式的SPI串行接口

–具有独立片内振荡器的可编程看门狗定时器

–片内模拟比较器

6)特殊的处理器特点

–上电复位以及可编程的掉电检测

–片内经过标定的RC振荡器

–片内/片外中断源

–6种睡眠模式:

空闲模式、ADC噪声抑制模式、省电模式、掉电模式、Standby模式以及

扩展的Standby模式

7)I/O和封装

–32个可编程的I/O口

–40引脚PDIP封装,44引脚TQFP封装,与44引脚MLF封装

8)工作电压:

–ATmega16L:

2.7-5.5V

–ATmega16:

4.5-5.5V

9)速度等级

–0-8MHzATmega16L

–0-16MHzATmega16

10)ATmega16L在1MHz,3V,25°C时的功耗

–正常模式:

1.1mA

–空闲模式:

0.35mA

–掉电模式:

<1µA

Atmega16引脚配置

图二Atmega16引脚配置

 

2.2.2数码管

显示电路采用4位共阳LED数码管。

 

2.2.3温度传感器

图三18B20引脚图图四应用电路

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

DS18B20的性能特点如下:

●独特的单线接口仅需要一个端口引脚进行通信;

●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;

●无须外部器件;

●可通过数据线供电,电压范围为3.0~5.5V;

●零待机功耗;

●温度以9或12位数字;

●用户可定义报警设置;

●报警搜索命令识别并标志超过程序限定温度<温度报警条件)的器件;

表一

DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。

器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。

计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累

表2 一部分温度对应值表

温度/℃

二进制表示

十六进制表示

+125

0000011111010000

07D0H

+85

0000010101010000

0550H

+25.0625

0000000110010000

0191H

+10.125

0000000010100001

00A2H

+0.5

0000000000000010

0008H

0

0000000000001000

0000H

-0.5

1111111111110000

FFF8H

-10.125

1111111101011110

FF5EH

-25.0625

1111111001101111

FE6FH

-55

1111110010010000

FC90H

2.3各个电路模块电路图

2.3.1DS18B20与单片机的接口电路

图五DS18B20与单片机的接口电路<注:

DQ接口是单片机的PA0)

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。

另一种是寄生电源供电方式,如图4所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。

采用寄生电源供电方式时VDD端接地。

由于单线制只有一根线,因此发送接口必须是三态的。

2.3.2声光报警电路

图六蜂鸣器驱动电路图七发光二极管驱动电路

蜂鸣器是由三极管驱动的,由于单片机的驱动负载能力比较差,R9是限流电阻,蜂鸣器和单片机的PC6连接,4个发光二极管分别接单片机的PA1—PA5D1是设置上限值时指示灯,D2是每按一次按键的加0.1,D3加1,D4加10,D5是设置下限值时指示灯。

当超出设定值D1和D2会同时报警。

2.3.3LED显示电路

图八数码管显示电路

此数码管驱动是由8550PNP三极管来驱动的,用到四路共阳数码管,其位选端分别接PC4—PC7

段选端分别接单片机的PB0—PB7,数码管显示是由单片机不停的对其动态扫描来实现的,注意数码管的电流不要过大。

2.3.4单片机系统电源设计

图九电源电路

根据单片机ATmega16及其接口电路电源的要求,需要5V的稳定电源。

P1脚只要接大于6V的直流电压就可以,再用三端稳压器、7805稳压并用小容量电容虑除高频纹波后得到系统所需电源。

2.3.5按键电路设计

图十按键电路

此键盘电路一端与地相连,另一端和单片机相连,单片机不停的检测各个键盘是否被拉低即被按下。

S1—S4接单片机的PD4—PD7.最好在每个按键和单片机连接的端口加上拉电阻,增强稳定性。

2.3.6单片机ATmega16最小系统电路

图十一单片机ATmega16最小系统电路

单片机是用到Atmega16,晶振是8MHZ电源5V,有按键复位

2.4系统整体硬件电路

2.4.1主板电路

系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等,如图1所示。

图十二中有4个独立式按键可以分别调整温度计的上下限报警设置,,发出声光报警,同时LED数码管将没有被测温度值显示,这时可以调整报警上下限,从而测出被测的温度值。

图十二中的按健复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。

表三元件清单

图十二系统整体原理图

2.5数字温度计简要使用说明

首先接通电源,就会看到数码管显示此时的温度,若要设定上限下限值,按S1键进行设置,每按一次S2键数值就会增加,增加的幅度要看D2D3D4发光管哪一个亮D2代表0.1;D3代表1;

D4代表10;幅度切换键是S4,同理S3是减少键。

设置完成后按S1键就可以运行了。

3系统软件算法分析

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。

3.1主程序

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。

这样可以在一秒之内测量一次被测温度,其程序流程见图十四所示

 

图十四主程序流程图图8读温度流程图

4总结与体会

通过这次课程设计,我更加深入的了解了单片机。

虽然自己设计的电路是正确的但做出来的板子就不一定很顺利,本来我用单片机的PA6口来控制蜂鸣器的,当给低电平时三极管就会饱和导通进而驱动蜂鸣器,但是当我把它拉高是时还是会有轻微的声音,我仔细查了芯片手册才知道PA口的驱动能力差于是我换了PC6就好了 ,呵呵 真的在实践中能学到好多东西的。

经过这两周的课程设计明白不能眼高手低。

5.附录1

程序代码

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

*主控芯片:

ATmega16

*晶振8MHZ

*DS18B20数据端口DQ接单片机PC6

*数码管的位接单片机PC4~7

*数码管的段接单片机PB0~7;

*蜂鸣器接单片机的PC3;

*按键S1~S4接单片机PD4~7;

*s1上限下限设置

*S2数值递减

*S3数值递增

*S4数值切换

编写人:

张庆钢

时间:

200812.30

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

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineDS18b20PORPORTA

#defineDS18b20PINPINA

#defineDS18b20DDRDDRA

#defineDQ0

ucharshu[10]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}。

//0~9

doubletemp,T_min=0,q=0,T_max=200,num=25,xiao=0,m=0。

ucharflag=0,i,l=0,n=0。

///////////////////////////显示延时/////////////////////

voiddalay(uchark>//延时

{

uchari,j。

for(i=0。

i

i++>

for(j=100。

j>0。

j-->。

}

//////////////端口出示化////////////////////////////////

voidport_init(void>//初始化

{

DDRA=0xff。

PORTA=0xff。

DDRB=0xff。

PORTB=0xff。

DDRC=0xff。

PORTC=0xff。

}

///////////////////////显示函数////////////////////////////

voiddisplay(doubletem>//显示函数

{

uintdata_int。

doubledata_put,data_get。

uchari_data,j_data,k_data,l_data。

data_get=tem。

data_put=data_get。

if(data_put<1000>

{data_put*=10。

if(data_put<1000>data_put*=10。

if(data_put<1000>data_put*=10。

}

elsedata_put=data_get。

data_int=data_put。

PORTC|=BIT(7>。

i_data=data_int/1000。

//千位及小数点

PORTC&=~BIT(4>。

PORTB=shu[i_data]。

if(data_get<10>PORTB&=~BIT(7>。

elsePORTB|=BIT(7>。

dalay(20>。

PORTC|=BIT(4>。

j_data=data_int%1000/100。

PORTC&=~BIT(5>。

PORTB=shu[j_data]。

//百位及小数点

if(10<=data_get&&data_get<100>PORTB&=~BIT(7>。

elsePORTB|=BIT(7>。

dalay(20>。

PORTC|=BIT(5>。

k_data=data_int%1000%100/10。

PORTC&=~BIT(6>。

PORTB=shu[k_data]。

//十位及小数点

if(100<=data_get&&data_get<1000>PORTB&=~BIT(7>。

elsePORTB|=BIT(7>。

dalay(20>。

PORTC|=BIT(6>。

l_data=data_int%10。

PORTC&=~BIT(7>。

PORTB=shu[l_data]。

//个位及小数点

if(1000<=data_get&&data_get<10000>PORTB&=~BIT(7>。

elsePORTB|=BIT(7>。

dalay(20>。

if(data_get>9999>

data_get=0。

}

///////////////////////////////////////////////////

voiddelay1(uintms>//精确延时1ms

{

uinti,j。

for(i=0。

i

i++>

{

for(j=0。

j<1141。

j++>。

}

}

/////////////////////判断是否有键按下////////////////////////

ucharkey_press(>//判断是否有键按下

{

ucharj。

DDRD|=0XF0。

PORTD|=0XF0。

DDRD&=0XF0。

j=PIND。

j=j&0XF0。

//11110000

if(j==0XF0>

{

return0。

}

else

{

return1。

}

}

//////////////判断哪个键被按下的函数//////////////////

ucharkey_scan(>//判断哪个键被按下的函数

{

ucharkey。

delay1(1>。

//消抖

if(key_press(>>

{

key=PIND。

key&=0XF0。

switch(key>

{

case0XE0:

key=1。

break。

case0XD0:

key=2。

break。

case0XB0:

key=3。

break。

case0X70:

key=4。

break。

default:

DDRB=0xff。

}

while(key_press(>>。

//等待按键松开

}

else

{

DDRB=0xff。

}

returnkey。

}

/DS18B201us延时函数

voiddelay_(uintms>

{

uinti,j。

for(i=0。

i

i++>

{

for(j=0。

j<7。

j++>。

}

}

///////////////DS18B20初始化函数//////////////////////////

voidInit_DS18B20(void>

{

unsignedcharx=0。

DS18b20DDR|=BIT(DQ>。

//设置为输出

DS18b20POR|=BIT(DQ>。

//置高复位

delay_(8>。

//稍做延时

DS18b20POR&=~BIT(DQ>。

//单片机将DQ拉低

delay_(80>。

//精确延时大于480us

DS18b20POR|=BIT(DQ>。

//拉高总线

delay_(14>。

DS18b20DDR&=~BIT(DQ>。

//设置为输入

x=DS18b20PIN&(BIT(DQ>>。

//稍做延时后如果x=0则初始化成功x=1则初始化失败

delay_(20>。

}

//////////////DS18B20读一个字节/////////////////////////

ReadOneChar(void>

{

unsignedchari=0。

unsignedchardat=0,temp。

for(i=8。

i>0。

i-->

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2