第四组 简易数字电压表的设计.docx

上传人:b****2 文档编号:23035099 上传时间:2023-04-30 格式:DOCX 页数:29 大小:144.96KB
下载 相关 举报
第四组 简易数字电压表的设计.docx_第1页
第1页 / 共29页
第四组 简易数字电压表的设计.docx_第2页
第2页 / 共29页
第四组 简易数字电压表的设计.docx_第3页
第3页 / 共29页
第四组 简易数字电压表的设计.docx_第4页
第4页 / 共29页
第四组 简易数字电压表的设计.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

第四组 简易数字电压表的设计.docx

《第四组 简易数字电压表的设计.docx》由会员分享,可在线阅读,更多相关《第四组 简易数字电压表的设计.docx(29页珍藏版)》请在冰豆网上搜索。

第四组 简易数字电压表的设计.docx

第四组简易数字电压表的设计

简易数字电压表的设计

作者:

任灵金巧咪王舜

指导老师:

徐武雄

摘要

本系统采用ATMEL公司的AT89S52单片机为核心,用HD7279来控制键盘和显示部分,通过ADC0809来实现模拟和数字电压的转换,再通过数码管来显示电压值及选择的通道值,还用了系统除了能确保实现要求的功能,测量0-5v的8路输入电压值,并能在四位LED数码管上显示,最高位显示通道号,通道采样可由0-7号键分别来选择模拟通道0-7号来选择外,还可以方便地进行8路其他A/D转换的测量、远程测量结果传送等扩展功能。

目录

一、系统设计部分3

1.设计要求3

2.总体框图3

二、方案论证3

1.方案选择3

2.方案比较3

3.方案论证4

三、硬件设计(电路的设计)4

1.系统电路4

⑴电路组成4

⑵电路功能4

⑶电路工作原理4

2.键盘和显示控制模块4

⑴模块组成4

⑵模块功能5

3.模拟数字转换模块6

⑴模块组成6

⑵模块功能6

4.单片机控制模块7

⑴模块组成7

⑵模块功能7

四、软件设计(程序的编写)7

五、系统测试13

1.测试仪表13

2.测试方法13

3.测试结果及分析13

六、总结14

七、附录14

八、参考文献19

一、系统设计部分

1.设计要求

设计的功能要求是:

测量0—5V的8路输入电压值,并在四位LED数码管上显示,最高位显示通道号,通道采样由按键来选择(0号…7号键分别来选择模拟通道0…7)。

2.总体框图

按系统功能实现要求,决定控制系统采用AT89S52单片机,A/D转换采用ADC0809,系统除能确保实现要求的功能外,还可以方便地进行8路其他A/D转换的测量、远程测量结果传送等扩展功能。

数字电压表系统设计方案框图如下(图1):

图1:

数字电压表的总体框图

二、方案论证

.键盘和显示控制模块的两种不同的方案如下:

1.方案选择

方案一:

采用逻辑门电路及开关去实现

方案二:

使用芯片HD7279

2.方案比较

方案一:

采用逻辑门电路及开关去实现,比如使用74LS244去驱动显示部分,但实现起来比较复杂且不稳定、不方便。

方案二:

使用芯片HD7279(串行接口8位LED数码管及64位键键盘智能控制芯片),单片机可以方便的对它进行适时的控制,功能极其的强大,所以是首选的芯片。

3.方案论证

经过上面的比较,选择方案二。

此外,控制模块和数字转换模块才用一种方法,即:

单片机控制模块使用的是ATMEL公司的AT89S52;模拟数字转换模块使用的是ADC0809芯片。

三、硬件设计(电路的设计)

1.系统电路

⑴电路组成

简易数字电压表测量电路由A/D转换器ADC0809,数据处理控制(单片机89S52),显示控制(HD7279和数码显示管)和分频器14024等组成。

⑵电路功能

测量0—5V的8路输入电压值,并在四位LED数码管上显示,最高位显示通道号。

⑶电路工作原理

A/D转换由集成电路0809完成。

0809具有8路模拟输入端口,地址线(23-25脚)可决定对哪一路模拟输入作A/D转换。

22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。

