基于无线环境监测系统的设计

更新时间:2024-04-16 14:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

编号

淮安信息职业技术学院

毕业论文

题目 基于ATmega16无线环境监测系统的设计 学生姓名 学 号 系 部 专 业 班 级 指导教师 顾问教师

胡海洋 71095034 电子工程学院 电子信息工程技术

710950 杜锋

二〇一二年六月

摘 要

摘 要

设计一个无线环境监测系统,以ATmega16单片机为控制核心,制作一个终端和2个节点,整个系统采用无线监测系统调制方式,终端能从节点获取节点的环境温度和光照信息,并且节点能够实现中继转发的功能。实践结果表明,该系统能够通过无线的方式对环境温度进行监测。

环境监测是指通过对影响环境质量因素的代表值的测定,确定环境质量(或污染程度)及其变化趋势。随着科技的不断进步,特别是计算机技术和网络技术的不断发展,环境检测由经典的化学分析向仪器与计算机和网络相结合的方式,实现了无线环境的检测。本文中设计了一个无线环境检测系统.以ATmega16单片机为控制核心实际制作一个终端和2个节点,终端能从节点获取节点的环境温度和光照信息,并且节点能够实现中继转发的功能。整个系统采用无线调制方式,收发都使用一个天线,终端发射信号时.将欲传输的信息通过串口输出的电平控制本振的开断从而实现无线调制,后级使用丙类功放发射,接收端节点将天线上的信号进行放大,然后倍压检波,通过自适应比较器解调出数据,最后再向终端回传环境信息。

系统以ATmega16单片机作为终端和节点的主控芯片,光照探测山光敏电阻来实现,温度可由单片机内部自带的温度传感器得到,数据的调制、接收采用串口通信,使用VU口来控制天线的收发模式。

关键词:ATmega16单片机 1602液晶显示 无线温度传感

I

目 录

目 录

摘 要 ....................................................... I 第一章 绪论 .................................................. 1 第二章 总体设计方案 ........................................... 3 2.1无线环境监测方案论证 .......................................... 3 2.2无线环境监测系统框图 .......................................... 3 第三章 系统硬件设计 ........................................... 5 3.1单片机最小系统电路设计 ........................................ 5

3.1.1单片机的选型............................................... 5 3.1.2 ATmega16 性能指标 ......................................... 5 3.1.3 ATmega16的引脚............................................ 5 3.1.4 ATmega16最小系统电路设计.................................. 6 3.2显示电路设计 .................................................. 7 3.2.1显示器件的选择............................................. 7 3.2.2 1602管脚功能.............................................. 7 3.2.3 ATmega16与1602的接口电路................................. 8 3.3无线监测电路设计 .............................................. 9 3.3.1 DS18B20无线温度传感器..................................... 9 3.3.2 DS18B20结构框图........................................... 9 3.3.3 DS18B20无线温度传感器与单片机的接口电路.................. 10 3.4稳压电源电路设计 ............................................. 11 3.4.1稳压电源电路框图.......................................... 11 3.4.2稳压电源工作原理.......................................... 12 第四章 系统软件设计 .......................................... 13 4.1系统软件设计分析 ............................................. 13 4.2 ADC转换程序设计.............................................. 13 4.3 显示程序流程图 ............................................... 14 第五章 总结与展望 ............................................ 15 致 谢 ...................................................... 17 参考文献 .................................................... 19 附录1 原理图 ................................................ 21 附录2 源程序 ................................................ 27

II

第一章 绪论

第一章 绪论

近年来,随着无线传感器网络技术的迅猛发展,以及人们对于环境保护和环境监督提出的更高要求,越来越多的企业和机构都致力于在环境监测系统中应用无线传感网络技术的研究。环境监测是指通过对影响环境质量因素的代表值的测定,确定环境质量(或污染程度)及其变化趋势。随着科技的不断进步,特别是计算机技术和网络技术的不断发展,环境检测由经典的化学分析向仪器与计算机和网络相结合的方式,实现了无线环境的检测。本文中设计了一个无线环境检测系统.以ATmega16单片机为控制核心实际制作一个终端和2个节点,终端能从节点获取节点的环境温度和光照信息,并且节点能够实现中继转发的功能。

