当前位置:文档之家› 单片机数字电压表设计报告

单片机数字电压表设计报告

单片机数字电压表设计报告
单片机数字电压表设计报告

《单片机原理与接口技术》

课程设计报告

姓名梁家余

学号 0314

院系自机学院

班级电气三班

指导教师黄钺冯维杰王玮

2012 年 06月

目录

4) LED显示器与单片机接口设计 (9)

9.程序设计 (11)

1)程序设计总方案 (11)

2)系统子程序设计 (11)

(1)初始化程序 (11)

10.仿真 (12)

1)软件调试 (12)

11.显示结果及误差分析 (13)

二、总结 (14)

三、参考文献 (15)

四、附录 (15)

一、单片机数字电压表设计

1.设计任务

基于MCS-51系列单片机AT89C51,设计一个能测量0~5V直流电压的数字电压表 2.设计要求

1)选用A/D转换器ADC0808,测定0——+5V范围内的直流电压值。

2)采集的数据送四位数码管实时显示。

3)@实现多路电压循环测量和循环显示。

4)@实现0——500mA电流的测量和显示。

5)实现功率的测量。

3. 设计思路

1)根据设计要求,选择AT89C51单片机为核心控制器件。

2)A/D转换采用ADC0808实现,与单片机的接口为P1口和P2口的高四位引脚。

3)电压显示采用4位一体的LED数码管。

4)LED数码的段码输入,由并行端口P0产生:位码输入,用并行端口P2低四位

4) LED显示器与单片机接口设计 (9)

9.程序设计 (11)

1)程序设计总方案 (11)

2)系统子程序设计 (11)

(1)初始化程序 (11)

10.仿真 (12)

1)软件调试 (12)

11.显示结果及误差分析 (13)

二、总结 (14)

三、参考文献 (15)

四、附录 (15)

产生。

4.硬件电路设计

1)转换过程如下:

开始时,寄存器各位清零,转换时,先将最高位置1,把数据送入A/D转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入的模拟量大,则1不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟量对应的二进制数字量[5]。其原理框图如图1所示:

图1 逐次逼近式A/D转换器原理图

2) ADC0808主要特性

ADC0808是CMOS单片型逐次逼近式A/D转换器,带有使能控制端,与微机直接接口,片内带有锁存功能的8路模拟多路开关,可以对8路0-5V输入模拟电压信号分时进行转换,由于ADC0808设计时考虑到若干种模/数变换技术的长处,所以该芯片非常适应于过程控制,微控制器输入通道的接口电路,智能仪器和机床控制等领域。

ADC0808主要特性:8路8位A/D转换器,即分辨率8位;具有锁存控制的8

路模拟开关;易与各种微控制器接口;可锁存三态输出,输出与TTL兼容;转换时间:128μs;转换精度:%;单个+5V电源供电;模拟输入电压范围0- +5V,无需外部零点和满度调整;低功耗,约15mW。

3) ADC0808的外部引脚特征

ADC0808芯片有28条引脚,采用双列直插式封装,其引脚图如图2所示。

图2 ADC0808引脚图

下面说明各个引脚功能:

IN0-IN7(8条):8路模拟量输入线,用于输入和控制被转换的模拟电压。

地址输入控制(4条):

ALE:地址锁存允许输入线,高电平有效,当ALE为高电平时,为地址输入线,用于选择IN0-IN7上那一条模拟电压送给比较器进行A/D转换。

ADDA,ADDB,ADDC:3位地址输入线,用于选择8路模拟输入中的一路,其对应关系如表1所示:

地址码

对应的输入通

C B A

START:START为“启动脉冲”输入法,该线上正脉冲由CPU送来,宽度应大于100ns,上升沿清零SAR,下降沿启动ADC工作。

EOC: EOC为转换结束输出线,该线上高电平表示A/D转换已结束,数字量已锁入三态输出锁存器。

D1-D8:数字量输出端,D1为高位。

OE:OE为输出允许端,高电平能使D1-D8引脚上输出转换后的数字量。

REF+、REF-:参考电压输入量,给电阻阶梯网络供给标准电压。

Vcc、GND: Vcc为主电源输入端,GND为接地端,一般REF+与Vcc连接在一起,REF-与GND连接在一起。

CLK:时钟输入端。

5. 单片机系统

1) AT89C51各引脚功能

AT89C51提供以下标准功能:4KB的Flash闪速存储器,128B内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路,同时,AT89C51可降至0Hz静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作,掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有工作直到下一个硬件复位。AT89C51采用PDIP 封装形式,引脚配置如图3所示。

图3 AT89C51的引脚图

