MEGA单片机温度检测标准系统.docx

上传人:b****5 文档编号:28640947 上传时间:2023-07-19 格式:DOCX 页数:18 大小:830.13KB
下载 相关 举报
MEGA单片机温度检测标准系统.docx_第1页
第1页 / 共18页
MEGA单片机温度检测标准系统.docx_第2页
第2页 / 共18页
MEGA单片机温度检测标准系统.docx_第3页
第3页 / 共18页
MEGA单片机温度检测标准系统.docx_第4页
第4页 / 共18页
MEGA单片机温度检测标准系统.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

MEGA单片机温度检测标准系统.docx

《MEGA单片机温度检测标准系统.docx》由会员分享,可在线阅读,更多相关《MEGA单片机温度检测标准系统.docx(18页珍藏版)》请在冰豆网上搜索。

MEGA单片机温度检测标准系统.docx

MEGA单片机温度检测标准系统

单片机课程设计报告

基于MEGA16单片机温度检测系统

张坤张磊黄大明

(作品图)

一,系统设计目的,用途,功能

1,目的。

通过基于MEGA16芯片和DS18B20温度传感器控制温度,熟悉芯片的使用,温度传感器的功能,实验电路板的焊接,数码显示管的使用,汇编语言的设计。

锻炼团队合作能力,动手设计能力以及发现问题并且解决问题的能力。

2,用途。

温度是工业控制中主要的被控参数之一。

随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。

单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。

本文设计了一种基于MEGA16单片机的温度测量和控制装置,能对环境温度进行测量,在温度过高时,蜂鸣器发出蜂鸣声,有利于保障工业控制中的安全性。

并且能根据温度给定值

给出调节量,控制执行机构,实现调节环境温度的目的。

3,功能.DS18b20温度传感器温度的精确度高达0.1度,在许多工业控制中已经足够。

可以

满足从-55摄氏度到+125摄氏度测量范围,在一秒内把温度转化成数字,测得的温度值的存

储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。

从用途上讲,该单片机类似于温度计,但用途又不仅仅集限于温度计,由于蜂鸣器的使用,编写程序后,超过预设温度后,蜂鸣器发出蜂鸣声,为工业控制的安全保驾护航。

,硬件设计思想和电路原理图

 

Vcc

4.7K

单片机端口

18b20

F图为硬件连接框架图

硬件连接框架图

三,详细说明如何使用硬件单元

1,七段数码管型号是LG5641AH共阴极)的使用。

该显示管总共有12个引脚,包括a-g和dp以及四个位选g1-g4。

将a-f分别与

ATmega芯片的PB1-PB6连接,g1-g4分别与PD0-PD3连接。

2,蜂鸣器的连接。

蜂鸣器的两个引脚分别与ATmega芯片的PC2,PC1连接,其中,前者接负极,后者接正极。

3,DS18B20温度传感器的连接。

该传感器3个端口分别与接地口,芯片的PA7,去耦电容

104连接。

4.软件设计流程和设计思想

软件设计思想:

现在生活很多方面都要用到温度这个概念,例如在温室里需要时刻注意温度的变化,另外在

一些科学实验里面,温度是一个很重要的条件,很多情况下要都对温度作很严格的要求,往往

温度的一点不适当会引起相当大的变化,从而影响一些重要结果的得出•因此对于环境温度的

测量显得很重要•基于这一点,萌生了采用单片机对温度进行监视的想法•

端口初始化

DS18B20初始并且进行温

*度采集

七段数码管显示温度

(使用timerO比较中断)

5.软件功能:

1.实现对温度的监视,达到实时显示的目的•

2.实现对不适合温度的警报,方便对温度监控•(报警温度可人工设定)

6.系统测试过程及测试数据:

(1)时间:

08年6月8日13:

10

地点:

十二号楼124宿舍

测试对象:

室内温度

设定警报温度:

31C

时间

13:

20

13:

25

13:

30

13:

35

13:

40

温度

30.3

30.4

30.3

30.3

