基于Atmega16a单片机测温实验

  • 格式:doc
  • 大小:3.47 MB
  • 文档页数:13

青岛科技大学开放实验报告院校:专业:电气工程及其自动化年级:13级1班实验名称:基于Atmega16a单片机测温实验姓名:学号:同组者姓名:同组者学号:指导教师:基于ATmega16a的温度测量及显示系统摘要:在国民经济各部门,如电力、化工、机械、冶金、农业、医学以及人们的日常生活中,温度测量是十分重要的。

在环境监测、蔬菜大棚、粮库、设备运行的可靠性等应用中,实时采集温度信息,及时发现潜在故障,并采取相应的处理措施,对确保设备良好运行具有重要意义。

本设计是采用Atmega16a单片机为核心的温度测量系统。

采用LM35温度传感器来采集温度信号,并以电压的形式输送给单片机。

显示部分用LCD1602液晶显示器。

文中介绍了该系统的部分硬件,包括:单片机最小系统,温度检测电路,LCD1602显示电路。

文中还着重介绍了该系统的软件部分。

关键词:单片机;温度;测量;显示Based on the ATmega8a temperature measurement anddisplay systemAbstract: In the national economy departments, such as electric power, chemical industry, machinery, metallurgy, agriculture, medicine, and People's Daily life, temperature measurement is very important.In environmental monitoring, vegetable greenhouses, grain depot, the reliability of the equipment operation and other applications, the real-time temperature information collected, timely found potential failure, and take corresponding measures, to ensure the equipment running is of great significance.This design is to use Atmega16a MCU as the core temperature measurement ing LM35 temperature sensor to collect the temperature signal, and in the form of voltage to e LCD1602 LCD display part.This paper introduces the parts of the system hardware, including: single chip microcomputer minimum system, temperature detection circuit, LCD1602 display circuit.The paper also introduces the software part of the systemKey words: MCU; temperature;measurement;According to目录⏹系统设计要求⏹系统设计方案1.传感器方案2.单片机方案3.显示方案⏹系统硬件电路1.单片机最小系统电路2.LCD1602液晶显示电路3.LM35温度采集电路⏹系统程序设计⏹附录⏹参考文献一、系统设计要求■基本范围:0 ℃—150 ℃■精度误差小于0.5 ℃■ LCD1602液晶显示二、系统设计方案1.传感器方案①选择由National Semiconductor 所生产的LM35温度传感器,其输出电压为摄氏温标。

LM35是一种得到广泛使用的温度传感器。

由于它采用内部补偿,所以输出可以从0℃开始。

图一:LM35封装LM35有多种不同封装型式。

在常温下,LM35 不需要额外的校准处理即可达到±1/4℃的准确率。

其电源供应模式有单电源与正负双电源两种,其引脚如图一所示,正负双电源的供电模式可提供负温度的量测;两种接法的静止电流-温度关系,在静止温度中自热效应低(0.08℃),单电源模式在25℃下静止电流约50μA,工作电压较宽,可在4—20V的供电电压范围内正常工作非常省电。

工作电压4~30V,在上述电压范围以内,芯片从电源吸收的电流几乎是不变的(约50μA),所以芯片自身几乎没有散热的问题。

这么小的电流也使得该芯片在某些应用中特别适合,比如在电池供电的场合中,输出可以由第三个引脚取出,根本无需校准。

规格参数1、工作电压:直流4~30V;2、工作电流:小于133μA3、输出电压:+6V~-1.0V4、输出阻抗:1mA负载时0.1Ω;5、精度:0.5℃精度(在+25℃时);6、漏泄电流:小于60μA;7、比例因数:线性+10.0mV/℃;8、非线性值:±1/4℃;9、校准方式:直接用摄氏温度校准;10、额定使用温度范围:-55~+150℃。