无线传感器网络是由大量分布的不同规格和功能的具有感知、计算和通信能力的微型传感器节点,通过自组织的方式构成的一个以数据为中心的无线网络。大量传感器节点通过相互之间的分工协作,可实时感知、监测和采集分布区域内的监测对象或周围环境的信息。在国防安全、工农业领域各种控制、城市管理、生物医疗、环境监测、抢险救灾、防恐反恐、危险区域远程控制等许多领域都有着重要的科研价值和实用价值,具有十分广阔的应用前景。

在工农业生产中,对环境的温度和光照等参数常常会提出一些特殊的要求,甚至要求实现对温度和光照的实时监视和控制。

该无线环境监测系统智能化程度高,可实现对周边环境温度和光照信息的探测,并实时显示数据,将采集到的数据进行保存和分析处理,每个探测节点可与监测终端进行无线传输。

1

淮安信息职业技术学院毕业设计论文

2

第二章 总体设计方案

第二章 总体设计方案

2.1无线环境监测方案论证

方案一:

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

方案二:

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

从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。

2.2无线环境监测系统框图

无线环境监测总体设计方框图如图2-1所示,控制器采用单片机ATmega16,温度传感器采用DS18B20,用1602来实现温度显示。在整个系统的设计过程中,终点和节点都需要一个主控芯片进行处理。主芯片选用ATmega16系列单片机。在信号调制方面采用了无线传感器调制方案。

初始化 调用显示子程序 N 1S到? Y Y 初次上电 N 读出温度值温度计算处理显示数据刷新 ADC转换开始命令 图2-1 主程序流程图 3

淮安信息职业技术学院毕业设计论文

4

第三章 系统硬件设计

第三章 系统硬件设计

3.1单片机最小系统电路设计

3.1.1单片机的选型

ATmega16作为温度测试系统设计的核心器件。ATmega16是基于增强的AVR RISC结构的低功耗8位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。 3.1.2 ATmega16 性能指标

(1)高性能、低功耗的8位AVR微处理器 (2)先进的RISC结构:32个8位通用工作寄存器

(3)非易失性程序和数据存储器:可以对锁定位进行编程以实现用户程序的加密

(4) JTAG 接口:支持扩展的片内调试功能

(5)外设特点:两个具有独立预分频器和比较器功能的8位定时器/计数器;两个可编程的串行USART

(6)特殊的处理器特点:片内/片外中断源;6种睡眠模式:空闲模式、ADC噪声抑制模式、省电模式、掉电模式、Standby模式以及扩展的Standby模式 (7)I/0和封装:32个可编程的I/0口 (8)工作电压:

ATmega16L:2.7-5.5V;ATmega16:4.5-5.5V (9)速度等级

8MHz ATmega16L;0-16MHz ATmega16 (10) ATmega16L在1MHz,3V,25℃时的功耗

正常模式:1.1mA;空闲模式:0.35mA 3.1.3 ATmega16的引脚

ATmega16 的引脚图,如图3-1所示。

5

淮安信息职业技术学院毕业设计论文

图3-1 ATmega16 的引脚图

3.1.4 ATmega16最小系统电路设计

ATmega16单片机的最小硬件系统,包括:复位电路、晶振电路、AD转换滤波电路、串口电平转换电路、JTAG仿真接口,电源。ATmega16最小系统电路图,如图3-2所示。

图3-2 ATmega16最小系统电路图

ATmega16内置了上电复位设计,并且在熔丝位里可以设置复位时的额外时间,故AVR外部的复位线路在上电路时,可以设计的很简单:直接拉一只10K的电阻到VCC即可(Rrst)。为了可靠复位,再加上一只0.1uF的电容(Crst)以消除干扰、杂波。IN4148(Drst)的作用有两个:(1)将复位输入的最高电压钳在

6

第三章 系统硬件设计

