利用51单片机与ADC0809和数码管设计数字电压表.docx
- 文档编号:14188282
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:12
- 大小:254.11KB
利用51单片机与ADC0809和数码管设计数字电压表.docx
《利用51单片机与ADC0809和数码管设计数字电压表.docx》由会员分享,可在线阅读,更多相关《利用51单片机与ADC0809和数码管设计数字电压表.docx(12页珍藏版)》请在冰点文库上搜索。
利用51单片机与ADC0809和数码管设计数字电压表
利用51单片机与ADC0809和数码管设计数字电压表
一、课题功能描述:
利用单片机AT89C51芯片与ADC0809芯片设计一个数字电压表,能够测量0―5V之间的直流电压,三位数码显示。
二、程序设计
本实验采用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.导线若干
四、程序设计
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所示:
五、程序代码
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
六、调试(测试)过程
1.焊好的电路板,在与仿真器接入之前,需要进行电路检查,防止短路烧毁芯片。
2.在把程序写入单片机部之前,需要先在仿真器上先运行。
尽量避免单片机写入之后再擦除。
3.仿真器运行时,显示管完全不亮,而P1口的值却有变化,说明有可能是74HC245芯片处的电路没有接好。
4.显示管有点暗,可能是延时时间调得有点过大了。
如果发现显示管的某一笔画不亮,那么就有可能是该点对应的I\0口没有接好,或者是对应的电阻坏掉了。
七、实验小结
经过两周的实验,我真的学到了很多的东西。
经过一个学期的学习,我对于单片机的硬件电路设计与编程都有了一定的了解。
在这个项目中,在已经有了程序和电路图以后,我还是感到这个实训有点吃力,或许真的是我们的水平不够吧!
我个人认为,实际意义上的学习单片机还没有结束,因为作为电子信息专业的我们,必须对于单片机编程与C语言有一定的熟悉与了解,这样才能在以后实习和工作中才能在社会上谋求自己的一席之地!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 51 单片机 ADC0809 数码管 设计 数字 电压表