8路循环数字电压表设计
数字电压表设计3
目录一、整体设计思路框图及原理图 (2)二、模块分析 (3)1. AT89C51单片机 (3)2. A/D转换 (4)3. 显示电路 (5)三、软件设计 (5)四、仿真实验调试 (7)五、总结与体会 (7)六、参考文献 (8)七、附录 (9)一、 整体设计思路框图及原理图数字电压表的设计即将连续的模拟电压信号经过A/D 转换器转换成二进制数值,再经由单片机软件编程转换成十进制数值并通过显示屏显示。
按系统实现要求,决定控制系统采用AT89C51单片机,A/D 转换由于仿真软件里的ADC0809元件有问题,这里用ADC0808代替,它和ADC0809区别很小。
采用ADC0808。
数字电压表系统整体框图如下图1所示。
图1 整体框图系统通过软件设置单片机的内部定时器T1产生中断信号。
通过片选选择8路通道中的一路,将该路电压送入ADC0808的EOC 端口产生高电平,同时将ADC0808的OE 端口置为高电平,单片机将转换后结果存到片内RAM 。
系统调出转换显示程序,将转换为二进制的数据在转换成十进制数并输出到LCD 显示电路,将相应电压显示出来。
原理图见附录图7。
二、模块分析1.AT89C51单片机接口分配电路设计如右图2所示:P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/ 地址的第八位。
在这里P0口作为输入与输出分别与ADC0808的输出端和LCD显示的输入端相连,且P0外部被阻值为1KΏ的电阻拉图2 单片机接口电路高。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
简易数字电压表设计内容
简易数字电压表设计一、设计要求1、利用ADC0809设计一简易数字电压表,要求可以测量0—5V之间8路输入电压值、电压值由四位LED数码管显示,并在数码管上轮流显示或单路选择显示;2、测量最小分辨率为0.019V,测量误差为±0.02V。
二、设计作用与目的利用AT89S51与ADC0809设计制作一个数字表,能够测量直流电压值。
三、所用设备及软件单片机AT89S51、ADC0809芯片、PC设计台四、系统设计方案本设计采用AT89S51单片机芯片配合ADC0809模/数转换芯片构成一个简易的数字电压表,原理框图如图1所示。
该电路通过ADC0809芯片采样输入口IN0输入的0~5 V的模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道D0~D7传送给AT89S51芯片的P0口。
AT89S51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码,并通过其P1口经三极管驱动,再传送给数码管。
同时它还通过其三位I/O口P3.0、P3.1、P3.2产生位选信号,控制数码管的亮灭。
另外,AT89S51还控制着ADC0809的工作。
其ALE管脚为ADC0809提供了1MHz工作的时钟脉冲;P2.3控制ADC0809的地址锁存端(ALE);P2.4控制ADC0809的启动端(START);P2.5控制ADC0809的输出允许端(OE);P3.7控制ADC0809的转换结束信号(EOC)。
图1 系统原理框图本设计与其它方法实现主要区别在于元器件上例如:AT89C51与AT89C51、AT89S51在AT89C51的基础上,又增加了许多功能,性能有了较大提升。
1.ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。
是一个强大易用的功能。
2.工作频率为33MHz,大家都知道89C51的极限工作频率只有24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。
8通道的数字电压表设计报告
8通道的数字电压表设计方案目录第一章设计分析 (1)第二章硬件电路分析 (3)2.1单片机AT89C51的分析 (3)2.2 ADC0808的分析 (4)2.3显示译码器和LED分析 (5)第三章程序设计分析 (6)3.1主函数 (6)3.2A/D转换函数 (6)3.4中断服务函数 (6)第四章调试过程分析及仿真 (7)第五章总结 (8)第六章附录 (9)第一章设计分析设计一个8通道的电压表,基于AT89X51单片机(在professional中使用的AT89C51)和ADC0809(在professional中使用的ADC0808)芯片实现模数转换,由74247显示译码器和4位LED数码管连接并显示,具有通道自选和量程(0-5v 的电压)变换的功能。
设计方案如下:采用定时器/计数器T0、T1定时,T0定时溢出中断时对P3.7取反,输出频率为10KHZ的方波信号,作为ADC0808的转换时钟信号,T1定时1MS,定时溢出中断后,在中断服务程序中完成在数码管显示A/D转换结果的任务。
采用主程序、子程序结构。
主程序中完成定时器的初始化设置,产生A/D 转换的启动,在转换过程中判别转换是否结束。
当转换结束时,让输入允许OE 有效,将转换结果通过P0口读到单片机内部RAM单元格储存。
将二进制数转换为十进制数的程序设计成子程序,在主程序中调用。
将LED数码管的动态显示设计成子程序,在T1的中断服务程序中调用。
第二章硬件电路分析2.1单片机AT89C51的分析AT89C51 的引脚(1)工作电源端Vcc:接+5V电源Vss:接地(2)晶振引脚(时钟电路)XTAL1:芯片内部振荡电路输入端。
XTAL2:芯片内部振荡电路输出端(3)并行I/O口引脚(4)控制引脚ALE:地址锁存使能。
当ALE为高电平时,P0口上的信息为低8位地址,在ALE信号的下降沿时将P0口上的低8位地址送地址锁存器锁存起来;在ALE为低电平期间,P0口上的信息为指令或数据信息,这样就能实现低位地址的数据分离。
基于89c52的8通道循环显示数字电压表电路的设计与制作任务书(常进)
南京工程学院毕业设计任务书通信工程学院电子信息工程专业设计题目基于89C52的8通道循环显示数字电压表电路的设计与制作学生姓名常进班级电信081起止日期2012.2. 20—2012.6.15指导教师纪贤宝教研室主任包永强发任务书日期2012 年2月20日1.毕业设计的原始数据:利用所学知识,结合实际,设计、制作8路模拟电压值(0—5V)转换为数字量进行测量并循环显示。
2.毕业设计(论文)的内容和要求(包括技术要求、图表要求以及工作要求等):课题任务及要求:1.采用模数转换器对8个输入的模拟电压量进行转换。
2.用89C52单片机对各路电压值进行单路和循环显示。
3.制作电路板并完成调试,实现功能。
3.毕业设计应完成的技术文件:1.阅读资料,完成外文资料翻译(2000字以上)和开题报告(3000字以上),提出方案。
2.电原理图;印制板PCB图。
3.调试数据记录。
4.完成毕业设计论文(15000字)。
4.主要参考文献:[1] 刘复华. 单片机及其应用系统. 北京:清华大学出版社,1992[2] 李斌,董慧颖. 可重组机器人研究和发展现状. 沈阳工业学院学报,2000,19(4):23-27[3] 张国勋,《缩短ICL7135A/D采样程序时间的一种方法》[J]. 《电子技术应用》,1993,第一期.[4] 高峰,《单片微型计算机与接口技术》[M].北京:科学出版社,2003.[5] .杨恢先,黄辉先.单片机原理及应用[M].北京:人民邮电出版社,2006[6] 李广弟.《单片机基础》. 北京航空航天大学出版社 1994[7] 何立民.《单片机应用系统设计》. 北京航空航天大学出版社 19905.毕业设计(论文)进度计划(以周为单位):。
8路数字电压表的设计
一、实验题目: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 intsbit 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位列扫描控制字//11111110//11111101//11111011//11110111uchar 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;i<t;i++)for(j=0;j<120;j++);}/////************显示扫描子函数***************/scan(){uchar k,n;int h;dis[3]=0x01; //通道初值为1for(n=0;n<8;n++) //每次显示8个数据{dis[2]=ad_data[n]/51; //测得值转换为3位BCD码,最大为5.00Vdis[4]=ad_data[n]%51; //余数暂存dis[4]=dis[4]*10; //计算小数第一位dis[1]=dis[4]/51;dis[4]=dis[4]%51;dis[4]=dis[4]*10; //计算小数第二位dis[0]=dis[4]/51;if(dis[2]>=4&&dis[1]>6&&dis[0]>=0)A=1;elseA=0;for(h=0;h<500;h++) //每个通道显示时间控制约为一秒{for(k=0;k<4;k++) //4位LED扫描控制{Disdata=dis_7[dis[k]];if(k==2){DISX=0;}P3=scan_con[k]; //P3.O-P3.3控制四个数码管的输出即控制输出电平的高低delaylms(1);P3=0xff;}}dis[3]++; //通道值加1}}/////*************通道选择函数*********************/tongdao(uint n){uint m,i;dis[3]=n+1;dis[2]=ad_data[n]/51; //测得值转换为3位BCD码,最大为5.00Vdis[4]=ad_data[n]%51; //余数暂存dis[4]=dis[4]*10; //计算小数第一位dis[1]=dis[4]/51;dis[4]=dis[4]%51;dis[4]=dis[4]*10; //计算小数第二位dis[0]=dis[4]/51;if(dis[2]>=4&&dis[1]>6&&dis[0]>=0)A=1;elseA=0;for(m=0;m<500;m++) //每个通道显示时间控制约为一秒{for(i=0;i<4;i++) //4位LED扫描控制{Disdata=dis_7[dis[i]];if(i==2){DISX=0;}P3=scan_con[i]; //P3.O-P3.3控制四个数码管的输出即控制输出电平的高低delaylms(1);P3=0xff;}}}/*************0809转换子函数*******************/test(){uchar m;uchar s=0x00;ad_con=s;for(m=0;m<8;m++){ALE=1;_nop_();_nop_();ALE=0; //转换通道地址锁存START=1;_nop_();_nop_();START=0; //开始转换命令_nop_();_nop_();_nop_();_nop_(); //延时4USwhile(EOC==0); //等待转换结束OE=1;ad_data[m]=addata;OE=0;s++;ad_con=s; //取A/D值,地址加1}ad_con=0x00;//控制复位}////main(){uint n,i,j;n=0;P0=0xff; //初始化窗口P1=0x00;P2=0xff;P3=0xff;i=BO;while(){test(); //测量转换一次if(i==0)for(;;){ j=CO;if(j==0){n++;}if(n>7)n=0;tongdao(n);if(i==0) break;}else{scan(); //显示八个通道值一次}}}//。
8路电压测量电路的设计与仿真
1 绪论数字电压表(Digtal V olmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。
传统的指针式电压表功能单一、精度低、不能满足数字化时代的需求,采用单片机的数字电压表,除精度高、抗干扰能力强,可扩展性强、集成方便外,还可以与PC进行实时通信。
目前,由各种单片机A/D转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,显示出强大的生命力。
与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量技术提高到崭新水平。
本章着重介绍单片A/D转换器以及由它们构成的基本单片机的数字电压表的工作原理。
2 设计要求数字电压表是用来测试电压并让人直观的看到所测试电压的大小,基于这样的功能就必须要把电压这样的模拟量转换为数字量的电路以及用于使人看到电压大小的显示电路。
由于在设计任务书中提到了用单片机来实现电压的测量以及每次可以同时测量的电压为8路,于是在显示电路与模数转换电路之间采用单片机来作为控制显示和处理数字信号的电路主体。
不同等级的模拟电压经过档位切换到不同的分压电路衰减后,经隔离干扰送到A/D转换器进行A/D转换,然后送到单片机中进行数据处理。
处理后的数据送到LED数码管中显示,在显示电路中显示被测电压级具体通道号,使人更容易辨别电压。
图2.1总体方案设计图3 硬件电路设计3.1 单片机主电路设计在本次课题设计中我们选择了AT89C51芯片,它是一个低电压,高性能COMOS 8位单片机,片内含4k bytes 的反擦写的Flash只读程序储存器和128 bytes 的随机存取数据储存器(RAM),器件采用ATMEL公司的高密度、非易失性储存技术生产,兼容标准MCS-51指令系统,片内内置通用8位中央处理器和Flash 储存单元,内置功能强大的微型计算机的AT89C51提供了高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口。
八路电压表
学号:XXXXXXX 《电子技术课程设计》报告题目:八路电压表学院(系):机械与电子工程学院专业年级:XXXXXX学生姓名: XXXXX指导教师: XXXXX完成日期:2016年1月20日目录1.设计任务及要求 ..................................................................................................................... - 1 -1. 1课题要求设计............................................................................................................. - 1 -1.2具体设计要求............................................................................................................... - 1 -2.设计方案 ................................................................................................................................. - 1 -2.1电压通道选择和通道号显示部分方案....................................................................... - 1 -2.2电压转换和显示方案................................................................................................... - 1 -3.设计原理与电路 ..................................................................................................................... - 2 -3.1八路电压表的原理框图............................................................................................... - 2 -3.2电压通道选择和通道数显示电路............................................................................... - 2 -3.3电压转换和显示方案................................................................................................... - 3 -3.4主要元器件介绍........................................................................................................... - 3 -3.4.1 CD4051.............................................................................................................. - 3 -3.4.2 ICL7107............................................................................................................ - 5 -3.4.3 NE555................................................................................................................ - 6 -3.4.4 74LS160............................................................................................................ - 7 -3.4.5七段显示器....................................................................................................... - 8 -4.电路的组装与调试 ................................................................................................................. - 9 -4.1整体电路在proteus上的仿真实现.............................................................................. - 9 -4.2电压通道选择和通道号显示部分的仿真实现.......................................................... - 10 -4.3电压转换和显示电路仿真实现.................................................................................. - 11 -4.3.1量程非自动选择模式..................................................................................... - 12 -4.3.2量程自动选择模式......................................................................................... - 12 -5.设计总结 ............................................................................................................................... - 14 -附录 ........................................................................................................................................... - 15 -参考文献 ................................................................................................................................... - 16 -1.设计任务及要求1.1课题要求设计对8路电压信号进行采集,并将其通过3位半电压转换芯片转换成数字信号后进行显示,显示通道号和当前通道的电压值1.2具体设计要求(1)能够对八路电压进行采集。
简易数字电压表的设计(ADC0809)
简易数字电压表的设计(4人)一、设计目的进一步加深理解模拟电子技术、数字电子技术、单片机原理与应用等课程的基础知识,掌握一些小型电子系统的设计方法和制作过程的能力;培养学生们的科学性、系统性、及全面性的设计素质;开拓学生的设计思路,增强他们把理论知识与实践相结合的能力;为毕业后从事电子设备控制电路设计、调试、维修奠定基础。
二、设计要求1.功能要求设计并制作一个简易数字电压表,可以测量0~5V范围内的8路输入电压值,并在4位LED数码管上轮流显示或单路选择显示,其中1位为显示通道号。
其测量最小分辨率为0.02V。
2.设计内容(1)根据设计功能要求,确定CPU的选型与硬件接口配置。
(2)进行硬件设计,主要是整个系统电路原理图的绘制和对应的PCB板的布线设计。
(3)进行软件设计,根据控制要求编写控制系统的控制程序。
(4)控制系统调试。
(5)源程序。
三、主要元器件ADC0809、数码管、三极管、发光二极管、总线驱动器、电位器、按键、电阻、电容、导线、万能板等四、设计报告要求1、方案论证及方框图。
2、单元电路设计细则。
3、调试及性能分析。
4、系统的电原理图。
5、电子元器件清单。
6、源程序清单。
7、参考资料。
8、收获。
五、教材及参考书[1] 潘永雄. 新编单片机原理与应用(第二版). 西安:西安电子科技大学出版社,2007年[2] 余永权.单片机应用系统的功率接口技术. 北京:北京航空航天大学出版社,1992[3] 孙涵芳.MCS-51/96系列单片机原理与应用. 北京:北京航空航天大学出版社,1996[4] 丘关源编.电路分析基础.高等教育出版社. 1999年[5] 童诗白编.模拟电子技术基础.高等教育出版社.1999年[6]阎石编.数字电子技术基础.高等教育出版社.1997年[7] [8]刘文涛编.MCS-51单片机培训教程 C51版.电子工业出版社.2006年六、课程设计进度安排注:设计说明书使用课程设计报告本书写,每人一份,独立完成。
通道的数字电压表方案设计书报告
8通道的数字电压表设计方案目录第一章设计分析1第二章硬件电路分析32.1单片机A T89C51的分析32.2 ADC0808的分析42.3显示译码器和LED分析5第三章程序设计分析63.1主函数63.2A/D转换函数63.4中断服务函数6第四章调试过程分析及仿真6第五章总结7第六章附录7第一章设计分析设计一个8通道的电压表,基于AT89X51单片机(在professional中使用的AT89C51)和ADC0809(在professional中使用的ADC0808)芯片实现模数转换,由74247显示译码器和4位LED数码管连接并显示,具有通道自选和量程(0-5v的电压)变换的功能。
设计方案如下:采用定时器/计数器T0、T1定时,T0定时溢出中断时对P3.7取反,输出频率为10KHZ的方波信号,作为ADC0808的转换时钟信号,T1定时1MS,定时溢出中断后,在中断服务程序中完成在数码管显示A/D转换结果的任务。
采用主程序、子程序结构。
主程序中完成定时器的初始化设置,产生A/D转换的启动,在转换过程中判别转换是否结束。
当转换结束时,让输入允许OE 有效,将转换结果通过P0口读到单片机内部RAM单元格储存。
将二进制数转换为十进制数的程序设计成子程序,在主程序中调用。
将LED数码管的动态显示设计成子程序,在T1的中断服务程序中调用。
第二章硬件电路分析2.1单片机AT89C51的分析AT89C51 的引脚(1)工作电源端Vcc:接+5V电源Vss:接地(2)晶振引脚(时钟电路)XTAL1:芯片内部振荡电路输入端。
XTAL2:芯片内部振荡电路输出端(3)并行I/O口引脚(4)控制引脚ALE:地址锁存使能。
当ALE为高电平时,P0口上的信息为低8位地址,在ALE信号的下降沿时将P0口上的低8位地址送地址锁存器锁存起来;在ALE为低电平期间,P0口上的信息为指令或数据信息,这样就能实现低位地址的数据分离。
RST: 复位信号。
多路数字电压表的设计
8.3 多路数字电压表的设计数字电压表是电子测量中经常用到的电子器件,传统的指针式电压表功能单一、精度低、不能满足数字时代的要求。
而采用单片机的数字电压表精度高、抗干扰能力强、可扩展性强、使用方便,在日常生活中广泛应用。
8.3.1 多路数字电压表的功能要求多路数字电压表的功能要求如下:(1) 输入电压为8路。
(2) 电压值的范畴为0~5V。
(3) 测量的最小分辨率为0.019V,测量误差为 0.02V。
(4) 能通过显示器显示通道和通道电压,有效位数为小数点后两位8.3.2 多路数字电压表的总体设计多路数字电压表的总体结构如图8.9所示,处理过程如下:先用A/D转换器对各路电压值进行采样,得到相应的数字量,再按数字量与模拟量成正比关系运算得到对应的模拟电压值,然后把模拟值通过显示器显示出来,另外可以通过按键选择通道。
图8.9 多路数字电压表的总体结构图根据系统的功能要求,控制系统采用AT89C52单片机,A/D转换器采用ADC0808(0809)。
ADC0808(0809)是8位的A/D转换器。
当输入电压为5.00V时,输出的数据值为255(0FFH),因此最大分辨率为0.0196V(5/255)。
ADC0808(0809)具有8路模拟量输入端口,通过3位地址输入端能从8路中选择一路进行转换。
如每隔一段时间依次轮流改变3位地址输入端的地址,就能依次对8路输入电压进行测量。
显示器采用LCD显示器,显示效果好。
按键可只设定一个,用于选择显示的当前通道。
8.3.3 多路数字电压表硬件电路多路数字电压表具体硬件电路如图8.10所示。
P 17P 16P 15P17P16P15P07P 07P06P05P04P03P02P01P00P 00P 01P 02P 03P 04P 05P 06P 07P 00P 01P 02P 03P 04P 05P 06P27ST P23P26P21P22P20P24P25ADDC ADDB ADDA ADDA ADDB ADDC ST XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX 2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52D 714D 613D 512D 411D 310D 29D 18D 07E 6R W 5R S 4V S S 1V D D 2V E E3LCD1LM016LR110k234567891RP1RESPACK-8OUT121ADD B 24ADD A25ADD C 23VREF(+)12VREF(-)16IN31IN42IN53IN64IN75START 6OUT58EOC 7OE9CLOCK 10OUT220OUT714OUT615OUT817OUT418OUT319IN228IN127IN026ALE 22U2ADC0808X1CRYSTALC11nFC21nFC31nFR420056%RV11k50%RV21k图8.10 多路数字电压表的电路原理图其中,ADC0808(0809) 的数据线D0~D7与AT89C52的P2口相连,地址输入端ADDA 、ADDB 、ADDC 与AT89C52的P3口的低3位P3.0、P3.1、P3.2相连,地址锁存控制端ALE 和启动信号START 连接在一起与P3.7相连,数据输出允许控制端OE 与P3.6相连,转换结束信号EOC 与P1.3相连。
单片机课程设计-简易数字电压表的设计
单片机课程设计-----------简易数字电压表的设计RTX2011-7湖北::汽院::电系简易数字电压表的设计1.功能要求简易数字电压表的设计可以测量0~5V的8路输入电压值,并在四位上轮流显示或单路选择显示。
测量最小分辨率为0.019V,测量误差为±0.02V。
2.硬件图硬件图分解:简化图3.算法ADC0809的模拟数量与数字输出量的对应关系用整数运算实现实数运算(上图中的对应关系)的结果4.程序代码:ORG 0000HLJMP STARTPress EQU 30HORG 0050HSTART: MOV P1,#0FFH; 效果:’8.’从右→左移动(一次)MOV R0,#11110111BMOV R3,#4Retest: MOV R6,#0FFHTest: MOV P0,#0FFHMOV A,R0MOV P1,ACALL D10msMOV P1,#0FFHDJNZ R6,TestCALL D10msRR AMOV R0,ADJNZ R3,Retest ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV P1,#0FFH; ; 效果:显示’H.E.L.P.’一段时间;MOV R0,#11111110BMOV R6,#0FFHREHLP: MOV DPTR,#HelpMOV R0,#11111110B;;;;;;;;;;;;;MOV R3,#4HLP: CLR AMOVC A,@A+DPTRMOV P0,AMOV A,R0MOV P1,ACALL D10ms;MOV P1,#0FFHINC DPTRRL AMOV R0,ADJNZ R3,HLPDJNZ R6,REHLP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV P1,#0FFH; 效果:显示’1.0-0.’一段时间;MOV R0,#11111110BMOV R6,#0FFHREMOD11: MOV DPTR,#MOD1MOV R0,#11111110B;;;;;;;;;;;;;MOV R3,#4MOD11: CLR AMOVC A,@A+DPTRMOV P0,AMOV A,R0MOV P1,ACALL D10ms;MOV P1,#0FFHINC DPTRRL AMOV R0,ADJNZ R3,MOD11DJNZ R6,REMOD11 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV P1,#0FFH; 效果:显示’2.0-7.’一段时间;MOV R0,#11111110BMOV R6,#0FFHREMOD21: MOV DPTR,#MOD2MOV R0,#11111110B;;;;;;;;;;;;;MOV R3,#4MOD21: CLR AMOVC A,@A+DPTRMOV P0,AMOV A,R0MOV P1,ACALL D10ms;MOV P1,#0FFHINC DPTRRL AMOV R0,ADJNZ R3,MOD21DJNZ R6,REMOD21 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MOV P1,#0FFH; 等待键入选择WaitPress: MOV A,P1CPL AJZ WaitPressMOV A,P1CALL D10msMOV Press,P1CJNE A,Press,WaitPress;去抖动ANL A,#00010000B;S1: 模式(MODE1)JZ MODE1MOV A,PressANL A,#00100000B;S2: 模式(MODE2)JZ MODE2MOV P1,#0FFH; S3,S4未定义JMP WaitPress ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MODE1: MOV P1,#0FFH ;模式1:IN0:单道电压显示CLR EAMOV DPTR,#7FF8H; P2.7=0,IN0MOVX @DPTR,A; P2=7FH,P0=F8H,写(/WR=0,/RD=1)Waiting1: JNB P3.3,Waiting1MOVX A,@DPTR; P2=7FH,P0=F8H,读(/RD=0,/WR=1)Conver1: MOV B,#51DIV ABMOV DPTR,#LEDMOVC A,@A+DPTRADD A,#10000000B; 第1个LED的小数点dp亮MOV P0,ACLR P1.0; 第1个LED亮MOV R0,#11111110BMOV R1,#3NEXT1: CALL D10msMOV P1,#0FFH;MOV A,BMOV B,#10MUL AB;这之后B不是’1’就是’0’:最大50*10=01f4HJB PSW.2,BEQU11; PSW.2就是OVMOV B,#51DIV ABJMP DISP1BEQU11: INC AMOV B,#51DIV ABADD A,#5DISP1: MOV DPTR,#LEDMOVC A,@A+DPTRMOV P0,AMOV A,R0RL AMOV R0,AMOV P1,ACALL D10msDJNZ R1,NEXT1; 显示完4位LED为止MOV P1,#0FFHJMP MODE1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MODE2: MOV P1,#0FFH ;模式2:IN0-IN7:多道电压循环显示CLR EAMOV DPTR,#7FF8H;P2.7=0MOV R7,#00H; R7为通道NEXT2In: MOV R6,#0FFHThisIn: MOVX @DPTR,A; IN0时P2=7FH,P0=F8H,写(/WR=0,/RD=1)Waiting2: JNB P3.3,Waiting2MOVX A,@DPTR; IN0时P2=7FH,P0=F8H,读(/RD=0,/WR=1)MOV R2,A; R2为0809的二进制转换结果Conver2: MOV A,R7MOV DPTR,#LEDMOVC A,@A+DPTRMOV P0,ACLR P1.0CALL D10msMOV P1,#0FFHMOV A,R2MOV B,#51DIV ABMOV DPTR,#LEDMOVC A,@A+DPTRADD A,#10000000B; 第2个LED的小数点dp亮MOV P0,ACLR P1.1; 第2个LED亮MOV R0,#11111101B; R0控制LEDMOV R1,#2NEXT2: CALL D10msMOV P1,#0FFH;MOV A,BMOV B,#10MUL ABJB PSW.2,BEQU12MOV B,#51DIV ABJMP DISPBEQU12: INC AMOV B,#51DIV ABADD A,#5DISP: MOV DPTR,#LEDMOVC A,@A+DPTRMOV P0,AMOV A,R0RL AMOV R0,AMOV P1,ACALL D10msDJNZ R1,NEXT2; 显示完4位LED为止CALL D10msMOV P1,#0FFH;MOV A,R2MOV A,R7; 还原DPTRADD A,#0F8H; 相加之和最大为0FFHMOV DPL,AMOV DPH,#7FHDJNZ R6,ThisInCALL D1s;MOV A,R7;ADD A,#0F8H;MOV DPL,A;MOV DPH,#7FHINC DPTRINC R7MOV A,R7CLR CSUBB A,#8JZ MODE2JMP NEXT2In ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; D10ms: MOV R4,#01H ;延时10msD1ms: MOV R5,#249DL: NOPNOPDJNZ R5,DLDJNZ R4,D1msRET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; D1s: MOV R3,#100 ;延时1sD:CALL D10msDJNZ R3,D RET;;;;;;;;;;;;;;;;;;;;;;;;;;;共阴极;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LED:DB 3FH,06H,5BH,4FH,66H ;0-4DB 6DH,7DH,07H,7FH,6FH ;5-9 Help:DB 0F6H,0F9H,0B8H,0F3H ;H.E.L.P MOD1:DB 86H,3FH,40H,3FH ;1.0-0 MOD2:DB 0DBH,3FH,40H,07H ;2.0-7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; END实验效果图模式1:IN0模式2:IN0->IN7IN0IN1…………IN5………提示:按复位键可以重新进行模式选择。
8路电压表巡检设计C语言程序
当你看到这个文档的时候我已经毕业了,我们的毕业设计就是用的下面这个程序。
请大家放心使用。
这程序花了我们不少心血喔!#include<AT89X52.H>#define uchar unsigned char#define uint unsigned intuint a1,b1,ge,fen,fen1;uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0Xff};//0-9 s、d 共阳数码管段选数据uchar t;uchar dispbuf[4]={0,0,0,0};// 0x76,0x3f,0x3f,0x4fuchar dispcount;sbit W0=P3^5; //sbit W1=P3^4; //sbit W2=P3^3; //sbit W3=P3^2; //位选sbit PIN=P1^7;sbit st=P2^4;//A/D转换控制sbit ale=P2^3;//通道控制sbit oe=P2^5;//输出控制sbit eoc=P3^7;//转换结束标志sbit a=P2^0;sbit b=P2^1;sbit c=P2^2;sbit k1=P3^0;//功能转换键sbit k2=P3^1;//通道选择键void delay(uchar x){uint a,b;for(a=x;a>0;a--)for(b=110;b>0;b--);}void xz()//通道选择{if(t==1){a=0;b=0;c=0;delay(1);ale=0; }if(t==2){a=1;b=0;c=0;ale=1;delay(1);ale=0; }if(t==3){a=0;b=1;c=0;ale=1;delay(1);ale=0; }if(t==4){a=1;b=1;c=1;ale=1;delay(1);ale=0; }if(t==5){a=0;b=1;c=1;ale=1;delay(1);ale=0; }if(t==6){a=1;b=0;ale=1;delay(1);ale=0;}if(t==7){a=0;b=0;c=1;ale=1;delay(1);ale=0;}if(t==8){a=1;b=1;c=0;ale=1;delay(1);ale=0;}}void aj()//按键{if(k1==0){delay(2);if(k1==0)TR1=!TR1;while(!k1);}if(TR1==0){if(k2==0){delay(5);if(k2==0){t++;if(t==9)t=1;while(!k2);}}}void du()//读数据{uchar tmp;st=1;st=0;delay(1);//这里必须延时if(eoc==1)//转换结束标志{oe=1;delay(1);tmp=P0;oe=0;delay(1);}ge=tmp/51;a1=(tmp%51)*10;fen=a1/51;b1=(a1%51)*10;fen1=b1/51;dispbuf[0]=dispcode[t];dispbuf[1]=dispcode[ge];dispbuf[2]=dispcode[fen];dispbuf[3]=dispcode[fen1];}void init()//初始化{EA=1;ET1=1;TMOD=0x10;TH1=(65536-50000)/256;TL1=(65536-50000)%256;T2MOD=0x00; /*定时器2为工作模式) */T2CON=0x04; /*定时器2为自动重装定时工作模式) TR2=1 */ RCAP2L=(65536-4000)%256; //给定时器T2装初值RCAP2H=(65536-4000)/256;TR2=1; //打开定时器中断1,2ET2=1;W0=1;W1=1;W2=1;W3=1;ale=0;oe=0;st=0;t=1;k1=1;k2=1;}void as() interrupt 3 using 0{uchar a;TH1=(65536-50000)/256;TL1=(65536-50000)%256;a++;if(a==20){a=0;t++;if(t==9)t=1;}}void main(){init();while(1){aj();xz();du();}}void t1(void) interrupt 5 using 0{TF2=0; //T2定时器必须用软件清0 P1=dispbuf[dispcount]; //控制数码管显示if (dispcount==0){W0=0;W1=1;W2=1;W3=1;}if(dispcount==1) { PIN=0;W0=1;W1=0;W2=1;W3=1;}if(dispcount==2) {PIN=1;W0=1;W1=1;W2=0;W3=1;}if(dispcount==3) {W0=1;W1=1;W2=1;W3=0;}dispcount++;if(dispcount==4) dispcount=0;}下面是我们用的原理图:下面是HEX文件需要的放心使用,当然也可以用上面的C语言自己用Kill软件生成!:0B001E00C0F9A4B0999282F88090FF16:06001100041300000000D2:0802C900C2A1C2A2D2A37F0171:1002D1007E00D3EF9400EE940040147D6E7C00ED1F:0F02E1001D70011CED4C70F7EF1F70E61E80E3DF:0102F00022EB:10013700E517B40107C2A01202C9C2A3E517B402AA :1001470007D2A01202C9C2A3E517B40309C2A0D2FD :10015700A11202CBC2A3E517B4040BD2A0D2A1D23D :10016700A21202CDC2A3E517B4050BC2A0D2A1D239 :10017700A21202CDC2A3E517B4060BD2A0C2A1D228 :10018700A21202CDC2A3E517B4070BC2A0C2A1D227 :10019700A21202CDC2A3E517B40809D2A0D2A112B8 :0501A70002CBC2A322FF:10029D0020B00D7F021202D120B002B28E30B0FD1F:1002AD00208E1820B1157F051202D120B10A051735:0C02BD00E517B4090375170130B1FD22EC:1000BA00D2A4C2A47F011202D130B710D2A57F0107 :1000CA001202D1AB80C2A57F011202D1EB75F033C7 :1000DA0084750E00F50FEB75F03384E5F075F00AC0:1000EA00A485F008F509AE08FF7C007D331201BE35:1000FA008E0C8F0DAE08AF097C007D331201BE7ED7 :10010A00007F0A1201AC8E0A8F0B7C007D3312012C :10011A00BE8E118F12E51790001E93F513E50F930B:0C012A00F514E50D93F515E51293F5169C:010*******A6:10026A00D2AFD2AB758910758D3C758BB0E4F5C9E8 :10027A0075C80475CA6075CBF0D2CAD2ADD2B5D2F0 :10028A00B4D2B3D2B2C2A3C2A5C2A4751701D2B066 :03029A00D2B122BC:03001B000202F1ED:0402F100C0E0C0D0D9:1002F500758D3C758BB00518E518B4140D7518008F:0A0305000517E517B4090375170189:05030F00D0D0D0E03267:0E00030012026A12029D1201371200BA80F535:03002B00020213BB:10021300C0E0C0D075D000C2CF74132510F8E6F546:1002230090E5107008C2B5D2B4D2B3D2B2E510B41F :10023300010AC297D2B5C2B4D2B3D2B2E510B402A6 :100243000AD297D2B5D2B4C2B3D2B2E510B403087E :10025300D2B5D2B4D2B3C2B20510E510B40403755B :070263001000D0D0D0E03202:0300000002002ECD:0C002E00787FE4F6D8FD7581180200759B:1001AC00EF8DF0A4A8F0CF8CF0A428CE8DF0A42E67 :0201BC00FE2221:1001BE00BC000BBE0029EF8DF084FFADF022E4CC25 :1001CE00F875F008EF2FFFEE33FEEC33FCEE9DECEE :1001DE00984005FCEE9DFE0FD5F0E9E4CEFD22ED34:1001EE00F8F5F0EE8420D21CFEADF075F008EF2F7E:1001FE00FFED33FD4007985006D5F0F222C398FD6F:05020E000FD5F0EA220B:10003A00020003E493A3F8E493A34003F68001F2D9:10004A0008DFF48029E493A3F85407240CC8C333C7:10005A00C4540F4420C8834004F456800146F6DF96:10006A00E4800B0102040810204080900011E47E15:10007A00019360BCA3FF543F30E509541FFEE4938B:10008A00A360010ECF54C025E060A840B8E493A352:10009A00FAE493A3F8E493A3C8C582C8CAC583CA7D :1000AA00F0A3C8C582C8CAC583CADFE9DEE780BE35 :010*******E8:00000001FF。
简易数字电压表的设计
一、简易数字电压表的设计l.功能要求简易数字电压表可以测量0~5V的8路输入电压值,并在四位LED数码管上轮流显示或单路选择显示。
测量最小分辨率为0.019 V,测量误差约为土0.02V。
2.方案论证按系统功能实现要求,决定控制系统采用AT89C52单片机,A/D转换采用ADC0809。
系统除能确保实现要求的功能外,还可以方便地进行8路其它A/D转换量的测量、远程测量结果传送等扩展功能。
数字电压表系统设计方案框图如图1-1。
图1-1 数字电压表系统设计方案3.系统硬件电路的设计简易数字电压测量电路由A/D转换、数据处理及显示控制等组成,电路原理图如图1-2所示。
A/D转换由集成电路0809完成。
0809具有8路模拟输人端口,地址线(23~25脚)可决定对哪一路模拟输入作A/D转换,22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存,6脚为测试控制,当输入一个2us宽高电平脉冲时,就开始A/D 转换,7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平,9脚为A/D 转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出,10脚为0809的时钟输入端,利用单片机30脚的六分频晶振频率再通过14024二分频得到1 MHz时钟。
单片机的P1、P3.0~P3.3端口作为四位LED数码管显示控制。
P3.5端口用作单路显示/循环显示转换按钮,P3.6端口用作单路显示时选择通道。
P0端口作A/D转换数据读入用,P2端口用作0809的A/D转换控制。
4.系统程序的设计(1)初始化程序系统上电时,初始化程序将70H~77H内存单元清0,P2口置0。
(2)主程序在刚上电时,系统默认为循环显示8个通道的电压值状态。
当进行一次测量后,将显示每一通道的A /D 转换值,每个通道的数据显示时间为1s 左右。
主程序在调用显示子程序和测试子程序之间循环,主程序流程图见图1-3。
(3)显示子程序 显示子程序采用动态扫描法实现四位数码管的数值显示。
毕业设计 数字电压表的设计
目录1引言 (1)1.1设计背景 (1)1.2设计目的 (1)1.3设计要求及功能 (1)2总体设计 (3)2.1各模块方案选择 (3)2.2总体设计框图 (3)3系统硬件电路设计 (5)3.1单片机芯片AT89S52 (5)3.1.1主要特性 (5)3.1.2引脚说明 (6)3.1.3振荡器特性 (8)3.1.4芯片擦除 (8)3.2A/D转换模块设计 (8)3.2.1 ADC0809简介 (8)3.2.2引脚说明 (9)3.2.3 ADC0809A/D工作原理 (10)3.3显示电路设计 (11)3.4时钟电路设计 (12)3.5复位电路设计 (13)3.6通道选择电路设计 (13)4软件设计 (15)4.1主程序设计 (15)4.2各子程序设计 (16)4.2.1A/D转换子程序 (16)4.2.2显示子程序 (16)4.2.3按键子程序 (17)5结束语 (19)参考文献 (20)附录A 总电路图 (21)附录B PCB图 (22)附录C 程序 (23)致谢 (27)摘要本设计中的数字电压表主要利用AT89S52单片机进行电压的测量控制,采用ADC0809转换器对输入的电压值进行转换,通过单片机扫描按键来控ADC0809的通道选择,分时测量8路模拟电压值,并处理转换后的数字电压值,然后送给LED数码管动态显示,并同时显示通道值。
实现了对0~5V的8路输入电压值的高精度测量和数字化显示。
关键词:数字电压表;AT89S52;ADC0809;数码管AbstractThis design digital voltmeter for voltage measurement and control uses AT89S52 microcontroller, using ADC0809 converter to convert the value of the input voltage, controlled by the microcontroller scan button ADC0809 channel selection, measures 8-channel analog voltage value of time-sharing, and processes the digital voltage value after the conversion, and then sents to the LED digital tube dynamic display, and at the same time to displays the channel value. Input voltage values of 0~5V, 8-channel high-precision measurement and digitization.Key words: digital voltmeter;AT89S52;ADC0809;digital tube1引言1.1设计背景数字电压表(Digital V oltmeter)简称DVM,它是在50年代初,60年代末发起来的电压测量仪表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1 引言 (1)2设计原理及要求 (1)2.1数字电压表的实现原理 (1)2.2数字电压表的设计要求 (1)3软件仿真电路设计 (1)3.1设计思路 (1)3.2仿真电路图 (2)3.3设计过程 (2)3.4 AT89C51的功能介绍 (2)3.4.1简单概述 (3)3.4.2主要功能特性 (3)3.4.3 AT89C51的引脚介绍 (3)3.5 ADC0808的引脚及功能介绍 (4)3.5.1芯片概述 (4)3.5.2 引脚简介 (4)3.5.3 ADC0808的转换原理 (5)3.6 74HC245芯片的引脚及功能 (5)3.6.1芯片概述 (5)3.6.2引脚介绍 (5)3.7 LED数码管的控制显示 (5)3.7.1 LED数码管的模型 (5)3.7.2 LED数码管的接口简介 (6)4系统软件程序的设计 (6)4.1 主程序 (6)4.2 A/D转换子程序 (6)4.3 中断显示程序 (7)5电压表的调试及性能分析 (8)5.1 调试与测试 (8)5.2 性能分析 (9)6电路 (9)6.1 电路仿真图 (9)6.2 PCB图 (9)7总结 (10)参考文献 (10)附录1 源程序 (11)附录2 仿真原理电路 (15)摘要:随着电子科学技术,传感器技术,自动控制技术和计算机技术的发展,电子测量成为电子工作者的必须掌握的手段对测量的精度,手段要求越来越高,本文介绍了一种以AT89C 51为核心的数字电压测量电路。
通过ADC0809进行转换,74HC245进行驱动。
关键词:A/D转换数字电压表 AT89C51 数码管电压测量1 引言随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。
本设计AT89C51单片机的一种电压测量电路,该电路采用ADC0809本文介绍一种基于A/D转换电路,测量范围直流 0~5V 的8路输入电压值,并在四位LED数码管上循环显示,并显示路数。
测量最小分辨率为0.019V,测量误差不超过正负0.02V。
2设计原理及要求本设计是利用单片机AT89C51与ADC0809设计一个数字电压表,测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。
2.1数字电压表的实现原理ADC0809是8位的A/D转换器。
当输入电压为5.00V时,输出的数据值为255(0FFH),因此最大分辨率为0.0196(5/255)。
ADC0808具有8路模拟量输入端口,通过3位地址输入端能从8路中选择一路进行转换。
2.2数字电压表的设计要求可以测量0~5V范围内的3路直流电压值。
在4位LED数码管上轮流显示各路电压值或单路选择显示,其中3位LED数码管显示电压值,显示范围为0.00V~5.00V,1位LED数码管显示路数,3路分别为0-2。
要求测量的最小分辨率为0.02V。
3软件仿真电路设计3.1设计思路多路数字电压表应用系统硬件电路由单片机、A/D转换器、数码管显示电路和按键处理电路组成,由于ADC0808在进行A/D转换时需要有CLK信号,本试验中ADC0809的CLK直接由外部电源提供为500kHz的方波。
实际显示的电压值( ADC0809采用逐次逼近法转换,把模拟电压转换成16进制的D,由于是对直流电压0~5V进行采集,所以D对应的电压为V0 ,我们的目的就是要把V0显示在LED显示器上。
3.2仿真电路图用Protues软件仿真设计的电路如图3-1所示(因软件中ADC0809不能用,并且ADC0808与ADC0809相同,所以用ADC0808代替)。
图3-1 仿真电路入端,由外部信号源提供。
单片机的P1、P3.0-P3.3端口作为四位LED数码管现实3.3设计过程简易数字电压测量电路由A/D转换、数据处理及显示控制等组成。
电路原理图见附录2。
A/D转换由集成电路0808完成。
0808具有8路模拟输入端口,地址(23-25)脚可决定对哪路模拟输入作A/D转换,22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。
6脚为测试控制,当输入一个2us宽高电平脉冲时,就开始A/D转换。
7脚为A/D转换结束标志,当A/D转换结束时7脚输出高电平。
9脚为A/D 转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。
10脚为0808的时钟输控制。
P3.5端口用作单路显示/循环显示转换按钮,P3.6端口用作单路显示时选择通道。
P0端口作A/D转换数据读入用,P2端口用作0808的A/D转换控制。
3.4 AT89C51的功能介绍3.4.1简单概述AT89C51是一种带2K字节闪存可编程可擦除只读存储器的单片机一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及引脚排列如图3-2所示。
图3-2 AT89C51芯片模型3.4.2主要功能特性(1) 4K 字节可编程闪烁存储器。
(2) 32个双向I/O 口;128×8位内部RAM 。
(3) 2个16位可编程定时/计数器中断,时钟频率0-24MHz 。
3.4.3 AT89C51的引脚介绍 (1)电源引脚电源引脚接入单片机的工作电源。
Vcc (40引脚):+5V 电源。
GND(20引脚):接地。
(2)时钟引脚XTAL1(19引脚):片内振荡器反相放大器和时钟发生器电路的输入端。
XTAL2(20引脚):片内振荡器反相放大器的输出端。
图3-3 电源接入方式XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C513.5 ADC0808的引脚及功能介绍3.5.1芯片概述ADC0808是一种典型的A/D转换器。
芯片模型如图3-4所示。
图3-4ADC0808芯片模型3.5.2 引脚简介(1) IN0~IN7:8路模拟量输入端。
(2) D0~D7:8位数字量输出端口。
(3) START:A/D转换启动信号输入端。
(4) ALE:地址锁存允许信号,高电平有效。
(5) EOC:输出允许控制信号,高电平有效。
(6) OE:输出允许控制信号,高电平有效。
(7) CLK:时钟信号输入端。
3.5.3 ADC0808的转换原理ADC 0808 采用逐次比较的方法完成A/D转换,由单一的+5V电源供电。
片内带有锁存功能的8路选1的模拟开关,由A、B、C的编码来决定所选的通道。
ADC0808完成一次转换需100μs左右,它具有输出TTL三态锁存缓冲器,可直接连接到AT89C51的数据总线上。
3.6 74HC245芯片的引脚及功能3.6.1芯片概述245芯片一般就用着单片机的总线驱动。
它有8个输入和8个输出。
第一脚为“方向选择”。
如果选择接高电平,那么数据将从A传到B。
也就是从2~9输入,分别从18~11作为相应的输出。
如果第一脚接低电平,那么数据传输方向就反过来。
第10脚是公共地。
19脚为“使能”,是低电平有效。
图3-5芯片模型3.6.2引脚介绍(1) D0~D7:8位数据输入线;(2) Q0~Q7:8位数据输出线(3) G:数据输入锁存选通信号。
(4)OE:数据输出允许信号,低电平有效。
3.7 LED数码管的控制显示3.7.1 LED数码管的模型LED数码管模型如图3-6所示。
图3-6数码管显示3.7.2 LED数码管的接口简介LED 的段码端口A~G分别接至驱动74LS245再接AT89C51的P0.0~P0.7口,位选端1~4分别接至分别接至驱动74LS245再接P2.0、P2.1、P2.2、P2.3。
4系统软件程序的设计多路数字电压表系统软件程序主要有主程序、A/D转换子程序和中断显示程序组成。
4.1 主程序对于单路显示和循环显示,系统设置了一个标志位00H控制,初始化时00H位设置为0,默认为循环显示,当它为1时改变为单路显示控制,00H位通过单路、循环按键控制。
流程图如图4-1所示。
开始初始化A/D转换子程序显示子程序图4-1主程序流程图4.2 A/D转换子程序A/D转换子程序用于对ADC0808的4路输入模拟电压进行A/D转换,并将转换的数值存入4个相应的存储单元中,A/D转换子程序每隔一定时间调用一次,即隔一段时间对输入电压采样一次,如图4-2所示。
4.3 中断显示程序设计中采用中断的方式来读取转换完成的数据能节省CPU的资源开始A/D转换调用延时存转换后的十六进制判断是否为零当系统设置好后,一旦数据转换完成,便会进入外部中断0,然后在中断中读取转换的数值,处理数据并送数码管显示输出。
选中的一路数据进行显示。
每路数据显示时需经过转换变成十进制BCD码,放于4个数码管显示缓冲区中。
单路或多路循环显示通过标志位00H控制。
在显示控制程序中加入了对单路或多路循环按键的判断如4-3所示。
数字量送P0口取段码地址YP2.0=1?5电压表的调试及性能分析5.1 调试与测试本设计应用Proteus及KEIL2软件,首先根据自己设计的电路图用Proteus软件画出电路模型,然后我们用KEIL2软件对所编写的程序进行编译、链接,如果没有错误和警告便可生成程序的hex文件,将此文件加到电路图上使软硬件结合运行,最后进行端口电压的对比测试,测试的第一路对比见图4-1中标准电压值采用Proteus。
5.2 性能分析由于单片机为8位处理器,当输入电压为5.00V时,输出数据值为255(FFH)因此单片机最大的数值分辨率为0.0196V(5/255)。
这就决定了该电压表的最大分辨率(精度)只能达到0.0196V。
测试时电压数值的变化一般以0.02V的电压幅度变化,如要获得更高的精度要求,应采用12位、13位的A/D转换器。
6电路图6.1 电路仿真图6.2 PCB图图6-2 PCB图7总结经过一周的努力终于设计成功,LED的显示结果和直接用数字电压表测试模拟量输入所得结果几乎一致,误差完全在合理的范围之内。
由于仪器误差,LED显示最大值只能是4.9V,离标准最大值5.0V已经不远,达到预期目的,设计成功。