ADUC842单片机温度检测系统_第1页
ADUC842单片机温度检测系统_第2页
ADUC842单片机温度检测系统_第3页
ADUC842单片机温度检测系统_第4页
ADUC842单片机温度检测系统_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录1:项目说明与方案确定.3 项目说明.3 方案确定.32:硬件电路设计及原理说明.4 硬件电路设计方案.4 电路原理图及器件说.4 功能描述.113:软件程序设计.12 主程序流程图.12 读取与显示温度子程序.13 中断子程序.14 资源分配.144:调试过程、问题及解决方法.15 硬件调试.15 软件调试.15参考文献.16附录.17 1:项目说明与方案确定(一)项目说明:项目背景:温度的实时监测与控制可广泛的应用于各个领域,例如在航天方面,温控装置可控制太空服内温度恒定,以保证宇航员可在任何条件下工作;工业领域中,温度控制是生产过程中经常遇到的控制过程,有些工艺过程,对其温度的控制效

2、果直接影响着产品的质量;在生活中,冰箱、空调、微波炉等各种家电中,温度都起到关键性的作用。设计一种较为理想的温度控制系统是非常有价值的。现今温度控制系统得到了越来越广泛的应用,尤其是空调、冰箱等家用电器。我们今次要设计的方案主要的监控温度是室温,控制的对象主要是空调。温度是生活及生产中最基本的物理量,它表征的是物体的冷热程度。自然界中任何物理、化学过程都紧密地与温度相联系。在很多生产过程中,温度的测量和控制都直接和安全生产、提高生产效率、保证产品质量、节约能源等重大技术经济指标相联系。自18世纪工业革命以来,工业过程离不开温度控制。温度控制广泛应用于社会生活的各个领域,如家电、汽车、材料、电力

3、电子等。温度控制的精度以及不同控制对象的控制方法选择都起着至关重要的作用。温度控制技术按照控制目标的不同可分为两类:动态温度跟踪与恒值温度控制。动态温度跟踪实现的控制目标是使被控对象的温度值按预先设定好的曲线进行变化。在工业生产中很多场合需要实现这一控制目标,如在发酵过程控制,化工生产中的化学反应温度控制,冶金工厂中燃烧炉中的温度控制等。恒值温度控制的目的是使被控对象的温度恒定在某一数值上,且要求其波动幅度(即稳态误差)不能超过某一给定值。项目时间:2016年6月20日-6月25日项目负责人:杨通香2013010472 项目成员:杨玉璞2013010473、余庆2013010474 任务安排:

4、杨通香:电路设计及按键LED程序编写余庆:电路设计及中断程序编写杨玉璞:焊接电路及调试程序项目实现目标: 本项目致力于研发一种可以实现三档位温度监测的控制系统。以教学板ADUC842为基础,利用上面已有的数码管,按键、温度传感器和A/D转换芯片实现系统的开发。另外在开发板拓展区多焊接三个led灯,代替实际中的空调系统,在温度不同时,有不同的操作。在一档位时,若温度传感器测得的数值经A/D转换后>25摄氏度,则led1点亮;若温度>30摄氏度,则led2点亮;若温度>35摄氏度,则led3点亮。在二档位时,若温度>30摄氏度,则led1点亮;若温度>35摄氏度,则l

5、ed2点亮;若温度>40摄氏度,则led3点亮。在三档位时,若温度>35摄氏度,则led1点亮;若温度>40摄氏度,则led2点亮;若温度>45摄氏度,则led3点亮。温度传感器测得的实时温度还会显示在数码管上。以此模拟空调系统在不同温度下应给予的制冷强度。并且该系统可根据需要进行三个档位的变换。(二) 方案确定: 温度传感器LED单片机HD7279键盘四位数码管 图1.1 所用器件:ADUC842单片机、HD7279芯片、18B20温度传感器、按键、LED灯、四位数码管。方案说明:温度显示:由温度传感器18B20把温度信号输入单片机、单片机将信号处理转化后输入HD72

6、79,HD7279点亮数码管显示温度。键盘控制部分:用HD7279芯片控制键盘的输入,键盘给HD7279输入信号,HD7279立即给ADUC842单片机输入有按键按下的信号,单片机处理HD输入的信号控制LED数码管。LED部分:LED接单片机的P0端口,有单片机控制LED的亮灭。2:硬件电路及原理说明(一)硬件电路设计方案:LED灯ADUC842温度传感器 HD7279键盘数码管方案说明:温度传感器读取温度数值到ADUC842,ADUC842将数值输入HD7279,HD7279将温度值用数码管显示出来,键盘输入数据给HD7279,HD7279将数据输入单片机,单片机通过温度传感器控制LED灯。

