基于 STC89C51 的数字电压表课程设计报告

二、设计题目及要求2.1、题目及设计要求采用51系列单片机和ADC设计一个数字电压表,输入为0~5V线性模拟信号,输出通过数码管显示,要求显示两位小数。

数字电压表与一般模拟电压表相比,具有精度高、测量准确、读数直观、使用方便等优点。电压表数字化测量的关键是如何将随时连续变化的模拟量转换成数字量,完成这种转换的电路称为模数转换器(A/D)。数字电压表的核心部件是A/D转换器。由于A/D转换原理多种多样,形成了各种类型的DVM。一般来说,A/D转换方式可分为积分式和逐次逼近式两大类。积分式A/D转换器先用积分器将输入的模拟电压转换成时间或频率,然后再数字化。根据转换的中间量不同,又分为UT(电压-时间)型和UF(电压-频率)型。逐次逼近式A/D转换器又分为比较式和斜坡电压型。根据工作原理不同,比较式又分为逐次比较式和零平衡式。 斜坡电压型又分为线性斜坡型和阶跃斜坡型。在高精度数字电压表中,常采用积分型和比较型相结合的复合A/D转换器。本设计以8051单片机为核心,以逐次逼近型A/D转换器ADC0809,数码管显示器为主体,构建一个简易数字电压表,可测量1路0~5V直流电压,最小分辨率为0.02V。2.设计课题与要求2.1课题与设计要求利用51系列单片机与ADC设计一款输入0~5V线性模拟信号,输出通过数码管显示的数字电压表,要求显示两位小数。

2.2.主要技术指标 1.数字芯片A/D转换技术 2.单片机控制数码管显示技术 3.单片机数据处理技术 三.方案论证与选择 3.1主要设计框图如下: 数码管显示 单片机处理模数转换电压采集 数码管显示 单片机处理模数转换电压采集 3.2方案论证: 1.主控芯片 方案一:利用专用转换芯片INC7107实现电压测量与实现,用四位数码管显示最终转换电压结果,缺点是精度比较低,不能控制内部电压转换及控制部分,优点是价格低廉。 方案二:利用单片机AT89C51和A/D转换芯片ADC0809实现电压转换与控制,用四位数码管显示最终转换电压结果,缺点是价格稍贵; 优点是转换率高,可以控制转换过程和控制、显示部分。结合课程设计的要求,我选择了:方案二。 2.显示部分 方案一:使用4个单体共阴极数码管。优点是价格相对便宜;缺点是焊接麻烦,容易出错。 方案二:选择四路共阴极数码管,加四个三极管驱动器。此电路几乎没有缺点;优点是控制方便,价格低,焊接简单。结合课程设计的要求和美观度,我选择了:方案二。 4.电路设计原则 4.1设计原则介绍: 模拟电压经过切换至不同的分压电路进行筛选后,隔离干扰后送入A/D转换器进行A/D转换。

然后送到单片机进行数据处理,处理后的数据送到LED显示,同时通过串行通信与上层进行通信。硬件电路和软件程序。硬件电路大致可以分为A/D转换电路和数码管显示电路。各部分电路的设计及原理将在硬件电路设计部分详细介绍;程序设计采用C语言编程,并用Keil和PROTEUS软件进行编译和仿真。一般I/O接口芯片的驱动能力非常有限,在数码管显示接口电路中,输出端口所能提供的驱动电流一般不够,特别是在设计中需要多个LED时,选择数码管显示有很大的优势。本次实验采用AT89C51单片机芯片配合ADC0809模/数转换芯片,组成简易数字电压表,其原理电路如图1所示,该电路通过ADC0809芯片对从输入端口IN0输入的0~5 V模拟电压进行采样。 经过模/数转换后产生相应的数字量,通过其输出通道D0~D7传送至AT89C51芯片的P0、P2.1端口。AT89C51负责对接收到的数字量进行处理,生成7段数码管正确的显示段码,并通过其P1、P2端口传送给数码管,同时还通过其三位I/O口产生位选信号,控制数码管的亮与灭。此外,AT89C51还控制ADC0809的工作,其P2.4端口为ADC0809提供100KHz的工作时钟脉冲;P2.3控制ADC0808的地址锁存端(ALE);P2.3控制ADC0809的启动端(START);P2.0控制ADC0809的输出使能端(OE); P2.2控制ADC0809的转换结束信号(EOC)。

