路数字电压表的设计.docVIP

  • 10
  • 0
  • 约4.29千字
  • 约 6页
  • 2018-04-29 发布于河南
  • 举报
路数字电压表的设计

实验报告 一、实验题目:   8路数字电压表的设计 二、实验内容: 利用单片机AT89C52与ADC0809设计一个8路数字电压表,能够测量0-5V之间的8路输入电压值,并能在四位数码管上显示。 三、要求:         基本要求:1、有一路正常工作 2、制作PCB板 发挥部分: 1、显示各路电压数及其电压值 2、可通过按键进行通道选择 3、当超过某一设定值时报警 四、设计方案 通过一个A/D(ADC0809模拟数字转换)芯片采集后将外测电压信号转换为数字信号,再由单片机(AT89C52)处理信号,输出信号,由数码管显示各路电压。更改程序使能用按键进行复位、通道选择、单路循环选择;并在超过设定报警电压(4.7V)时以LED灯发光报警。 五、芯片、电路图 1、使用芯片有ADC0809、AT89C52。 2、电路图: 六、焊接 根据原理图将原件焊接到PCB板上。 七、编程序、调试 1、程序设计内容   1由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。因此产生CLK信号的方法就得用软件来产生了。   2由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值 (D/256*VREF) 2、调试过程 1在实验过程中,发现了数码管显示的电压在测试的那一路电压正常显示,而其他路为不定的电压值(电压为悬浮电压),加一个排阻接地后使它和低电平相连,在未加电压的情况下为低电平,数码管显示值为0值。 2用原程序进行调试时,不执行报警和通道选择、单路循环选择(原程序少了通道选择函数和报警函数)。多次修改和添加原程序后能够达到要求。 3、C语言源程序 #include reg52.h #include intrins.h //延时函数用 #define ad_con P2 //A/D控制口 #define addata P0 //A/D数据记入读入口 #define Disdata P1 //显示数据段码输出口 #define uchar unsigned char #define uint unsigned int sbit ALE=P2^3; //锁存地址控制位 sbit START=P2^4; //启动一次转换位 sbit OE=P2^5; //0809输出数据 控制位 sbit EOC=P3^7; //转换结束标志位 sbit DISX=Disdata^7; //LED小数点 sbit A=P2^7; sbit BO=P3^5; sbit CO=P3^6; // // uchar code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; /*共阳7段LED段码表0.1.2.3.4.5.6.7.8.9.不亮*/ uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; //4位列扫描控制字 ////uchar data ad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //定义8个数据内存单元 uint data dis[5]={0x00,0x00,0x00,0x00,0x00}; //定义4个显示数据单元和1个数据存储单元 // // /**********1ms延时子函数***********/ delaylms(uint t) //t=1 { uint i,j; for(i=0;it;i++) for(j=0;j120;j++) ; } // // /************显示扫描子函数***************/ scan() { uchar k,n; int h; dis[3]=0x01; //通道初值为1 for(n=0;n8;n++) //每次显示8个数据 { dis[2]=ad_data[n]/51; //测得值转换为3位BCD码,

文档评论(0)

1亿VIP精品文档

相关文档