数字电压表的设计毕业设计(共37页)

上传人:wz****p 文档编号:46403213 上传时间:2021-12-13 格式:DOC 页数:37 大小:477KB
返回 下载 相关 举报
数字电压表的设计毕业设计(共37页)_第1页
第1页 / 共37页
数字电压表的设计毕业设计(共37页)_第2页
第2页 / 共37页
数字电压表的设计毕业设计(共37页)_第3页
第3页 / 共37页
点击查看更多>>
资源描述
精选优质文档-倾情为你奉上华东交通大学理工学院Institute of Technology. East China Jiao tong University 毕 业 设 计 Graduation Design(2011 2015 年)题 目 数字电压表的设计 分 院: 电气与信息工程分院 专 业: 工程及其自动化 班 级: 电力2011-1 学 号: 学生姓名: 田唯迪 指导教师: 起讫日期: 2015-01-012015-05-10 摘 要在电子应用领域,工业自动化仪表已经有了非常广泛的应用。本文设计的数字电压表以AT89C51单片机为主要控制器件,利用ADC0808把模拟信号转换为数字信号并加以显示的电路。它的设计主要包括硬件电路和系统程序两部分设计。硬件电路主要是单片机最小设计模块、A/D转换模块和显示模块的设计,系统程序设计则是通过AT89C51单片机先将系统初始化,通过ADC0808转换芯片把模拟量转换成数字量,最后通过数码管显示数据。设计的数字电压表的测量范围为200mv10v,对直流电压进行测量。该电路功能强大,有报警系统,可控制测量范围,数码管显示精度高,可扩展性强等优点。数字电压表的应用在很多领域,有非常好的应用前景。对数字电压表进行研究很有必要性。这对我们研究单片机技术是很有帮助的。关键词:AT89C51;ADC0808;电压测量;A/D转换AbstractIn electronic applications, industrial automation instruments have a very wide range of applications. This design of a digital voltmeter to AT89C51 microcontroller as the main control device, use it ADC0808 analog signals into digital signals and display them circuit. Its design includes hardware and system design program in two parts. The hardware circuit design module is the smallest single-chip design A / D converter module and display module, system programming is through the first AT89C51 SCM system initialization, by ADC0808 converter chip to convert analog to digital, and finally through a digital display data. Measuring range designed digital voltmeter is 200mv-10v, DC voltage measurement. The circuit is powerful, alarm system, control measuring range, digital display and high precision, scalability and other advantages.Application of digital voltmeter in many areas, there is a very good prospect. Conduct research on the digital voltmeter very necessity. This single-chip technology for our study is helpful.Key words: T89C52; ADC0808; Voltage measurement;A/D converter目 录专心-专注-专业引 言数字电压表简称DVM,它是采用数字化测量技术,能将连续的模拟量(直流输入电压)转换成不连续的、离散的数字形式并加以显示的仪表。目前,数字电压表已被广泛用于电子电气测量、工业自动化仪表、自动测试系统等领域。数字电压表有很多优点:(1).通过数码管显示数字清晰直观,读数准确,相对于借用指针和刻度盘的读数有了很大的改进。(2).数码管显示位数多,能测量的范围更加广,用途更加广泛。(3).测量准确度高,误差越来越小。准确度表示测量结果与真实值的一致性,反映了测量误差的大小。(4).分辨率高。数字电压表测量灵敏度高,微小电压变化能在数码管的动态显示中显示。(5).扩展能力强。在数字电压表的基础上,可改造成用于不同工业领域的仪器仪表。(6).测量速率快。它取决于A/D 转换器的转换速率。测电压时,电表两端接触被测电压,数码管即刻显示被测电压数值,相对于指针和刻度盘测量更加稳定和便捷。(7).输入阻抗高。数字电言表在测量时从被测电路上吸取的电流极小,为显示更加精确,可以用放大电路放大电流,不会影响被测信号源的工作状态,能减小由信号源内阻引起的测量误差。(8).集成度高,耗能少。新型的数字电压表采用CMOS大规模集成电路,工作状态时功耗很低,电池可用时间长。(9).抗干扰能力强。(10)测量电压时系统恢复初始化,无需像指针式电压表那样置零。1 绪论1.1选题的依据及意义 微型单片机自上世纪70年代首次出现,因为其价格低而性能有很高,便于携带所占地方小、可以适配各种功能等等特点很快便引起了人们关注度,之后很多年的发展,现在常见于家用电器控制,节能设备、电子仪器、智能机器人等方向也有着广泛的应用,在军事设备、工业控制领域都用到单片机控制,可见现在的单片机更加微型,智能,在提高了产品的功能与质量同时,还降低了设计和使用成本。传统模式的电压表测量精度低,容易引入误差,测量范围小,功能简单,不能满足数字化时代的需求,很有必要选用既要精度高又要有很强的抗干扰能力,并且同时还需要满足扩展性强,外形小巧集成方便的芯片最为首选,体积小易于携带,还能与电脑端进行实时通信。现阶段,在电工检测方向、工业自动化仪表控制、智能自动测试系统中,由A/D 转换器作为核心器件的数字电压表被越来越广泛的应用,并且再有很大的份额和很强的生命力。由DVM技术发展而形成的通用及专用的更高级的数字仪器仪表也更多的应用在监测电量和非电量的测试中并且得到了较快的发展,也将这项技术提高到了崭新高度。1.2 国内外现状研究及发展趋势电子技术近20年的发展,微电子技术、计算机技术、集成技术、网络技术等高新技术越来越成熟。在这样的情况下,人们不断对数字电压表提出了更高的要求,加快了数字电压表的发展,技术人员要求数字电压表速度更快、性能更稳定,灵敏度更高、以及操作更方便,做到成本更低,样品量提供量更少、和零污染。数字电压表的发展大致如下:1. 新技术的广泛应用新的A/D转换技术于上世纪90年代初在世界许多国家研发。自动校准技术、A/D转换技术、资源再利用技术,使得数字电压表更加精度化、智能化、经济化、环保化,向着更高水平发展。 2. 智能化阶段 在电子技术、大规模集成电路及计算机技术日新月异的大背景下,人们很快研制出并量产了DVM数据处理和可编程程序在微处理器控制下的芯片,因为数字电压有数据存储器ROM并使用C软件编程,通过可进行信息处理,仪器仪表经过接口监测系统,从而进行自校、自检,自查三个步骤,以及高准确性的运行,这样便实现了监测系统的智能化当前,智能化的DVM的出现以及智能化仪表发展的良好态势,DVM将会成为未来的发展趋势,并且会得到更多领域的应用。这样为各种物理量的动态检测的实现提供了可能。1.3研究的主要内容本文介绍的一种简易数字电压表。主要是由AT89c51单片机控制,显示模块由A/D转换器和数码管控制,数据处理模块及显示模块组成,芯片由ADC0808采集到的模拟量转化为相应的数字量再传送到相应的模块处理中。芯片的主要任务是处理数据,并且把0808送来的数字量进行分析处理,再送到显示模块中显示,由于元件较少,成本低,测量精度和可靠性较高系统的数字电压表电路简单实现。2设计方案与论证2.1电压表功能设计(1)对直流电压的测量。(2)能对常见的交流信号的电压进行测量。(3)测量电压的范围从200mv到10V之间。(4)当输入电压过大时能够具有保护功能。(5)显示功能。(6)其它附加功能。2.2设计思路电压表由模拟和数字转换两大部分,电路应尽量采用中、大规模集成电路。(1)为了满足各方面的设计需求,选择AT89C51单片机为核心控制器件。(2)ADC0808和输入放大器用来用作A/D转换器,基准电源构成了模拟部分;数字部分由计数器、译码器、电流放大器、逻辑控制器、振荡器和显示器构成。数字量经由转换器将输入端输入的模拟量转换而成,与此同时产生控制信号并根据产生的频率,经过分析处理整合检测最终输出需要显示的数字。(3)电压显示采用两位一体的LED数码管。(4)LED数码的段码输入,由并行端口P0产生:位码输入,用并行端口P2低两位产生;小数点位由P2口产生。 2.3设计方案转换电路、A/D转换、单片机、时钟电路、复位电路、模拟电压输入构成了硬件设计电路 。硬件电路设计图如下图所示:图2-1 数字电压表总体设计方案图3系统硬件电路的设计 3.1单片机最小系统设计3.1.1 AT89C51单片机的主要特征AT89C51单片机的外形如图3-1所示:图3-1 AT89C51引脚图P0口引脚:这组引脚共有8个引脚,P0.0-P0.7这8个引脚有两种不同的功能,分别用于通用I/O口和对片外存储器的读/写数据,P0口的字节地址为80H,口的各位口线具有完全相同但又相互独立的逻辑电路,有一个锁存器两个三态输入缓冲器一个多路转接开关,实际控制中,P0口多数情况下都是作为地址/数据线使用。P1口引脚:只可作为普通的I/O口使用,在电路结构上和P0口不同,因为P1口只传送数据,所以不再需要转换开关,P1口是准双向口,P1口作为输出用时,可以独立对外提供推拉电流负载,外电路就不再需要上拉电阻,作为输入使用时,必须在锁存器写入1,使FET截止。P2口:P2口字节地址为0A0H,实际控制中为系统提供高位地址,这个功能和P0口一样,在电路中有一个多路转接开关,但是转接开关的一段不再是作为地址数据使用,二就是单一的作为地址用而控制功能是它的第二大功能,但是每个引脚不完全一样。ALE:地址锁,使地址锁存于使能端。访问外部存储器,如RAM、ROM。有51个外部总线,16位地址线,数据线为8,而低8位的地址跟数据线是重合,所以单独访问低8位的地址和数据,这就需要用到ALE信号。访问存储器的时候,P2口输出高地址,P0输出低地址。利用外部的锁存器(设计用74HC245存储器)配合ALE脉冲,锁存P0地址,这时读写信号开始起作用,P0口读入或者输出数据。RST:单片机复位电路,当单片机系统在运行中受到环境干扰时,程序运行若有错误,及时按复位按钮,系统电路将自动初始化,起重置作用。在设计时单片机系统如上图3.1P0口接收由ADC0808送来的数据,然后通过P1口将数据送给LED显示器,通过显示器将数值都显示出来。3.1.2 时钟电路单片机中指令执行都需要在晶振产生的固有频率下进行,按节拍有顺序的一次进行下去,而单片机时钟脉冲是由时序电路发出的。单片机芯片内部有一个串联的反相放大器来增强震荡器高增益,XTAL1为输入端,XTAL2为输出端,用一个晶振和 2个30uf的电容构成时钟电路,如下图所示:图3-2 时钟电路电路中的器件选择有三种方法,一是通过计算,二是实验确定,三是参考一些典型电路,电容器C1和C2取值范围是30±10uF,本文选择了30uF的电容,这样会对对震荡频率起到调节的作用电路产生的时钟信号震荡频率由石英晶振来决定,最高可选24MHz,本系统中选择6MHz作为时钟信号的震荡频率。3.1.3 复位电路复位电路是用来返回到电路设备初始化状态的电路,的上电复位电路,只要在复位输入引脚上接一电容在ACC上端,下端接地就行了。C型单片机,由于在RST端内部有一个下拉电阻,故可拆除外部电阻,外接电容减至10uF。上电复位的工作过程:在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,RST端的高电平持续时间取决于电容的充电时间。加在RST端的高电平信号要维持足够长的时间才能保证系统可靠复位。一般来说复位方式有上电自动复位和按钮复位两种。图3-3是AT89c51单片机的上电复位和按钮复位组合电路。图3-3 复位电路3.2 A/D转化模块 现实中大多数都是模拟量,这样并不能被我们直接采用,所以人们研制了数字量的器件,它能把模拟的物理量转变成我们能够利用的数字量,这是单片机几桶收集整理转变数据的关键,在电路设计中必不可少,经过人们不断努力改进,现在的转换器已经具备了很强的抗干扰能力,转换精度十分准确,性能强,价格低廉,种类多,常用的有逐次逼近型,双重积分型等。逐次逼近式A/D转换的转换速度和精度都比双积分型更高,ADC0808转换器可以与单片机连接,把转换得到的数字量送入单片机,并对数字量进行分析和显示。每个位比较一次,那么一个n位久需比较n次,这过程中所消耗的由位数和单片机时钟周期来共同决定,因为现实中更注重效率,而逐次逼近型A/D转换器转换速度快,在现实的生产生活中被大量采用。3.2.1 A/D转化器的工作原理转换器要想工作,必须先做几个步骤如寄存器每一个都必须归零,开始转换工作时,必须将最高位置高电也就是置1才能把数据送入转换器中进行转换,转换后的结果与输入时的比较,若经转换的模拟量小于输入的模拟量,则1被保留,如转换的模拟量大于输入的模拟量,则1不保留,接着第二位第三位第四位并最终到最低位,最终寄存器中所存储的便是输入模拟量所对应的二进制的数字量。3.2.2 ADC0808主要特征ADC0808是有使能控制端和微机直接接口的CMOS单片型逐次逼近式A/D转换器,首先应用在智能仪器和机床控制领域片内可以对模拟电压信号对8路同时进行转换,之所以这么做,是因为ADC0808与其他相比有着先天的优势:第一,它是8路8位的转换器;其次,8路模拟开关并具有锁存控制功能再次可以接各种微控制器口;第三,锁存三态,与TTL转换电压低且精度高低功耗等特点。 ADC0808的外部引脚特征:ADC0808有28条引脚,其引脚图如下所示:图3-4 ADC0808的引脚图下面说明各个引脚功能:IN0-IN7(8条):用来进行输入控制转换模拟电压。地址控制:ALE为地址输入锁存许可线,输入高电平时有效,当ALE置高电平时,做为地址输入线使用。START:启动信号脉冲线,正脉冲宽度不小于100ns,否则无法启动,EOC: 标志着转换结束的输出线,电位处于高电平时则表示A/D转换已经结束,且数字量自动锁入锁存器中。D1-D8:数字量输出端口,D8位最低位,D1位最高位。OE:输出允许端,高电平时,把转换后的数字量通过D1-D8引脚上输出。REF+、REF-:输入电压参考量,指给电阻阶梯网络的参考电压和标准值。Vcc、GND: Vcc一般R与EF+连接在一起为主电源输入端,地端是GND与REF-连接在一起,这样便是VCC ,GND的作用。转换器和单片机的链接,如下图:图3-5转换器和单片机的链接3.3显示模块设计3.3.1数码管介绍本文的电压值是选用LED数码管来显示的。LED数码管由8个发光二极管组成,其中7个按“8”字型排列,还有一个是位于右下角且发光管的圆点形状为dp,用来显示小数点。LED有低功耗、亮度强、线路简单、寿命长等优点,数码管的引脚图如图3-6所示:图3-6数码管引脚排列发光二极管有两种接法,分别是共阳极接法和共阴极接法,把8个点连在一起,高电平在公共端接入的叫共阳极,低电平在公共端接入的叫共阴极。数码管有静态和动态两种显示方式。静态显示,就是指一个I/O端口只能控制一个数码管的段码数据。这样各个数码管显示相对独立,每个数码管接收的显示字符一经确定,相应I/O口的输出段码将保持不变,直到显示下一个字符,此特点使得数码管的显示亮度也较高。但是也存在着缺点,大量的I/O端口在数码管过多时将被占用。动态显示,指逐位地点亮显示器的各个位,点亮一次显示器的亮度与间隔时间、导通电流和点亮时间的比例三者相关。动态显示的亮度要比静态显示要暗,所以在选择静态显示电路中的限流电阻应该要大于限流电阻时阻值,防止数码管损坏。采用了自动显示8路模拟电压值动态显示对于设计的实现非常容易。3.3.2数码管显示模块电路数码管要求的驱动电流在10mA20mA,为防止数码管灌入的电流太大,超出了单片机允许的电流范围而导致器件损坏,在P1口输出段码显示处,要加入10K的限流电阻排阻,一共8个同阻值的电阻,分别对应LED的8个接口,既保护数码管,又简单电路。本设计选用软件译码的方式来简化电路和进行数值显示。显示电路采用LED数码管通过软件译码动态显示,通过单片机的P1、P3.2、P3.3、P3.5口控制。通过译码器驱动将依次循环点亮数码管,如图3-7所示:图3-7 数码管电路3.3.3 LED数码管与单片机接口设计LED驱动电路设计是一个很重要的问题,单片机的I/O口产生的电流并不能直接驱动LED,驱动电路能力太差,这样就会导致显示器亮度低,这时,只要用驱动电路产生足够的电流,LED就能正常工作。在LED驱动电路的设计过程中,可以利用上拉电阻解决这种问题,就是可以在LED的DP引脚到P0口和7段显示引脚之间接上上拉电阻,以此来增强P0口的驱动能力,LED以正常的亮度运行。如图3-8所示。图3-8 数码管与单片机的链接3.4 高阻隔放大电路 采用LM324运放构成的前级信号调理电路,作为衰减信号的缓冲,提高输出阻抗,电压不变,电流增大,保证输出稳定并减小后级电路对信号的影响,避免冲击电压对运放的危害,加一个电容保护电路。图3-9 高阻隔放大电路3.5 总体电路设计总结以上的设计,利用protues软件绘制出简易的数字直流电压表电路原理图。数字直流电压表电路图的工作原理是:输入模拟电压,对模拟电压信号进行处理然后再由ADC0808的IN0通道进入,这样经过转换后的数字量经过D0-D7输出通道再传送给单片机芯片的P1口,接收到的数字量可以通过AT89C51进行数据处理,通过P0口输出给译码器,从而7段数码管的显示段码再传送给74HC245译码然后去驱动LED,还控制P2.0、P2.1、P2.2的段选以及小数点。此外,AT89C51还控制ADC0808的工作,单片机AT89C51通过从ALE引脚输出方波,接到ADC0808的CLOCK,P3.0发正脉冲启动A/D转换,A/D转换完成产生中断,单片机进入中断程序,从P1口读取转换的P3.1置高电位,然后送给LED显示。总体电路设计完毕,利用Proteus制出硬件的原理结构图,并作相应的检查、修改、及测试,直至完成完善的硬件原理结构图。本设计目的是能对电压进行测量,显示的功能和其他相应的软件配合。如图3-10所示:图3-10 系统电路图4 程序设计4.1主程序流程图主程序流程分成3个模块,初始化模块,显示A/D转换子程序模块和子程序模块构成的。第一步,开始,系统自动回到初始化状态,此时,A/D转化子程序启动,将输入的模拟信号转化为数字信号,测量限值比较,若输入的模拟电压大于电压表的测量范围,则系统蜂鸣器报警且输出电压表测量电压最大值,若输入电压小于测量范围,则系统正常运行且输出准确电压,接着显示子程序启动,数字信号通过LED显示板显示数值,流程结束。如下图所示:图4-1 数字电压表主程序框图启动电源前,系统自动复位,蜂鸣器关闭,LED显示关闭,定时器初始化。启动电源,输入被测模拟电压值,经过A/D转换程序,译码器获得电压数值,通过LED显示器显示,此时判断被测电压是否超出测量范围,若超出,蜂鸣器报警,输出测量范围最大值;若正常,则输出准确电压。另外,还可设置系统电压的测量范围,通过限制设置一栏设定想要的测量范围。主程序核心代码:/主程序void main()int value; /电压数据unsigned int delay_count=0; /延时计数BUZ=0; /上电先关闭蜂鸣器LED=1; /关LEDTimerInit(); /定时器初始化while(1)delay_count+; /延时计数+1if(delay_count>5000)delay_count=0; /延时计数清0value=GetValue(); /获取电压ValueDis(value);/显示电压if(value<=valueMAX) /电压正常BUZ=0; /关蜂鸣器LED=1; /关LEDb_over=0; /超限标志else /电压超限b_over=1; /超限标志if(KEY1 = 0)/按键1-设定限值while(!KEY1); /等待按键松开SetFun(); /设定限值4.2 A/D转换子程序流程图模拟输入电压经过ADC0808转换成数值,再经过A/D转换子程序移入相应的存储单元中,输入电压与A/D转化结果对比,正确则输出转换结果,错误则重新对比,将正确的输出结果进行数值转换,以数值形式显示结果,显示阶段出现问题则重新回到启动转化阶段重复循环,显示正确数值后A/D转换子程序结束。流程如图4-2所示,转换子程序经过一段时间调用一次。图4-2 A/D转化流程图开始后,锁存通道地址,复位电路自动复位,延时3毫秒,下降沿启动转换,延时,设置ADOE=1时,引脚置为读,当输入ADOE=1,等待转换,通过ADC0808允许数据输出,译码器读取AD数据,反之,当输入ADOE=0时,禁止数据输出,且返回AD数据。A/D转换程序代码:/读ADC数据u8 ReadData()u8 adda;ADALE=1;ADALE=0; /锁存通道地址 ADSTART=1; /上升沿复位Delayms(3); /延时几毫秒ADSTART=0; /下降沿启动转换Delayms(3); /延时几毫秒ADEOC=1; /引脚置为读while(!ADEOC); /等待转换结束ADOE=1; /数据输出允许adda=ADCPORT; /读取AD数据ADOE=0; /数据输出禁止return adda; /返回AD数据4.3显示子程序显示子程序采用动态显示实现数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的均匀稳定,还要有足够的亮度,需要设置适当的扫描频率,设置扫描频率在70HZ左右时,能够产生比较好的显示效果。在protues仿真中输入的电压比较稳定,所以在显示中看不到动态的效果。4.4编程软件keil介绍Keil是一款非常强大的软件,它的库函数非常丰富,在Windows系统中功能强大,Keil 51生成的效率高而且语句简单易懂,所以Keil被广泛应用于开发编程软件。开发人员发现C语言在功能强大,结构性、可读性、可维护性上都有明显的优势,移植性好,现在多数技术人员需要熟练掌握好C语言的编程,这对学习单片机有更多的好处。5 仿真与调试5.1 protues仿真的介绍Proteus是一款EDA工具软件,它可以对电路系统进行仿真,也可以对单片机及其他器件仿真,国内外普遍使用protues进行仿真,此软件的功能在非常完善,仿真的效果与实物的测试,两者误差非常小,很实用的软件。智能原理图设计中,电路元件种类齐全,电路仿真功能完善,支持多数CPU类型、支持外设、实时仿真、编译及调试、实用的PCB设计平台,这些都是Proteus主要功能。Proteus功能特点:1PCB自动或人工布线2原理布图3SPICE电路仿真特点是:1.互动的电路仿真2.仿真处理器及其外围电路5.2 protues仿真电路图图5-1 仿真图5.3仿真结果左键双击单片机AT89C51,弹出如图5-2所示一个菜单,点击program file找到程序所在的位置。载入程序。就可以进行模拟测试了。图5-2 载入程序示意图载入程序完成后,就可以开始仿真了,点击软件中的运行按钮,单片机中的程序开始运行。通过改变被测的模拟电压来显示实际环境下电压的改变,当数码管所显示的数值和输入被测电压的数值接近时,说明系统设计正确。系统电压输入到被测电压显示存在一定的误差,该误差可能是分压系数的引起、电磁干扰引起、放大器的非理想特性引起等等。当IN0口输入电压为0时,数码管显示0.0。显示结果如图5-3:图5-3 仿真效果图当INT0输入为5.05V时,对应的显示结果如图5-4所示:图6-4 仿真效果图当INT0口输入为9.85V时,与输出结果稍微有点误差,对应的输出结果如图5-5所示:图5-5 仿真效果图当输入电压10.5V时,被测电压超过数字电压表测量范围,报警器鸣笛报警。显示最高测量电压为10V。图5-6 仿真效果图仿真成功。总 结本设计是我第一次设计的电路,利用Proteus的仿真与实现。在这个过程中,我学到了许多课外的知识,提高了自己思考和设计的能力,对使用单片机有新的体会。通过本设计利用Proteus和Keil软件,我也学到了很多知识,在硬件设计、系统程序编程、功能模块划分、设计原理图和电路仿真设计的过程中,积累了很多经验。基于单片机的数字电压表功能强大,它结构简单,电路原理易懂,成本低,用到外部元件少,能够在实践中很好地工作,测量电压精度高。该系统的功能,得到了理想的效果,在系统硬件设计有可扩展性,增加了限值电压测量范围,过压报警等功能。本设计实现了对简易数字电压表的测量电压的功能,详细描述了电路原理,设计与仿真,绘画出电路原理图及软件调试。通过本次设计,加深了我对单片机的认知,体积虽小,但有着强大功能。本设计采用AT89C51单片机,功能更完善,应用领域更广泛。该设计也可用于模数转换芯片ADC0808,在单一的课程对知识的理论有一个初步的了解。通过本设计,对数字电压表的工作原理,有一个更深的了解。该电路的设计和仿真,基本满足设计要求。以后的实践过程中,我仍会认真学习电路设计的理论知识,理论联系实际,争取在电路设计的取得更多的进步。参考文献1谢自美.电子线路设计实验测试(第二版)M,.武汉:华中科技大学出版社,2000.2张文祥.单片机系统设计与开发教程M.北京:电子工业出版社,2011.3刘宏.Protel电路设计实用指南M.西安:西安电子科技大学出版,2004.4陈明荧.8051单片机课程设计实训教材M.北京:清华大学出版社.5孟祥莲.单片机原理及应用:基于Proteus与KeilCM.北京:哈尔滨工业大学出版社,2010.6周润景.PROTEUS入门实用教程M.北京:机械工业出版社,2006.附 录1. 电路原理图。2. 程序代码。#include <reg52.h>#define u8 unsigned char#define u16 unsigned int#define uint unsigned int#define uchar unsigned char /宏定义sbit KEY1 = P30; /按键1sbit KEY2 = P31;/按键2sbit KEY3 = P32;/按键3sbit LED = P26; /LEDsbit BUZ = P27;/蜂鸣器#define SEGSELECT P2 /数码管位选#define SEGDATA P0 /数码管数据端口sbit ADALE =P34; /ADC0808地址锁存允许信号(高有效)sbit ADOE =P37; /ADC0808数据输出允许信号(高有效)sbit ADEOC =P36; /ADC0808转换结束信号(输出高)sbit ADSTART=P35; /ADC0808转换启动脉冲(至少100ns,上升沿复位,下降沿启动转换)#define ADCPORT P1 /ADC0808数据端口char code segcode22=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,/无点(共阳) 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,/有点(共阳) 0xff,0xbf; /不显示,-(共阳)char disbuf4;/显示缓存char seg=0;/显示位指示int valueMAX=900; /默认电压上限9V,超过9V会报警bit b_over=0; /超限标志/延时(单位:ms)void Delayms(int d)int i,j;for(i=0;i<d;i+)for(j=0;j<100;j+);/定时器初始化void TimerInit()TMOD=0x11;IP =0x02; /中断优先级设置(该句允许T0中断嵌套进T1中断)TH0=0xaa;TL0=0xaa;TH1=0x00;TL1=0x00;ET0=1;ET1=1;EA=1;TR0=1;TR1=1;/读ADC数据u8 ReadData()u8 adda;ADALE=1;ADALE=0; /锁存通道地址 ADSTART=1; /上升沿复位Delayms(3); /延时几毫秒ADSTART=0; /下降沿启动转换Delayms(3); /延时几毫秒ADEOC=1; /引脚置为读while(!ADEOC); /等待转换结束ADOE=1; /数据输出允许adda=ADCPORT; /读取AD数据ADOE=0; /数据输出禁止return adda; /返回AD数据/定时器0中断处理,负责显示void Timer0ISR() interrupt 1TR0=0;SEGSELECT=seg|(SEGSELECT&0xfc);SEGDATA=segcodedisbufseg;seg+;if(seg>3) seg=0;TH0=0xee;TL0=0xee;TR0=1;/定时器1中断处理void Timer1ISR() interrupt 3static char n=0; /中断计数TR1=0;n+;if(n=10)n=0;if(b_over) /超限BUZ=!BUZ;LED=!LED;TH1=0x00;TL1=0x00;TR1=1;/显示电压void ValueDis(int dat)if(dat<1000)disbuf0=20; /不显示disbuf1=dat/100+10; /百位disbuf2=dat%100/10; /十位disbuf3=dat%10; /个位elsedisbuf0=dat/1000; /千位disbuf1=dat%1000/100+10; /百位disbuf2=dat%100/10; /十位disbuf3=dat%10; /个位/设定限值void SetFun()ValueDis(valueMAX); /显示上限while(1)if(KEY1 = 0) /按键2-退出设定while(!KEY1); /等待按键松开break; /退出else if(KEY2 = 0) /按键3-减if(valueMAX>10) valueMAX-=10; /减1ValueDis(valueMAX); /显示上限while(!KEY2); /等待按键松开else if(KEY3 = 0) /按键4-加if(valueMAX<1000) valueMAX+=10; /加1ValueDis(valueMAX); /显示上限while(!KEY3); /等待按键松开/获取电压int GetValue()u8 addata;float tem;addata=ReadData(); /读取AD转换tem=(float)addata;tem=tem*1.9608*2.0;return (int)tem;/主程序void main()int value; /电压数据unsigned int delay_count=0; /延时计数BUZ=0; /上电先关闭蜂鸣器LED=1; /关LEDTimerInit(); /定时器初始化while(1)delay_count+; /延时计数+1if(delay_count>5000)delay_count=0; /延时计数清0value=GetValue(); /获取电压ValueDis(value);/显示电压if(value<=valueMAX) /电压正常BUZ=0; /关蜂鸣器LED=1; /关LEDb_over=0; /超限标志else /电压超限b_over=1; /超限标志if(KEY1 = 0)/按键1-设定限值while(!KEY1); /等待按键松开SetFun(); /设定限值
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!