7、(二)电路原理图及器件说明:1、 温度传感器18B20电路(1)DS18B20的特点:DS18B20 单线数字温度传感器,即“一线器件”,其具有独特的优点:( 1 )采用单总线的接口方式 与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。( 2 )测量温度范围宽,测量精度高 DS18B20 的测量范围为 -55 + 125 ; 在 -10+ 85°C范围内,精度为 ± 0.5°C 。(2)DS18B

8、20内部结构:主要由4部分组成:64 位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。64位ROM的排的循环冗余校验码(CRC=X8+X5+X4+1)。 ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。(3)原理图中的接线:电路中的连接:温度传感器18B20的1引脚接GND,2引脚接单片机的P2.3引脚输出。三引脚接VCC。2、LED电路: 图2.8 电路连接说明: LED1接单片机的P0.0引脚

9、,LED2接单片机的P0.2引脚,LED3接单片机的P0.3引脚。 2、 HD7279电路HD7279简介:HD7279A是一片具有串行接口的,可驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可以连接多达64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。产品特点:串行接口,无需外围元件可直接驱动LED各位独立控制译码/不译码及消隐和闪烁属性(循环)左移/(循环)右移指令具有段寻址指令,方便控制独立LED64键键盘控制器,内含去抖动电路有DIP和SOIC两种封装形式供选择。HD7279功能和实现方法:(1) HD7279连接图:电路连接图说明:7279的6

10、、7、8、9引脚分别接到单片机ADUC842的P2.2、P2.1、P2.0、P3.2引脚。7279的18引脚接键盘。7279的18、19、20、21接数码管的位码选择引脚。7279的10-17引脚接数码管的段码端。对电路中7279所用的引脚说明:6引脚CS:为片选输入端,该引脚的为低电平时可向芯片发送指令和读取键盘数据。7引脚CLK:同步时钟输入端,向芯片发送数据和读取键盘数据时,该引脚为电平上升沿是表示数据有效。9引脚Key:按键有效输出端,平时为高电平,当检测的有键盘按下时为高电平。10-16引脚:为数码管g-a的驱动输出。17引脚:小数点的输出18-25引脚:数字0-数字7的驱动输出。体

11、统中7279所用的显示方式说明方式0: 表2.4用寄存器的a2、a1、a0控制数码管的显示位,最多显示8位。用到的指令有:0x80、0x81、0x82、0x83。 表2.6寄存器的d3、d2、d1、d0控制数码管的七段显示DP=1时小数点显示,DP=0时小数点不显示。 键盘控制指令的使用:读键盘指令:0x15H 所用的指令有:0x01、0x00、0x08。控制1、0、8三键3、 最小单片机系统:4、 总电路原理图: (三)、功能描述: 设置按键:“1、0、8”三个按键分别为一、二、三档位的按键。当HD7279检测到按键按下时判断是哪个按键按下,然后进入不同的档位。在各档位里,单片机实时检测外界

12、温度,进行判断,点亮LED提示报警。在一档位时,若温度传感器测得的数值经A/D转换后>25摄氏度,则led1点亮;若温度>30摄氏度,则led2点亮;若温度>35摄氏度,则led3点亮。在二档位时,若温度>30摄氏度,则led1点亮;若温度>35摄氏度,则led2点亮;若温度>40摄氏度,则led3点亮。在三档位时,若温度>35摄氏度,则led1点亮;若温度>40摄氏度,则led2点亮;若温度>45摄氏度,则led3点亮。温度传感器测得的实时温度还会显示在数码管上。以此模拟空调系统在不同温度下应给予的制冷强度。并且该系统可根据需要进行三个档

13、位的变换。3:软件程序设计(一)主程序流程图:调用温度检测程序与显示程序进入主循环初始化18B20外部中断初始化进入主程序n是否有键按下8键按下1键按下0键按下LED红亮tt>=27tt>=28tt>=26 LED黄亮tt>=27tt>=25tt>=26LED绿亮tt>=26tt>=25tt>=24 图3.2主程序说明:进入主程序后初始化外部中断,进入主循环。开始判断是否有键按下,当是零键按下时,hold1、hold2、hold3的值会不同,开始判断温度处于什么区间,点亮不同的LED灯。(二)读取与显示温度子程序:温度传感器18B20检测外

14、界温度,输入信号给ADUC842单片机,单片机通过HD7279控制数码管输出相应的温度数值。软件设置为8字符显示,左端送入,动态显示方式。开始初始化检测温度 图3.1产生温度值tt数码管显示显示函数write7279程序说明:检测温度输出温度值tt,用write7279程序在数码管上显示出来。(三) 中断子程序中断初始化HD7279温度传感器显示温度按键输入进入中断Nhold1=26hold2=27hold3=28hold1=25hold2=26hold3=27hold1=24hold2=25hold3=26出中断 比较温度输入值nLED报警系统(四)单片机资源分配:P0.0LED1、P0.2

