MEGA单片机温度检测标准系统.docx
《MEGA单片机温度检测标准系统.docx》由会员分享,可在线阅读,更多相关《MEGA单片机温度检测标准系统.docx(17页珍藏版)》请在冰豆网上搜索。
MEGA单片机温度检测标准系统
单片机课程设计报告基于MEGA16单片机温度检测系统
-------张坤张磊黄大明
(作品图)
一,系统设计目的,用途,功能
1,目的。
通过基于MEGA16芯片和DS18B20温度传感器控制温度,熟悉芯片的使用,温度传感器的功能,实验电路板的焊接,数码显示管的使用,汇编语言的设计。
锻炼团队合作能力,动手设计能力以及发现问题并且解决问题的能力。
2,用途。
温度是工业控制中主要的被控参数之一。
随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。
单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。
本文设计了一种基于MEGA16单片机的温度测量和控制装置,能对环境温度进行测量,在温度过高时,蜂鸣器发出蜂鸣声,有利于保障工业控制中的安全性。
并且能根据温度给定值给出调节量,控制执行机构,实现调节环境温度的目的。
3,功能.DS18b20温度传感器温度的精确度高达0.1度,在许多工业控制中已经足够。
可以满足从-55摄氏度到+125摄氏度测量范围,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。
从用途上讲,该单片机类似于温度计,但用途又不仅仅集限于温度计,由于蜂鸣器的使用,编写程序后,超过预设温度后,蜂鸣器发出蜂鸣声,为工业控制的安全保驾护航。
二,硬件设计思想和电路原理图
104电容
Vcc
下图为温度传感器驱动电路图
4.7K
1
2
3
单片机端口
18b20
下图为硬件连接框架图
硬件连接图如上.
三,详细说明如何使用硬件单元
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连接。
四.软件设计流程和设计思想
软件设计思想:
现在生活很多方面都要用到温度这个概念,例如在温室里需要时刻注意温度的变化,另外在一些科学实验里面,温度是一个很重要的条件,很多情况下要都对温度作很严格的要求,往往温度的一点不适当会引起相当大的变化,从而影响一些重要结果的得出.因此对于环境温度的测量显得很重要.基于这一点,萌生了采用单片机对温度进行监视的想法.
五.软件功能:
1.实现对温度的监视,达到实时显示的目的.
2.实现对不适合温度的警报,方便对温度监控.(报警温度可人工设定)
六.系统测试过程及测试数据:
(1)时间:
08年6月8日13:
10
地点:
十二号楼124宿舍
测试对象:
室内温度
设定警报温度:
31℃
时间
13:
20
13:
25
13:
30
13:
35
13:
40
温度
30.3
30.4
30.3
30.3
30.3
(2)时间:
08年6月8日22:
20
地点:
十二号楼124宿舍
测试对象:
室内温度
设定警报温度:
31℃
时间
22。
20
22:
25
22:
30
22:
35
22:
40
温度
29.7
29.7
29.7
29.8
29.7
七.实验程序代码
#include
#include
unsignedchards1820_reset(void)。
unsignedintds1820_read_temp(void)。
#defineDQ_INDDRA&=~(1<#defineDQ_OUTDDRA|=(1<#defineDQ_CLRPORTA&=~(1<#defineDQ_SETPORTA|=(1<#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){
unsignedchari。
flag=SREG。
/*中断保护*/
CLI()。
/*关中断*/
DQ_OUT。
DQ_CLR。
delay_10us(49)。
/*延时500uS(480-960)*/
DQ_SET。
DQ_IN。
delay_10us(7)。
/*延时80uS*/
i=DQ_R。
delay_10us(49)。
/*延时500uS(保持>480uS)*/
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。
j。
j--)。
}
}
#pragmainterrupt_handlertimer0_comp_isr:
iv_TIMER0_COMP
voidtimer0_comp_isr(void)
{
display()。
}
display()
{
PORTD=position[poist]。
PORTB=led_7[led_buf[poist]]。
if(poist==1)PORTB=led_7[led_buf[poist]]|0x80。
delay_ms
(2)。
if(++poist>=3)
poist=0。
}
voidfeng(unsignedi)
{
if(i>=31)
PORTC=0x83。
else
PORTC=0x01。
}
voidmain(void)
{
unsignedinti,j。
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()。
/*复位D18B20*/
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)。
}
}
八.需的全部资源
温度传感器
我们所采用的温度传感器是DS18B20,这是最常用的温度芯片
该传感器为6.5元每个。
下图为蜂鸣器。
该蜂鸣器为短叫蜂鸣器,一元每个。
ATmega16芯片
该芯片为实验室所赠。
去耦电容104
该电容主要对传感器其稳定作用,0.5元每个。
实验电路板。
基本的元件都焊接在该电路板上,五元每个。
电阻,买了4700欧姆,200千欧姆,100欧的电阻若干,总共花费1元。
两个高亮的LED灯
花费1元,主要作用是发出警报是伴随有声音。
加上去去欧亚电子大厦来往车费,一共花费30元。
选器件的心得体会:
1,买元件前,应该将所买的元件全部记下来,避免买时遗忘。
2,买元件前,得弄清楚各个产品的型号,功能,避免出现盲目购买现象,力争一次将所有的元器件买完。
例如本次购买温度传感器,由于买之前不知道该买的型号,结果去了电子大厦以后,买时不知道买哪种好,花费了大量的时间精力,实在不值。
3,力争用最少的钱做最好的工程。
由于在生活生产中需要对仪器成本进行控制,所以控制成本成了产品能否广泛应用的关键,我们感觉做这个工程成本有些偏高,另外在功能上还有些单一,这是以后做工程必须注意的地方。
八.的分工和工作情况
1,体会。
经过一个学期的学习和实践,我们终于做出了这个工程。
由于刚接触单片机,所以从选择硬件到硬件焊接再到程序编写调试我们遇到了许多的困难,而且理论和实际有一定的差距,但我们通过交流和向他人请教,最终把所有的问题都解决了。
在操作的过程中,我们感到了自己的动手能力上有不足,但我们增强了自己的动手能力。
更重要的是,在实验中我们不抛弃,不放弃,遇到困难从来不灰心,最终享受到了成功的喜悦。
只要抱着这种精神,我们相信以后的学习生活会做得更好!
具体分工如下:
张坤—软件的编写,程序的调试,器件的购买。
张磊—硬件的焊接,网页的设计。
黄大明—PPT的制作,文档的编写,器件的购买。
贡献分值:
:
(附图:
正常温度)
(超过设定温度,报警)
最后感谢李茂奎的老师悉心指导和大力支持!