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

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

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

1、 利用51单片机与ADC0809和数码管设计数字电压表一、课题功能描述:利用单片机AT89C51 芯片与ADC0809 芯片设计一个数字电压表,能够测 量05V 之间的直流电压,三位数码显示。2、 程序设计本实验采用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. 导线 若干4、 程序设计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开始5、 程序代码 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

11、 MOV B , #51 DIV AB JB F0,LOOP2 ADD A ,#5 LOOP2: MOV 7AH, A ;百分位 RET ;显示子程序 DISP_SUB: MOV R1 ,#78H ;R1辅助寄存器,用于存放要显示的数据的地址 CLR A MOV P1,#0FFH ;初始化P1,P2口 ANL P2 ,A LCALL PLAY ;调用显示位码子程序 CLR P1.7 ;显示最高位后的小数点 SETB P3.2 ;选中最高位LED 数码管 LCALL DELAY ;调用延迟子程序 CLR P3.2 ;取消最高位位选 INC R1 ;提取第二位有效数字的数据地址 LCALL PLA

12、Y ;调用显示位码子程序 SETB P3.1 ;选中第二位LED 数码管 LCALL DELAY ;调用延迟子程序 CLR P3.1 ;取消第二位位选 INC R1 ;提取最低位有效数字的数据地址 LCALL PLAY ;调用显示位码子程序 SETB P3.0 ;选中最低位LED 数码管 LCALL DELAY ;调用延迟子程序 CLR P3.0 ;取消最低位位选 RET ;位码显示 PLAY: MOV A,R1 ;送偏移量 MOV DPTR,#TAB ;送表首地址 MOVC A,A+DPTR ;查表得出相应LED段码 MOV P1, A ;输出显示 RET ;延时程序 DELAY: MOV

13、R6,#10H DL1:MOV R7,#10H DL2:DJNZ R7,DL2 DJNZ R6,DL1 RET ;09段码 TAB: DB 0C0H , 0F9H , 0A4H , 0B0H , 99H , 92H , 82 , 0F8H , 80H , 90H END6、 调试(测试)过程 1.焊好的电路板,在与仿真器接入之前,需要进行电路检查,防止短路烧毁芯片。2. 在把程序写入单片机内部之前,需要先在仿真器上先运行。尽量避免单片机写入之后再擦除。3. 仿真器运行时,显示管完全不亮,而P1口的值却有变化,说明有可能是 74HC245芯片处的电路没有接好。4. 显示管有点暗,可能是延时时间调得有点过大了。如果发现显示管的 某一笔画不亮,那么就有可能是链接该点对应的I0口没有接好,或者是对应的电阻坏掉了。七、实验小结经过两周的实验,我真的学到了很多的东西。经过一个学期的学习,我对于单片机的硬件电路设计与编程都有了一定的了解。在这个项目中,在已经有了程序和电路图以后,我还是感到这个实训有点吃力,或许真的是我们的水平不够吧!我个人认为,实际意义上的学习单片机还没有结束,因为作为电子信息专业的我们,必须对于单片机编程与C语言有一定的熟悉与了解,这样才能在以后实习和工作中才能在社会上谋求自己的一席之地!

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1