数据处理与控制模块数据处理与控制模块AT89C51P0P2显示模块4位集成LED数码管数据采集模块ADC0809控制信号输出显示AnalogDigitalLED位控制信号P1P34.2,模数转换电路原理图如下图所示。三个地址位ADDA、ADDB、ADDC都接低电平,这样就可以从ADC0809的IN0口输入要测量的外部电压。由于ADC0809在进行A/D转换时需要CLK信号,因此本设计利用AT89C51的定时中断,产生一个100KHZ的脉冲,从P2.4口送到ADC0809的时钟端,通过软件给它输入一个正脉冲,立即启动A/D转换。在软件设计上,由于我们对单片机知识还没有掌握得很好,所以采用的中断方式比较复杂,本程序的CPU工作量不大。 查询的方式不会影响速度,所以我们采用查询的方式,保证仿真的进度和准确性。 系统原理图 51系列51系列单片机 数据显示 A/D电压放大器 电压输入 在A/D转换开始前,逐次逼近寄存器SAR的内容为0,在A/D转换过程中,SAR存放的是“探测”的数字量,转换完成后,其内容即为A/D转换的结果数字量。 逻辑控制与时序电路在START正脉冲开始后工作,每有一个CLK脉冲到来,电路就可能告诉SAR发一个探测值,对应输出U0与U1进行比较,确定一个逼近值,经过8次逼近,即可得到最终的转换结果数字量。

这里EOC口的信号显示的是ADC0808的状态,当A/D转换开始时EOC为低电平,转换完成后输出高电平。 4.3.数据处理与控制 A/D转换完成后,单片机的P2.3口接收到高电平,立即通过P2.0将OE置1。ADC0809的三态输出锁存器打开,转换后的数字信号通过与D0~D7相连的P0口进入AT89C51。AT89C51根据公式1-1将数字信号转换成模拟量,然后用程序得到模拟量的每一位,分别通过P1口输出给LED。同时AT89C51会通过P1.0~P3.2端口选择哪一段LED显示传输的数据。例如当S4位选信号为高电平时,LED接收到的数据就会显示在LED的第四段上。 另外,AT89C51一旦获得数据就将ST置0,即模数转换器停止转换,直到LED获得新数据并显示出来后,ST才会被复位为1。由于AT89C51的转换速度很快(微秒级),所以不会影响它接收新的数据。五、主要器件介绍5.1 AT89C51单片机简介AT89C51是51系列单片机的一种,是美国ATMEL公司生产的。AT89C51是一款低电压、高性能CMOS 8位单片机,它将通用微处理器与Flash存储器融为一体,可反复擦写的Flash存储器可以有效降低开发成本。

AT89C51 有 PDIP、PQFP/TQFP、PLCC 三种封装形式,以满足不同产品的需要。 主要功能特点:低功耗空闲和掉电模式,软件设置休眠与唤醒功能。 兼容 MCS51 指令系统,8K 可反复擦写(1000 次)Flash ROM。 3 个 16 位可编程定时/计数器中断,时钟频率 0~24MHz。 32 个双向 I/O 口,256B 内部 RAM。 2 个串行中断,可编程 UART 串​​行通道。 2 个外部中断源,共 6 个中断源。 2 条读写中断线,3 级加密。 5.2. ADC0808 模数转换芯片介绍 ADC0809 是一种采样分辨率为 8 位,基于逐次逼近原理进行模/数转换的器件。 它内部有一个8路多路选择器,可根据地址码锁存译码信号,只选择8个模拟输入信号中的其中一个进行A/D转换。一般在硬件模拟时采用ADC0808做A/D转换,实际使用时采用ADC0809做A/D转换。引脚功能(外部特性)ADC0808芯片共有28个引脚,采用双列直插式封装,如右图所示。各引脚功能如下:1~5和26~28(IN0~IN7):8路模拟输入端。8、14、15和17~21:8位数字输出端。22(ALE):地址锁存使能信号,输入,高电平有效。 6(START):A/D转换启动脉冲输入端,输入一个正脉冲(宽度至少100ns)启动A/D转换(该脉冲上升沿复位0809,下降沿启动A/D转换)。

7(EOC):A/D转换结束信号,输出。当A/D转换结束时,此端输出高电平(转换期间一直为低电平)。 9(OE):数据输出使能信号,输入,高电平有效。当A/D转换结束时,给此端输入高电平,打开输出三态门,输出数字量。 10(CLK):时钟脉冲输入端。时钟频率要求不高于640KHZ。 12(VREF(+))和16(VREF(-)):参考电压输入端 11(Vcc):主电源输入端。 13(GND):地。 23~25(ADDA、ADDB、ADDC):3位地址输入线,用于选择8个模拟输入中的其中一个。 5.3. 4位共阴极数码管介绍 数码管有两种类型:一种是共阴极,一种是共阳极,本课程设计采用的是共阴极。 下面详细说明一下共阴极和共阳极的异同:图(b)左边为共阴极数码管,也就是数码管阴极接地,当时某一段亮,就必须接这一段高电平。共阴极数码管0~9的C51编码为:uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f};uchar code table[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};1没有小数点,2有小数点。

