本科学生设计性实验报告
项目组长____学号成 员
专 业 实验项目名称__基于单片机的数字电压表 _ 指导教师及职称___ _ _ 开课学期 至_学年_学期 上课时间 年月日
摘 要
本实验是利用单片机设计一个简易的数字电压表,能够测量交流直流电压值,通过LED数码管显示,使用的元器件数目较少。外界电压模拟量输入到A/D转换部分的输入端,通过ADC0808转换变为数字信号,输送给单片机处理。并根据处理结果由单片机控制数码管发光,从而显示数电压值。此外,本文还讨论了设计过程中的所用的软件硬件环境,调试所出现的问题等。
关键词:数字电压表;单片机;
;;四位LED数码管。
AT89C51 ADC0808
目录
摘 要 ..................................................................... 1 第一部分 引言 ............................................................ 3
1.1 简介.......................................................................... 3 第二部分 硬件电路设计 ............................................................ 4
2.1 硬件电路设计总体方案.......................................................... 4 2.2 数据处理和显示模块............................................................ 4
2.2.1 AT89C51单片机 .......................................................... 4 2.2.2 四位数码管.............................................................. 5 2.3 A/D转换模块 .................................................................. 5
2.3.1 ADC0808主要技术指标 .................................................... 5 2.3.2 工作时序与使用说明...................................................... 8 2.3.3 电压采集硬件电路........................................................ 8 2.3.4 数据接收和数据处理硬件电路.............................................. 9
第三部分 软件设计及实验结果调试 ................................................ 10
3.1 主程序设计................................................................... 10 3.2 A/D转换程序 ................................................................. 10 3.3 实验结果调试................................................................. 11
设计小结 ................................................................. 11 附录一 程序清单 ........................................................ 12 附录二 电路原理图 .............................................................................................................. 14 附录三 硬件实物图 .............................................................................................................. 15
第一部分 引言
1.1 简介
数字电压表(简写为 DVM)就是在精密电测量技术、计算技术、自动化技术和电子技术的基础上产生和发展起来的。 数字式仪表是能把连续的被测量自动地变成断续的、用数字编码方式的、并以十进制数字自动显示测量结果的一种测量仪表。这是一种新型仪表,它把电子技术、计算技术、自动化技术的成果与精密电测量技术密切的结合在一起。成为仪器、仪表领域中独立而完整的一个分支。
数字电压表是通用仪器中使用较广泛的一种测试仪器,很多电量或非电量经变化后都用可数字电压表完成测试。因此,数字电压表被广泛地应用于科研和生产测试中。本文将介绍一种以单片机为核心的电压测量仪表,它能够测量电压量,并且测量结果能够通过数码管显示。回顾一下电压表的发展过程,大致可分为以下三个阶段:
数字化阶段。50-60 年代中期,电压表的特点是运用各种原理实现模数(A/D)转换即将模拟量转化成数字量,从而实现测量仪表的数字化。
高准确度阶段。由于精密电测量的需要,电压表开始向高准确度、高位数方向发展,出现了所谓复合型原理的仪表。
智能化阶段。60 年代末期,电子技术和工艺结构有了飞跃的发展,而大规模集成电路(LSI)与计算机技术相结合的产物是微处理器(简写为μP)。1972 年,美国 Intel 公司首创微处理器,不久即研制出微处理器式数字电压表,实现了电压表数据处理自动化和可编程序。因为带有存贮器并使用软件,所以可进行信息处理,可通过标准接口组成自动测试系统(简写为 ATS)。这些仪表除了完成原有电压表的各种功能外,还能够自校、自检,保证了自动测量的高准确度,实现了仪器、仪表的所谓“智能化”。智能化的电压表为实现各种物理量的动态测量提供了可能。
智能化数字电压表有以下突出的特点:
可以程序控制——利用事先编好的程序,可以让数字仪表自动按程序进行操作。人在做测量工作时还可能因为精神因素引入各种人为的误差甚至造成重大失误,而这种自动测量却可以二十四小时不停地工作,且出错概率小。
有自检、自我修复能力——智能电压表可以按程序对仪表进行自检。有些不允许停止控制的仪表(炼钢护、化工反应炉、飞行器等),可以把关键部分的备件放进仪表内,当自检时发现故障后,它会立即自动转换到备用电路上工作,保证控制不间断。
由于智能仪表的这些优点,从上世纪七十年代末开始,各国的数字仪表已转向智能化仪表生产。
第二部分 硬件电路设计
2.1 硬件电路设计总体方案
系统的硬件结构包括:AT89C51、逐次逼近型A/D转换器ADC0808、四位LED数码管和电压采集模块等构成。其中以AT89C51和ADC0808为核心内件,ADC0808实现模数转换。AT89C51主要模数转换后数据的处理以及控制四位LED数码管上数值的显示,提供ADC0808芯片的工作频率等功能。
2.2 数据处理和显示模块
2.2.1 AT89C51单片机
AT89C51(图1)是一个低功耗,高性能CMOS8位单片机,片内含4kBytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89C51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
本实验由其组成的数据处理系统如图1所示
图1 单片机数据处理系统
2.2.2 四位数码管
本实验中所用的显示数码管比较简单,主要由四个八段共阴数码组成,通过单片机控制其显示,原理图与仿真图如图2和图3所示:
图2 四位数码管内部结构
图3 四位数码管7SEG-MPX4
2.3 A/D转换模块
2.3.1 ADC0808主要技术指标
ADC0808是CMOS器件不仅包括一个8位的逐次逼近型的ADC部分,而且还提供一个8通道的模拟多路开关和通道寻址逻辑,可以把它作为简单的“数据采集系统”。利用它可直接输入8个单端的模拟信号分时进行A/D转换,在多点巡回检测和过程控制、运动控制中应用十分广泛。
1) 主要技术指标和特性 A、分辨率: 8位。
B、总的不可调误差: ADC0808为±1/2LSB,ADC 0809为±1LSB。 C、转换时间: 取决于芯片时钟频率,如CLK=500kHz时,TCONV=128μs。
D、单一电源: +5V。
E、模拟输入电压范围: 单极性0~5V;双极性±5V,±10V(需外加一定电路)。 F、具有可控三态输出缓存器。
G、启动转换控制为脉冲式(正脉冲),上升沿使所有内部寄存器清零,下降沿使A/D转换开始。 H、使用时不需进行零点和满刻度调节。 2) 内部结构和外部引脚
ADC0808/0809的内部结构和由其组成的AD转换系统如图4和图5所示。内部各部分的作用和工作原理在内部结构图中已一目了然,在此就不再赘述,下面仅对各引脚定义分述如下:
图4 ADC0808/0809内部结构框图
图5 由ADC0808组成的AD转换系统
A、IN0~IN7——8路模拟输入,通过3根地址译码线ADDA、ADDB、ADDC来选通一路。
表1 地址信号与选中通道的关系
B、D7~D0——A/D转换后的数据输出端,为三态可控输出,故可直接和微处理器数据线连接。8位排列顺序是D7为最高位,D0为最低位。
C、ADDA、ADDB、ADDC——模拟通道选择地址信号,ADDA为低位,ADDC为高位。地址信号与选中通道对应关系如表11.3所示。
D、VR(+)、VR(-)——正、负参考电压输入端,用于提供片内DAC电阻网络的基准电压。在单极性输入时,VR(+)=5V,VR(-)=0V;双极性输入时,VR(+)、VR(-)分别接正、负极性的参考电压。
E、ALE——地址锁存允许信号,高电平有效。当此信号有效时,A、B、C三位地址信号被锁存,译码选通对应模拟通道。在使用时,该信号常和START信号连在一起,以便同时锁存通道地址和启动A/D转换。
F、START——A/D转换启动信号,正脉冲有效。加于该端的脉冲的上升沿使逐次逼近寄存器清零,下降沿开始A/D转换。如正在进行转换时又接到新的启动脉冲,则原来的转换进程被中止,重新从头开始转换。
G、EOC——转换结束信号,高电平有效。该信号在A/D转换过程中为低电平,其余时间为高电平。该信号可作为被CPU查询的状态信号,也可作为对CPU的中断请求信号。在需要对某个模拟量不断采样、转换的情况下,EOC也可作为启动信号反馈接到START端,但在刚加电时需由外电路第一次启动。
H、OE——输出允许信号,高电平有效。当微处理器送出该信号时,ADC0808/0809的输出三态门被打开,使转换结果通过数据总线被读走。在中断工作方式下,该信号往往是CPU发出的中断请求响应信号。
2.3.2 工作时序与使用说明
当通道选择地址有效时,ALE信号一出现,地址便马上被锁存,这时转换启动信号紧随ALE之后(或与ALE同时)出现。START的上升沿将逐次逼近寄存器SAR复位,在该上升沿之后的2μs加8个时钟周期内(不定),EOC信号将变低电平,以指示转换操作正在进行中,直到转换完成后EOC再变高电平。微处理器收到变为高电平的EOC信号后,便立即送出OE信号,打开三态门,读取转换结果。具体工作时序(如图6所示 )
图6 ADC 0808/0809工作时序
2.3.3 电压采集硬件电路
由于使用的是5V基准电压,所以需要使用电阻分压来实现电压的采集,仿真时并可以通过可变电阻调节的调节使在电压输入范围内改变,采集电路如图7所示
图7 电压采集电路
2.3.4 数据接收和数据处理硬件电路
从以上分析可知,ADC0808有个模拟通道,本文的模拟量从0通道输入,由ADC0808的模拟通道地址表可知,电路中应当把ADDC、ADDB、ADDC三个引脚全部接地。根据ADC0808的工作时序图可知,START引脚在一个高电平后启动A/D转换,当EOC引脚出现一个低电平是转换结束,然后由OE引脚控制,从并行输出端取一个字节的转换结果。转换后的结果为0x00-0xFF,转换过程中芯片所需的时钟信号由外部时钟信号提供。具体硬件结构如图8所示
数据处理硬件电路如下:
图8 数据处理硬件电路图
第三部分 软件设计及实验结果调试
根据需要,可将系统软件按照功能划分为3个模块,分别是主程序模块,A/D转换模块,数码管示模块。
3.1 主程序设计
主程序主要负责寄存器的初值,启动A/D转换,读取转换结果,处理转换结果,控制数码管显示等,其流程图如图9所示:
图9 主程序过程图
3.2 A/D转换程序
A/D转换程序的功能是采集数据,在整个系统设计中占有很高的地位。当系统设置好后,单片机扫描转换结束管脚p3.0的输入电平状态,当输入为高电平则转换完成,将转换的数值转换并显示输出。若输入为低电平,则继续扫描。程序流程图如图10所示:
图10 AD转换流程
3.3 实验结果调试
软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序,AD转换程序和数码显示程序编译和调试;硬件调试,首先用万用表检查硬件电路的焊接是否正确,是否有短路、断路、虚焊等。在检查无误后,可通电检测数码管显示状况。如果不理想,继续调整程序,直到得到正确结果。
设计小结
本次实验设计中,我们小组3个人合作,共同完成此次实验任务。我们的数字电压表设计以AT89C51单片机为控制核心,通过集成摸数转换芯片ADC0808将被测信号转换成数字信号,经单片机内部程序处理后,由四位LED数码管显示结果,下面是此次实验的总结:
(1)本次实验成功的关键在于就在于掌握模数转换原理,以及熟悉AT89C51的编程技巧;
(2)输入电压易发生干扰不稳定,且驱动能力可能存在不足,需在被测信号的输入端加上一部分驱动电路,比如将量程转换电路改成带放大能力的自动量程转换电路,将幅值较小的信号经适当放大后再测量,可显著提高精度;
(3)输出量可用平均值算法来改善,使测量准确度更高。
(4)通过此次实验,我们更加加深了对单片机的和模数转换技术的理解。
附录一 程序清单
#include
unsigned char code dispbitcode[]={0xfd,0xfb,0xf7,0xef};//选通库
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0};//显示库 sbit P3_0=P3^0 ;
void delay1ms()//延时子程序 {
unsigned char a,b; for(a=0;a
void main() {
unsigned char temp1,temp2,temp3,temp; unsigned int getdata; while(1) {
*((unsigned char xdata*)0xfef0)=0;//启动AD if(P3_0==1) {
getdata=P0; }
temp=getdata*20/255; temp3=temp/10;//十位 temp2=temp%10; //个位
temp1=getdata*20%255*10/255; //小数点位 if(getdata*20%255*10%255*10/255>=5)//四舍五入 { temp1++; if(temp1==10) { temp1=0; temp2++; if(temp2==10) { temp2=0;
temp3++; } }
if(temp3==0)//高位0不显示 { temp3=10; if(temp2==0) { temp2=10; } } }
P1=dispcode[temp3];//十位 P2=dispbitcode[2]; delay1ms(); P1=0;
P1=dispcode[temp2];//个位 P2=dispbitcode[1]; delay1ms(); P1=0;
P1=0x80;//小数点 delay1ms(); P1=0;
P1=dispcode[temp1];//小数位 P2=dispbitcode[0]; delay1ms(); P1=0; } }
附录二 电路原理图
图11 系统仿真图
图12 系统仿真图
附录三 硬件实物图
图13 我们的实物图
本科学生设计性实验报告
项目组长____学号成 员
专 业 实验项目名称__基于单片机的数字电压表 _ 指导教师及职称___ _ _ 开课学期 至_学年_学期 上课时间 年月日
摘 要
本实验是利用单片机设计一个简易的数字电压表,能够测量交流直流电压值,通过LED数码管显示,使用的元器件数目较少。外界电压模拟量输入到A/D转换部分的输入端,通过ADC0808转换变为数字信号,输送给单片机处理。并根据处理结果由单片机控制数码管发光,从而显示数电压值。此外,本文还讨论了设计过程中的所用的软件硬件环境,调试所出现的问题等。
关键词:数字电压表;单片机;
;;四位LED数码管。
AT89C51 ADC0808
目录
摘 要 ..................................................................... 1 第一部分 引言 ............................................................ 3
1.1 简介.......................................................................... 3 第二部分 硬件电路设计 ............................................................ 4
2.1 硬件电路设计总体方案.......................................................... 4 2.2 数据处理和显示模块............................................................ 4
2.2.1 AT89C51单片机 .......................................................... 4 2.2.2 四位数码管.............................................................. 5 2.3 A/D转换模块 .................................................................. 5
2.3.1 ADC0808主要技术指标 .................................................... 5 2.3.2 工作时序与使用说明...................................................... 8 2.3.3 电压采集硬件电路........................................................ 8 2.3.4 数据接收和数据处理硬件电路.............................................. 9
第三部分 软件设计及实验结果调试 ................................................ 10
3.1 主程序设计................................................................... 10 3.2 A/D转换程序 ................................................................. 10 3.3 实验结果调试................................................................. 11
设计小结 ................................................................. 11 附录一 程序清单 ........................................................ 12 附录二 电路原理图 .............................................................................................................. 14 附录三 硬件实物图 .............................................................................................................. 15
第一部分 引言
1.1 简介
数字电压表(简写为 DVM)就是在精密电测量技术、计算技术、自动化技术和电子技术的基础上产生和发展起来的。 数字式仪表是能把连续的被测量自动地变成断续的、用数字编码方式的、并以十进制数字自动显示测量结果的一种测量仪表。这是一种新型仪表,它把电子技术、计算技术、自动化技术的成果与精密电测量技术密切的结合在一起。成为仪器、仪表领域中独立而完整的一个分支。
数字电压表是通用仪器中使用较广泛的一种测试仪器,很多电量或非电量经变化后都用可数字电压表完成测试。因此,数字电压表被广泛地应用于科研和生产测试中。本文将介绍一种以单片机为核心的电压测量仪表,它能够测量电压量,并且测量结果能够通过数码管显示。回顾一下电压表的发展过程,大致可分为以下三个阶段:
数字化阶段。50-60 年代中期,电压表的特点是运用各种原理实现模数(A/D)转换即将模拟量转化成数字量,从而实现测量仪表的数字化。
高准确度阶段。由于精密电测量的需要,电压表开始向高准确度、高位数方向发展,出现了所谓复合型原理的仪表。
智能化阶段。60 年代末期,电子技术和工艺结构有了飞跃的发展,而大规模集成电路(LSI)与计算机技术相结合的产物是微处理器(简写为μP)。1972 年,美国 Intel 公司首创微处理器,不久即研制出微处理器式数字电压表,实现了电压表数据处理自动化和可编程序。因为带有存贮器并使用软件,所以可进行信息处理,可通过标准接口组成自动测试系统(简写为 ATS)。这些仪表除了完成原有电压表的各种功能外,还能够自校、自检,保证了自动测量的高准确度,实现了仪器、仪表的所谓“智能化”。智能化的电压表为实现各种物理量的动态测量提供了可能。
智能化数字电压表有以下突出的特点:
可以程序控制——利用事先编好的程序,可以让数字仪表自动按程序进行操作。人在做测量工作时还可能因为精神因素引入各种人为的误差甚至造成重大失误,而这种自动测量却可以二十四小时不停地工作,且出错概率小。
有自检、自我修复能力——智能电压表可以按程序对仪表进行自检。有些不允许停止控制的仪表(炼钢护、化工反应炉、飞行器等),可以把关键部分的备件放进仪表内,当自检时发现故障后,它会立即自动转换到备用电路上工作,保证控制不间断。
由于智能仪表的这些优点,从上世纪七十年代末开始,各国的数字仪表已转向智能化仪表生产。
第二部分 硬件电路设计
2.1 硬件电路设计总体方案
系统的硬件结构包括:AT89C51、逐次逼近型A/D转换器ADC0808、四位LED数码管和电压采集模块等构成。其中以AT89C51和ADC0808为核心内件,ADC0808实现模数转换。AT89C51主要模数转换后数据的处理以及控制四位LED数码管上数值的显示,提供ADC0808芯片的工作频率等功能。
2.2 数据处理和显示模块
2.2.1 AT89C51单片机
AT89C51(图1)是一个低功耗,高性能CMOS8位单片机,片内含4kBytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89C51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
本实验由其组成的数据处理系统如图1所示
图1 单片机数据处理系统
2.2.2 四位数码管
本实验中所用的显示数码管比较简单,主要由四个八段共阴数码组成,通过单片机控制其显示,原理图与仿真图如图2和图3所示:
图2 四位数码管内部结构
图3 四位数码管7SEG-MPX4
2.3 A/D转换模块
2.3.1 ADC0808主要技术指标
ADC0808是CMOS器件不仅包括一个8位的逐次逼近型的ADC部分,而且还提供一个8通道的模拟多路开关和通道寻址逻辑,可以把它作为简单的“数据采集系统”。利用它可直接输入8个单端的模拟信号分时进行A/D转换,在多点巡回检测和过程控制、运动控制中应用十分广泛。
1) 主要技术指标和特性 A、分辨率: 8位。
B、总的不可调误差: ADC0808为±1/2LSB,ADC 0809为±1LSB。 C、转换时间: 取决于芯片时钟频率,如CLK=500kHz时,TCONV=128μs。
D、单一电源: +5V。
E、模拟输入电压范围: 单极性0~5V;双极性±5V,±10V(需外加一定电路)。 F、具有可控三态输出缓存器。
G、启动转换控制为脉冲式(正脉冲),上升沿使所有内部寄存器清零,下降沿使A/D转换开始。 H、使用时不需进行零点和满刻度调节。 2) 内部结构和外部引脚
ADC0808/0809的内部结构和由其组成的AD转换系统如图4和图5所示。内部各部分的作用和工作原理在内部结构图中已一目了然,在此就不再赘述,下面仅对各引脚定义分述如下:
图4 ADC0808/0809内部结构框图
图5 由ADC0808组成的AD转换系统
A、IN0~IN7——8路模拟输入,通过3根地址译码线ADDA、ADDB、ADDC来选通一路。
表1 地址信号与选中通道的关系
B、D7~D0——A/D转换后的数据输出端,为三态可控输出,故可直接和微处理器数据线连接。8位排列顺序是D7为最高位,D0为最低位。
C、ADDA、ADDB、ADDC——模拟通道选择地址信号,ADDA为低位,ADDC为高位。地址信号与选中通道对应关系如表11.3所示。
D、VR(+)、VR(-)——正、负参考电压输入端,用于提供片内DAC电阻网络的基准电压。在单极性输入时,VR(+)=5V,VR(-)=0V;双极性输入时,VR(+)、VR(-)分别接正、负极性的参考电压。
E、ALE——地址锁存允许信号,高电平有效。当此信号有效时,A、B、C三位地址信号被锁存,译码选通对应模拟通道。在使用时,该信号常和START信号连在一起,以便同时锁存通道地址和启动A/D转换。
F、START——A/D转换启动信号,正脉冲有效。加于该端的脉冲的上升沿使逐次逼近寄存器清零,下降沿开始A/D转换。如正在进行转换时又接到新的启动脉冲,则原来的转换进程被中止,重新从头开始转换。
G、EOC——转换结束信号,高电平有效。该信号在A/D转换过程中为低电平,其余时间为高电平。该信号可作为被CPU查询的状态信号,也可作为对CPU的中断请求信号。在需要对某个模拟量不断采样、转换的情况下,EOC也可作为启动信号反馈接到START端,但在刚加电时需由外电路第一次启动。
H、OE——输出允许信号,高电平有效。当微处理器送出该信号时,ADC0808/0809的输出三态门被打开,使转换结果通过数据总线被读走。在中断工作方式下,该信号往往是CPU发出的中断请求响应信号。
2.3.2 工作时序与使用说明
当通道选择地址有效时,ALE信号一出现,地址便马上被锁存,这时转换启动信号紧随ALE之后(或与ALE同时)出现。START的上升沿将逐次逼近寄存器SAR复位,在该上升沿之后的2μs加8个时钟周期内(不定),EOC信号将变低电平,以指示转换操作正在进行中,直到转换完成后EOC再变高电平。微处理器收到变为高电平的EOC信号后,便立即送出OE信号,打开三态门,读取转换结果。具体工作时序(如图6所示 )
图6 ADC 0808/0809工作时序
2.3.3 电压采集硬件电路
由于使用的是5V基准电压,所以需要使用电阻分压来实现电压的采集,仿真时并可以通过可变电阻调节的调节使在电压输入范围内改变,采集电路如图7所示
图7 电压采集电路
2.3.4 数据接收和数据处理硬件电路
从以上分析可知,ADC0808有个模拟通道,本文的模拟量从0通道输入,由ADC0808的模拟通道地址表可知,电路中应当把ADDC、ADDB、ADDC三个引脚全部接地。根据ADC0808的工作时序图可知,START引脚在一个高电平后启动A/D转换,当EOC引脚出现一个低电平是转换结束,然后由OE引脚控制,从并行输出端取一个字节的转换结果。转换后的结果为0x00-0xFF,转换过程中芯片所需的时钟信号由外部时钟信号提供。具体硬件结构如图8所示
数据处理硬件电路如下:
图8 数据处理硬件电路图
第三部分 软件设计及实验结果调试
根据需要,可将系统软件按照功能划分为3个模块,分别是主程序模块,A/D转换模块,数码管示模块。
3.1 主程序设计
主程序主要负责寄存器的初值,启动A/D转换,读取转换结果,处理转换结果,控制数码管显示等,其流程图如图9所示:
图9 主程序过程图
3.2 A/D转换程序
A/D转换程序的功能是采集数据,在整个系统设计中占有很高的地位。当系统设置好后,单片机扫描转换结束管脚p3.0的输入电平状态,当输入为高电平则转换完成,将转换的数值转换并显示输出。若输入为低电平,则继续扫描。程序流程图如图10所示:
图10 AD转换流程
3.3 实验结果调试
软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序,AD转换程序和数码显示程序编译和调试;硬件调试,首先用万用表检查硬件电路的焊接是否正确,是否有短路、断路、虚焊等。在检查无误后,可通电检测数码管显示状况。如果不理想,继续调整程序,直到得到正确结果。
设计小结
本次实验设计中,我们小组3个人合作,共同完成此次实验任务。我们的数字电压表设计以AT89C51单片机为控制核心,通过集成摸数转换芯片ADC0808将被测信号转换成数字信号,经单片机内部程序处理后,由四位LED数码管显示结果,下面是此次实验的总结:
(1)本次实验成功的关键在于就在于掌握模数转换原理,以及熟悉AT89C51的编程技巧;
(2)输入电压易发生干扰不稳定,且驱动能力可能存在不足,需在被测信号的输入端加上一部分驱动电路,比如将量程转换电路改成带放大能力的自动量程转换电路,将幅值较小的信号经适当放大后再测量,可显著提高精度;
(3)输出量可用平均值算法来改善,使测量准确度更高。
(4)通过此次实验,我们更加加深了对单片机的和模数转换技术的理解。
附录一 程序清单
#include
unsigned char code dispbitcode[]={0xfd,0xfb,0xf7,0xef};//选通库
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0};//显示库 sbit P3_0=P3^0 ;
void delay1ms()//延时子程序 {
unsigned char a,b; for(a=0;a
void main() {
unsigned char temp1,temp2,temp3,temp; unsigned int getdata; while(1) {
*((unsigned char xdata*)0xfef0)=0;//启动AD if(P3_0==1) {
getdata=P0; }
temp=getdata*20/255; temp3=temp/10;//十位 temp2=temp%10; //个位
temp1=getdata*20%255*10/255; //小数点位 if(getdata*20%255*10%255*10/255>=5)//四舍五入 { temp1++; if(temp1==10) { temp1=0; temp2++; if(temp2==10) { temp2=0;
temp3++; } }
if(temp3==0)//高位0不显示 { temp3=10; if(temp2==0) { temp2=10; } } }
P1=dispcode[temp3];//十位 P2=dispbitcode[2]; delay1ms(); P1=0;
P1=dispcode[temp2];//个位 P2=dispbitcode[1]; delay1ms(); P1=0;
P1=0x80;//小数点 delay1ms(); P1=0;
P1=dispcode[temp1];//小数位 P2=dispbitcode[0]; delay1ms(); P1=0; } }
附录二 电路原理图
图11 系统仿真图
图12 系统仿真图
附录三 硬件实物图
图13 我们的实物图