11、引脚说明:①电源负GND;②电源正VCC;③信号输出S;传感器参数供电电压35V到-0.2V输出电压6V至-1.0V输出电流10mA指定工作温度范围LM35D 0℃ to +100℃2.单片机方案②选择AVR系列单片机ATmega16a;• 高性能、低功耗的 8 位AVR® 微处理器• 先进的RISC 结构– 131 条指令–大多数指令执行时间为单个时钟周期– 32个8 位通用工作寄存器–全静态工作–工作于16 MHz 时性能高达16 MIPS–只需两个时钟周期的硬件乘法器• 非易失性程序和数据存储器– 16K 字节的系统内可编程Flash擦写寿命: 10,000 次–具有独立锁定位的可选Boot 代码区通过片上Boot 程序实现系统内编程真正的同时读写操作– 512 字节的EEPROM擦写寿命: 100,000 次– 1K字节的片内SRAM–可以对锁定位进行编程以实现用户程序的加密• JTAG 接口( 与IEEE 1149.1 标准兼容)–符合JTAG 标准的边界扫描功能–支持扩展的片内调试功能–通过JTAG 接口实现对Flash、EEPROM、熔丝位和锁定位的编程• 外设特点–两个具有独立预分频器和比较器功能的8 位定时器/ 计数器–一个具有预分频器、比较功能和捕捉功能的16 位定时器/ 计数器–具有独立振荡器的实时计数器RTC–四通道PWM– 8路10 位ADC8 个单端通道TQFP 封装的7 个差分通道2 个具有可编程增益(1x, 10x, 或200x)的差分通道3.显示方案③选择JHD1602液晶显示器,其可以显示两行,各引脚功能:其中第3脚VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

三、系统硬件电路1.单片机最小系统电路2.LCD1602液晶显示电路3.LM35温度采集电路四、系统程序设计1.初始化单片机端口2.初始化LCD1602液晶显示器3.设置定时器,每10ms溢出中断一次4.每10ms采集一次温度数值,采集10次求平均5.计算出温度数值,并显示五、附录1.实物图2.程序源代码#include"iom16v.h"#include"macros.h"#define F_CPU 12000000UL#define RS PD0#define RW PD1#define EN PD2#define uint unsigned int#define uchar unsigned charint yan[10];volatile int flagT0=0;volatile int dataAD;int count;void Daley(uint a){uint i,j;for(i=0;i<a;i++)for(j=100;j>0;j--);}void lcd_write_Data(int Data){PORTD&=~BIT(EN);PORTD|=BIT(RS);PORTB=Data;PORTD|=BIT(EN);Daley(10);PORTD&=~BIT(EN);}void lcd_write_Cmd(uchar Cmd){PORTD&=~BIT(EN);PORTD&=~BIT(RS);PORTB=Cmd;PORTD|=BIT(EN);Daley(10);PORTD&=~BIT(EN);}void lcd_init(){DDRD|=BIT(RS)|BIT(RW)|BIT(EN);DDRB=0XFF;PORTD&=~BIT(RW);lcd_write_Cmd(0X38);lcd_write_Cmd(0X01);lcd_write_Cmd(0X06);lcd_write_Cmd(0X0C);}void ADC_init(){DDRA&=~BIT(PA0);PORTA&=~BIT(PA0);ADMUX|=BIT(REFS1)|BIT(REFS0);//选择2.56v片内基准电压;ADMUX&=0XF0;//选择ADC通道为PA0;ADCSRA|=BIT(ADEN);}int ADC_zhuanhuan(){int adcResult;ADCSRA|=BIT(ADSC);while(ADCSRA&0X40);//等待转换adcResult=ADCL;adcResult+=(ADCH<<8);//读取转换结果return(adcResult);}int wendu(int wen){int m;m=wen*2.5;//计算传感器输出电压,mvreturn(m);}void iniTimero(){TIMSK=0X01;//T0溢出中断使能TCCR0=0X05;//分频设置为1024TCNT0=256-F_CPU/1024*0.01;//设定定时时间为10ms}#pragma interrupt_handler T0_isr:10//设定T0_isr()为中断函数,中断向量为10void T0_isr(){int a;int b=0;TCNT0=256-F_CPU/1024*0.01;//重载定时器,时间10msyan[count]=ADC_zhuanhuan();//读取ADC数据,读10次count++;if(10==count)//对10次读取的数据求平均{for(a=0;a<10;a++)b+=yan[a];dataAD=b/10+0.5;flagT0=1;count=0;}}int main(){int tamp;int T=0;int h,f,e;lcd_init();//lcd初始化;ADC_init();//ADC初始化;ADC_zhuanhuan();//adc转换,第一次结果不要iniTimero();//T0定时器初始化;SREG|=BIT(7);//开全局中断使能;while(1){if(1==flagT0){tamp=dataAD;T=wendu(tamp);flagT0=0;lcd_write_Cmd(0x01);h=T/100;f=T/10%10;e=T%10;lcd_write_Data(0x30+h);lcd_write_Data(0x30+f);lcd_write_Data(0xa5);lcd_write_Data(0X30+e);lcd_write_Data(0xdf);lcd_write_Data(0x43);}}}六、参考文献①LM35温度传感器使用手册②Atmega16单片机手册③LCD1602使用说明。