基于单片机的8路温度巡检仪的毕业设计_第1页
基于单片机的8路温度巡检仪的毕业设计_第2页
基于单片机的8路温度巡检仪的毕业设计_第3页
基于单片机的8路温度巡检仪的毕业设计_第4页
基于单片机的8路温度巡检仪的毕业设计_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、8路温度巡检仪设计任务:8路温度巡检仪可以测量0-300 oC范围内的8路输入温度值,并能在5位LED数码管上轮流显示,最高位显示通道数。测量最大分辨率为0.05 oC。方案确定:8路温度巡检仪电路由A/D转换,多路数据选择,数据处理及显示控制组成。电路原理图如图所示。A/D采集由集成电路AD7705组成,数据选择开关由CD4051组成,地址线决定对哪一路进行数据转换.扩展的外围芯片采用串行接口芯片,使整个系统体积小,功耗低,有极好的可维护性和较强的抗干扰性能。单片机晶振为12M,AD7705的时钟线接单片机的LAE端,它将产生2M的时钟。单片机P0口为数码管的段码,P2口为位选。P3.0为A

2、/D数据输入端,采用串行通信的方式0进行数据的读入。系统硬件设计:1、A/D采样模块:在这一部分电路中,AD7705是用于低频测量系统的前端器件,它分辨率高,且有节电模式,能够满足高精度和低功耗的要求。此外,AD7705片内还有数字滤波电路、校准电路和补偿电路,因而能更好地保证高精度的实现温度测量。 AD7705使用5V单电源,它有两个模拟差分输入通道,在电源为5V、参考电压为3.3V. AD7705可直接接收传感器产生的小信号以进行AD转换并输出串行数字信号。它采用技术来实现16位AD转换。采样速率由MCLKIN端的主时钟和放大器的可变增益来决定。实际上,AD7705同时可以对输入信号进行片

3、内放大、调制转换和数字滤波处理。其数字滤波器的阻带可编程控制,以便调节滤波器的截止频率和输出数据更新速率。关于AD7705基准电压的选择中,为了测量的精度,没有直接将电源电压作为基准电压,而是选用专门的稳压集成芯片ASM1117.并且要进行去耦处理。该模块的电路图如右图所示。2、数据选择模块: 该系统选用的CD4051相当于一个单刀八掷开关,开关接通哪一通道,由输入的3位地址码ABC来决定。“INH”是禁止端,当“INH”=1时,各通道均不接通。此外,CD4051还设有另外一个电源端VEE,以作为电平位移时使用,从而使得通常在单组电源供电条件下工作的CMOS电路所提供的数字信号能直接控制这种多

4、路开关,并使这种多路开关可传输峰峰值达15V的交流信号。例如,若模拟开关的供电电源VDD=5V,VSS=0V,当VEE=5V时,只要对此模拟开关施加05V的数字控制信号,就可控制幅度范围为5V5V的模拟信号。 该系统选用两快CD4051,作为8路通道的选择,因为A/D7705的模拟输入是以差分信号的方式输入,所以将两块CD4051的地址线(A.B.C)分别连到一起,使输入的差分信号同时选通。U3与U4的第3管脚分别接AD7705的模拟输入端。该模块的具体电路图如下图所示,在实际应用中,为了使得它们的导通特性相同,要选择同一型号的CD4051.3、数码管显示模块:该系统用动态扫描的方式进行显示。

5、在硬件设计中将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。动态扫描显示的原理是轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。该方案与静态显示相比,硬件电路比较复杂,成本较高。动态显示模块电路图如下图所示.在该电路中选用限流电阻为330,但一定要加上它,因为每一个段码的发光二极管所能承受的最大电流为10mA-20mA。在电源电压为5V时,如果不加限流电阻,则流过发光二极管的电流会有几百毫安,这样很快会烧

6、坏发光二极管。还需要说明的一点是,该系统选用共阳极数码管,这样在段码控制端口(P0口)为低电平时数码管导通点亮。为什么选用共阳极数码管呢?因为51单片机中或者是其它的一些集成电路中,它的灌电流要大于其输出电流,所以要选用共阳极数码管,让P0口以灌电流的方式提供驱动电流,以提高驱动能力。还需要特别说明的一点是,用端口不能直接去驱动每个数码管的位选端口,因为51单片机的每个端口只能提供20mA的电流,如果去驱动的话,会很快烧坏单片机的端口。系统硬件电路图系统软件设计:程序设计思想是首先上电复位AD7705,配置AT89C51单片机的串行接口,然后将AD7705的通道1原始化,留心读写数据之前必须调

7、用重新排序子程序。查询DRDY引脚,如果为低电平,则读通道数据寄存器,把数据转化为温度值,再调显示子程序,调延时,返回,继续采集数据,查询DRDY,显示,直到结束。主函数系统上电后,对AD7705进行初始化。然后调用显示子函数和A/D转换测量子函数进入循环,系统默认依次循环显示8个通道的电压值,每个通道的数据显示时间在0.5s左右,温度测量的周期为4s。主函数执行流程图如图()所示。开始调用A/D转换子函数初始化调用显示子函数 主程序流程图显示子函数 显示功能采用动态扫描法实现5为数码管的数值显示。测量所得的A/D转换数据放在8个定义的ad_data8内存单元中,测量所得的A/D数据在在显示时