Vcc+0.5V左右;(2)系统断电时,将Rrst(10K)电阻短路,让Crst快速放电,从而当下一次通电时,能产生有效的复位。在AVR单片机工作期间,按下S-RST(复位按钮)开关再松开时,将在复位脚产生一个低电位的复位脉冲信号,触发AVR单片机复位。

ATmega16还内置了RC振荡线路,可以产生1M、2M、4M、8M的振荡频率。不过,内置的毕竟是RC振荡,在一些对时间参数要求较高的场合,比如有要使用AVR单片机的UART与其它的单片机系统或PC机通信时,为了实现高速可靠的通信,就需要比较精确时钟来产生精确的通信波特率,这时就要使用精度高的片外晶体振荡电路作为AVR单片机系统的工作时钟。

3.2显示电路设计

3.2.1显示器件的选择

显示电路使用1602液晶显示模块,它有以下几个优点:

(1)显示质量高:由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线显示器那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。

(2)数字式接口:液晶显示器是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

(3)体积小、重量轻:通过显示屏上的电极控制液晶分子状态来得到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

(4)功耗低:液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。 3.2.2 1602管脚功能

1602的管脚图,如图3-3所示。

图3-3 1602的管脚图

1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线 。

VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中由表3.1可见。

7

淮安信息职业技术学院毕业设计论文

表3.1 引脚与功能 引脚 1 2 3 符号 VSS 一般接地 VDD 接电源(+5V) 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高V0 (对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 4 5 6 7 8 9 10 11 12 13 14 15 16 RS RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 E(或EN)端为使能(enable)端,下降沿使能。 功能说明 R/W R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 E DB0 底4位三态、 双向数据总线 0位(最低位) DB1 底4位三态、 双向数据总线 1位 DB2 底4位三态、 双向数据总线 2位 DB3 底4位三态、 双向数据总线 3位 DB4 高4位三态、 双向数据总线 4位 DB5 高4位三态、 双向数据总线 5位 DB6 高4位三态、 双向数据总线 6位 DB7 高4位三态、 双向数据总线 7位(最高位)(也是busy flag) BLA 背光电源正极 BLK 背光 电源负极 寄存器选择控制表,由表3.2可见 表3.2 寄存器选择控制表 RS 0 0 1 1 R/W 0 1 0 1 操作说明 写入指令寄存器(清除屏等) 读busy flag(DB7),以及读取位址计数器(DB0~DB6)值 写入数据寄存器(显示各字型等) 从数据寄存器读取数据 注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0。 busy flag(DB7):在此位为被清除为0时,LCD将无法再处理其他的指令要求。 3.2.3 ATmega16与1602的接口电路 ATmega16与液晶模块1602的接口电路,如图3-4所示

8

第三章 系统硬件设计

图3-4 液晶显示1602与ATmega16的接口电路

3.3无线监测电路设计

3.3.1 DS18B20无线温度传感器

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

(1)多个DS18B20可以并联在惟一的三线上,实现多点组网功能; (2)无须外部器件;

(3)可通过数据线供电,电压范围为3.0~5.5V; (4)零待机功耗;

(5)温度以9或12位数字; (6)用户可定义报警设置;

(7)负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。

3.3.2 DS18B20结构框图

DS18B20采用3脚PR-35封装,其框图如图3-5所示。

9

淮安信息职业技术学院毕业设计论文

DS18B20 1 2 3 GND I/O VDD

DS18B20有三个主要数字部件:1)64位激光ROM,2)温度无线传感器,3)非易失性温度报警触发器TH和TL。 表3.3 DS18B20温度转换时间表

R1 0 0 1 1 R0 0 1 0 1 分辨率/位 9 10 11 12

图3-5 PR-35封装 温度最大转向时间/ms 93.75 187.5 375 750

由表3.3可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。

当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。

DS18B20的测温原理是这样的,器件中低温度系数晶振的振荡频率受温度的 影响很小,用于产生固定频率的脉冲信号送给减法计数器1高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

3.3.3 DS18B20无线温度传感器与单片机的接口电路

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20