15、LED2、P0.4LED3、P2.318B20、P3.27279key、P2.27279CS、P2.17279CLK、P2.07279DATA4:调试过程、问题及解决方法(一)硬件调试:遇见的问题及解决方法: 由于本次课设使用的是aduc842,与单片机课程中学习的51单片机管脚不同,并且实验板上已有一些拓展的芯片,所以存在管脚被占用的问题。当然自带的拓展芯片大大降低了课程设计的难度,不需要我们再去自行寻找要用的芯片了。解决的方法为通过看老师给的实验板资料,看原理图和pcb图,找出电源管脚和I/O口,再进行电路的拓展焊接。由于外部拓展电路原理较为简单,仅用发光二极管和电阻串联。当P0口即发光二

16、极管用到的I/O口输出低电平0时,发光二极管被点亮。从而模拟不同温度下的不同操作。(二)软件调试:一、 软件设计思路的调整: 课设刚开始时,我们对单片机的编程并不是十分了解,通过读老师给的示例程序,逐渐了解adcu842。我们该课程设计的目标,温度检测系统用到了按键、数码管以及温度传感器18b20。所以我们仔细研读了这三部分的示例程序。我们发现其主函数都十分简单,大量调用了子函数,所以我们认为,可以直接使用老师给的示例程序,通过一些改动就可以实现课设目标。第一步,先向实验板中烧进键盘以及数码管显示程序(7279),并进行调试。具体为,当按下按键1时,数码管显示0123;当按下按键2时,数码管显

17、示5678;。第二步,向实验板中烧进温度传感器18b20的示例程序,并进行调试。通过读程序 第三步,将这两部分程序整合到一起,再进行程序的调制。二、 遇见的问题及解决方法:起初,我们简单的使用if语句,虽然实现了档位的变换以及温度实时测量和LED自动切换。但是转化档位前需要进行复位。考虑到每次换挡都需要复位给实际使用过程中会带来许多繁琐的程序并且会提高误操作的概率,所以我们决定尝试使用中断的方法实现预期目标。开始定义中断,采用外部中断0,负边沿触发。但是由于中断中没有使用while循环,所以实现不了换挡操作。当加上while之后,虽然实现了换挡操作,led按预期点亮,但不能跳出循环,无法显示当

18、前温度。解决方法为在每个按键的程序段中加入break,从而每当检测到有按键并且执行相应的中断操作后返回主函数。烧写后发现在档位中当温度变化时,不能实现自动切换点亮led。通过对程序的解读,当进入中断时才给3个led赋不同的值,所以不会自动切换。将同样的赋值程序加入到主程序中,基本实现了设计目标。三档位自动控制,温度实时显示,在每个档位中,led随温度变化。但问题是切换档位时,led会出现闪烁情况。起初我们认为是按键没有去抖造成的,但是经过加入延时程序去抖后,led依然闪烁。随后发现时因为主程序中也有按键操作,是中断程序和主程序冲突造成的led。在仔细考虑后,我们添加三个变量,在主程序中删除按键

19、的相关程序,仅用三个分段if。当具体温度值在三个不同变量组成的区间时,led会有不同点亮顺序。在中断程序中,按不同的按键时,对三个变量赋不同的值。最终实现了预期目标,即三档位温度监测控制系统。参考文献:新概念51单片机C语言程序设计郭天祥单片机的C语言应用程序设计马忠梅 王美刚 孙娟附录#include <ADUC842.H>#include <INTRINS.H>#define uchar unsigned char#define uint unsigned int/*位声明*/sbit cs=P22;/CS连接p2.2sbit IO1820=P23;/dq连接p2.

20、3sbit clk=P21;/clk连接p2.1sbit dat=P20;/date连接p2.0sbit key=P32; /key连接p3.2sbit led1=P00;sbit led2=P02;sbit led3=P04;/*7279的指令定义*/#define CMD_RESET 0xa4#define CMD_TEST 0xbf#define DECODE0 0x80#define DECODE1 0xc8#define CMD_READ 0x15#define UNDECODE 0x90#define RTL_CYCLE 0xa3#define RTR_CYCLE 0xa2#def

21、ine RTL_UNCYL 0xa1#define RTR_UNCYL 0xa0#define ACTCTL 0x98#define SEGON 0xe0#define SEGOFF 0xc0#define BLINKCTL 0x88/*7279函数声明*/void long_delay(void);/长延时void short_delay(void);/短延时void send_byte(unsigned char ); /发送一个字节void write7279(unsigned char,unsigned char);/写入7279uchar receive_byte(void); /接

