1、基于8051单片机的简易电压表方案设计书简易直流电压表班级:电信四班姓名:彭飞宇学号:2220081336摘要电压表应用十分广泛,但大部分是模拟电压表,而由于其特性,反应速度慢,读数麻烦并且误差较大,所以为适应不断快速发展的高速信号领域,已经广泛使用数字电压表。本实验设计是基于51单片机开发平台实现的一种数字电压表系统。该设计采用8051单片机作为控制核心,以ADC0809为模数转换数据采样,实现被测电压的数据采样;通过外围分压电路实现5V和50V的换档;同时使用5V稳压管作为超范围的保护电路;用8255驱动控制四块数码管显示被测电压。1.设计任务和要求1.1 设计任务设计制作一个简易直流电压
2、表,该直流电压表能测量直流电压1.2 设计要求基本要求1. 能测量电压档0-5V0-50V两档,输入阻抗200K2. 数码显示共3位,其中一位小数3. 要有输入信号超范围的保护电路发挥部分1 能够测量交流电压(0500V)2 能够测量电阻二 设计方案和部分仿真2.1 硬件:上图为硬件的总体框图,可分为四个模块。模数转换使用ADC0809芯片,它将输入的模拟电压量转换为一个8位的二进制数字,然后进入到单片机80C51控制单元,经过8255驱动处理用数码管显示出电压值。外围电路是一种分压电路,由于ADC0809芯片输入电压不可大于5V,所以当测量50V档位的时候要通过分压电路来实现。同时还有控制单
3、片机显示程序,使其显示为50V档位数值。(1)以下介绍MCS-51单片机的内部结构,主要部分为1. 一个8位的CPU2. 128B或256B单元数据存储器(RAM)3. 4KB或8KB内程序存储器(ROM或EPROM)4. 4个8位并行I/O接口P0P35. 两个定时/计数器6. 5个中断源管理控制系统7. 一个全双工串行I/OUART(通用异步接受、发送器)8. 一个片内振荡器和时钟产生电路(2) ADC0809ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。ADC0809由一个8路模拟开关、一个地
4、址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。ADC0809内部逻辑电路如下:ADC0809引脚图如下:引脚说明:1. ADC0809内部带有输出锁存器,可以与单片机直接相连。2. 初始化时,使ST和OE信号全为低电平。3. 送要转换的某一通道的地址到A.B,C端口上。4. 在ST端给出一个至少有100ns宽的正脉冲信号。5. 是否转换完毕,我们根据EOC信号来判断。6. 当EOC变为高电平时,若此时OE为高电平,转换的数据输出到单片机2.2 软件程序: 单片机中所发程序的流程图如下图2。其中包含主函数和
5、两个显示子函数,分别为5V和50V档位的显示子程序。通过外围电路的改变实现换档。下面为仿真所用程序#includeunsigned char codedispbitcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;unsigned char dispbuf4;unsigned int i;unsigned int j;unsigned char getdata;unsigned int temp;unsigned int temp1;unsigned char count;unsigned char d;sbit ST=P30;sbi
6、t OE=P31;sbit EOC=P32;sbit CLK=P33;sbit P34=P34;sbit P35=P35;sbit P36=P36;sbit P20=P20;sbit P21=P21;sbit P22=P22;sbit P23=P23;sbit P17=P17;void TimeInitial();void Delay(unsigned int i);void TimeInitial() TMOD=0x10; TH1=(65536-200)/256; TL1=(65536-200)%256; EA=1; ET1=1; TR1=1; void Delay(unsigned int
7、 i) unsigned int j; for(;i0;i-) for(j=0;j125;j+) ; void Display() P1=dispbitcodedispbuf3; P20=0; P21=1; P22=1; P23=1; Delay(10); P1=0x00; P1=dispbitcodedispbuf2; P17=1; P20=1; P21=0; P22=1; P23=1; Delay(10); P1=0x00; P1=dispbitcodedispbuf1; P20=1; P21=1; P22=0; P23=1; Delay(10); P1=0x00; P1=dispbitc
8、odedispbuf0; P20=1; P21=1; P22=1; P23=0; Delay(10); P1=0x00;void main()TimeInitial();while(1)ST=0;OE=0;ST=1;ST=0;P34=0;P35=0;P36=0;while(EOC=0);OE=1;getdata=P0;OE=0;temp=getdata*1.0/255*500;dispbuf0=temp%10;dispbuf1=temp/10%10;dispbuf2=temp/100%10;dispbuf3=temp/1000;Display();void t1(void) interrupt
9、 3 using 0 TH1=(65536-200)/256; TL1=(65536-200)%256; CLK=CLK; 2.3 模拟仿真结果图3按上述原理连接后,用Proteus软件模拟仿真可以得到完整电路图。如图3所示,仿真结果如图所示。2.实际制作和调试2.1 测试方法和仪器 所用到的元器件有: 80C51单片机 1片8255芯片 1片 ADC0809芯片 1片 4数码管 4块 12MHZ晶振 1个 5V稳压管 1只 滑动变阻器(20K) 2个 510K电阻 1个 51K电阻 1个 直流电源 1台 导线 若干实验室中有实验箱,可以用实验箱完成,这样就省去了许多元器件,也使得系统稳定可行
10、。可用标准直流电压表来测量输入的直流电压值,与数码管显示的数值比较测试。2.2 软件调试为了适应试验箱上管脚连接和,对仿真程序加以修改,修改之后的程序如下:#include#include#define uchar unsigned char#define uint unsigned int#define PA XBYTE0x8000#define PB XBYTE0x8001#define PC XBYTE0x8002#define CTL XBYTE0x8003#define AD XBYTE0x9000/AD转换in0口#define dus PB#define wes PAuchar
11、code dutab17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;uchar code wetab4=0x01,0x02,0x04,0x08; bit flag=0;float num=0;uchar tmp=0;sbit EOC=P32;void delay(uchar);void init() CTL=0x80; EA=1; EX1=1; IT1=1;void display(float cnt) uchar pos4=0,0,0,0; uchar i=0; u
12、char j; uint n; n=cnt*1000; /wes=0; while(n) posi+=n%10; n/=10; for(j=0;j3;j+) dus=dutab16; wes=wetabj; dus=dutabposj; /wes=wetabj; delay(2); dus=dutab16; wes=wetab3; dus=dutabpos3|0x80; /wes=wetab3; delay(2); dus=dutabpos3;void display1(float cnt) uchar pos4=0,0,0,0; uchar i=0; uchar j; uint n; n=c
13、nt*100; while(n) posi+=n%10; n/=10; for(j=0;j0;x-) for(y=110;y0;y-);void main() init(); while(1) AD=0; EOC=1; while(!EOC); PA=AD; tmp=AD; num=tmp/255.0*5; if(flag) display(num); else display1(num*10); void int1() interrupt 2 flag=flag;2.3 硬件测试按实验箱内部连线接好之后,再按先前设计好的外围电路,与实验箱接上,接入可变直流电压源,观察数码管显示数值是否与标准
14、电压表一致。可以通过加入单脉冲来改变数码管显示的小数点的位置,改变电压输入点,改变档位,从而实现5V和50V的换档。2.4 调试中的问题记录1.在50V档位时,所测电压有点误差,如:输入32.65V,测得结果为34.56V,这是因为外围电路的分压作用没有调节好,没有达到1/10的分压效果。可以调节外围电路的滑动变阻器,使其显示示数正确。2.显示示数余辉过于强烈,通过检查8255的接线有点松动,把每个线都一一检查固牢后,虽仍有余辉,但不过于强烈。3.测试结果分析组数直流电压源单片机显示误差11.22V1.2170.8%22.63V2.5751.9%36.25V06.330.9%415.63V15
15、.580.3%通过上述结果分析,当在5V档位时,测量较高值时测量精度有点低,误差大。但数值小的时候测量精度很高。不足之处是本设计的外围分压电路是通过510K和50K电阻串联分压方式,并通过调节电位器来实现1/10的分压效果,实际最好是450K和50K,这样恰好是分出十分之一电压,但实际电路受到电压源等因素影响较大,这之间会因为电压值的不同而引起效果好坏的改变,可以考虑用运算放大器来设计一个精确而又稳定的分压电路。对于过压保护电路,由于实验室没有提供MOS管,故只能采用5.1V的稳压管来实现电路过压保护作用。由于稳压管容易烧坏,所以在电压源开机瞬间,不可使电压源内电压过高,否则稳压管会烧坏。4.
16、课程设计总结本次课程设计中0-5V档与0-50V档没有本质的区别,因为是通过外围分压电路将输入电压缩小10倍,从而转换为0-5V档,而在显示结果时只需将数码管的小数点右移一位即成为正确的输入电压。 对于ADC0809的分辨率应该是v/255,v为该档位的最大电压,5V的分辨率只有0.02V左右。但此设计中使用C语言程序编译,使用的是浮点数,故显示时不会受缚于0.02V的分辨率。 总体来说通过本次实验,用Proteus进行仿真,了解了Proteus软件的基本使用方法,用keil转换伟福识别语言,使该软件能够识别C语言,也加深了对单片机模拟仿真软件的认识和理解;也在实际操作连接外电路的过程中,遇到了许多问题,认识到自己的动手能力的亟待提高。同时在寻求解决问题,查找资料,向老师请教的同时,提高了自己做设计实验的能力,也学会了如何利用图书资源和自身知识去转换为实际应用,为以后的学习提高 奠定了基础。参考文献:1蔡美琴等编著,MCS-51系列单片机系统及其应用,高等教育出版社,2004年4月2 谭浩强 编C语言程序设计(第二版) 清华大学出版社3 朱定华编著微机原理、汇编与接口技术清华大学出版社