AT89C51芯片的各引脚功能为:

P0口:这组引脚共有8条,为最低位。这8个引脚有两种不同的功能,分别适用于不同的情况,第一种情况是89C51不带外存储器,P0口可以为通用I/O 口使用,用于传送CPU的输入/输出数据,这时输出数据可以得到锁存,不需要外接专用锁存器,输入数据可以得到缓冲,增加了数据输入的可靠性;第二种情况是89C51带片外存储器,在CPU访问片外存储器时先传送片外存储器的低8位地址,然后传送CPU对片外存储器的读/写数据。P0口为开漏输出,在作为通用I/O使用时,需要在外部用电阻上拉。

P1口:这8个引脚和P0口的8个引脚类似,为最高位,为最低位,当P1口作为通用I/O口使用时,的功能和P0口的第一功能相同,也用于传送用户的输入和输出数据。

P2口:这组引脚的第一功能与上述两组引脚的第一功能相同即它可以作为通用I/O口使用,它的第一功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但并不是像P0口那样传送存储器的读/写数据。

P3口:这组引脚的第一功能和其余三个端口的第一功能相同,第二功能为控制功能,每个引脚并不完全相同,如下表2所示:

Vcc为+5V电源线,Vss接地。

ALE:地址锁存允许线,配合P0口的第二功能使用,在访问外部存储器时,89C51的CPU在引脚线去传送随后而来的片外存储器读/写数据。在不访问片外存储器时,89C51自动在ALE线上输出频率为1/6震荡器频率的脉冲序列。该脉冲序列可以作为外部时钟源或定时脉冲使用。

/EA:片外存储器访问选择线,可以控制89C51使用片内ROM或使用片外ROM, 若/EA=1,则允许使用片内ROM, 若/EA=0,则只使用片外ROM。

/PSEN:片外ROM的选通线,在访问片外ROM时,89C51自动在/PSEN线上产生一个负脉冲,作为片外ROM芯片的读选通信号。

RST:复位线,可以使89C51处于复位(即初始化)工作状态。通常89C51复位有自动上电复位和人工按键复位两种。

XTAL1和XTAL2:片内震荡电路输入线,这两个端子用来外接石英晶体和微调电容,即用来连接89C51片内OSC(震荡器)的定时反馈回路。

6. 复位电路和时钟电路

1)复位电路设计

单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST,采用施密特触发输入。当震荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保时器件复位[1]。复位完成后,如果RST端继续保持高电平,MCS-51就一直处于复位状态,只要RST恢复低电平后,单片机才能进入其他工作状态。单片机的复位方式有上电自动复位和手动复位两种,图4是51系列单

片机统常用的上电复位和手动复位组合电路,只要Vcc上升时间不超过1ms,它们都能很好的工作。

图4 复位电路

2)时钟电路设计

单片机中CPU每执行一条指令,都必须在统一的时钟脉冲的控制下严格按时间节拍进行,而这个时钟脉冲是单片机控制中的时序电路发出的。CPU执行一条指令的各个微操作所对应时间顺序称为单片机的时序。MCS-51单片机芯片内部有一个高增益反相放大器,用于构成震荡器,XTAL1为该放大器的输入端,XTAL2为该放大器输出端,但形成时钟电路还需附加其他电路。

本设计系统采用内部时钟方式,利用单片机内部的高增益反相放大器,外部电路简单,只需要一个晶振和 2个电容即可,如图5所示。

图5 时钟电路

电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数,电路中,电容器C1和C2对震荡频率有微调作用,通常的取值范围是30±10pF,在这个系统中选择了33pF;石英晶振选择范围最高可选24MHz,它决定了单片机电路产生的时钟信号震荡频率,在本系统中选择的是12MHz,因而时钟信号的震荡频率为12MHz。

7. LED显示系统设计

1) LED基本结构

LED是发光二极管显示器的缩写。LED由于结构简单、价格便宜、与单片机接口方便等优点而得到广泛应用。LED显示器是由若干个发光二极管组成显示字段的显示器件[6]。在单片机中使用最多的是七段数码显示器。LED七段数码显示器由8个发光二极管组成显示字段,其中7个长条形的发光二极管排列成“日”

字形,另一个圆点形的发光二极管在显示器的右下角作为显示小数点用,其通过不同的组合可用来显示各种数字。LED引脚排列如下图6所示:

图6 LED引脚排列

2)LED显示器的选择

在应用系统中,设计要求不同,使用的LED显示器的位数也不同,因此就生产了位数,尺寸,型号不同的LED显示器供选择,在本设计中,选择4位一体的数码型LED显示器,简称“4-LED”。本系统中前一位显示电压的整数位,即个位,后两位显示电压的小数位。

