智能仪表综合训练课程设计报告-单片机STC89C52数据采集的设计(15页).docx
-
资源ID:38595071
资源大小:129.32KB
全文页数:15页
- 资源格式: DOCX
下载积分:15金币
快捷下载

会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
智能仪表综合训练课程设计报告-单片机STC89C52数据采集的设计(15页).docx
-智能仪表综合训练课程设计报告-单片机STC89C52数据采集的设计-第 13 页内蒙古科技大学智能仪表综合训练课程设计报告题 目:学生姓名:学 号:专 业:测控技术与仪器班 级:指导教师:目 录1.1 设计意义21.2 设计目的31.3 设计内容32.1 功能的实现32.2 方案论证32.2.1 单片机的选择42.2.2 A/D模数转换器选择42.2.3 串行口的选择42.2.4 显示单元选择43.1 硬件系统原理53.2 电路设计63.2.1 单片机选型63.2.2 模数转换电路63.2.3 显示电路73.2.4 串口电路73.2.5 晶振电路83.2.6 硬件原理图仿真94.1 Keil4简介94.2 程序设计94.2.1主程序设计104.2.2 A/D转换程序设计104.2.3 LCD显示程序设计105.1 程序调试115.1.1 硬件调试115.1.2 软件调试115.2 程序下载115.3 总结12第一章 概述1.1 设计意义随着计算机技术的飞速发展和普及,数据采集系统也迅速地得到应用。在生产过程中,应用这一系统可对生产现场的工艺参数进行采集,监视和记录,为提高产品质量,降低成本提供信息和手段。在科学研究中,应用数据采集系统可获得大量的动态信息,是研究瞬间物理过程的有力工具,也是获取科学奥秘的重要手段之一。总之,不论在哪个应用领域中,数据采集与处理越及时,工作效率就越高,取得的经济效益也越高。 电子计算机的发展对通信起了巨大的推动作用.计算机和通信紧密结合可以构成灵活多样的通信控制系统也可以构成强有力的信息处理系统,这样对社会的发展产生深刻的影响.数据通信是电子计算机广泛应用的必然产物.计算机与它的终端之间需要数据通信,计算机与计算机之间更需要数据通信.此处在遥测,遥感,雷达,自动控制等系统中都要用到计算机,因而都需要数据通信. 数据采集系统,从严格的意义上来说,应该是用计算机控制的多路数据自动检测或巡回检测,并且能够对数据实行存储、处理、分析计算以及检测的数据中提取可用的信息,供显示、记录、打印或描绘的系统。 数据采集系统一般由数据输入系统,数据存储与管理,数据处理,数据输出及显示这四个部分组成。输入通道要实现对被测对象的检测,采样和信号转换工作。数据存储与管理要用存储器把采集到的数据存储起来,建立相应的数据库,并进行管理和调用。数据处理就是从采集到的原始数据中,删除有关干扰噪声,无关信息和必要的信息,提取出反映被测对象特征的重要信息。另外,就是对数据进行统计分析,以便于检索;或者把数据恢复成原来的物理量形式,以可输出的形态在输出设备上输出,例如打印,显示,绘图等。数据输出及显示就是把数据以适当的形式进行输出和显示。数据采集对可调电位器的模拟信号进行测量和处理,以微型计算机技术为基础而形成的一门综合应用技术。数据采集也是从一个或多个信号获取对象信息的过程。随着微型计算机技术的飞速发展及普及,数据采集检测已成为日益重要的检测技术,广泛应用与工农也等需要同时检测温度、湿度和压力的场合。数据采集是工业控制等系统中的重要环节,通常采用一些功能相对独立的单片机系统来实现,作为测控系统不可或缺的部分,数据采集的性能特点直接影响到整个系统。1.2 设计目的本设计的主要目的是实现单片机的数据采集,显示功能及上位机通讯。为实现这些功能,进行了有关的硬件电路原理图设计与软件编程设计。硬件电路设计中,运用PROTEL99SE,在已给实验板和实验原理图的基础上,选择实验板上所用于本设计的器件,并进行了涉及硬件原理图的设计以及实验的硬件连接。软件编程设计中,运用KEIL4编程环境,对设计要实现的功能进行编程,整体程序可分为一个主程序和多个子程序,子程序有基于ADC0832的A/D转换程序、基于AT89C51的标度转换程序和基于LCD1602的液晶显示程序。通过四个人完成的设计,让我们对数据采集有了清晰的认识,对单片机数据采集及处理数据的原理有了更深的了解,达到学习和实践相结合,学以致用的目的。1.3 设计内容本设计运用单片机STC89C52进行数据采集的设计,让电压模拟量(0-5V)通过模拟量/数字量转换芯片(ADC0832),送入单片机,进行数据处理之后,通过移位寄存器(74LS164),并在LCD1602上显示。实验的模拟量数据是通过一个可调电位器输出0-5V的模拟量,显示的是温度。 第二章 总体方案设计2.1 功能的实现本系统采用A/D转换器送入模拟信号,而单片机扶着处理接受过来的数字量的处理和显示电脑和单片机之间用RS-232进行通信。这样就可以在计算机上编程序,然后下载到单片机内部进行处理。系统框图如图2.1所示。图2.1系统框图2.2 方案论证2.2.1 单片机的选择 单片机是一种面向大规模的集成电路芯片,是微型计算机中的一个重要的分支。此系统是有CPU、随机存取数据存储器、只读程序存储器。输入输出电路(I/O口),还包括串行通信口、显示驱动电路(LCD驱动电路)、脉宽调制电路、模拟多路转换器及A/D转换器等集成到一个单块芯片上,构成一个最小但完善的计算机系统。单片机要使用特定的组译和编译软件编译程序,再用KEIL4把程序下载到单片机内部。 而本设计选用的是STC89C42。2.2.2 A/D模数转换器选择 A/D转换器是将模拟量转换成数字量的器件,A/D转换器的种类很多,就位数来说,可以分为8位、10位、12位和16位等。位数越高其分辨率就越高,价格就越贵。A/D转换器的型号很多,而其转换时间和转换误差也各不相同。 逐渐逼近式A/D转换器:它是一种速度快、精度较高、成本较低的直接式转换器,其转换时间在几微秒到几百微秒之间。 双积分A/D转换器:它是一种间接式的A/D转换器,优点是抗干扰能力强,精度比较高,缺点是数度很慢,适用于对转换数度要求不高的系统。 (3)并行式A/D转换器:它又被称为flash(快速)型,它的转换数度很高,但她采用了很多个比较器,而n位的转换就需要2n-1个比较器,因此电路规模也极大,价格也很贵,只适用于视频A/D转换器等数度特别高的领域。 鉴于上面三种方案,在价格、转换速度等多种标准下,在本设计选用的是逐渐逼近式A/D转换器ADC0832。2.2.3 串行口的选择该串行口选用了标准RS-232接口,常用的芯片是MAX232,MAX232的优点是: 一片芯片可以完成发送和接受功能(1) 单一电源+5V供电(2) 它的电路设计与连接比较简单而且功能齐全2.2.4 显示单元选择 液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。本实验采用的是2行16字的LCD1602液晶显示模块。2.2.5 按键的选择 键盘是一种常见的输入设备,用户可以向计算机输入数据或命令。根据按键的识别方法分类,有编码键盘和非编码键盘两种。通过硬件识别的键盘称编码键盘;通过软件识别的键盘称为非编码键盘。非编码键盘有两种接口方法:一种是独立按键接口;另一种是矩阵式按键接口。在单片机中,如果所需的按键较少,可采用独立式键盘。每只按键接单片机的一条I/O线,通过对线的查询,即可识别各按键的状态。如图3-7所示。4只按键分别接单片机的P1.4P1.7I/O线上。无按键按下时,P1.4P1.7线上均输入高电平。当某按键按下时,与其相连的I/O线将得到低电平输入。本设计采用的是独立键盘。独立按键接口第三章 硬件设计与仿真3.1 硬件系统原理该系统主要原理如下图所示,它有STC89C52、RS232、LCD1602等组成。图3.1 硬件原理图3.2 电路设计3.2.1 单片机选型 该系统所用单片机型号为STC89C52,该芯片由8位通用CPU、程序存储器、随机读写数据存储器及常用外设电路组成。在芯片中,P0、P2口可作为一般的I/O口使用,当需要再扩展外部存储器时,P0口将作为低8位地址总线或数据总线使用,P2口作为高8位地址总线使用。由于定时/计数器、串行通信、中断控制器等外围电路集成在CPU芯片内,因而STC89C52的芯片内部也包含了这些外围电路的控制寄存器、状态寄存器以及数据输入/输出寄存器,这些外围电路的接口寄存器构成了STC89C52的特殊功能寄存器。 在本设计中,ADC0832的片选端接单片机的P1.0口,时钟脉冲端接单片机的P1.7端。其他端则是数据输入和输出端。3.2.1 单片机芯片3.2.2 模数转换电路 ADC0832的输入通道是CH0和CH1,本设计模拟信号从CH0通道送入,所以CH0和CH1短接在一起连到电位器;CS为片选使能,低电平芯片使能,连接STC89C52的P1.0;CLK芯片时钟输入,DI数据信号输入端,DO数据信号输出端,但由于DO端和DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时将DO和DI并联在一根数据线上使用。 模数转换电路如下图所示:3.2.2 模数转换电路3.2.3 显示电路 因为液晶材料本身并不发光,所以在显示屏两边都设有作为光源的灯管,同时在液晶显示屏背面有一块背光板(或称匀光板)和反光膜,背光板是由荧光物质组成的,可以发射光线,其作用主要是提供均匀的背景光源。在这里,背光板发出的光线在穿过第一层偏振过滤层(也就是上文中提到的夹层)之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素,而这些像素可以是亮的,也可以是不亮的,大量排列整齐的像素中亮与不亮便形成了单色的图像。 本设计采用的是LCD1602液晶显示屏。原理图如下图所示:3.2.3 显示电路3.2.4 串口电路 计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯两种方式。由于串行通讯具有线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛使用。在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯.,RS232接口是目前最常用的一种串行通讯接口。由于PC机RS232C串行通信接口和AT89S52单片机的信号电平不一致,所以在PC机RS-232C串口和单片机串口应具有1个电平转换装置,而MAX232就可以完成这一功能,因此采用3线制双工通信连接方式,即单片机串行口的TXD、RXD和GND经电平转换分别与PC机的RXD、TXD和SG相连。此方式省去了9线的连接,这种方式完全可以进行数据的传输。3.2.4 串口电路3.2.5 晶振电路 当使用片内振荡电路时,X1、X2与晶振及电容C1、C2的连接方式构成晶振电路。在该电路中,晶振、电容C1、C2以及片内与非门构成了电容三点式振荡器。振荡电容C1和C2的取值范围与晶振的种类和频率有关。为了减少寄生电容对振荡频率的影响,在印制板上电容C1、C2应尽可能靠近CPU芯片的X1和X2引脚,必要时可以采用温度系数较小的NPO电容。3.2.5晶振电路3.2.6 硬件原理图仿真 仿真结果如下图所示:3.2.6硬件原理仿真图第4章 软件设计4.1 Keil4简介 Keil4提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(UVISION)将这些组合在一起。 Keil4有以下几个特点: 1、 全功能的源代码编辑器; 2、 器件库用来配置开发工具设置; 3、 项目管理器用来创建和维护用户的项目; 4、 集成的MAKE工具可以汇编、编译和连接用户嵌入式应用; 5、 所有开发工具的设置都是对话框形式的; 6、 真正的源代码级的对CPU和外围器件的调试器; 7、 高级GDI(AGDI)接口用来在目标硬件上进行软件调试以及和Monitor-51进行通信。4.2 程序设计整个程序设计分为三大块,A/D转换程序、LCD1602显示程序、主程序。按设计方法的思路将A/D转换程序以子程序调用的形式出现,LCD显示程序设为库文件,然后由主程序调用子程序和头文件完成设计功能。4.2.1主程序设计 主程序只做调用别的程序作用,其流程图如下图所示。主程序一开始就进入循环状态,首先调用A/D转换程序,接收转换数字信号,进行数据处理,然后调用LCD初始化程序。 图4.2.1主程序流程图4.2.2 A/D转换程序设计A/D转换程序的功能是:当通过电位器将模拟信号送入ADC0832后,ADC0832将模拟信号转换为数字信号,通过程序将得到的数字信号返回,以便主程序调用。在程序中应依照ADC0832芯片的管脚功能以及单片机对它的控制原理,使能芯片产生时钟信号,设置好通道选择,以便芯片正确转换数据,流程图如图4.2所示:4.2.2 A/D转换流程图4.2.3 LCD显示程序设计LCD显示程序功能是将经过单片机处理过的信号实时显示出来,程序流程图如图4.3所示:图4.3LCD显示流程图第五章 调试与总结5.1 程序调试5.1.1 硬件调试 硬件调试的主要任务是排除硬件故障,其中包括设计的错误和工艺性故障等。检查所设计的硬件电路板所有的引脚是否正确,尤其是电源的连接是否正确;检查各总线是否有短路的故障。检查开关/按键是否正常,是否连接正确,为了保护芯片,应先对各IC座电位进行检查,确认无误后再插入芯片。将芯片的仿真插头插入单片机插座进行调试,检查各接口是否满足设计要求,用正常的程序测试硬件电路的好坏。5.1.2 软件调试 软件调试的任务是利用开发工具进行在线仿真调试,发现和纠结程序的错误,同时也能发现硬件故障。软件调试是每个模块进行的。首先单独调试各子程序是否能达到预期的功能,接口电路的控制是否正常。尤其是注意各模块间能否正确的传递参数。5.2 程序下载启动程序STC-ISP后,第一步就是选择器件。软件支持STC全系列的51单片机芯片,因此,第一步必须选择相对应的型号。 第二步就应该选择将要被烧写的HEX文件。HEX文件由单片机开发环境输入、编辑代码、最后编译产生。选好了文件后,可以发现“文件校验”中的数据发生了变化。可以通过留意这个数据是否变化来确定打开文件是否成功。第三步就是设置串口。选择适当的串口参数后就是下载,如图5.3所示:第四步就是下载观察现象是否正确。5.3 总结 经过这次毕业设计,我在用专业知识、专业技能分析和解决问题的能力得到全面系统的锻炼。而且在单片机应用系统开发过程、单片机的基本原理,以及常用编程设计思路技巧方面都向前迈了一大步,为以后成为合格的人才打下坚实的基础。同时,我也发现了很多不足之处,这需要在实践中进一步完善。在此次设计的整体过程中,我始终保持积极态度和韧性。其中在硬件电路设计的时候碰到了很大的阻力,通过耐心并且细致的深入的研究,找出了许多问题的出处,虽然最终没有完全尽善尽美,但是这样的一个过程,同样使我得到了很多的磨练,受益良多。参考文献1 阎石. 数字电子技术基础. 高等教育出版社2 徐爱均. 智能化测量控制仪表原理与设计. 北京航空航天大学出版社3 张友德. 单片微型机原理、应用与实验. 复旦大学出版社 4 杨记文. 汇编语言程序设计教程. 清华大学出版社附录A:基于LCD的数据采集系统原理图附录B:源程序#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code L0="0123456789-"uchar code L1="WENDU:"uchar code L2="."uchar code L3="cent"uchar code L4="please key in "uchar code L5="password "uchar KeyCtl4;sbit RS=P10;sbit RW=P11;sbit E=P12;sbit BF=P07;sbit cs=P20;sbit clk=P36;sbit dodi=P37;sbit key1 = P14;sbit key2 = P15;sbit key3 = P16;sbit key4 = P17;uchar flag;void delay(uchar x) uint i,j; for(i=100;i>0;i-) for(j=x;j>0;j-);bit cmxh(void) bit mxh;RS=0;RW=1;E=1;_nop_();_nop_();_nop_();_nop_();mxh=BF;_nop_();_nop_();_nop_();_nop_();E=0;return mxh;void write_zl(uchar x)while(cmxh()=1);RS=0;RW=0;E=0;_nop_();_nop_();_nop_();_nop_(); P0=x;_nop_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0;void write_date(uchar y)while(cmxh()=1);RS=1;RW=0;E=0;_nop_();_nop_();_nop_();_nop_();P0=y;_nop_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0;void writeAdress(uchar Ad) write_zl(Ad|0x80);void LCDINT() delay(15); write_zl(0x38);delay(5);write_zl(0x38);delay(5); write_zl(0x38);delay(5);write_zl(0x0c);delay(5);write_zl(0x06);delay(5);write_zl(0x01);delay(5);uchar readadc0832(bit ch)uchar i,data1=0,data2=0;clk=0;dodi=1;cs=0;clk=1;clk=0;dodi=1;clk=1;clk=0;dodi=ch;clk=1;clk=0; dodi=1; for(i=0;i<8;i+) clk=1;clk=0;if(dodi)data1|=0x80>>i; for(i=0;i<8;i+)if(dodi)data2|=0x01<<i;clk=1;clk=0;cs=1;dodi=1;clk=1;if(data1=data2)return(data1);void xsL1() uchar i; delay(5); writeAdress(0x00); i=0; while(L1i!='0')write_date(L1i); i+; delay(200);void xsL2() uchar i; delay(5); writeAdress(0x09); i=0; while(L3i!='0')write_date(L3i); i+; delay(200);void xsL3() / writeAdress(0x49); write_date('.'); delay(200);void xsL4()/ uchar i; delay(5); writeAdress(0x00); i=0; while(L4i!='0') write_date(L4i); i+; delay(200);void xsL5()/ uchar i; delay(5); writeAdress(0x40); i=0; while(L5i!='0') write_date(L5i); i+; delay(200);void deplay_templ1(uint x)uint j,k,l;j=x/100;k=(x%100)/10;l=x%10;writeAdress(0x06);if(flag=1) write_date(L010);else write_date(L0j);delay(700);write_date(L0k);write_date(L0l);delay(50);void deplay_templ2(uchar x)writeAdress(0x4a);write_date(L0x);delay(50);void Init_Uart()TMOD=0x20;TH1=TL1=0xFD;SCON=0x50;PCON=0x00;TR1=1;void send_char(unsigned char txd) SBUF=txd; while(!TI); TI=0;void main() uint temp,Data,shu = 3;uchar KeyZhi=0,count=0,i;while(1)if(KeyCtl0= 0x01)&(KeyCtl1= 0x02)&(KeyCtl2= 0x03)&(KeyCtl3= 0x03) xsL1();xsL2();deplay_templ1(Data);