22、收一个字节uchar read7279(unsigned char); /读7279/*温度传感器的驱动程序函数声明*/void delay100ms();/延时函数以满足时序要求void delay600us();void delay20us();void delay8us();void write0ts(); /给18b20写低电平void write1ts(); /给18b20写高电平bit readts(); /读18b20的电平void resetts();/18B20的复位函数void initts(); /18B20的初始化函数void writebts(uchar byte);

23、 /给18b20写一个字节uchar readbts();/给18b20读一个字节void gettempts();/得到18b20的温度void display(uint);/显示函数void keyinput();/键盘中断/*定义了一些变量*/unsigned char key_number;uint t,temp1,temp2;/t把温度进行四舍五入,temp1,temp2两个字节用来存储温度值,并且进行转换float tt ;/ 用来表示实际温度uchar table4;/温度显示int hold1,hold2,hold3;void main() IT0=1; /*外部中断0,下降沿

24、触发*/ IE0=0; /*外部中断1中断申请标志位*/ EX0=1; /*允许外部中断1*/ EA=1; initts();/初始化18b20 hold1=25;hold2=20;hold3=15; while(1) gettempts(); display(t); if(tt>=hold1) /温度的值和hold1比较,满足条件控制LED灯 led1=1; led2=1; led3=0; if(tt>=hold2&&tt<hold1) /若温度的值在hold1和hold2之间 led1=1; led2=0; led3=1; if(tt>=hold3&

25、amp;&tt<hold2) /若温度的值在hold2和hold3之间 led1=0; led2=1; led3=1; void keyinput() interrupt 0 using 1if(!key) key_number=read7279(CMD_READ);while(!key) /while(key_number<=8) if(key_number=1) /如果按键1按下,进入中断,给hold1、hold2、hold3赋值 EA=0; hold1=26; hold2=25; hold3=24;EA=1;break; if (key_number=0) /如果按键

26、0按下,进入中断,给hold1、hold2、 hold3赋值 EA=0; /关中断 hold1=27; hold2=26; hold3=25; EA=1; /开中断break; /跳出while循环 if (key_number=8) /如果按键8按下,进入中断,给hold1、hold2、 hold3赋值 EA=0; hold1=28; hold2=27; hold3=26; EA=1; break; /*写7279的函数*/void write7279(unsigned char cmd,unsigned char date) send_byte(cmd);/发送指令 send_byte(d

27、ate);/发送数据 /*发送一个字节函数*/void send_byte(unsigned char out_byte) unsigned char i; cs=0;/片选端为低电平 long_delay();/大约35us for(i=0;i<8;i+) if(out_byte&0x80) dat=1; /if指令的目的是将高位保存然后输出高位 else dat=0; clk=1; short_delay();/约5.6us clk=0; short_delay(); out_byte=out_byte*2;/左移一位 dat=0; /*接受一个字节函数*/unsigned

28、char receive_byte(void)/receive a byte unsigned char i; unsigned char dump=0; dat=1; long_delay(); for (i=0;i<8;i+) clk=1; short_delay(); dump=(dump<<1); if(dat) dump=dump | 0x01; clk=0; short_delay(); dat=0; return (dump);unsigned char read7279(unsigned char command)/read HD7279 unsigned c

29、har temp; cs=0; send_byte(command); temp=receive_byte(); cs=1; return(temp);/*长延时函数*/void long_delay(void) unsigned char i; for(i=0;i<0x30;i+);/如果晶振为16.78mhz时,延时为35us左右 /*短延时函数*/void short_delay(void) unsigned char i; for(i=0;i<8;i+);/如果晶振为16.78mhz时,延时为5.6us左右 /*延时100ms子程序*/void delay100ms() u

30、char i,j,k; for(i=0;i<8;i+) for(j=0;j<25;j+) for(k=0;k<250;k+);/*延时600us子程序*/void delay600us() uchar i,j; for(i=0;i<8;i+) for(j=0;j<25;j+); /*延时20us子程序*/void delay20us() uchar i; for(i=0;i<6;i+); /*延时8us子程序*/void delay8us() uchar i; for(i=0;i<2;i+);/*给18b20写低电平*/void write0ts()

31、IO1820 = 0;delay20us() ; delay20us() ; delay20us() ; IO1820 = 1; delay8us();/给程序一点反应的时间/*给18b20写高电平*/void write1ts()IO1820=0;delay8us();IO1820=1;delay20us() ; delay20us() ; /*读18b20的电平*/bit readts() bit b; IO1820=0; delay8us(); IO1820=1; delay8us(); b=IO1820; delay20us() ; delay20us() ; delay20us() ; return b;/*18b20的复位*/void resetts() IO1820=0; delay600us(); IO1820=1; while(IO1820); delay600us();/这个应该有,从机对其有所回应,这如果没有,程序中用到复位时,应加延时/*写18b20的一个字节*/void writebts(uchar byte)uchar i;for(i=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论