10

第三章 系统硬件设计

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

图3-6 DS18B20与单片机的接口电路

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。

3.4稳压电源电路设计

3.4.1稳压电源电路框图

稳压电源电路框图,如图3-7所示

11

淮安信息职业技术学院毕业设计论文

输入 恒流源 调整管安全工作区保护 Rsc 输出 启动电路 基准电压 误差放大 短路保护 过热保护 RA 地 RB

图3-7稳压电源电路框图

3.4.2稳压电源工作原理

稳压电源电路主要由电源变压器、桥式整流电路、电容及三端稳压器组成。三端稳压器采用LM7805集成稳压器。

如图3-8所示电路为输出电压+5V、输出电流1.5A的稳压电源。它由电源变压器T1,桥式整流电路D1~D4,滤波电容C1、C3,防止自激电容C2、C3和一只固定式三端稳压器(7805)极为简捷方便的搭成的。

图3-8 稳压电路图

220V交流市电通过电源变压器变换成交流低压,再经过桥式整流电路D1~D4和滤波电容C1的整流和滤波,在固定式三端稳压器LM7805的Vin和GND两端形成一个并不十分稳定的直流电压(该电压常常会因为市电电压的波动或负载的变化等原因而发生变化)。此直流电压经过LM7805的稳压和C3的滤波便在稳压电源的输出端产生了精度高、稳定度好的直流输出电压。本稳压电源可作为TTL电路或单片机电路的电源。三端稳压器是一种标准化、系列化的通用线性稳压电源集成电路,以其体积小、成本低、性能好、工作可靠性高、使用简捷方便等特点,成为目前稳压电源中应用最为广泛的一种单片式集成稳压器件。

12

第四章 系统软件设计

第四章 系统软件设计

4.1系统软件设计分析

利用无线传感器对环境进行监测,无线温度传感器是与ATmega16单片机进行电路设计的无线传感器。需要通过软件设计与分析才能进行无线环境监测。软件部分主要包括:1602显示转换程序、ADC转换程序、LCD初始化程序。主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度。

4.2 ADC转换程序设计

温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图4-1所示

发DS18B20复位命令 发跳过ROM命令 发温度转换开始命令 结束 图4-1 ADC转换流程图 转换程序

