基于单片机的电流表设计.doc_第1页
基于单片机的电流表设计.doc_第2页
基于单片机的电流表设计.doc_第3页
基于单片机的电流表设计.doc_第4页
基于单片机的电流表设计.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

VIP免费下载

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

文档简介

学士学位毕业设计(论文)基于单片机的电流表设计学生姓名: 指导教师: 所在学院:信息技术学院专 业:计算机科学与技术中国大庆2007 年 6 月黑龙江八一农垦大学本科毕业设计(论文)任务书学生姓名林祥美所在班级计2002级(3)导师姓名马秀莲导师职称副教授论文题目题目分类1应用与非应用类:工程 科研 教学建设 理论分析模拟2软件与软硬结合类:软件硬件软硬结合非软硬件(1、2类中必须各选一项适合自己题目的类型在内打)主要研究内容及指标: 主要参考文献:1(英)Ian Graham. Object-Oriented Methods: Principles&Practice. Third Edition. Pearson Education. 20032李春葆等.Visual Basic程序设计.北京:清华大学出版设.2005 阶段规划:开题时间完成论文时间专家审定意见:系主任签字:年 月 日注:1任务书由指导教师填写后交给学生,要求学生妥善保存。2此任务书夹于论文扉页与论文一并装订,作为论文评分依据之。摘要摘要在单片机检测电流的过程中,因为电流是模拟量,并且对于电流量不能直接进行读取,所以需要将电流转化为电压量,在通过A/D转换进行读取和处理。单片机对模拟信号的读取是通过A/D转换来实现的,本设计使用了ADC0809芯片,关于此芯片的功能和特点将在本文中做详细介绍。从电流量到电压量的转换是电流检测电路来实现的。本设计核心芯片采用的是AT89S51单片机,显示部分采用的是四位数码管显示。关键词:AT89S51 ADC0809 电流检测IABSTRACT ABSTRACTIn the process of single chip microcomputer test current, because the current is analog quantities, and for electricity flow cant directly read, so need to current into voltage quantity, in through the A/D conversion for reading and processing. With the chip of the analog signal is read by A/D conversion to implementation, this design USES ADC0809 chip, about the chip function and characteristic of the detailed in this article is introduced. From the electricity flow to the voltage quantity is the transformation of the electric current detection circuit to fulfill. This design core chip USES is AT89S51, show part adopts is four digital pipe display. Key words:AT89S51 ADC0809 Electric current detectionIV目录目录摘要IABSTRACTII前言IV1绪论11.1电流检测装置的发展现状11.2 电流检测装置的发展趋势12系统的整体设计22.1 系统的硬件组成模块22.2测量电路的工作原理23 电流测量系统硬件设计33.1AT89S51单片机的结构33.2 DC0809的结构73.3 数据采集电路设计93.4 显示电路的设计123.5 时钟频率电路设计133.6 复位电路设计144系统的软件设计164.1主程序流程图164.2程序165 电流测量系统性能分析及调试23结论24参考文献25致谢26附录27前言前言本设计的核心是单片机微型计算机简称单片机,又称为微控制器(MCU),它以体积小、功能全、性价比高等诸多优点而独具特色,在各种嵌入式应用领域独占鳌头。51系列单片机是目前国内应用最广泛的一种8位单片机之一。本次单片机课程设计我所做的项目是基于单片机的电流采集系统,主要用到A/D转换和数码管显示。数字电压表、电流表是工业生产过程中经常遇到的过程控制,特别是在科研、教学、工厂等领域中,具有举足重轻的作用,因而研究电流检测控制系统是非常有价值的。对于不同场所、不同工艺、所需电流的范围不同、精度不同,产品工艺不同。因而,对电流检测的的方法多种多样。随着电子技术和微型计算机的迅速发展,微机测量和控制技术也得到了迅速的发展和广泛的应用。利用单片机对电流进行测控的技术,也便随之而生,并得到日益发展和完善,越来越显示出其优越性。这种电流检测装置具有体积较小,价格便宜,应用方便等特点碍了更加广泛的应用。本设计从实际应用出发,是一种具有体积小、精度相对高等特点的数字电流表,单片机AT89S51作为主控芯片,数码管作为显示输出,实现了对电流的检测。黑龙江八一农垦大学毕业设计(论文)1绪论1.1电流检测装置的发展现状在电学中的测量技术涉及的范围非常广,特别是电压表、电流表广泛应用于学校、工业、工厂、科研等各种领域,供实验室和工业现场测量使用。随着电子技术的不断发展,在数字化和智能化不断成为主体的今天,数字电压表、电流表在当前电压、电流测量系统中占有非常重要的位置。我们在分析和总结了单片机技术的发展历史及发展趋势的基础上,以实用、可靠、经济的设计原则为目标,设计出全数字化测量电压电流装置。本设计所完成的全数字电压、电流表将所测信号通过数据采集、数制处理,通过单片机控制最终使其相应值显示在四位串行数码管上,系统主要以AT89S52单片机为控制核心,整个系统由中央控制模块、A/D转换模块、LED显示模块组成。可实现对待测电压、电流的测量,在数码管上显示。本次单片机课程设计我所做的项目是基于单片机的电流采集系统,主要用到A/D转换和数码管显示。1.2 电流检测装置的发展趋势随着科技的不断进步,测量技术不断广泛的应用到各个领域,电压表电流表的应用也开始越来越广泛,不断应用到学校,工厂,科研的领域。由于此类产品的成本较低,采用的是数字化测量,并通过数码管数字显示,数据较准确,精度高,因此有着非常好的发展空间。12系统的整体设计2.1 系统的硬件组成模块硬件电路大体可分为主控电路、A/D转换电路、LED显示电路、复位电路、时钟电路等,主控电路的核心采用的是AT89S51单片机,A/D转换电路选择的芯片是ADC0809,显示电路采用四位一体的数码管显示,各部分电路的设计及原理将会在硬件电路设计部分详细介绍。2.2测量电路的工作原理模拟电流经转换电路后转换为电压信号,送到A/D转换器进行A/D转换。然后送到单片机中进行数据处理。处理后的数据送到LED中显示。一般I/O接口芯片的驱动能力是很有限的,在LED显示器接口电路中,输出口所能提供的驱动电流一般是不够的尤其是设计中需要用到多位LED,此时就需要增加LED驱动电路或者加上拉电阻。本设计为了是电路设计简单采用了上拉电阻的方法。由于单片机的I/O口有限,不能够满足设计的需要,所以采用了两个或门驱动器,在本设计中采用了74HC32N芯片。 本实验采用AT89S51单片机芯片配合ADC0809模/数转换芯片构成一个简易的数字电表。电路通过ADC0809芯片调理电路输入口IN0输入的05 V的模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道D0D7传送给AT89S51芯片的P3口。AT89S51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码,并通过其P0口传送给数码管。同时它还通过I/O口P2.0、P2.1、P2.2、P2.3产生位选信号,控制数码管的亮灭。另外AT89S51还控制ADC0809的工作;P2.4和P1.1共同控制ADC0809的地址锁存端(ALE)和启动端(START); P1.2控制ADC0809的转换结束信号(EOC)。因为需要采集的数据是直流电流,由于ADC0809是逐次比较型8位串行A/D转换器,只能输入电压信号,故在数据采集之前先要把直流电流信号转化为直流电压信号。通过适当的外围电路就可以实现了。输入电压经过ADC0809进行数据转换和数据采集,采集结果为8位二进制数,为了方便分析,也可以看成是16进制数。最后应用程序把相应字符传输给AT89S51管理芯片并通过数码管显示数据。其中ADC0809的数据采集和AT89S51管理都需要在51单片机中编程实现数据传输和控制。总体设计如图1所示。AT89S51A/D转换电路复位电路显示电路整流电路图1 总体设计图3 电流测量系统硬件设计3.1AT89S51单片机的结构 AT89S51单片机是美国Atmel公司生产低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(EPROM)和128 bytes的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存取技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash 存储单元,功能强大。AT89S51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。图2为AT89S51单片机的基本组成功能方块图。有图可见,在这一块芯片上,集成了一台微型计算机的主要组成部分,其中包括CPU、存储器、可编程I/O口、定时器/计数器、串行口等,各部分通过内部总线相连。外时钟源 外部事件计数振荡器和时序OSC程序存储器4 KB ROM数据存储器256BRAM/SFR定时器/计数器 2 16 AT89S51 CPU 64 KB总线 扩展控制器可编程 I/O可编程全双工串行口内中断 外中断 控制 并行口 串行通信图2 AT89S51 功能方块图下面介绍几个主要部分:1. 中央处理器(CPU)中央处理器是单片机最核心的部分,是单片机的大脑和心脏,主要完成运算和控制功能。AT89S51的CPU是一个字长为8位的中央处理单元,即它对数据的处理是按字节为单位进行的。2. 内部数据存储器(内部RAM)AT89S51 中共有256个RAM单元,但其中能作为寄存器供用户使用的仅有前面128个,后128个被专用寄存器占用。3. 内部程序存储器(内部ROM)AT89S51 共有4 KB掩膜ROM,用于存放程序、原始数据等。4. 定时器/计数器AT89S51 共有2 个16 位的定时器/计数器,可以实现定时和计数功能。5. 并行I/O 口AT89S51 共有4 个8 位的I/O口(P0、P1、P2、P3口),可以实现数据的并行输入、输出。6. 串行口AT89S51有1 个全双工的可编程串行口,以实现单片机和其他设备之间的串行数据传送。7. 时钟电路AT89S51 单片机内部有时钟电路,但晶振和微调电容需要外接。时钟电路为单片机产生时钟脉冲序列。8. 终端系统AT89S51 的中断系统功能较强,可以满足一般控制应用的需要。它共有5 个中断源:2 个外部中断源/INTO和/INT1 ;3 个内部中断源,即2个定时/计数中断,1个串行口中断。由上所述,AT89S51虽然是一块芯片,但它包括了构成计算机的基本部件,因此可以说它是一台简单的计算机。ATMEL公司的AT89S51是一种高效微控制器。采用40引脚双列直插封装(DIP)形式,如图3所示。AT89S51单片机是高性能单片机,因为受引脚数目的限制,所以有不少引脚具有第二功能。图3 DIP 封 装 引 脚 图AT89S51单片机个引脚功能如下:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口: P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口: P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89S51的一些特殊功能口,如下表所示:P3口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平。ALE/PROG:当访问外部存储器时,地址锁存允许端的输出电平用于锁存地址的地址字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号端。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。AT89S51单片机的主要特性: 与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路 (1)XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。(2) 芯片擦除 整个EPROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦除操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89S51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。3.2 ADC0809的结构ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。3.2.1ADC0809的内部逻辑结构 由下图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。3.2.2ADC0809引脚结构 ADC0809采用的是双列直插封装如图4,各脚功能如下:D7-D0:8位数字量输出引脚。IN0-IN7:8位模拟量输入引脚。VCC:+5V工作电压。GND:地。REF(+):参考电压正端。REF(-):参考电压负端。START:A/D转换启动信号输入端。ALE:地址锁存允许信号输入端。(以上两种信号用于启动A/D转换).EOC:转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。OE:输出允许控制端,用以打开三态数据输出锁存器。CLK:时钟信号输入端(一般为500KHz)。A、B、C:地址输入线。图4 ADC0809封装3.2.3 ADC0809应用说明 (1)ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。 (2)初始化时,使ST和OE信号全为低电平。 (3)送要转换的哪一通道的地址到A,B,C端口上。 (4)在ST端给出一个至少有100ns宽的正脉冲信号。 (5)是否转换完毕,我们根据EOC信号来判断。 (6)当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。 从ADC0809的通道IN3输入05V之间的模拟量,通过ADC0809转换成数字量在数码管上以十进制形成显示出来。ADC0809的VREF接5V电压。3.3 数据采集电路设计在进行数据采集时首先得把输入的电流信号转换成电压信号,这样才能够进行数据采集,在转换的过程中需要一个转换电路,在输入端接入一个适当的电阻,可以把直流电流信号转换为直流电压信号。如图5所示。图5 电流-电压转换电路数据采集电路要用到A/D转换芯片ADC0809。ADC0809是逐次比较型8位串行CMOS A/D转换器,电压供电范围为+5V,转换时间最大值为。典型功耗值为15mW。采用差分参考电压高阻输入,抗干扰,可按比例量程校准转换范围,接地,接电源。ADC0809片内无系统时钟,该时钟与I/O CLOCK是一起工作的。因此ADC0809必须和单片机或微处理器配合使用,也可与51系列通用单片机连接使用。ADC0809片型小,采样速度快,功耗低,价格便宜,控制简单。适用于低功耗的袖珍仪器上的单路A/D或多路并联采样。ADC0809的内部框图和管脚名称如图6所示。图6ADC0809的内部框图ADC0809的数字量输出与A/D输入电压之间的关系如表1所示表1 A/D输入电压与数字量输出量关系表输入电压值输出数字量(二进制)1111111110000000000000注意:本次测量取接+5V,接地 ADC0809对输入模拟量要求:信号单极性,电压范围是05V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。 地址输入和控制线:4条 ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进入转换器进行转换。A,B和C为地址输入线,用于选通IN0IN7上的一路模拟量输入。通道选择表如表2所示。表2通道选择CBA选择的通道000IN0001IN1010IN2011IN3100IN4101IN5110IN6111IN7数字量输出及控制线:11条 ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE1,输出转换得到的数据;OE0,输出数据线呈高阻状态。D7D0为数字量输出线。 CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ, VREF(),VREF()为参考电压输入。 接供电电压,接地,ADC0809的地址所存ALE、数据输出DATAOUT、时钟脉冲I/O CLOCK分别接51单片机的P2.4、P3、P1.0口,实现51单片机对ADC0809的控制和ADC0809向51单片机的数据传输。3.4 显示电路的设计显示功能与硬件关系极大,在这里我们使用的是七段数码管显示,通常在显示上我们采用的方法一般包括两种:一种是静态显示,一种是动态扫描。其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多;动态扫描的特点是显示稳定程度没有静态显示好,程序编写复杂,但是相对静态显示而言最大的优点是占用端口资源少。由于本设计需要较多的端口用于其它的功能因此采用占用端口少的动态扫描显示的办法。以下将对显示电路的各个部件及整体设计做详细的介绍。本设计采用的是LED数码管显示,该显示器由8个发光二极管中的7个长条发光二极管(称七笔段)按a、b、c、d、e、f、g顺序组成“8”字形,另一个点形的发光二极管放在右下方,用来显示小数点。数码管按内部连接方式又分为共阴极数码管和共阴极数码管两种。若内部8个发光二极管的阳极连在一起接电源正极,就成为共阴极数码管;若8个发光二极管的阴极连在一起接地,测称为共阴极数码管。本次设计所用的到的共阴极数码管的引脚如图7所示,外部有10个引脚,其中1和6引脚连通,作为公共端接地。图7 四位共阴极数码管引脚图从LED数码的结构可以看出,不同笔段的组合就何以构成不同的字符,例如笔段b、c被点亮时,就可以显示数字1:当笔段a、b、c被点亮时,就可以显示数字7;只要控制7个发光二极管按一定要求亮与灭,就能显示出十六进制字符0F。将控制数码管显示字符的各字段代码称为显示代码或字段码。数码管显示码是表述二进制数与数码管所显示字符的对应关系。对于共阴极数码管,由于8个发光二极管的阴极已连在一起接地,所以,只要控制各字段的正极,就可以控制发光二极管的亮与灭。为了保证数码管显示的亮度,在设计显示电路中加了上拉电阻。图中有4个七段LED数码管,它们的公共端1、2、3、4分别接到单片机的P2.0、P2.1 、P2.2、P2.3口,单片机的这4个I/O口输出位选信号用于动态扫描。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个LED数码管的公共端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位数码管的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。而单片机的P1.0P1.7口则负责将字段码数据传送给LED数码管。3.5 时钟频率电路设计单片机必须在时钟的驱动下才能工作,在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定周期的时钟信号送到单片机内部的各个单元,决定单片的工作频率,时钟电路如图8 所示。图8外部振荡电路 一般选用石英晶体振荡器。此电路大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要有石英晶体的频率确定。电路中两个电容C1、C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1、C2的典型值为30pF。单片机工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期,其大小是时钟信号频率的倒数,时钟信号频率常用fosc表示。图中时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12s。3.6 复位电路设计单片机的第9脚RST为硬件复位电路,只要在该端加上持续4个机器周期的高电平即可实现复位,复位后单片机的各个状态都恢复到初始化状态,其电路图如图10所示。图9中由按键以及电容C1、电阻R1、R2构成上电复位及手动电路。由于单片机是高电平复位,所以上电复位时,接通电源即可,当上电后,由于电容C1开始缓缓充电,则图中电路由5V电源到电容到电阻R1和地之间形成一个通路,由于在R1上产生电压降,则单片机的RST脚上为高电平,经过一段时间后电容的电充满,此时C1处可视为断路,单片机RST脚处电压逐渐降为0V,即处于稳定的低电平状态,此时单片机完成上电复位,程序从0000H开始执行。手动复位时,按一下图中的按钮即可,当按键按下的时候,单片机的9脚RST管脚处于高电平,此时单片机处于复位状态。值得注意的是,在设计当中使用到了硬件复位电路和软件复位两种功能,由上面所述的硬件复位之后的各状态可知,寄存器的值都恢复到了初始值,而前面的功能介绍中提到了倒计时时间的记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软件复位功能。软件复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。图9硬件复位电路4系统的软件设计4.1主程序流程图按上述工作原理和硬件结构分析可知系统主程序工作流程图如下图10所示开始初始化调用A/D转换程序调用显示程序结束图10主程序流程图4.2程序#include#define uint unsigned int#define uchar unsigned charsbit clk_out=P10;sbit st=P11;sbit eoc=P12;sbit ale=P24;sbit A_A=P27;sbit A_B=P26;sbit A_C=P25;sbit dot=P07;unsigned char code tab10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; uchar aa ; void delay(uint i0) unsigned char i1,j; for(i1=0;i1i0;i1+) for(j=0;j100;j+); ;void show(uchar a0,uchar a1,uchar fdot) P2=P2|0x0f; P0=taba0;if(fdot=1) dot=1;P2=P2&a1; delay(1) ; uchar anjian() uchar a2; if(P1&0x38)=0x18) /0 a2=0;/show(0,0xf0); else if(P1&0x38)=0x28)/1 a2=1;/show(1,0xf0); else if(P1&0x38)=0x08)/2 a2=2;/ show(2,0xf0); else if(P1&0x38)=0x30) /3 a2=3;/show(3,0xf0); else if(P1&0x38)=0x10)/4 a2=4; /show(4,0xf0); else if(P1&0x38)=0x20)/5 a2=5; / show(5,0xf0); else a2=6;/delay(10);return(a2);void adds(uchar a4) switch (a4) case 0: A_C=0;A_B=0;A_A=0;show(0,0xf0,0);break; case 1: A_C=0;A_B=0;A_A=1;show(1,0xf0,0);break; case 2: A_C=0;A_B=1;A_A=0;show(2,0xf0,0);break; case 3: A_C=1;A_B=0;A_A=1;show(3,0xf0,0);break; case 4: A_C=1;A_B=0;A_A=0;show(4,0xf0,0);break; case 5: A_C=0;A_B=1;A_A=1;show(5,0xf0,0);break; default :break;delay(1); ale=1; delay(1); ale=0;void main(void) uint a5,display4,display3,display2,display1; uint dat; unsigned long int m; uchar ll; TMOD=0x01; TH0=(65536-1)/256; TL0=(65536-1)%256; TR0=1; ET0=1; EA=1; ale=0; st=0; a5=anjian(); aa=a5; while(1) a5=anjian(); if(a5)!=aa) aa=a5; adds(aa); st=1; delay(1); st=0; / delay(1); while(!eoc); dat=P3; else st=1; delay(1); st=0;/ delay(1); while(!eoc); dat=P3; switch(aa) case 0 : m=dat*33000/3825;EA=0;for(ll=0;ll200;ll+)display4=m/1000;display3=m%1000/100;display2=m%100/10;display1=m%10;show(display4,0xfe,0);show(display3,0xfd,0);show(display2,0xfb,1);show(display1,0xf7,0);EA=1;break;case1 : m=dat*33000/3825;EA=0;for(ll=0;ll200;ll+)display4=m/1000;display3=m%1000/100;display2=m%100/10;display1=m%10;show (display4,0xfe,0);show(display3,0xfd,1);show(display2,0xfb,0);show(display1,0xf7,0);EA=1;break;case2 : m=dat*33000/3825;EA=0;for(ll=0;ll200;ll+)display4=m/1000;display3=m%1000/100;display2=m%100/10;display1=m%10;show(display4,0xfe,1);show(display3,0xfd,0);show(display2,0xfb,0);show(display1,0xf7,0);EA=1;break;case3 : m=dat*33000/3825;EA=0;for(ll=0;ll200;ll+)display4=m/1000;display3=m%1000/100;display2=m%100/10;display1=m%10;show(display4,0xfe,0);show(display3,0xfd,0);show(display2,0xfb,1);show(display1,0xf7,0);EA=1;break;case4 : m=dat*33000/3825;EA=0;for(ll=0;ll200;ll+)display4=m/1000;display3=m%1000/100;display2=m%100/10;display1=m%10;show(display4,0xfe,0);show(display3,0xfd,1);show(display2,0xfb,0);show(display1,0xf7,0);EA=1;break;case5 : m=dat*33000/3825;EA=0;for(ll=0;ll200;ll+)display4=m/1000;display3=m%1000/100;display2=m%100/10;display1=m%10;show(display4,0xfe,1);show(display3,0xfd,0);show(display2,0xfb,0);show(display1,0xf7,0);EA=1;break;default :break; /show(1,0xfe,0); /show(2,0xfd,0); / show(3,0xfb,0); /show(4,0xf7,0); void clk() interrupt 1 TH0=(65536-2)/256; TL0=(65536-2)%256; clk_out=clk_out;5 电流测量系统性能分析及调试由于采样用的=5V,故A/D转换器出来电压量程为05V,通过外接电阻可以实现电流测量;在电流输入口接一个100,则可以测量050mA电流,由于需要显示十位,于是我把小数点放在第三位,从而把050mA 的mA级电流正确显示在数码管上。加上小数点后,能够测量05V直流电压,如果外接上1K电阻可以正常显示05mA电流,也就说只能测量比较小的电流,没有什么实用价值。如果可以显示050mA电流就比较理想了,于是我可以外接100,但只是单纯地外接100并不能解决问题,因为数码管上实际显示的总是05V范围的电压值。比如当输入20mA电流时,显示在数码管上的是2.000,也就说此时不能正确反映电流大小。要解决这一问题其实也很简单,我们只需要把小数点后移一位即可,这是就要注意原小数点后面个位显示的循环程序都要修改,否则就会出现错误。通过以上各项调试和改进,此次基于51单片机的电流数据采集系统设计基本完成。系统参数指标如下:输入基准电压为+5V;测量直流电流范围为050mA;精确到0.01mA。能比较准确地显示0.01mA50mA范围内的直流电流值。25结论结论通过一个多月的不断的学习,查找相关资料,最后终于完成了本次设计,本次单片机课程设计终于告一段落,我体会很多。从刚开始的选题到选题论证、从查找借鉴资料到自主设计、从本学科基础知识到其它学科知识、从自己思考到和老师同学交流,我从中学到了很多以前理论知识学习中所学不到的东西。先把直流电流通过转换电路转换为直流电压,之后通过A/D把模拟信号变成数字信号并采集数据,再把采集到的数转换为可以准确显示的BCD码,最后把数据传给单片机并通过数码管把模拟信号大小表示出来。课程设计之前一直只是理论知识的学习,在课程设计阶段,我不但自习重新学习的51单片机课本的相关章节,而且还在图书馆借来书籍阅读和参考。在遇到问题的时候,积极与身边的同学交流经验,是在弄不懂的地方就请教老师,我从中学到了很多知识以外的东西,比如说遇到问题后分析解决问题的方法、坚忍不拔和不耻下问的求知态度等等。特别是在程序设计阶段,虽然程序不是很复杂,但是由于是第一次接触,总感觉无从下手,最后通过查阅资料和反复试验最终把程序设计了出来。这次课程设计巩固了我以前所学过的知识,知识学得更深、更透彻,理论联系实际,很好地锻炼了我的发散思维能力和动手能力。这些对我以后的学习和工作会有很大的帮助,会产生巨大的影响。参考文献参考文献1李群芳.单片微型计算机及接口技术(第二版).北京:电子工业出版社.20052何立民. MCS-51

温馨提示

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

评论

0/150

提交评论