4-LED显示器引脚如图7所示,是一个共阴极接法的4位LED数码显示管,其中a,b,c,e,f,g为4位LED各段的公共输出端,1、2、3、4分别是每一位的位数选端,dp是小数点引出端,4位一体LED数码显示管的内部结构是由4个单独的LED组成,每个LED的段输出引脚在内部都并联后,引出到器件的外部。

图7 4位LED引脚

对于这种结构的LED显示器,它的体积和结构都符合设计要求,由于4位LED阴极的各段已经在内部连接在一起,所以必须使用动态扫描方式(将所有数码管的段选线并联在一起,用一个I/O接口控制)显示。

3) LED译码方式

译码方式是指由显示字符转换得到对应的字段码的方式,对于LED数码管显示器,通常的译码方式有硬件译码和软件译码方式两种。

硬件译码是指利用专门的硬件电路来实现显示字符码的转换。

软件译码就是编写软件译码程序,通过译码程序来得到要显示的字符的字段码,译码程序通常为查表程序。

本设计系统中为了简化硬件线路设计,LED译码采用软件编程来实现。由于本设计采用的是共阴极LED,其对应的字符和字段码如下表3所示。

表3 共阴极字段码表

4) LED显示器与单片机接口设计

由于单片机的并行口不能直接驱动LED显示器,所以,在一般情况下,必须采用专用的驱动电路芯片,使之产生足够大的电流,显示器才能正常工作。如果驱动电路能力差,即负载能力不够时,显示器亮度就低,而且驱动电路长期在超负荷下运行容易损坏,因此,LED显示器的驱动电路设计是一个非常重要的问题。

为了简化数字式直流电压表的电路设计,在LED驱动电路的设计上,可以利用单片机P0口上外接的上拉电阻来实现,即将LED的A-G段显示引脚和DP 小数点显示引脚并联到P0口与上拉电阻之间,这样,就可以加大P0口作为输出口的驱动能力,使得LED能按照正常的亮度显示出数字,如图8所示。

图8LED与单片机接口间的设计

8. 总体电路设计

经过以上的设计过程,可设计出基于单片机的数字直流电压表硬件电路原理图如图9所示。

图9基于单片机的数字电压表proteus仿真

此电路的工作原理是:+5V模拟电压信号通过变阻器VR1分压后由ADC08008的IN7通道进入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低电平),经过模/数转换后,产生相应的数字量经过其输出通道D0-D7传送给AT89C51芯片的P1口,AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码传送给四位LED,同时它还通过其四位I/O口、、、产生位选信号控制数码管的亮灭。此外,AT89C51还控制ADC0808的工作。其中,单片机AT89C51

通过定时器中断从输出方波,接到ADC0808的CLOCK,发正脉冲启动A/D转换,检测A/D转换是否完成,转换完成后,置高从P1口读取转换结果送给LED显示出来。

数字直流电压表的硬件电路已经设计完成,就可以选取相应的芯片和元器件,利用Proteus软件绘制出硬件的原理,并仔细地检查修改,直至形成完善的硬件原理图。但要真正实现电路对电压的测量和显示的功能,还需要有相应的软件配合,才能达到设计要求。

9.程序设计

1)程序设计总方案

根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图10所示。

图10 数字式直流电压表主程序框图

2)系统子程序设计

(1)初始化程序

所谓初始化,是对将要用到的MCS-51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等。

(2) A/D转换子程序

A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图11所示。

图11 A/D转换流程图

(3)显示子程序

显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。

在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。

10.仿真

1)软件调试

软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成单片机系统原理图电路绘制、PCB设计,

更为显著点的特点是可以与u Visions3 IDE工具软件结合进行编程仿真调试。

本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真我采用的是Proteus软件,而程序方面,采用的是汇编语言,用Keil软件将程序写入单片机.

11.显示结果及误差分析

显示结果

1.)当IN0输入电压值为时,显示结果如图12所示。测量误差为。

图12 输入电压为时,LED的显示结果为238mv

2.) 当IN0口输入电压值为时,显示结果如图13。测量误差为。

图13 输入电压为时,LED的显示结果为2540mv

误差分析

通过以上仿真测量结果可得到数字电压表与“标准”数字电压表对比测试表,如下表4所示

由于单片机AT89C51为8位处理器,当输入电压为时,ADC0808输出数据值为255(FFH),因此单片机最高的数值分辨率为(5/255)。这就决定了电压表的最高分辨率只能到,从上表可看到,测试电压一般以的幅度变化。从上表可以看出,简易数字电压表测得的值基本上比标准电压值偏大,这可以通过校正ADC0808的基准电压来解决。因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。