30.3

 

⑵时间:

08年6月8日22:

20

地点:

十二号楼124宿舍

测试对象:

室内温度

设定警报温度:

31C

时间

22。

20

22:

25

22:

30

22:

35

22:

40

温度

29.7

29.7

29.7

29.8

29.7

7.实验程序代码

#inelude

#ineludeunsignedchards1820_reset(void)。

unsignedintds1820_read_temp(void)。

 

#defineDQ_RPINA&(1<

unsignedcharflag。

/*中断标志缓存*/

/*

延时函数

延时时间:

iX10+16uS。

CPU频率为:

1MHz。

*/

voiddelay_10us(unsignedchari){

if(i==0)

{

return。

}

while(i--)

{

NOP()。

NOP()。

NOP()。

NOP()。

}

}

/*DS18B20复位函数*/

unsignedchards1820_reset(void){

/*中断保护*/

/*关中断*/

/*延时500uS(480-960)*/

/*延时80uS*/

/*延时500uS(保持>480uS)*/

/*恢复中断状态*/

unsignedchari。

flag=SREG。

CLI()。

DQ_OUT。

DQ_CLR。

delay_10us(49)。

DQ_SET。

DQ_IN。

delay_10us(7)。

i=DQ_R。

delay_10us(49)。

if(flag&0x80){

SEI()。

}

if(i)

{return0x00。

}

else

{return0x01。

}

}

/*DS18B20字节读取函数*/unsignedchards1820_read_byte(void){

unsignedchari。

unsignedcharvalue=0。

flag=SREG。

/*中断保护*/

CLI()。

/*关中断*/for(i=8。

i!

=0。

i--){

value>>=1。

DQ_OUT。

DQ_CLR。

NOP()。

/*延时4uS*/

NOP()。

NOP()。

NOP()。

DQ_SET。

DQ_IN。

NOP()。

/*延时10uS*/

NOP()。

NOP()。

NOP()。

NOP()。

NOP()。

NOP()。

NOP()。

NOP()。

NOP()。

if(DQ_R){value|=0x80。

}

delay_10us(5)。

/*延时60uS*/

}

if(flag&0x80)

{/*恢复中断状态*/

SEI()。

}return(value)。

}

/*DS18B20字节写入函数*/

voidds1820_write_byte(unsignedcharvalue){

unsignedchari。

flag=SREG。

/*中断保护*/CLI()。

/*关中断*/

for(i=8。

i!

=0。

i--)

{

DQ_OUT。

DQ_CLR。

NOP()。

/*延时4uS*/

NOP()。

NOP()。

NOP()。

if(value&0x01)

{

DQ_SET。

}

delay_10us(7)。

/*延时80uS*/

DQ_SET。

/*位结束*/

value>>=1。

}

if(flag&0x80)

{/*恢复中断状态*/

SEI()。

}

}

/*启动ds1820转换*/

voidds1820_start(void){

ds1820_reset()。

ds1820_write_byte(0xCC)。

/*勿略地址*/ds1820_write_byte(0x44)。

/*启动转换*/}

/*DS8B20读取温度信息*/

unsignedintds1820_read_temp(void){

unsignedinti。

unsignedcharbuf[9]。

ds1820_reset()。

ds1820_write_byte(0xCC)。

/*勿略地址*/ds1820_write_byte(0xBE)。

/*读取温度*/for(i=0。

i<9。

i++)

{

buf[i]=ds1820_read_byte()。

}

i=buf[1]。

i<<=8。

i|=buf[0]。

returni。

}

flashunsignedcharled_7[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x80}。

flashunsignedcharposition[4]={0x01,0x02,0x04,0x08}。

intled_buf[4]。

unsignedcharpoist=0。

voiddelay_ms(unsignedinti)

{

intj。

for(。

i。

i--)

{

for(j=999。

joj--)。

}

}

#pragmainterrupt_handlertimer0_comp_isr:

iv_TIMER0_COMP

voidtimer0_comp_isr(void)

{

display()o

}

