利用51单片机与ADC0809和数码管设计数字电压表.docx

上传人:b****5 文档编号:3622214 上传时间:2022-11-24 格式:DOCX 页数:10 大小:252.52KB
下载 相关 举报
利用51单片机与ADC0809和数码管设计数字电压表.docx_第1页
第1页 / 共10页
利用51单片机与ADC0809和数码管设计数字电压表.docx_第2页
第2页 / 共10页
利用51单片机与ADC0809和数码管设计数字电压表.docx_第3页
第3页 / 共10页
利用51单片机与ADC0809和数码管设计数字电压表.docx_第4页
第4页 / 共10页
利用51单片机与ADC0809和数码管设计数字电压表.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

利用51单片机与ADC0809和数码管设计数字电压表.docx

《利用51单片机与ADC0809和数码管设计数字电压表.docx》由会员分享,可在线阅读,更多相关《利用51单片机与ADC0809和数码管设计数字电压表.docx(10页珍藏版)》请在冰豆网上搜索。

利用51单片机与ADC0809和数码管设计数字电压表.docx

利用51单片机与ADC0809和数码管设计数字电压表

利用51单片机与ADC0809和数码管设计数字电压表

一、课题功能描述:

利用单片机AT89C51芯片与ADC0809芯片设计一个数字电压表,能够测量0―5V之间的直流电压,三位数码显示。

2、程序设计

本实验采用AT89C51单片机芯片配合ADC0809模/数转换芯片构成一个简易的数字电压表,原理电路如图1-1所示。

该电路通过ADC0809芯片采样输入口AI0输入的0~5V的模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道D0~D7传送给AT89C51芯片的F0口。

AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码,并通过P1口传送给数码管。

同时它还通过其三位I/O口P3.0、P3.1、P3.2产生位片选信号,控制数码管的亮灭。

另外,AT89C51还控制着ADC0809的工作。

其ALE管脚为ADC0809提供了1MHZ工作的时钟脉冲;P2.3控制ADC0809的地址锁存端(ALE);P2.4控制ADC0809的启动端(START);P2.5控制ADC0809的输出允许端(OE);P3.7控制ADC0809的转换结束信号(EOC)。

电路原理图如下:

三、器件清单:

1.AT89S51芯片1块

2.ADC0809芯片1块

3.74HC245芯片1块

4.数码管1个

5.6MHZ晶振1个

6.30pF电容2个

7.10uF电解电容1个

8.复位电容1个

9.510Ω电阻8个

10.10KΩ电阻1个

11.导线若干

4、程序设计

1、主程序设计

由于ADC0809在进行A/D转换时需要有CKL信号,而此时的ADC0809的CLK是连接在AT89C51单片机的30管脚,也就是要求从30管脚输出CLK信号供ADC0809使用。

因此产生CLK信号的方法就等于从软件产生。

电压表系统有主程序,A/D转换子程序和显示子程序,如下流程1-2所示:

2、A/D转换子程序

启动ADC0809对模拟量输入信号进行转换,通过判断EOC(P3.7)来确定转换是否完成,若EOC为0则继续等待;若EOC为1,则把OE置位,将转换完成的数据存储到70H中。

程序流程图如图1-3

3、数据处理子程序

数据处理子程序主要根据标度变换公式1-1,把0~255十进制数转换为0.00~5.00V.AX=A0+(Am-A0)(NX-N0/Nm-N0)(1-1)

Ax:

模拟测量值;A0:

模拟输入最小值;Am:

模拟输入最大值;

NX:

模数转换后的值;N0:

模/数转换后的最小值;

Nm:

模/数转换后的最大值。

在本设计中,根据要求知:

A0=0V,Am=5V,N0=0,Nm=255,则公式1-1可化简为:

AX=A0+(Am-A0)(NX-N0/Nm-N0)=5·NX/255=NX/51(1-2)

程序流程图如图1-4所示:

4、显示子程序

显示子程序采用动态扫描法实现三位数码管的数值显示。

测量所得的A/D转换数据放在70H存单元中,测量数据在显示时需转换成10进制BCD码放在78H~7AH单元中。

寄存器R1用作显示数据地址指针。

程序流程图如1-5所示:

5、程序代码

ORG0000H

LJMPSTART

ORG0030H

;初始化参数

START:

CLRA

SETBP3.7;初始化EOC

CLRP3.0;初始化LED位选,全不选中。

CLRP3.1

CLRP3.2

MOVP2,A;初始化P2口,清除对ADC0809的控制信号。

MOV70H,A;初始化数据采样后存储空间。

MOV78H,A;初始化数据处理后3位有效数字的存储空间

MOV79H,A

MOV7AH,A

MOVA,#0FFH;初始化P0,P1口,写入高电平