二、总结

经过一段时间的努力,课程设计基于单片机的数字电压表基本完成。但设计中的不足之处仍然存在。在电路中用Proteus软件实现了仿真,在这过程中,使我对电路设计和单片机的使用等都有了新的认识。通过这次设计学会了Proteus和Keil软件的使用方法,掌握了从系统的需要、方案的设计、功能模块的划分、原理图的设计和电路图的仿真的设计流程,积累了不少经验。

基于单片机的数字电压表使用性强、结构简单、成本低、外接元件少。在实际应用工作应能好,测量电压准确,精度高。系统功能、指标达到了课题的预期要求、系统在硬件设计上充分考虑了可扩展性,经过一定的改造,可以增加功能。本文设计主要实现了数字电压表测量一路电压的功能,详细说明了从原理图的设计、电路图的仿真再到软件的调试。

通过本次设计,我对单片机这门课有了进一步的了解。无论是在硬件连接方面还是在软件编程方面。本次设计采用了AT89C51单片机芯片,与以往的单片机相比增加了许多新的功能,使其功能更为完善,应用领域也更为广泛。设计中还用到了模/数转换芯片ADC0808,以前在学单片机课程时只是对其理论知识有了初步的理解。通过这次设计,对它的工作原理有了更深的理解。在调试过程中遇到很多问题,但经过老师和同学不懈努力最终解决了问题.

总之这次电路的设计和仿真,基本上达到了设计的功能要求。在以后的实践中,我将继续努力学习电路设计方面的理论知识,并理论联系实际,争取在电路设计方面能有所提升。

三、参考文献

[1] 单片机原理及接口技术

[2] 数字电路逻辑设计

[3] 单片机原理与程序设计实验教程.

四、附录

程序代码

LED_0 EQU 30H ;个位

LED_1 EQU 31H ;十位

LED_2 EQU 32H ;百位

LED_3 EQU 33H ;存放千位段码

ADC EQU 35H

CLOCK BIT ;定义0809时钟位

ST BIT

EOC BIT

OE BIT

ORG 00H

SJMP START

ORG 0BH

LJMP INT_T0

ORG 30H

START: MOV LED_0,#00H

MOV LED_1,#00H

MOV LED_2,#00H

MOV DPTR,#TABLE ;段码表首地址

MOV TMOD,#02H

MOV TH0,#245

MOV TL0,#00H

MOV IE,#82H

SETB TR0

WAIT: CLR ST

SETB ST

CLR ST ;启动AD转换

JNB EOC,$ ;等待转换结果

SETB OE

MOV ADC,P2 ;读取AD转换结果

CLR OE

MOV A,ADC ;AD转换结果转换成BCD码

MOV R7,A

MOV LED_3,#00H

MOV LED_2,#00H

MOV A,#00H

LOOP1: ADD A,#20H ;一位二进制码对应20mV电压值DA A

JNC LOOP2

MOV R4,A

INC LED_2

MOV A,LED_2

CJNE A,#0AH,LOOP4

MOV LED_2,#00H

INC LED_3

LOOP4: MOV A,R4

LOOP2: DJNZ R7,LOOP1

ACALL BTOD1

LCALL DISP

SJMP WAIT

ORG 200H

BTOD1: MOV R6,A

ANL A,#0F0H

MOV R5,#4

LOOP3: RR A

DJNZ R5,LOOP3

MOV LED_1,A

MOV A,R6

ANL A,#0FH

MOV LED_0,A

RET

INT_T0: CPL CLOCK ;提供0809时钟信号RETI

DISP: MOV A,LED_0 ;显示子程序

MOVC A,@A+DPTR

CLR

MOV P0,A

LCALL DELAY

SETB

MOV A,LED_1

MOVC A,@A+DPTR

CLR

MOV P0,A

LCALL DELAY

SETB

MOV A,LED_2

MOVC A,@A+DPTR

CLR

MOV P0,A

LCALL DELAY

SETB

MOV A,LED_3

MOVC A,@A+DPTR

CLR

MOV P0,A

LCALL DELAY

SETB

RET

DELAY: MOV R6,#10 ;延时5ms

D1: MOV R7,#250

DJNZ R7,$

DJNZ R6,D1

RET

TABLE: DB 3FH,06H,5BH,4FH,66H ;共阴数码管7段值DB 6DH,7DH,07H,7FH,6FH

END

相关主题
文本预览
相关文档 最新文档