display()

{

PORTD=position[poist]o

PORTB=led_7[led_buf[poist]]o

if(poist==1)PORTB=led_7[led_buf[poist]]|0x80odelay_ms

(2)o

if(++poist>=3)

poist=0o

}

voidfeng(unsignedi)

{

if(i>=31)PORTC=0x83oelsePORTC=0x01o

}

voidmain(void)

{

unsignedinti,jo

DDRA=0x00。

PORTA=0xFF。

DDRC=0xFF。

PORTC=0x01。

DDRB=0xFF。

PORTB=0x00。

DDRD=0xFF。

PORTD=0x80。

SEI()。

TCCR0=0x0B。

TCNT0=0x00。

OCR0=0x8B。

TIMSK=0x02。

delay_ms(200)。

ds1820_reset()。

while

(1)

{ds1820_start()。

delay_ms(15)。

i=ds1820_read_temp()。

i=(i*10)/16。

led_buf[3]=i/1000。

i=i%1000。

led_buf[2]=i/100。

i=i%100。

led_buf[1]=i/10。

led_buf[0]=i%10。

j=led_buf[2]*10+led_buf[1]。

feng(j)。

}

}

八.需的全部资源

温度传感器

/*方向输入*/

/*打开上拉*/

/*方向输出*/

/*电平设置*/

/*复位D18B20*/

/*启动一次转换*/

/*等待转换结束*/

/*读取温度数值*/

/*数值处理*/

/*将显示信息加载到显示缓存区*/

我们所采用的温度传感器是DS18B20这是最常用的温度芯片

 

•\IL

(;M)l)yVl>l>

2

图IDS1820的PR35封装

该传感器为6.5元每个。

下图为蜂鸣器

该蜂鸣器为短叫蜂鸣器,一元每个。

ATmega16芯片

 

该芯片为实验室所赠。

去耦电容104

该电容主要对传感器其稳定作用,0.5元每个。

实验电路板。

 

基本的元件都焊接在该电路板上,五元每个。

电阻,买了4700欧姆,200千欧姆,100欧的电阻若干,总共花费1元。

两个咼亮的LED灯

花费1元,主要作用是发出警报是伴随有声音。

加上去去欧亚电子大厦来往车费,一共花费30元。

选器件的心得体会:

1,买元件前,应该将所买的元件全部记下来,避免买时遗忘。

2,买元件前,得弄清楚各个产品的型号,功能,避免出现盲目购买现象,力争一次将所有的元器件买完。

例如本次购买温度传感器,由于买之前不知道该买的型号,结果去了电子大厦以后,买时不知道买哪种好,花费了大量的时间精力,实在不值。

3,力争用最少的钱做最好的工程。

由于在生活生产中需要对仪器成本进行控制,所以控制成本成了产品能否广泛应用的关键,我们感觉做这个工程成本有些偏高,另外在功能上还有些单一,这是以后做工程必须注意的地方。

八•的分工和工作情况

1体会。

经过一个学期的学习和实践,我们终于做出了这个工程。

由于刚接触单片机,所

以从选择硬件到硬件焊接再到程序编写调试我们遇到了许多的困难,而且理论和实际有一定

的差距,但我们通过交流和向他人请教,最终把所有的问题都解决了。

在操作的过程中,我

们感到了自己的动手能力上有不足,但我们增强了自己的动手能力。

更重要的是,在实验中

我们不抛弃,不放弃,遇到困难从来不灰心,最终享受到了成功的喜悦。

只要抱着这种精神,我们相信以后的学习生活会做得更好!

具体分工如下:

张坤一软件的编写,程序的调试,器件的购买。

张磊一硬件的焊接,网页的设计。

黄大明一PPT的制作,文档的编写,器件的购买。

贡献分值:

 

张昆张磊黄大明

(附图:

正常温度)

••◎•eo

^••6eee

nunJ

3

O1

 

 

 

(超过设定温度,报警)

最后感谢李茂奎的老师悉心指导和大力支持!

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

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1