数字电压表.docx

上传人:b****8 文档编号:10444007 上传时间:2023-02-11 格式:DOCX 页数:32 大小:596.44KB
下载 相关 举报
数字电压表.docx_第1页
第1页 / 共32页
数字电压表.docx_第2页
第2页 / 共32页
数字电压表.docx_第3页
第3页 / 共32页
数字电压表.docx_第4页
第4页 / 共32页
数字电压表.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

数字电压表.docx

《数字电压表.docx》由会员分享,可在线阅读,更多相关《数字电压表.docx(32页珍藏版)》请在冰豆网上搜索。

数字电压表.docx

数字电压表

南京林业大学

课程设计说明书

学院(系):

机械电子工程学院专业:

测控技术与仪器

学生姓名:

毛建宇

学号:

080307213

课程设计题目:

简易数字电压表设计

起迄日期:

2011年12月19日~2011年12月31日课程设计地点:

7A623、7A625

指导教师:

张浩

第1章课程设计的总体方案

1.1课程设计的目的

1.了解A/D芯片PCF8591转换性能及其编程方法。

2.掌握A/D转换器与单片机的接口方法3.学会使用A/D转换器进行电压信号采集1.2课程设计的要求

1.利用A/D芯片PCF8591及4位数码管组成一个简单的直流数字电压表。

2.采用1路模拟量输入,能够测量0-5V之间的直流电压值。

3.尽量使用较少的元器件。

1.3课程设计的思路

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

2.A/D转换采用PCF8591实现,利用PCF8591将模拟电压转换为数字量。

3.经单片机将数字量转换成对应电压值,电压显示采用4位一体的LED数码管。

1.4课程设计的方案

硬件电路设计由6个部分组成;A/D转换电路,AT89C51单片机系统,LED显示系统、时钟电路、复位电路以及测量电压输入电路。

硬件电路设计框图如图1所示。

图1数字电压表系统硬件设计框图

3

第2章系统方案硬件设计

2.1系统方案的提出

根据简易数字电压表设计的需要,为单片机和A/D转换器提供以下设计方案。

2.1.1单片机方案

AT89C51是一个低功耗,高性能CMOS8位单片机,片内含4k字节Flash可擦写存储器(PEROM)。

AT89C51器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,AT89C51的片内Flash允许程序存储器通过传统编程器反复编程。

由于芯片内集成了通用8位中央处理器和Flash存储单元,功能强大的微处理器ATMELAT89C51可为许多嵌入式控制应用系统提供高度灵活、高性价比的解决方案。

AT89C51具有如下特点:

4kBytesFlash存储器、128bytes的RAM以及32个I/O口、2个16位定时/计数器,5个中断优先级2层中断嵌套中断、1个全双工串行通信口、片内时钟振荡器。

AT89C51芯片,如图所示,各引脚功能如下:

VCC:

供电电压。

GND:

接地。

P0口:

为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

P1口:

是个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

图3-1AT89C51设计

P2口:

为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高。

P3口:

管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

P3口也可作为AT89C51的一些特殊功能口,如所示:

P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

/PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

/EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

2.1.2A/D转换器方案

PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。

PCF8591的最大转化速率由I²C总线的最大速率决定。

1、主要技术指标和特性

单独供电;PCF8591的操作电压范围2.5V-6V低待机电流通过I2C总线串行输入/输出;PCF8591通过3个硬件地址引脚寻址PCF8591的采样率由I2C总线速率决定;

4个模拟输入可编程为单端型或差分输入频道选择自动增量;PCF8591的模拟电压范围从Vss到VDD;PCF8591内置跟踪保持电路;8-bit逐次逼近A/D转换器;

通过1路模拟输出实现DAC增益PCF8591引脚图2.1.3时钟电路

5

AT89S51的时钟电路如图所示,在单片机的XTAL1和XTAL2两个管脚接一个晶振及两个电容构成了时钟电路电路中电容C1和C2对振荡频率有微调作用,在设计时取30uF。

晶振为11.0592MHz,故选择12MHz即可。

2.1.4复位电路

AT89S51的复位电路如图所示。

当单片机一上电,立即复位;另外,如果在运行中,外界干扰等因素使单片机的程序陷入死循环状态,就可以通过按键手动使其复位。

复位也是使单片机退出低功耗工作方式而进入正常状态的一种操作。

电容C3和电阻R10实现上电自动复位。

增加按键开关S1和电阻R9又可实现按键手动复位功能。

R9的作用是在S1按下的时候,防止电容C3放电电流过大烧坏开关S1的触点。

2.1.5显示电路LED硬件设计