6脚为测试控制,当输入一个2us宽高电平脉冲时,就开始A/D转换。

7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平。

9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。

10脚为0809的时钟输入端,利用单片机30脚的六分频晶振频率再通过14024二分频得到1MHz时钟。

单片机的P1、P3.0-P3.3端口作为四位LED数码管显示控制。

P3.5端口用作单路显示/循环显示转换按钮,P3.6端口用作单路显示时选择通道。

P0端口作A/D转换数据读入用,P2端口用作0809的A/D转换控制。

2.键盘和显示控制模块

⑴模块组成

本模块使用的是HD7279芯片。

HD7279典型的应用电路图如图2所示:

图2

⑵模块功能

HD7279是具有串行接口的,可以同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可以连接多达64键的键盘矩阵,单片即可完成LED显示、键盘接口的全部功能。

本系统中,只用了它64键中的8个,以及用了8个显示管中的4个,而且非常方便的跟单片机系统连接起来,从而可以达到设计的功能要求,所以在键盘和显示模块中,我们选用了HD7279芯片。

3.模拟数字转换模块

⑴模块组成

本模块采用的是芯片ADC0809。

⑵模块功能

ADC0809是8位逐次比较式A/D转换芯片,具有8路模拟量输入通道。

其内部逻辑结构如图3所示:

CLK

START

D0

D1

D2

D3

D4

D5

D6

D7

VCC

GND

EOC

ALE

C

B

A

IN7

IN6

IN5

IN4

IN3

IN2

IN0

IN1

VREF(-)

VREF(+)

图3

图中,8路模拟开关用于选通8个模拟通道,允许8路模拟量分时输入,并公用一个A/D转换器进行转换。

IN0~IN7为8路模拟量输入器,模拟输入电压的范围是0~5V,对应的数字量为00H~FFH,转换时间为100us,ADDA、ADDB、ADDC为通道地址线,用于选择通道。

其通道寻址如表1所示。

ALE是通道地址锁存信号,其上升沿时,把ADDA、ADDB、ADDC地址状态地址锁存器中。

VREF(+)、VREF(—)接基准电源,在精度要求不太高的情况下,供电电源就可用作基准电源。

START是启动引脚,其上脉冲的下降沿启动一次新的A/D转换。

EOC是转换结束信号,可用于向单片机申请中断或供单片机查询。

CLK是时钟端,典型的时钟频率为640kHz。

DB0~DB7是数字量输出。

4.单片机控制模块

⑴模块组成

单片机控制模块使用的芯片是ATMEL公司生产的AT89S52。

⑵模块功能

使用该芯片很容易实现对其他模块的控制,所以整个系统的工作核心还是单片机控制模块,通过对单片机AT89S52写入程序,可以方便的用软件来控制整个过程,而且由于AT89S52中有一个可以反复擦写的FLASH,所以可以很方便的修改程序。

四、软件设计(程序的编写)

软件程序如下:

;*********************************

;变量定义

;*********************************

BIT_COUNTDATA03FH

TIMERDATA03EH

TIMER1DATA03DH

TIMER2DATA03CH

TIMER3DATA03BH

TIMER4DATA03AH

SEG_NUMDATA039H

SEG_CNTDATA038H

LAST_SEGDATA037H

DATA_INDATA020H

DATA_OUTDATA021H

;*********************************

;输入输出引脚定义

;*********************************

CSBITP1.4

CLKBITP1.5

DATBITP1.2

KEYBITP1.3

ORG00H

AJMPSTART

ORG03H

AJMPINT00;外部中断0

ORG08H

;*****************************************

;主程序

;*****************************************

START:

MOVSP,#50H

MOVP1,#11011011B;初始化p1端口

MOVR0,30H;r0为存放采集到的数据

SETBIT0;设置外部

SETBEA;cpu开放中断

SETBEX0;允许外部中断0

MAIN:

MOVDATA_OUT,#10111111B;测试指令

LCALLSEND

MOVDATA_OUT,#10100100B;复位指令

LCALLSEND;发送该字节到HD7279

lCALLDEMO_DELAY

lCALLDEMO_DELAY

lCALLDEMO_DELAY

