"单片机课程设 " 课题名称: 数字电压表 课程原理: 1. 模数转换原理: 试验中,我们选用ADC0809作为模数转换的芯片,其为逐次逼近式AD转换式芯片,其 工作时需要一个稳定的时钟输入,根据查找资料,得到ADC0809的时钟频率在10khz ~1200khz,我们选择典型值640khz。课题要求测量电压范围是0到5V,又ADC0809的要 求:Vref+<=Vcc,Vref->=GND,故我们取Vref+=+5V,Vref- =0V。由于ADC0809有8个输入通道可供选择,我们选择IN0通道,直接使ADC0809的A 、B、C接地便可以了,在当ADC0809启动时ALE引脚电平正跳变时变可以锁存A、B、 C上的地址信息。ADC0809可以将从IN0得到的模拟数据转换为相应的二进制数,由于 ADC0809输出为8位的二进制数,转换时将0到5V分为255等分,所以我们可以得到转 换公式为x/255*5化简为:x/51,x为得到的模拟数据量,也就是直接得到的电压量。 在AD转换完成后,ADC0809将在EOC引脚上产生一个8倍于自身时钟周期的正脉冲,以 此来作为转换结束的标志。然后当OE引脚上产生高电平时,ADC0809将允许转换完的 二进制数据输出。 2. 数据处理原理: 由ADC0809的转换原理可以知道我们从其得到数据还只是二进制数据,我们还需要进 一步处理来的到x的十进制数,并且对其进行精度处理,也就是课题要求的的精确到 小数点后两位,在这里我们用51单片机对数据进行处理。我们处理数据的思路是: 首先将得到的二进制数直接除以十进制数51,然后取整为x的整数部分,然后就是将 得到的余数乘以10,然后再除以51,再取整为x的十分位,最后将得到的余数除以5 得到x的百分位。 3. 数据显示原理: 试验中我们用到四位一体的七段数码管,所以我们只能考扫描显示来完成数码管对 x的显示,我们用的是四位数码显示管,但是x只是三位的,故我们将将第四位显示 为单位U,通过程序的延时,实现四位数码管的稳定显示。 课程电路和仿真图: 实验中我们采用的protus仿真。 我们将单片机得P0口接上拉电阻后与数码管的8位段选相连,若不接上拉电阻将无法驱 动数码管,用P2口得4到7位连接数码管的段选,考虑到整体的PCB布线,我选用 P3.2口作为ADC0809的时钟输出端,并用到单片机的定时器。用P3.5传输ADC0809的 START启动信号,用P3.6作为ALE的信号传输,P3.3作为OE的连接端。IN0为输入端 ,而ADC0809的IN1到IN7悬空,不作连接。单片机EA接高电平。而P3口从ADC08 09的输出端输入数据。 实验程序代码: 本次实验我用到的是最底层的汇编语言。 ORG 0000H LJMP START ORG 000BH CPL P3.2 MOV TH0,#0FFH MOV TL0,#0FFH RETI ORG 0014H START: MOV PSW,#0FFH MOV R1,#00H MOV R2, #00H MOV R3,#00H //清零寄存器 MOV IE ,#82H //设置IE,开启定时器,关闭其他中断 MOV TMOD ,#01H //定时器T0,方式1,给ADC0809时钟信号 MOV TH0, #0FFH MOV TL0, #0FFH SETB TR0 //启动定时器 LOOP1: CLR P3.5 // 清零并启动ADC0809 CPL P3.5 CPL P3.5 CLR P3.6 //初始化ALE,并启动 SETB P3.6 SETB P3.4 LOOP2: JNB P3.4 , LOOP2 //扫描EOC SETB P3.3 // 允许输出 MOV P1,#0FFH MOV A,P1 MOV B,#51 DIV AB MOV DPTR,#DTAB MOVC A,@A+DPTR ORL A,#20H MOV R1,A //得到个位和小数点存于R1 MOV A,B MOV B,#10 MUL AB JNB PSW.2,LOOP3 CLR PSW.2 INC A MOV B,#51 DIV AB ADD A,#5 MOV R0,B AJMP LOOP4 LOOP3: MOV B,#51 DIV AB MOV R0,B LOOP4: MOV DPTR,#DTAB MOVC A,@A+DPTR MOV R2,A //得到十分位存于R2 MOV A,B // MOV A,R0 MOV B,#10// MOV B,#5 MUL AB //DIV AB JNB PSW.2,LOOP5 CLR PSW.2 INC A MOV B,#51 DIV AB ADD A,#5 AJMP LOOP6 LOOP5: MOV
【单片机课程设计报告——数字电压表】
本课程设计主要围绕数字电压表的实现,涉及模数转换、数据处理和数据显示三个核心原理。使用的器件是ADC0809,这是一种逐次逼近型的模数转换芯片,适用于将模拟电压转化为数字信号。ADC0809的工作需要一个稳定的时钟输入,选择的典型时钟频率为640kHz。为了满足0到5V的电压测量范围,设置Vref+=+5V,Vref-=0V。ADC0809的8个输入通道中,选取IN0通道,通过接地A、B、C引脚来选择该通道。转换后的8位二进制数可以表示0到5V之间的255个等份,因此转换公式为x/51,其中x为模拟数据量,即电压值。
在数据处理阶段,从ADC0809获取的原始二进制数据需转换成十进制数并保留两位小数精度。51单片机被用来执行这一任务,通过将二进制数除以51(即255的五分之一),分别获取整数、十分位和百分位。首先除法操作得到整数部分,余数乘以10后再除以51得到十分位,最后的余数除以5得到百分位。
数据显示部分,采用了四位一体的七段数码管,但由于实际电压值只有三位,第四位用于显示单位“U”。通过扫描显示技术及适当延时,确保四位数码管稳定地显示出电压值。硬件连接上,单片机的P0口通过上拉电阻连接到数码管的段选,P2口控制段选,P3.2作为ADC0809的时钟输出,P3.5、P3.6和P3.3分别对应ADC0809的START、ALE和OE信号,而P3口接收ADC0809的输出数据。
在电路和仿真环节,利用Protus软件进行了仿真验证。单片机的P0、P2和P3口与ADC0809及数码管的接口连接符合设计要求。在程序代码层面,使用了汇编语言编写,涉及到定时器设置、中断处理以及与ADC0809的交互,如启动转换、读取数据等。
这个数字电压表的设计融合了单片机、模数转换器和显示技术的综合应用,通过精确的数据处理和合理的硬件配置,实现了从模拟电压到数字显示的完整转换过程。