LED数码管由8个发光二极管组成,其中7个按“8”型排列,另一个发光二极管为圆点形状,位于右下角,常用于显示小数点。

共阳极LED电路连接如图2-4所示,8支发光二极管的阳极共同接到电源上,所以叫共阳极LED,在每个发光二极管的阳极接的电阻将起到保护作用。

在输入管脚接低电平时,对应的发光二极管将会发光。

和共阴极LED一样,适当编码后,8支发光二极管组合起来就可以显示数据了。

2.1.6总体设计电路图:

见Protel图

第3章系统软件设计

3.1.1程序设计总方案

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

图3-1数字式直流电压表主程序框图

3.1.2系统子程序设计初始化程序

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

开始

初始化

调用A/D转换子程序

调用显示子程序

结束

7

3.1.3A/D转换子程序

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

 

图3-2A/D转换流程图

3.1.4显示子程序

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

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

第5章实习总结

经过两周的单片机课程设计,我有了很多的体会和感想。

通过本次对简易电压表的设计,我们对单片机这门课程有了更进一步的了解。

无论是在其硬件连接方面还是在软件编程方面,都取得了新的收获。

本次课程设计采用了AT89C51单片机芯片,与以往我们我们所熟悉的C51芯片有许多不同之处,通过本次实验及查阅相关资料,我们对其之间的区别有了一定的认识,在本课题设计报告的硬件介绍部分也对其作了详细的论述。

S51在C51的基础上增加了许多新的功能,使其功能更为完善,应用领域也更为广泛。

另外,在对单片机编程方面,我们又掌握了一些新的编程思想,使得程序更为简练、易懂,而且更为严谨,程序执行的稳定性得到了提高。

设计中我们还用到了模/数转换芯片PCF8591,以前在学单片机这门课程时只是对其理论知识有了初步的了解。

通过本次实验,我们对它的工作原理彻底理解了,对其启动设置、转换结束判断以及输出控制等都基本掌握。

电路连接方面,我们对其与单片机的连接也有了更为直观的认识,通过实验的摸索以及必要的理论知识,我们准确的实现了它于单片机的互连。

设计过程中,我遇到过许多次失败的考验,比如,自己对单片机编程时遇到了很多阻碍,想要放弃,然而,就在要放弃的那一刻,我明白了,原来结果并不那么重要,我们更应该注重的是这一整个过程。

于是,我坚持了下来。

我非常感激实习老师对我的的指导和帮助,没有老师的指导,我只能晕头转向的瞎忙。

通过这次设计,这也对我们今后的工作敲响了警钟:

要认真的看待每个需要处理的问题,不要认为事情过于简单,不能急于求成,但不要放弃。

要保持头脑清醒。

单片机是很重要的一门课程,老师和一些工作的朋友都曾说过,如果学好一门单片机,就凭这个技术这门手艺找一个好工作也不成问题。

尽管我们在课堂学到的内容很有限,但在以后的学习中单片机还需要好好的深入研究和学习。

最后感谢老师对我的精心指导和帮助,感谢同学们对我的帮助。

参考文献

1.魏立峰王宝兴.单片机原理及应用技术.北京:

北京大学出版社,2006.2.张毅刚.MCS-51单片机应用与设计.哈尔滨:

哈尔滨工业大学出版社,2003.3.马忠梅单片机的C语言应用程序设计.北京:

北京航空航天大学出版社20034.PCF8591使用说明书

附录:

 程序:

ORG0000H

LJMPSTART

ORG0003H

RETI

ORG000BH

RETI

ORG0013H

RETI

ORG001BH

RETI

ORG0023H

RETI

ORG002BH

RETI

*初始化程序中的各变量*

CLEARMEMIO:

CLRA

MOVP2,A

MOVR0,#70H

MOVR2,#0DH

LOOPMEM:

MOV@R0,A

INCR0

DJNZR2,LOOPMEM

MOV20H,#00H

MOVA,#0FFH

MOVP0,A

MOVP1,A

MOVP3,A

RET

*主程序*

START:

LCALLCLEARMEMIO;初始化

MAIN:

LCALLTEST;测量一次

LCALLDISPLAY;显示数据一次

AJMPMAIN

NOP;PC值出错处理

NOP

NOP

LJMPSTART

*显示控制程序*

DISPLAY:

JB00H,DISP11;

MOVR3,#08H;8路信号循环显示控制MOVR0,#70H;显示数据初址70H~77H

MOV7BH,#00H;显示通道路数初值

DISLOOP1:

LCALLTUNBCD;显示数据转为三位BCD码存入7AH、79H、78H

MOVR2,#0FFH;每路显示时间控制4MS*255

