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

上传人:m**** 文档编号:488725953 上传时间:2023-07-19 格式:DOC 页数:9 大小:253KB
返回 下载 相关 举报
利用51单片机与ADC0809和数码管设计数字电压表_第1页
第1页 / 共9页
利用51单片机与ADC0809和数码管设计数字电压表_第2页
第2页 / 共9页
利用51单片机与ADC0809和数码管设计数字电压表_第3页
第3页 / 共9页
利用51单片机与ADC0809和数码管设计数字电压表_第4页
第4页 / 共9页
利用51单片机与ADC0809和数码管设计数字电压表_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《利用51单片机与ADC0809和数码管设计数字电压表》由会员分享,可在线阅读,更多相关《利用51单片机与ADC0809和数码管设计数字电压表(9页珍藏版)》请在金锄头文库上搜索。

1、 利用51单片机与ADC0809和数码管设计数字电压表一、课题功能描述:利用单片机AT89C51 芯片与ADC0809 芯片设计一个数字电压表,能够测 量05V 之间的直流电压,三位数码显示。二、 程序设计本实验采用AT89C51 单片机芯片配合 ADC0809 模/数转换芯片构成一个简 易的数字电压表,原理电路如图1-1 所示。该电路通过 ADC0809 芯片采样输入口 AI0 输入的05V 的模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道D0D7 传送给 AT89C51 芯片的F0口。AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码,并通过P1

2、口传送给数码管。同时它还通过其三位 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

3、块 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所示:图1-2主程序流程图调用显示程序调用数据

4、处理程序调用A/D转化程序初始化开始2、A/D 转换子程序启动 ADC0809 对模拟量输入信号进行转换,通过判断 EOC(P3.7)来确定转换是否完成, 若EOC 为0则继续等待;若 EOC为1,则把OE 置位,将转换完成的数据存储到 70H 中。程序流程图如图1-3开始A/D转换结束?(P3.7=1?)启动A/D转化器初始化是P2.5置位,允许输出将转换得到的数据存储结 束开始图1-3 A/D转换程序流程图3、数据处理子程序数据处理子程序主要根据标度变换公式1-1,把0255十进制数转换为0.005.00V. AX=A0+(Am-A0)(NX-N0/Nm-N0) (1-1) Ax: 模拟测

5、量值; A0: 模拟输入最小值; Am: 模拟输入最大值;NX: 模数转换后的值; N0:模/数转换后的最小值;Nm:模/数转换后的最大值 。在本设计中,根据要求知:A0=0V,Am=5V,N0=0,Nm=255,则公式1-1可化简为: AX=A0+(Am-A0)(NX-N0/Nm-N0)=5NX/255=NX/51 (1-2) 程序流程图如图1-4所示:从70H中取数据,除以51得到个位,存放在70H中,余数移入A 余数与51的一半即1AH借位相减比较,以便四舍五入,利用P0开始余数10,再除以51 商放入A中 P0=1?是 四舍否 数据调整,相当于五入 A放入79H中,得到十分位再将余数放

6、入A中,进行除51操作P0=1? 是否A = A + 5四舍A放入7AH中,得到百分位结 束图1-4 数据处理子程序流程图 4、显示子程序显示子程序采用动态扫描法实现三位数码管的数值显示。测量所得的A/D转换数据放在70H内存单元中,测量数据在显示时需转换成10进制BCD码放在78H7AH单元中。寄存器R1用作显示数据地址指针。程序流程图如1-5所示: R1 A 查表取得相应段码 输出显示置位P1.7点亮小数点 图1-5 显示子程序流程图结 束 R1 A 查表取得相应段码 输出显示 R1=R1+1 R1 A 查表取得相应段码 输出显示 初 始 化 R1=78H,P1置高,P2置低 R1=R1+

7、1开始五、 程序代码 ORG 0000H LJMP START ORG 0030H ;初始化参数 START: CLR A SETB P3.7 ;初始化EOC CLR P3.0 ;初始化LED位选,全不选中。 CLR P3.1 CLR P3.2 MOV P2,A ;初始化P2口,清除对ADC0809的控制信号。 MOV 70H, A ;初始化数据采样后存储空间。 MOV 78H, A ;初始化数据处理后3位有效数字的存储空间 MOV 79H, A MOV 7AH, A MOV A ,#0FFH ;初始化P0,P1口,写入高电平 MOV P0, A MOV P1, A ;主程序 MAIN: LC

8、ALL AD_SUB ;调用A/D转换子程序,开始采样并转换。 LCALL TURN_SUB ;调用数码转换子程序,将采样转换来的 0-255转换成意义对应的;0.00-5.00 LCALL DISP_SUB ;调用显示子程序。 LJMP MAIN;A/D转换子程序 AD_SUB: CLR A MOV P2, A ;初始化P2口,清除对ADC0809的控制信号。 MOV R0,#70H LCALL AD_SUB ;调用采样子程序 WAIT: JB P3.7,DATASAVE ;判断采样转换是否完毕,完毕则跳转到DATASAVE进行存储。 AJMP WAIT ;否则继续等待。 ;启动采样,送脉冲

9、时序 AD_SUB: SETB P2.3 ;ALE 脉冲时序 NOP NOP CLR P2.3 SETB P2.4 ;START脉冲时序 NOP NOP CLR P2.4 NOP NOP RET ;采样转换的数据存储 DATASAVE: SETB P2.5 ;置位OE端,允许ADC0809输出数据 MOV A , P0 ;将转换的数据存储到70H中 MOV R0,A CLR P2.5 CLR A ;初始化P0,P1,P2口 MOV P2 ,A MOV A,#0FFH MOV P0 ,A MOV P1 ,A RET ;将0-255转换为0.00-5.00TURN_SUB: MOV A ,R0 M

10、OV A ,#51 DIV AB MOV 78H, A ;以上这一段是整数部分放入78H MOV A , B ;余数部分放入A CLR F0 SUBB A ,#1AH ;余数和51的一半即1AH比较,以便四舍五入 MOV F0 , C MOV A ,#10 MUL AB ;余数乘以10,以便再除以51 MOV B , #51 DIV AB JB F0,LOOP1 ;判断四舍五入,跳到LLOP1是“四舍” ADD A ,#5 ;这是“五入” LOOP1: MOV 79H,A ;十分位 MOV A ,B CLR F0 SUBB A ,#1AH MOV F0 ,C MOV A ,#10 MUL AB MOV B , #51 DIV AB JB F0,LOOP2 ADD A ,#5 LOOP2: MOV 7AH, A ;百分位 RET ;显示子程序 DISP_SUB: MOV R1 ,#78H ;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号