8、需经过转换变成十进制BCD码。列扫描采用扫描字代码,每位LED显示时间为1ms,每路温度数据显示时间为0.5秒。模/数转换测量子函数 模/数(A/D)转换测量子函数用来控制对AD7705和CD4051的八路模拟输入的微小信号进行A/D转换并将对应的数值移入内存单元。程序流程图如图所示。开始启动一次转换地址小于8?CD4051地址加一YN返回A/D转换测量子函数流程图程序清单: #include<reg51.h>#define Addr_channel P1 /八路通道地址端口typedef unsigned char uchar; /用关键字宏定义,其效率高typedef unsi

9、gned int uint;sbit DRDY=P32;sbit DP=P07;/*内存单元定义*/code 以节省内存单元uchar code seg710=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /0-9 段码译码数组uchar code scan_con5=0xef,0xf7,0xfb,0xfd,0xfe; /4位列扫描控制字0xfe,0xfd,0xfb,0xf7,0xefuint data ad_data8=0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000; /8

10、个通道AD数据内存单元uint_data ad_data_buff3=0x0000,0x0000,0x0000;uchar data dis5=0x00,0x00,0x00,0x00,0x00; /4个显示单元和1个数据存储单元/*延时1ms函数*/减运算以节省代码存储空间void delay1ms(uint t)uint i,j;for(i=t;i>0;i-)for(j=120;j>0;j-); /*对八位数据进行倒序处理函数*/uchar reverse_order(uchar old_dat)uchar i,new_dat;new_dat=old_dat&0x01;

11、/取要转换数据最底位for(i=0;i<7;i+) new_dat<<=1; /将最低位左移一次old_dat>>=1; /数据的第二位移到最底位new_dat|=(old_dat&0x01); return new_dat;/*向AD7705写一个字节的数据*/void Write_AD_reg(uchar dat)SBUF=dat;while(!TI); /等待发送完成TI=0;/*从AD7705读出两个字节的数据,AD转换值*/返回值为unsigned int 类型uint Read_AD_reg()uchar low8,high8;uint AD_

12、out;SCON=0x00;Write_AD_reg(0x1C); /读数据通道 0x38while(DRDY); /为低电平时读取数据REN =1; /接收使能while(!RI); /等待接收完RI =0;high8=SBUF;while(!RI);RI =0;low8=SBUF;REN =0;high8=reverse_order(high8); /对读回的高8位倒序low8 =reverse_order(low8);AD_out=high8;AD_out<<=8;AD_out|=low8;return AD_out;/*对AD7705初始化*/void AD_Init(vo

13、id) /用串行数据输入时一定要将数据进行倒序处理Write_AD_reg(0X04);/写0X20到通信寄存器,选择通道ANI(+)和ANI(-),下一个寄存器指向时钟寄存器。.倒序:0X04Write_AD_reg(0X30); /写0X0C到时钟寄存器,接2M时钟,时钟二分频,输出跟新率50Hz. 倒序: 0X30Write_AD_reg(0x08);/写0x10到通信寄存器,到通信寄存器,下一个寄存器指向设置寄存器.倒序:0X08/Write_AD_reg(0x62);/写0x46到设置寄存器,自动校准,单极性,gain=1;缓冲模式,FASYNC=0. 倒序:0X62/Write_A

14、D_reg(0x6E);/写0x76到设置寄存器,自动校准,单极性,gain=64;缓冲模式,FASYNC=0. 倒序:0X6EWrite_AD_reg(0x76);/写0x6e到设置寄存器,自动校准,单极性,gain=32;缓冲模式,FASYNC=0. 倒序:0X76/*温度采样函数*/void AD_samp(void)uchar i,m,n;uchar j=0; int k;Addr_channel=j;for(i=0;i<8;i+) ad_data_buff0=Read_AD_reg(); /在此也可以做中值滤波处理 ad_data_buff1=Read_AD_reg(); ad

15、_data_buff2= Read_AD_reg(); for(m=0;m<3;m+) for(n=0;n<3-m;n+) if(ad_data_buffn>value_bufn+1) k= ad_data_buffn; ad_data_buffn=ad_data_buffn+1; value_bufn+1=k; ad_datai= ad_data_buff 1; /使模拟开关选通可靠,起延时的作用 j+;Addr_channel=j; Addr_channel=0x00;/*显示处理函数*/void display(void)uchar m,n;float h;uint a

16、,k,d;dis4=0x01; /通道初值为0for(m=0;m<8;m+) h=ad_datam/65535.0;k=h*300;dis3=k/100; /对温度值取百位数dis2=k/10%10;/对温度值取十位数dis1=k%10; /对温度值取个位数d=h*30000+5;/对温度小数部分的百分位四舍五入以精确到小数点后一位dis0=d/10%10; /取温度扩大100倍四舍五入后的十位数 for(a=0;a<50;a+)for(n=0;n<5;n+)P0=seg7disn;/P0为数码管段选端口if(n=1)DP=0;/显示小数点P2=scan_conn;delay1ms(5); /稳定显示P2=0xff; /确保下次写数据正确/通道加1dis4+;void main(void)Addr_channel=0x00; /通道地址初始为0AD_Init(); SCON=0X00; /串口初始化while(1)AD_samp();display(); 注意事项:1、 对AD7705用串行0方式写入和读出数据时要对数据进行倒序处理。2、 对AD7705用串行0方式写入和读出数据

温馨提示

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

最新文档

评论

0/150

提交评论