DISLOOP2:

LCALLDISP;调四位显示程序

LCALLKEYWORK1;

DJNZR2,DISLOOP2;

INCR0;显示下一路

INC7BH;通道显示数加一

DJNZR3,DISLOOP1

RET

DISP11:

MOVA,7BH;单路显示控制子程序

SUBBA,#01H;

MOV7BH,A;

ADDA,#70H;

MOVR0,A;

DISLOOP11:

LCALLTUNBCD;显示数据转为三位BCD码存入7AH、79H、78H(大5.00v)

MOVR2,#0FFH;每路显示时间控制4MS*25

DISLOOP22:

LCALLDISP;调四位显示程序

LCALLKEYWORK2;按键检测

DJNZR2,DISLOOP22

INC7BH;通道显示数加一

RET

*显示数据转为三位BCD码程序*

显示数据转为三位BCD码存入7AH、79H、78H(最大值5.00v);

TUNBCD:

MOVA,@R0;255/51=5.00V运算

MOVB,#51;

DIVAB;

MOV7AH,A;个位数放入7AH

MOVA,B;余数大于19H,F0为1,乘法溢出,结果加5CLRF0

SUBBA,#1AH

MOVF0,C

MOVA,#10;

MULAB;

MOVB,#51;

DIVAB

JBF0,LOOP2;

ADDA,#5

LOOP2:

MOV79H,A;小数后第一位放入79HMOVA,B

CLRF0

SUBBA,#1AH

MOVF0,C

MOVA,#10;

MULAB;

MOVB,#51;

DIVAB

JBF0,LOOP3;

ADDA,#5

LOOP3:

MOV78H,A;小数后第二位放入78HRET

*显示子程序*共阳显示子程序,显示内容在78H-7BH;

DISP:

MOVR1,#78H;共阳显示子程序,显示内容在78H-7BHMOVR5,#0FEH;数据在P1输出,列扫描在P3.0-P3.3

PLAY:

MOVP1,#0FFH

MOVA,R5

ANLP3,A

MOVA,@R1

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP1,A

JBP3.2,PLAY1;小数点处理

CLRP1.7;小数点显示(显示格式为XX.XX)

PLAY1:

LCALLDL1MS

INCR1

MOVA,P3

JNBACC.3,ENDOUT

RLA

MOVR5,A

MOVP3,#0FFH

AJMPPLAY

ENDOUT:

MOVP3,#0FFH

MOVP1,#0FFH

RET

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH断码表

*延时程序*

DL10MS:

MOVR6,#0D0H;10MS延时子程序

DL1:

MOVR7,#19H

DL2:

DJNZR7,DL2

DJNZR6,DL1

RET

DL1MS:

MOVR4,#0FFH;(513+513)ms=1MS

LOOP11:

DJNZR4,LOOP11

MOVR4,#0FFHLOOP22:

DJNZR4,LOOP22

RET

*电压测量(A/D)子程序*

一次测量数据8个,依次放入70H-77H单元中;

TEST:

CLRA;模数转换子程序

MOVP2,A

MOVR0,#70H;转换值存放首址

MOVR7,#08H;转换8次控制

LCALLTESTART;启动测试

WAIT:

JBP3.7,MOVD;等A/D转换结束信号

AJMPWAIT

TESTART:

SETBP2.3;测试启动

NOP

NOP

CLRP2.3

SETBP2.4

NOP

NOP

CLRP2.4

NOP

NOP

NOP

NOP

RET

MOVD:

SETBP2.5;取A/D转换数据

MOVA,P0

MOV@R0,A

CLRP2.5

INCR0

MOVA,P2;通道地址加1

INCA

MOVP2,A

CJNEA,#08H,TESTEND;等8路A/D转换结束

TESTEND:

JCTESTCON

CLRA;结束恢复端口

MOVP2,A

MOVA,#0FFH

MOVP0,A

MOVP1,A

MOVP3,A

RET

TESTCON:

LCALLTESTART

LJMPWAIT

*按键检测子程序*

KEYWORK1:

JNBP3.5,KEY1

KEYOUT:

RET

KEY1:

LCALLDISP;延时消抖

JBP3.5,KEYOUTWAIT11:

JNBP3.5,WAIT12

CPL00H

MOVR2,#01H

MOVR3,#01H

RET

WAIT12:

LCALLDISP;键释放等待时显示用

AJMPWAIT11

KEYWORK2:

JNBP3.5,KEY1

JNBP3.6,KEY2

RET

KEY2:

LCALLDISP;延时消抖用

JBP3.6,KEYOUT

WAIT22:

JNBP3.6,WAIT21

