实验七 直流数字电压表设计

实验七 直流数字电压表设计

一、 实验目的:

掌握LED动态显示和A/D 转换接口设计方法。

二、 实验原理:

实验电路原理图如图A..94所示。图中显示器采用4位共阴极数码管,并按动态显示方式接线。A/D转换结束标志采用查询法检查,启动信号由软件模拟产生,时钟信号由Proteus的DClock信号发生器产生,频率为5kHz。电位器的输出电压送到A/D转换器中转换,转换结果以十进制形式显示在数码管上。调节电位器可使数码管的显示值发生相应变化。

实验七直流数字电压表设计

图A.94 实验7的电路原理图

三、实验内容:

(1)、学习使用Proteus软件,掌握原理图绘图方法;

(2)、学习使用Keil C软件,掌握C51程序编写与调试方法;

(3)、理解动态显示与A/D转换工作原理,完成单片机电压采集与显示程序的编写与调试。

四、实验步骤:

(1)、在Proteus中绘制电路原理图,按照表A.9将元件添加到编辑环境中;

(2)、在Keil中编写C51程序,并使之编译通过;

(3)、在Proteus中加载程序,观察仿真结果。

五、实验要求:

提交的实验报告中应包括电路原理图、含注释内容的源程序及实验结果分析。

表A.9 实验7的元器件清单

实验七直流数字电压表设计

(1)、源程序如下:

#include <reg51.h> // 头文件

#include <absacc.h>

unsigned int tmp; //定义一个整形中间变量

sbit START=P2^5; //定义ADC0808启动位

sbit ad_busy=P2^6; //定义ADC0808转换结束标志位

sbit OE=P2^7; //定义ADC0808输出使能标志位

sbit P2_0=P2^0; //定义四个数码管

sbit P2_1=P2^1;

sbit P2_2=P2^2;

sbit P2_3=P2^3;

char led_mod[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //LED字模

void delay( unsigned int time) //延时函数

{

unsigned int j=0;

for(;time>0;time--)

}

void show () // 数码管动态显示函数

{

unsigned i,j; for(j=0;j<125;j++) ;

P2_0=0;

j=tmp/1000;i=j%1000;P0=led_mod[i]; delay(10); // 显示千位 P2_0=1; P2_1=0; j=tmp/100;i=j%100;P0=led_mod[i]; delay(10); // 显示百位 P2_1=1; P2_2=0; j=tmp/10;i=j%10;P0=led_mod[i]; delay(10); // 显示十位 P2_2=1;

P2_3=0;

i=tmp%10; P0=led_mod[i]; delay(10); // 显示个位

}

void main() // 主函数

{

while(1){

START=0; P2_3=1; START=1; // 启动A/D转换 START=0;

while(ad_busy==1); //等待A/D转换结束

OE=1; // 转换结果输出 tmp=P1; // 转换结果赋给中间变量

OE=0;

} show(); // 输出转换数据 }

(2)、仿真结果:

实验七直流数字电压表设计

实验七直流数字电压表设计

实验七直流数字电压表设计

实验结果分析:本实验是使用A/D转换器将模拟信号(电位器输出电压)转换为数字信号, A/D转换器与80C51接在一起,转换结果通过80C51以十进制形式动态显示在四个共阴极数码管上,通过改变模拟信号大小可以显示0~255之间任意数据。其中A/D转换器启动信号由软件模拟产生,时钟信号由Proteus的DClock信号发生器产生。

六、实验小结:

通过本次实验我了解了A/D转换器的工作原理和工作过程,掌握了单片机采集与显示程序的编写与调试,更加熟练了Proteus软件的使用和程序的编写,以后还要多加练习。

 

第二篇:实验七 直流数字电压表设计

学生姓名学号:  班级  时间

课程名称单片机原理及应用 总学时 48   教师     成绩       

实验名称:实验七——直流数字电压表设计

实验目的:掌握LED动态显示和A/D转换接口设计方法。

实验内容

根据如下电路原理图,编程实现查询法A/D转换和转换结果的十进制动态显示功能。

 

编程原理

LED显示器和ADC0808均采用通用IO口方式与单片机接口。

LED动态显示编程原理:将待显示数据拆解为3位十进制数,并分时地将其在相应LED位上进行显示。1次完整的输出过程为:最低位位码清零→最低位数据送P0口→最低位位码置1→软件延时→中间位位码清零→中间位数据送P0口→中间位位码置1→软件延时→最高位位码清零→最高位数据送P0口→最高位位码置1→软件延时。如此无限循环可实现动态显示。

ADC0808编程原理:被测模拟量由0#通道输入(ADDA,ADDB,ADDC均接地可选通0通道);转换启动信号(START和ALE)可由软件方式产生P2.5正脉冲;转换结束信号(EOC)可通过查询P2.6的电平变化获得;输出使能信号(OE)可由软件方式产生P2.7正脉冲。

实验要求

1、虚拟时钟信号发生器用法可参阅P262阅读材料,C51程序编写可参考以下程序模板;

————————————————

#include <reg51.h>

______________                           //定义ADC启动位变量,_st

______________                                     //定义ADC结束位变量,_eoc

______________                                     //定义ADC锁存位变量,_oe

______________                             //定义数码管最低位位变量,led0

______________                             //定义数码管第二位位变量,led1

______________                             //定义数码管第三位位变量,led2

______________                           //定义AD转换结果存放变量,ad_result

______________                           //定义显示字模数组并赋初值,table

                                //0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f

void delay(unsigned int time){                  //延时函数

        unsigned int j = 0;

        for(;time>0;time--)

           for(j=0;j<125;j++);

}

void disp(void){                               //动态显示函数

    ___________________         // led0清0

        P0= _______________            //输出最低位数据的字模

        ___________________         //延时10ms

        ___________________         // led0置1

   

        ___________________         // led1清0

        P0= _______________            //输出中间位数据的字模

        ___________________         //延时10ms

        ___________________         // led1置1

        ___________________         // led2清0

        P0= _______________          //输出最高位数据的字模

        ___________________         //延时10ms

        ___________________         // led2置1

}

void main(void){ 

     while(1){

           ___________                         //模仿_st正脉冲(低_高_低)

           ___________

           ___________

         ___________                         //查询_eoc,若_eoc =0,原地循环

         ___________                         //若_eoc =1,_oe置1

         ___________                         //读取AD转换结果

         ___________                          //_oe清0

         ___________                         //动态显示函数调用

    }

}

2、提交实验报告:包括电路原理图,虚拟时钟信号发生器设置、C51源程序,运行效果图、讨论软件延时长短对动态显示效果的影响、实验小结。

相关推荐