MOVP0,A

MOVP1,A

 

;主程序

MAIN:

LCALLAD_SUB;调用A/D转换子程序,开始采样并转换。

LCALLTURN_SUB;调用数码转换子程序,将采样转换来的0-255转换成意义对应的

;0.00-5.00

LCALLDISP_SUB;调用显示子程序。

LJMPMAIN

;A/D转换子程序

AD_SUB:

CLRA

MOVP2,A;初始化P2口,清除对ADC0809的控制信号。

MOVR0,#70H

LCALLAD_SUB;调用采样子程序

WAIT:

JBP3.7,DATASAVE;判断采样转换是否完毕,完毕则跳转到DATASAVE进行存储。

AJMPWAIT;否则继续等待。

 

;启动采样,送脉冲时序

AD_SUB:

SETBP2.3;ALE脉冲时序

NOP

NOP

CLRP2.3

SETBP2.4;START脉冲时序

NOP

NOP

CLRP2.4

NOP

NOP

RET

;采样转换的数据存储

DATASAVE:

SETBP2.5;置位OE端,允许ADC0809输出数据

MOVA,P0;将转换的数据存储到70H中

MOVR0,A

CLRP2.5

CLRA;初始化P0,P1,P2口

MOVP2,A

MOVA,#0FFH

MOVP0,A

MOVP1,A

RET

;将0-255转换为0.00-5.00

TURN_SUB:

MOVA,R0

MOVA,#51

DIVAB

MOV78H,A;以上这一段是整数部分放入78H

MOVA,B;余数部分放入A

CLRF0

SUBBA,#1AH;余数和51的一半即1AH比较,以便四舍五入

MOVF0,C

MOVA,#10

MULAB;余数乘以10,以便再除以51

MOVB,#51

DIVAB

JBF0,LOOP1;判断四舍五入,跳到LLOP1是“四舍”

ADDA,#5;这是“五入”

LOOP1:

MOV79H,A;十分位

MOVA,B

CLRF0

SUBBA,#1AH

MOVF0,C

MOVA,#10

MULAB

MOVB,#51

DIVAB

JBF0,LOOP2

ADDA,#5

LOOP2:

MOV7AH,A;百分位

RET

;显示子程序

DISP_SUB:

MOVR1,#78H;R1辅助寄存器,用于存放要显示的数据的地址

CLRA

MOVP1,#0FFH;初始化P1,P2口

ANLP2,A

LCALLPLAY;调用显示位码子程序

CLRP1.7;显示最高位后的小数点

SETBP3.2;选中最高位LED数码管

LCALLDELAY;调用延迟子程序

CLRP3.2;取消最高位位选

INCR1;提取第二位有效数字的数据地址

LCALLPLAY;调用显示位码子程序

SETBP3.1;选中第二位LED数码管

LCALLDELAY;调用延迟子程序

CLRP3.1;取消第二位位选

INCR1;提取最低位有效数字的数据地址

LCALLPLAY;调用显示位码子程序

SETBP3.0;选中最低位LED数码管

LCALLDELAY;调用延迟子程序

CLRP3.0;取消最低位位选

RET

;位码显示

PLAY:

MOVA,R1;送偏移量

MOVDPTR,#TAB;送表首地址

MOVCA,A+DPTR;查表得出相应LED段码

MOVP1,A;输出显示

RET

;延时程序

DELAY:

MOVR6,#10H

DL1:

MOVR7,#10H

DL2:

DJNZR7,DL2

DJNZR6,DL1

RET

;0—9段码

TAB:

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

END

6、调试(测试)过程

1.焊好的电路板,在与仿真器接入之前,需要进行电路检查,防止短路烧毁芯片。

2.在把程序写入单片机部之前,需要先在仿真器上先运行。

尽量避免单片机写入之后再擦除。

3.仿真器运行时,显示管完全不亮,而P1口的值却有变化,说明有可能是74HC245芯片处的电路没有接好。

4.显示管有点暗,可能是延时时间调得有点过大了。

如果发现显示管的某一笔画不亮,那么就有可能是该点对应的I\0口没有接好,或者是对应的电阻坏掉了。

七、实验小结

经过两周的实验,我真的学到了很多的东西。

经过一个学期的学习,我对于单片机的硬件电路设计与编程都有了一定的了解。

在这个项目中,在已经有了程序和电路图以后,我还是感到这个实训有点吃力,或许真的是我们的水平不够吧!

我个人认为,实际意义上的学习单片机还没有结束,因为作为电子信息专业的我们,必须对于单片机编程与C语言有一定的熟悉与了解,这样才能在以后实习和工作中才能在社会上谋求自己的一席之地!

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

当前位置:首页 > 小学教育 > 小升初

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

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