INC7BH

MOVA,7BH

CJNEA,#08H,KEYOUT11

KEYOUT11:

JCKEYOUT1

MOV7BH,#00HKEYOUT1:

RET

WAIT21:

LCALLDISP;键释放等待时显示用

AJMPWAIT22

END

 

矫正程序

ORG0000H

LJMPSTART

ORG0003H

RETI

ORG000BH

RETI

ORG0013H

RETI

ORG001BH

RETI

ORG0023H

RETI

ORG002BH

RETI

CLEARMEMIO:

CLRA

MOVP2,A

MOVR0,#70H

MOVR2,#0DH

LOOPMEM:

MOV@R0,A

INCR0

DJNZR2,LOOPMEM

MOV20H,#00H

MOVA,#0FFH

MOVP0,A

MOVP1,A

MOVP3,A

RET

START:

LCALLCLEARMEMIO;初始化

MAIN:

LCALLTEST;测量一次

LCALLDISPLAY;显示数据一次

AJMPMAIN

NOP;PC值出错处理

NOP

NOP

LJMPSTART

DISPLAY:

JB00H,DISP11;

MOVR3,#08H;8路信号循环显示控制

MOVR0,#70H;显示数据初址70H~77H

MOV7BH,#00H;显示通道路数初值

DISLOOP1:

LCALLTUNBCD;显示数据转为三位BCD码存入7AH、79H、78H

MOVR2,#0FFH;每路显示时间控制4MS*255

DISLOOP2:

LCALLDISP;调四位显示程序

LCALLKEYWORK1;

DJNZR2,DISLOOP2;

INCR0;显示下一路

INC7BH;通道显示数加一

DJNZR3,DISLOOP1

RET

DISP11:

MOVA,7BH;单路显示控制子程序

SUBBA,#01H;

MOV7BH,A;

ADDA,#70H;

MOVR0,A;

DISLOOP11:

LCALLTUNBCD;显示数据转为三位BCD码存入7AH、79H、78H(大5.00v)

MOVR2,#0FFH;每路显示时间控制4MS*25

DISLOOP22:

LCALLDISP;调四位显示程序

LCALLKEYWORK2;按键检测

DJNZR2,DISLOOP22;

INC7BH;通道显示数加一

RET

TUNBCD:

MOVA,@R0;255/51=5.00V运算

MOVB,#51;

DIVAB;

MOV7AH,A;个位数放入7AH

MOVA,B;余数大于19H,F0为1,乘法溢出,结果加5

CLRF0

SUBBA,#1AH

MOVF0,C

MOVA,#10;

MULAB;

MOVB,#51;

DIVAB

JBF0,LOOP2;

ADDA,#5

LOOP2:

MOV79H,A;小数后第一位放入79H

MOVA,B

CLRF0

SUBBA,#1AH

MOVF0,C

MOVA,#10;

MULAB;

MOVB,#51;

DIVAB

JBF0,LOOP3;

ADDA,#5

LOOP3:

MOV78H,A;小数后第二位放入78H

RET

DISP:

MOVR1,#78H;共阳显示子程序,显示内容在78H-7BH

MOVR5,#0FEH;数据在P1输出,列扫描在P3.0-P3.3

PLAY:

MOVP1,#0FFH

MOVA,R5

ANLP3,A

MOVA,@R1

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP1,A

JBP3.2,PLAY1;小数点处理

CLRP1.7;小数点显示(显示格式为XX.XX)

PLAY1:

LCALLDL1MS

INCR1

MOVA,P3

JNBACC.3,ENDOUT

RLA

MOVR5,A

MOVP3,#0FFH

AJMPPLAY

ENDOUT:

MOVP3,#0FFH

MOVP1,#0FFH

RET

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH

DL10MS:

MOVR6,#0D0H;10MS延时子程序

DL1:

MOVR7,#19H

DL2:

DJNZR7,DL2

DJNZR6,DL1

RET

DL1MS:

MOVR4,#0FFH;(513+513)ms=1MS

LOOP11:

DJNZR4,LOOP11

MOVR4,#0FFH

LOOP22:

DJNZR4,LOOP22

RET

TEST:

CLRA;模数转换子程序

MOVP2,A

MOVR0,#70H;转换值存放首址

MOVR7,#08H;转换8次控制

LCALLTESTART;启动测试

WAIT:

JBP3.7,MOVD;等A/D转换结束信号

AJMPWAIT

TESTART:

SETBP2.3;测试启动

NOP

NOP

CLRP2.3

SETBP2.4

NOP

NOP

CLRP2.4

NOP

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

当前位置:首页 > 求职职场 > 笔试

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

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