lCALLDEMO_DELAY

MOVDATA_OUT,#10001000B;闪烁指令

LCALLSEND

MOVDATA_OUT,#11110111B;最高位为闪烁位(4)

LCALLSEND

MOVDATA_OUT,#10010011B;下载数据但不译码好处是可以自己选择字型

LCALLSEND

MOVDATA_OUT,#00001000B

LCALLSEND

SETBCS;不选中

JBKEY,MAIN;无键按下的时候返回

MOVDATA_OUT,#00010101B;有键按下,读键码

LCALLSEND

LCALLRECEIVE

SETBCS

MOVR6,#08H

MOVDPTR,#TABLE

L3:

MOVA,#00H

MOVCA,@A+DPTR;存放的是已经定义好的键值

MOVB,DATA_IN

;DJNZR6,L2

;JMPMAIN;为零就跳到开始继续(没有找到)

L2:

CJNEA,B,L1

JMPL4

L1:

INCDPTR

DJNZR6,L3

JMPMAIN

L4:

MOVDATA_OUT,#10000011B;下载方式0且译码

LCALLSEND

SUBBA,#18H

MOVDATA_OUT,A;发送数据

LCALLSEND

SETBCS

;开始启动ADC0809

MOVDPTR,#0FEF8H;进入地址为Int0

MOVX@DPTR,A;驱动ADC0809启动,因为用的是M0VX指令

;JBIE0;发现有外部中断

DELAY:

MOVR7,#02;启动时延时25ms,因为这是HD7279的特点

D2:

MOVR4,#25

D3:

MOVR3,#248

DJNZR3,$

DJNZR4,D3

DJNZR7,D2

SJMP$;中断等待

INT00:

MOVR2,#08H

MOVDPTR,#0FEF8H

MOVXA,@DPTR;读取转换后的数字量

MOV@R0,A

INCDPTR

INCR0

DJNZR2,INT00

CLREA;已经转换完就关闭

CLREX0;禁止外部中断0

MOVA,@R0;将转换后的数据放入A中

LCALLL5

MOVR1,#05

DISP1:

LCALLDISP

DJNZR1,DISP1

JMPMAIN

MOVDPTR,#0FE8FH

MOVX@DPTR,A;再次启动ADC0809

RETI

L5:

CLRC

MOVR5,#00H

MOVR4,#00H

MOVR3,#08H

NEXT:

RLCA

MOVR2,A

MOVA,R5

ADDCA,R5

DAA

MOVR5,A

MOVA,R4

ADDCA,R4

MOVR4,A

MOVA,R2

DJNZR3,NEXT

L6:

MOVA,R5

ADDA,R5

DAA

MOVR5,A

MOVA,R4

ADDCA,R4

DAA

MOVR4,A

RET

DISP:

MOVA,R5

ANLA,#0FH

ORLA,#10H

MOVDATA_OUT,#10000000B

LCALLSEND

ANLA,#01111111B;去DP点

MOVDATA_OUT,A

LCALLSEND

LCALLDELAY1

MOVA,R5

ANLA,#0F0H

SWAPA

ORLA,#20H

MOVDATA_OUT,#10000000B

LCALLSEND

MOVDATA_OUT,A;DP点

LCALLSEND

LCALLDELAY1

MOVA,R4

ANLA,#0FH

ORLA,#40H

MOVDATA_OUT,#10000000B

LCALLSEND

ANLA,#01111111B;去DP点

MOVDATA_OUT,A

LCALLSEND

LCALLDELAY1

CLRA

RET

SEND:

MOVBIT_COUNT,#08

CLRCS;选中HD7279

ACALLLONG_DELAY

SEND_LOOP:

MOVC,DATA_OUT.7

MOVDAT,C

SETBCLK;启动

MOVA,DATA_OUT

RLA

MOVDATA_OUT,A

ACALLSHORT_DELAY

CLRCLK

ACALLSHORT_DELAY

DJNZBIT_COUNT,SEND_LOOP

CLRDAT

RET

RECEIVE:

MOVBIT_COUNT,#08

SETBDAT

ACALLLONG_DELAY

RECEIVE_LOOP:

SETBCLK

ACALLSHORT_DELAY

MOVA,DATA_IN

RLA

MOVDATA_IN,A

MOVC,DAT

MOVDATA_IN.0,C

CLRCLK

ACALLSHORT_DELAY

DJNZBIT_COUNT,RECEIVE_LOOP

CLRDAT

RET

LONG_DELAY:

MOVTIMER,#25

DJNZTIMER,$

RET

SHORT_DELAY:

MOVTIMER,#4

DJNZTIMER,$

RET

DELAY1:

MOVR7,#02;启动时延时5ms,因为这是HD7279的特点

D12:

MOVR4,#05

D13:

MOVR3,#248

DJNZR3,$

DJNZR4,D13

DJNZR7,D12

RET

DEMO_DELAY:

MOVTIMER1,#50;延时约50MS

DEMO_DELAY_1:

MOVTIMER,#250

DEMO_DELAY_2:

NOP

NOP

DJNZTIMER,DEMO_DELAY_2

DJNZTIMER1,DEMO_DELAY_1

RET

TABLE:

DB18H,19H,1AH,1BH,1CH,1DH,1EH,1FH

END

五、系统测试

1.测试仪表

采用TOP2005编译器进行源程序编译及仿真调试,采用UT51数字万用表测试电压值。

2.测试方法

采用直接测试的方法。

用TOP2005编译器进行源程序编译及仿真调试,烧好程序后进行软硬件调试,最后进行端口电压的对比测试。

3.测试结果及分析

简易数字电压表与“标准”数字电压表对比测试表

标准/V

0.00

0.15

0.85

1.00

1.25

1.75

1.98

2.32

2.65

简易电压表测得值/V

0.00

0.17

0.86

1.02

1.26

1.76

2.00

2.33

2.66

绝对误差/V

0.00

+0.02

+0.01

+0.02

+0.01

+0.01

+0.02

+0.01

+0.01

标准误差/V

3.00

3.45

3.55

4.00

4.50

4.60

4.70

4.81

4.90

简易电压表测得值/V

3.01

3.47

3.56

4.01

4.52

4.62

4.72

4.82

4.92

绝对误差/V

+0.01

+0.02

+0.01

+0.01

+0.02

+0.02

+0.02

+0.01

+0.02

从表中可以看出,简易数字电压表与“标准”数字电压表测得的绝对误差均在0.02V以内,这与采用8位A/D转换器所能达到的理论误差精度相一致,在一般的应用场合可完全满足要求。

六、总结

整个系统本着简单可靠的原则完成了本设计任务,达到了设计的基本功能要求,但在性能及成本上还有待改进。

七、附录

1.关于89S52

⑴引脚图:

⑵引脚功能:

①P0口——8位漏极开路的双向I/O口

当使用片外存储及外扩I/O口时,P0口作为低字节地址/数据复用线在编程时P0口可用于接收指令代码字节,在程序校验是,P0口可输出指令字节(延时需要加外部上拉电阻)P0口可驱动8个TTL负载

②P1口——8位准双向I/O口,具有内部上拉电阻

P1口是为用户准备的I/O口双向口,在编程和校验时,可用做输入低8位地址,用做输入时,应先将输出锁存器置1,P1口可驱动4个TTL负载

③P2口——8位、2准双向I/O口,具有内部上拉电阻

当使用片外存储或外扩I/O口时,P2口输出高8位地址。

在编程/校检时,P2口可接收高字节地址和某些控制信号。

P2口也可作普通I/O口使用。

用做输入时,应先将输出锁存器置1。

P2口可驱动4个TTL负载。

④P3口——8位、准双向I/O口,具有内部上拉电阻。

P3口可作为普通I/O口。

用做输入时,应先将输出锁存器置1。

在编程/校检时,P3口接收某些控制信号。

它可驱动4个TTL负载。

P3口还提供各种代替功能,如表3.2所列。

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

外部RAM写选通

P3.7

RD

外部RAM读选通

⑤RST------复位输入,高电平有效。

在振荡器稳定工作时,在RST脚施加两个机器周期(即24个晶振周期)以上的高电平,将器件复位。