共阳就是数码管每段都接一个高电平,这样如果某段要点亮,那么该段就要接地。 6、部分电路介绍 6.1、晶振电路 接一个12MHz的晶振,根据芯片手册,并联一个22pf的微调电容比较合适,形成并联谐振,有助于稳定输出波形。 6.2、复位电路 AT89C51单片机至少需要两个高电平,这样单片机才能就绪,上电时由于电容电压不能突变,所以会输出高电平,当电容充电到一定程度时,就会输出低电平,单片机利用高电平输出的这段时间起到复位的作用。电阻、电容的值要选择合适,这里需要用到R1R2,所以选择R1=1,R2=10。 6.3 模拟输入电路 可变电阻一端接电源+5v,一端接地GND。 通过改变电阻的阻值,改变测量的电压值,实现电压的模拟信号输入。 6.4.显示电路 通过P1口控制四位共阴极数码管的段选,选择具体接口的低四位。值得注意的是P0需要接上拉电阻,否则P0会处于高阻状态。 6.5整体电路如下: 设计原理: 通过IN0输入模拟量,经ADC0809芯片转换后输出数字量到单片机的P0口,经过单片机处理后送给四位共阴极数码管显示。 6.6仿真结果如下: 七.程序设计 为了可以在C语言源程序中直接编写中断服务函数,KeilCx51编译器对函数的定义进行了扩展,增加了扩展关键字interrupt,它是函数定义中的一个选项,增加这个选项就意味着可以将一个函数定义为中断服务函数。

定义中断服务函数的一般形式为: 函数类型 函数名(形式参数表) [interrupt n] [using n] 由于ADC0808的CLOCK时钟频率不高于640KHZ,因此利用定时器T0的中断来产生时钟频率,可设置为: void t0(void)interrupt 1using 0 ADC0809的时序图如下: 从时序图中可以看出EOC只有在转换期间才为低电平,因此在AD转换开始前将EOC设置为低电平。 START在上升沿清除芯片内所有寄存器,当下降沿到来时开始转换,由于使用的时钟为100KHz,所以相对较慢,不需要延时。 等待转换结束,结束后输出其数字值。 根据上面的分析和原则,可以设计出程序流程图如下: 设计程序如下: #includeabsacc.h #includereg51.h #define uchar unsigned char #define uchar unsigned char #define uint unsigned int sbit START=P3^0; sbit OE=P3^1; sbit EOC=P3^2; sbit P07=P0^7; sbit CLK=P3^4; uchar data led[4]; uint data tvdata; uchar code tv[]={0xfe,0xfd,0xfb,0xf7}; uchar code a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(void) //延时程序 { uint i; for(i=0;i10;i++);}void ledxianshi(void)//显示模块{ uchar k,i; if(tvdata5000) tvdata=5000; led[0]=tvdata; led[1]=tvdata/10; led[2]=tvdata/100; led[3]=tvdata/1000;for(k=0;k4;k++) {P2=tv[k]; i=led[k]; P0=a[i]; if(k==3) {P07 =1;} delay(); }} void main(void){ ET0=1; EA=1; TMOD=0x02; TH0=216; TL0=216; TR0=1; while(1) { START=1; START=0;//开始转换while(EOC==0); OE=1; tvdata=P1; tvdata*=20-0.01; OE=0;ledxianshi();delay(); }}void t0(void)中断1using 0{CLK=~CLK;}8.硬件制作与测试 8.1.主要仪器及使用: 主要仪器:5V直流电源、剥线钳、数字万用表、万能电路板、烙铁、镊子、USB转串口线。

5V电源可从电脑USB口引出,使用烙铁时注意不要用手直接触摸。 调试电路的方法与技巧: (1)目测各种外围元器件或电路有无断点,有无虚焊。 (2)用万用表测试。目测时先用万用表检查有问题的点,再检查各种电源线、地线之间有无短路。 (3)通电测试。给板子通电,检查所有插座或器件电源端电压是否符合要求值。注意:给板子通电前,一定要确保电路板无短路。 8.2.硬件制作步骤: (1)焊接单片机最小系统并调试,检查能否下载程序、复位电路、

单片机

单片机课程设计之交通灯控制设计:原理、模拟与编程实现

2024-6-1 5:03:26

单片机

新疆伊宁县村民靠种黑树莓致富,年收入超 4 万元

2024-6-1 6:03:33

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索