/********************************************** 函数功能:初始化ADC 入口参数:无

返回值:无

**********************************************/ void init_ADC(void) {

ADMUX=0x40;//内部5v基准电源,ADC 转换结果右对齐,单端输入ADC0 ADCSRA=0xff;//ADC使能,开始转换,自动触发,中断标志,中断使能,128预分频

13

淮安信息职业技术学院毕业设计论文

SFIOR=(0<

/********************************************** 函数功能:数据处理 入口参数:adc_datah,adc_datal

返回值:无

**********************************************/ void data_do(uint adc_datadh,uint adc_datadl) {

uint temp_1,temp_2,temp_3; temp_1=adc_datadh*256; temp_2=adc_datadl;

temp_3=temp_1+temp_2;

temp_4=(long)(temp_3 * 5) / 1.024; }

4.3 显示程序流程图

无线温度显示寄存器 N 十位数0? Y 百位数0? N Y 十位数显示符号百位数不显示 百位数显示数据(不显示符号) 结束 图4-2 显示流程图 14

第五章 总结与展望

第五章 总结与展望

经过将近一个月的单片机课程设计,终于完成了我的无线环境监测系统的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,通过自己的努力完成毕业设计!

在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件系统的设计,需要有很巧妙的程序算法,虽然以前也有编写过几次程序,但我觉的写好一个程序并不是一件简单的事,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。通过毕业设计论文让我更多的学会了去收集资料,去自主的学习。不但能掌握学习技巧还能学到课外知识,更加丰富了我的大学生活。

从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序的设计只有在经常的写与读的过程中才能提高,硬件的操作只有一次次的试验才能成功,这就是我在这次课程设计中的最大收获。

15

淮安信息职业技术学院毕业设计论文

16

致 谢

致 谢

在论文完成之际,我首先向关心帮助和指导我的指导老师杜锋老师表示衷心的感谢并致以崇高的敬意!

在论文工作中,遇到了很多的困难,一直得到杜锋老师的亲切关怀和悉心指导,使我克服了这些。杜锋老师以其渊博的学识、严谨的治学态度、求实的工作作风和他敏捷的思维给我留下了深刻的印象,我将终生难忘。再一次向他表示衷心的感谢,感谢他为学生营造的浓郁学术氛围,以及学习、生活上的无私帮助! 值此论文完成之际,谨向杜锋老师致以最崇高的谢意!

在学校的学习生活即将结束,回顾两年多来的学习经历,面对现在的收获,我感到无限欣慰。为此,我向热心帮助过我的所有老师和同学表示由衷的感谢!

特别感谢我的师兄、师姐以及班主任对我的学习和生活所提供的大力支持和关心!还要感谢一直关心帮助我成长的室友(、、、)

在我即将完成学业之际,我深深地感谢我的家人给予我的全力支持! 最后,衷心地感谢在百忙之中评阅论文和参加答辩的各位专家、教授!

17

淮安信息职业技术学院毕业设计论文

18

参考文献

参考文献

1.彭同明,徐学勤.单片机原理及应用[M].北京:中国电力出版社,2005 2.潘勇,孟庆斌.基于DSl 8B20的多点温度测量系统设计电子量技术,2008 3.昂志截,金海红.基于ATmega16的无线传感器网络节点的设计与通信实现[J].现代电子技术,2007

4.李文伸,段朝玉.短距离无线数据通信入门与实战[M].北京:北京航空航天大学出版社,2006

5. 李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,1998

6. 李广弟.单片机基础[M].北京:北京航空航天大学出版社,1994 7. 廖常初.现场总线概述[J].电工技术,1999

8. 谢自美.电子线路综合设计[M].武汉:华中科技大学出版社,2007 9. 夏继强.单片机应用设计培训教程——实践篇[M].北京:北京航空航天大学出版社,2008

10. 王毅.单片机器件应用手册[M].人民邮电出版社,1995

11. 康华光.电子技术基础(模拟部分)(第五版)[M].武汉:华中科技大学出版社,2007

19

淮安信息职业技术学院毕业设计论文

20

附 录

附录1 源程序

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

8M晶振条件

********************/ #include #include

#define uchar unsigned char #define uint unsigned int #define nop() asm(\

#define Ds18b20_Port PORTB #define Ds18b20_DDR DDRB #define Ds18b20_PIN PINB #define SIO 7

/**************************************************************** DS18B20操作定义

***************************************************************/ #define CLR_DS18B20 #define SET_DS18B20 #define HLD_DS18B20

Ds18b20_Port&=(~(1<< SIO ))//数据线强制拉低 Ds18b20_Port|=(1<

//Mega16控制总线

#define RLS_DS18B20 Ds18b20_DDR&=(~(1<< SIO )) //释放总线 #define STU_DS18B20 Ds18b20_PIN&=(1<

void delayUs(uchar temp) {

while(temp--); }

/***************************************************** 延时一个机器周期

******************************************************/ void _nop_(void) { unsigned char i; for(i=0;i>0;i++); }

21

淮安信息职业技术学院毕业设计论文

/***************************************************** 函数功能:延时1ms

(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒 ***************************************************/ void delay1ms() {

unsigned char i,j; for(i=0;i<10;i++)

for(j=0;j<33;j++) ; }

/***************************************************** 函数功能:延时若干毫秒

入口参数:n

***************************************************/ void delay(unsigned char n) {

unsigned char i; for(i=0;i

/***************************************************** 函数功能:判断液晶模块的忙碌状态

返回值:result。result=1,忙碌;result=0,不忙

***************************************************/ unsigned char BusyTest(void) {

unsigned char result; DDRD=0X00;

RS_0; //根据规定,RS为低电平,RW为高电平时,可以读状态 RW_1;

E_1; //E=1,才允许读写 _nop_(); //空操作 _nop_(); _nop_();

_nop_(); //空操作四个机器周期,给硬件反应时间 result=PIND; //将忙碌标志电平赋给result result=result&0x80; E_0;

return result;

22

附 录

}

/***************************************************** 函数功能:将模式设置指令或显示地址写入液晶模块 入口参数:dictate

***************************************************/ void WriteInstruction (unsigned char dictate) {

while(BusyTest()); //如果忙就等待 DDRD=0XFF;

RS_0; //根据规定,RS和R/W同时为低电平时,可以写入指令 RW_0;

E_0; //E置低电平(根据表8-6,写指令时,E为高脉冲, // 就是让E从0到1发生正跳变,所以应先置\ _nop_();

_nop_(); //空操作两个机器周期,给硬件反应时间 PORTD=dictate; //将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_();

_nop_(); //空操作四个机器周期,给硬件反应时间 E_1; //E置高电平 _nop_(); _nop_(); _nop_();

_nop_(); //空操作四个机器周期,给硬件反应时间 E_0; //当E由高电平跳变成低电平时,液晶模块开始执行命令

}

函数功能:初始化ADC 入口参数:无

返回值:无

***************************************************************/ void init_ADC(void) {

ADMUX=0x40;//内部5v基准电源,ADC 转换结果右对齐,单端输入ADC0 ADCSRA=0xff;//ADC使能,开始转换,自动触发,中断标志,中断使能,128预分频

SFIOR=(0<

23

淮安信息职业技术学院毕业设计论文

}

/************************************************************ 函数功能:数据处理

入口参数:adc_datah,adc_datal

返回值:无

**************************************************************/ void data_do(uint adc_datadh,uint adc_datadl) {

uint temp_1,temp_2,temp_3; temp_1=adc_datadh*256; temp_2=adc_datadl;

temp_3=temp_1+temp_2;

temp_4=(long)(temp_3 * 5) / 1.024; }

/************************************************* 函数功能:用1602显示转换后的数据 入口参数:无

返回值:无

*********************************************************/ void show_data(void) {

WriteAddress(0x47);

WriteData(temp_4/1000+0x30);

WriteData((temp_4/100)+0x30); WriteData((temp_40)/10+0x30); WriteData('.');

WriteData(temp_40+0x30); WriteData('c'); WriteData('m'); }

#pragma interrupt_handler ADC_end:15//ADC 转换结束中断服务程序 void ADC_end(void) {

uint adc_datal,adc_datah;

ADCSRA&=~BIT(ADIE); //关转换结束中断 adc_datal=ADCL; adc_datah=ADCH;

data_do(adc_datah,adc_datal); show_data();

24

附 录

ADCSRA|=BIT(ADIE); //开转换结束中断 }

void main()

{ uint temp_h,temp_t,temp_p,temp_z1,temp_z2; uint temp,temp1; uchar temp_count; PORTD=0XFF; DDRD=0XFF; PORTB=0XFF; DDRB=0XFF; DDRA=0X00;

CLI();//disable all interrupts init_ADC(); LcdInitiate();

WriteAddress(0x40); WriteData('H'); WriteData('e'); WriteData('i'); WriteData('g'); WriteData('h'); WriteData('t'); WriteData(':'); while(1) {

CLI();//disable all interrupts temp=readTempDS18B20(); temp1=(float)temp*0.625;

temp_h=(uint)temp1/1000+0x30;

temp_t=(uint)temp100/100+0x30;

temp_p=(uint)temp1000/10+0x30; temp_z2=(uint)temp1+0x30; WriteAddress(0x00); WriteData('T'); WriteData('e'); WriteData('m'); WriteData('p'); WriteData(':');

WriteData(temp_t); WriteData(temp_p); WriteData('.');

25

淮安信息职业技术学院毕业设计论文

WriteData(temp_z2); WriteData(0XDF); WriteData('C');

SEI(); //re-enable interrupts delay(800); } }

26

附 录

附录2 源程序

27

本文来源:https://www.bwwdw.com/article/8f1p.html

Top