单片机 直流数字电压表设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

【实验目的】

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

【实验原理】

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

【实验内容】

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

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

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

【实验步骤】

(1)在Proteus中绘制电路原理图,按照下表将元件添加到编辑环境中。

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

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

【实验要求】

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

果分析。

【实验原理图】

【运行结果】

【实验程序及注释】

#include

sbit _st = P2^5; //定义AD启动位,_st

sbit _eoc = P2^6; //定义AD结束位,_eoc

sbit _oe = P2^7; //定义AD使能位,_oe

sbit led0 = P2^3; //定义数码管最低位,led0

sbit led1 = P2^2; //定义数码管第二位,led1

sbit led2 = P2^1; //定义数码管第三位,led2

unsigned char ad_result=0; //定义AD转换结果变量,ad_result unsigned char table[] = {0x3f,0x06,0x5b,

0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义十进制显示字模数组,table[]

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

{

unsigned int j = 0;

for(;time>0;time--)

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

}

void disp(void) //显示函数

{ led3=0; //第四位位码清0 P0=table[ad_result/1000]; //输出第三位的字模delay(10); //延时10ms

led3=1; //第三位位码置1

//动态显示函数

led2=0; //第三位位码清0

P0=table[ad_result/100]; //输出第三位的字模

delay(10); //延时10ms

led2=1; //第三位位码置1

led1=0; //第二位位码清0

P0=table[(ad_result/10)%10]; //输出第二位的字模delay(10); //延时10ms

led1=1; //第二位位码置1

led0=0; //最低位位码清0

P0=table[ad_result%10]; //输出最低位的字模delay(10); //延时10ms

led0=1; //最低位位码置1

}

void main(void)

{ while(1)

{

_st=0;_st=1;_st=0; //模拟启动时序,发出启动AD转换脉冲

while(!_eoc); //查询EOC标志,若EOC=0,原地等待

_oe=1; //若EOC=1,使能OE置1

ad_result=P1; //读取AD转换结果

_oe=0; //使能OE置0

disp(); //动态显示函数调用

}

}

【注】

本人辛苦编译加注过,请用修改后再纳为己有。

程序中少了一条很简单的语句,为本人故意所留。稍懂单片机者均可改正。

祝你实验成功

相关文档
最新文档