⑥EA/VPP------外部程序存储器访问允许信号EA(ExternalAccessEnable)。

当EA信号接地时,对ROM的读操作限定在外部程序存储器,地址为0000H~FFFFH;当EA接VCC时,对ROM的读操作从内部程序存储器开始,并可延续至外部程序存储器。

在编程时,该引脚可接编程电压(AT89C51的VPP为5V或12V;AT89C51的VPP为12V)。

在编程校验时,该引脚可接VCC.。

⑦PSEN-----外部程序存储器读选通信号PSEN(ProgramStoreEnable)在系统扩展时,ALE的下降沿将P0口输出的低8位地址锁存在外接的地址存储器中,以实现地字节地址,和数据的分时传送.此外,ALE端连续输出正脉冲,频率为晶振频率的1/6,可用作外部定时脉冲使用.但要注意,每次访问外ROM时要丢失一个ALE脉冲.在编程期间,该引脚输入编程脉冲(PROG)。

⑧XTAL1------片内振荡器反向放大器和时钟发生线路的输入端.使用片内振荡器时,连接外部石英晶体和微调电容.

⑨XTAL2------片内振荡器反向放大器的输入端,当使用片内振荡器时,外接石英晶体和微调电容.当使用片内振荡器时,引脚XTAL1接收外振荡器信号,XTAL2悬空。

⑩VCC-----电源电压输入引脚,GND-----电源地。

⑶芯片简介:

AT89S52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。

2.关于ADC0809

⑴引脚图:

⑵引脚功能:

①IN7-IN0:

8路模拟电压的输入范围是0-5V。

②ADDA-ADDC:

地址输入信号,译码后选择模拟量中的一路进行A/D转换。

③ALE:

地址锁存允许输入信号,上升沿有效,信号有效时锁存地址信号,并启动译码电路,选中一路模拟量输入。

④START:

启动转换输入信号,正脉冲有效。

信号的上升沿复位内部寄存器,下降沿启动控制逻辑,开始A/D转换。

⑤EOC:

转换结束输出信号,该信号的下降沿,表示转换正在进行,EOC变为高电平时,表示转换结束。

⑥OE:

输出允许信号,高电平有效,信号有效时,转换结果送到数据输出线。

⑦D0-D7:

8位数字信号输出。

⑧CLOCK:

外部时钟输入,始终最高频率为640kHz,当频率为640kHz,转换时间约为100us.

⑨VREF(+)、VREF(-):

基准电压,单记性输入时,VREF(+)接+5V,VREF(-)接地.

⑩VCC:

电源电压,接+5V,GND:

信号接地端.

⑶ADC通道地址选择表:

ADDCADDBADDA

选择的通道

000

IN0

001

IN1

010

IN2

011

IN3

100

IN4

101

IN5

110

IN6

111

IN7

 

⑷芯片简介:

ADC0809是8位逐次比较式A/D转换芯片,具有8路模拟量输入通道允许8路模拟量分时输入,并公用一个A/D转换器进行转换。

IN0-IN7为8路模拟量输入端,模拟量输入范围是0-5V,对应的数字量是00H-FFH,转换的时间为100us。

ADDA、ADDB、ADDC为通道地址线,用于选择通道。

ALE是通道地址锁存信号,其上升沿时,把ADDA、ADDB、ADDC地址状态送入地址锁存器中。

VREF(+)、VREF(-)接基准电源,在精度要求不太高的情况下,供电电源就可用作基准电源。

START是启动引脚,其上脉冲的下降沿启动一次新的A/D转换。

EOC是转换结束信号,可用于向单片机申请中断或供单片机查询。

CLK是时钟端,典型的时钟频率为640kHz。

DB0-DB7是数字量输出。

3.关于HD7279A

⑴引脚功能:

①1、2脚(VDD)接正电源;3、5脚(NC)悬空;4脚(VSS)接地

②26脚(CLKO)振荡输出端

③28脚(RESET)复位端

④6脚(CS)片选输入端,此引脚为低电平时,可向芯片发送指令及读取键盘数据

⑤7脚(CLK)同步时钟输入端,向芯片发送数据及读取键盘数据时,此

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1