基于51单片机实现ADC0808数模转换与显示
- 格式:doc
- 大小:2.46 MB
- 文档页数:23
摘要本文介绍了基于单片机的数据采集的硬件设计和软件设计,数据采集系统是模拟域与数字域之间必不可少的纽带,它的存在具有非常重要的作用。
本文介绍的重点是数据采集系统,而该系统硬件部分的重心在于单片机。
硬件部分是以单片机为核心,还包括A/D模数转换模块,LCD1602显示模块部分。
8路被测电压通过模数转换器ADC0809进行模数转换,实现对采集到的数据进行模拟量到数字量的转换,并将转换后的数据通过LCD1602显示器来显示所采集的结果,并且可以通过按键来查看任意通路的电压值,整个系统具有操作方便、线路简单、测量误差小等优点。
关键词:单片机AT89S52、模数转换器ADC0809、数据采集、LCD1602显示器目录摘要 01、方案设计 (2)2、硬件电路的设计 (3)2.1单片机的最小系统设计 (3)2.2 ADC0809模数转换器设计电路 (4)2.2.1 ADC0809的结构功能 (4)2.2.2 ADC0809的工作时序 (7)2.2.3 ADC0809与AT89C52单片机的接口电路 (8)2.3 LCD1602显示电路 (8)2.4 键盘与单片机连接电路 (11)2.5系统整体电路图 (11)3、软件设计 (12)4、系统仿真和测试结果 (13)5、性能分析 (14)6、心得与体会 (15)7、参考文献 (15)附录一:源程序 (15)附录二:本科生能力拓展训练成绩评定表 (21)1、方案设计根据设计要求,采用的方案如下:硬件部分实现对8路数据采集和显示的功能,包括MCS-51单片机、ADC0809、LCD1602;软件部分实现单片机对8路输入数据的采集以及对LCD1602的显示操作。
主要设计思想:单片机P1与ADC0809相连,P0与LCD1602连接。
模拟信号通过IN0——IN7输入到ADC0809中转换为数字信号,P1获得此值后,经过处理得到每位的数据后,通过P0口写数据到LCD屏上。
数据采集电路的原理框如图1所示。
综合课程设计题目基于51单片机实现ADC0808数模转换与显示毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
AT89S51单片机与ADC0809模数转换器的三种典型连接Ξ元增民(长沙大学机电工程系,湖南长沙410003)摘 要:根据模数转换器定位为单片机的外部RAM单元的概念,介绍了AT89S51单片机与ADC0809模数转换器三种典型连接电路及程序编制.分析了三种电路硬件和软件特点.并且给出了一种能用于中断、串行口和模数转换等项目的综合训练的短小精悍的可执行程序.关键词:单片机;模数转换;连接硬件;控制软件;AT89S51;AT89C51;ADC0809中图分类号:TP368.1 文献标识码:A 文章编号:1008-4681(2005)05-0069-04Three Typical Connections B etw een AT89S51Single Chip Computer andADC0809Analog to Digital ConverterY UAN Z engmin(Mechanical and E lectrical Engineering Department,Changsha University,Changsha,Hunan410003) Abstract:According to the concept that analog to digital converters are defined as external RAM of single chip com puter,three typical connections between AT89S51single chip com puter and ADC0809analog to digital converter are introduced.The characteristic of hardware and s oftware of the three circuits are analyzed.A short program which may be used in the integrated training of interrupting,series port and analog to digital converting is given.K ey w ords:single chip com puter;analog to digit converting;connecting hardware;controlling s oftware; AT89S51;AT89C51;ADC0809 MCS51系列单片机是美国英特尔公司于1980年开始生产的.MCS51系列单片机以功能强大的指令系统、并行口串行口兼有以及灵活的SFR模式等优点,在20世纪80~90年代曾经风行我国.上世纪末国际著名电子器件生产厂家,如飞力浦(Philips)公司,西门子(Siemens),都在MCS51系列单片机的框架下设计新型单片机产品.其中美国爱特美(AT ME L)公司采用MCS51系列单片机的指令系统和硬件框架,将MCS51系列单片机内置ROM、EPROM及外挂EPROM等模式改为内置FPEROM (Flash Programmable and Erasable Read Only Mem o2 ry),设计了与MCS51系列单片机兼容的AT ME L51系列单片机,包括内置4kB FPEROM的标准40脚AT89C51、内置2kB FPEROM的20脚AT89C2051以及内置1kB FPEROM的20脚AT89C1051.正是这些后起的51系列单片机赋予MCS51系列单片机以新的生命力.建议把英特尔公司MCS51系列单片机和后来世界各大公司在其框架下生产的各种51系列单片机统称为51系列单片机,简称为51单片机.51系列单片机至今在8位机控制领域还是一只独秀.就连一些32位处理器也在致力8位应用[1].讨论51系列单片机的一些基本应用问题非常有价值.尽管大家都知道模拟数字转换(Analog to Digit C onvert,ADC)数字模拟转换(Digit to Analog C onvert, DAC)接口技术在控制领域非常重要,而且很多教科书,如单片机、电子技术、计算机控制技术、都有关于ADC和DAC的内容,但是实际上在很多学校的教学中ADC和DAC都是一个薄弱环节,或者说是一个交叉点.谁都应当管,结果往往谁都不管.在一定程度上影响了教学效果.目前8路8位逐位比较式模数转换芯片ADC0809无论在工程设计还是教学过程中还是作为首选品种.讨论51系列单片机与ADC0809的硬件连接与软件编程,是一项有价值的工作.概念非常重要.要了解ADC0809与51单片机连接原理,首先要明确ADC0809在整个51单片机第19卷 第5期2005年9月 长 沙 大 学 学 报J OURNA L OF CH AN GSH A UNI VERSITYVol.19 No.5Sep.2005Ξ收稿日期:2005-06-09;修回日期:2005-09-09作者简介:元增民(1957-),男,河北沙河人,长沙大学教授,硕士,主要从事电子学研究和教学.系统中的定位.大体上说,ADC0809在整个51单片机系统中是作为外部RAM 的1个单元定位的.具体到某一个连接方式,ADC0809在整个51单片机系统中的定位又有一些差别.目前,性能非常好的AT 89C51的价格大约在10元左右,已经完全取代MCS51而稳占市场.考虑AT 89C51已经在2004年停产,代之而起的是性能价格比更好的AT 89S51.本文介绍ADC0809与51系列单片机的连接时将以AT 89S51作为例子,不过完全适合于AT 89C51和更早的MCS51系列单片机中的8031,8051和8751.本文介绍ADC0809与AT 89S51(51系列单片机)的3种典型连接方式.1 ADC0809与51单片机的第一种连接方式这是一种数据线对数据线、地址线对地址线的标准连接方式,如图1.但是由于51单片机没有现成的低8位地址总线,所以采用这种标准连接方式需要用74LS373或类似芯片产生低8位地址总线.早期的MCS51系列单片机的应用品种很多是没有内置程序存贮器的8031芯片,本身就需要外挂74LS373等芯片产生低8位地址总线来外接E 2PROM 等程序存贮器,连接ADC0809时不需要专门外挂74LS373.因此早期的MCS51系列单片机,如8031,采用这种方式连接ADC0809还是比较可行的.图1中的P2.7/A15线作为整个ADC0809芯片的片选线.当P2.7/A15=0时,或非门敞开,允许写信号通过,将单片机负的写脉冲转换为ADC0809所需要的正脉冲,以选中ADC0809某一通道并启动转换.图1 ADC0809与51单片机的第一种连接方式这是一种不完全地址译码方式.如果增加地址译码器,将P2.7/A15线改为高位地址译码器的输出线,就可以形成完全译码.在图1连接方式中,ADC0809的转换结果寄存器在概念上定位为单片机外部RAM 单元的一个只读寄存器,与通道号无关.因此读取转换结果时不必关心DPTR 中的通道号如何.编程概要:MOV DPTR ,#7FF8H ;DPTR 指向0809通道0MOVX @DPTR ,A ;锁定通道0并启动转换…………………………MOVX A ,@DPTR ;读取转换结果要求在程序第一条指令中把决定是否能选中整个ADC0809芯片和通道的数据送到数据指针DPTR.在本电路中,只要送到DPTR 的最高位数据为0,就能选中ADC0809,而通道地址由DPTR 的最低3位数字决定.这里累加器A 的内容对于ADC 没有任何意义.因此事先不用操心累加器A 内容如何.这是本程序的一大特点.2 ADC0809与51单片机的第二种连接方式通常芯片的地址线只能进不能出自不必说,ADC0809的数据线有一特点:只能出不能进.就是说,就像往S BUF 写入时写到发送缓冲寄存器,从S BUF 读出时实际是读取接收缓冲寄存器的数据一样,往ADC0809写入时,把数据总线上的数据写到地址寄存器,从ADC0809读出时实际是读取转换结果数据.图2 ADC0809与51单片机的第二种连接方式因此可以在把51单片机的8位数据线接到ADC0809的8位数据线的同时,又把其中的3位直接接到ADC0809的3根地址线以确定通道号.通常把51单片机的8位数据线中的低3位D2,D1,D0直接接到ADC0809的3根地址线A2,A1,A0以确定通道号,如图2.采用这种连接方式明显可以省去一片74LS373.在图2连接方式中,ADC0809的转换结果寄存07长沙大学学报 2005年9月器在概念上定位为单片机外部RAM 单元的只读寄存器,而通道号锁存器在概念上定位为单片机同一个外部RAM 单元的只写寄存器.同一个外部RAM 单元的只读寄存器与只写寄存器使用同一个地址,就像51系列单片机的串行发送缓冲器与串行接收缓冲器使用同一个地址99H 一样,不会发生混乱.图2连接方式有一个特点,那就是单片机要把最低3位二进制数据通过数据总线写入ADC0809的地址锁存器,然后作为通道地址使用.编程概要:MOV A ,#0F8H ;ADC0809通道0地址送到A MOV DPTR ,#7FFFH ;DPTR 指向ADC0809MOVX @DPTR ,A ;锁定通道0并启动转换…………………………MOVX A ,@DPTR ;读取转换结果要求在程序第一条指令中把决定是否能选中整个ADC0809芯片的数据送到数据指针DPTR.在本电路中,只要送到DPTR 的最高位数据为0,就能选中ADC0809,而通道地址由累加器A 的最低3位数字决定.除了最高位以外,DPTR 的其余15位数据对于ADC 没有任何意义.除了较低3位以外,累加器A 的其余5位数据对于ADC 也没有任何意义.这是本程序的一大特点.3 ADC0809与51单片机的第三种连接方式在很多应用场合,AT 89S51内部的硬件资源,例如4kB 闪存,128B 内部RAM ,一个串行口和4个8位并行口等,已经够用.就是说,在很多应用场合,不需要外扩RAM 或I/O 口.图3 ADC0809与51单片机的第三种连接方式当51单片机没有外扩RAM 和I/O 口时,ADC0809就可以在概念上作为一个特殊的唯一的外扩RAM 单元.因为它是唯一的,就没有地址编号,也就不需要任何地址线或者地址译码线.只要单片机往外部RAM 写入,就是写到ADC0809的地址寄存器中.只要单片机从外部RAM 读取数据,就是读取ADC0809的转换结果.基于这种外部RAM 的唯一单元概念设计的AT 89S51与ADC0809的连接电路如图3.相应的启动程序和读数程序都非常简单.编程概要:MOV A ,#0F8H ;ADC0809通道0地址送到A MOVX @R0,A ;锁定通道0并启动转换………………MOVX A ,@R0;读取转换结果只要程序中使用MOVX @R0,A 指令或者MOVX @DPTR ,A 指令,就能启动ADC0809.比较MOVX @R0,A 指令和MOVX @DPTR ,A 指令,当然是MOVX @R0,A 占优势,所以这里使用MOVX @R0,A 指令.其中间址寄存器R0中的数据无论在启动ADC0809还是在读取转换结果时都没有任何意义,因此事先不必考虑往R0中送入什么数据.这是本程序的一大特点.4 三种连接方式的综合比较第一种和第二种连接方式允许多片ADC0809与单片机连接,第三种连接方式只能连接一片.通常1片8通道ADC0809就能满足控制工程需要.因此在单片机没有外扩RAM 和I/O 接口时,第三种连接方式是一种优选方案.需要2片或更多ADC0809时,第二种连接方式是一种优选方案.第一种连接方式需要一片74LS373做地址锁存器.如果单片机系统已经有一片74LS373地址锁存器,那么第一种连接方式也不失为一种可以考虑的连接方式.5 同时进行模数转换和显示的典型程序单片机教学中除了ADC 和DAC 是难点之外,中断和串行口也是难点.下面介绍一个典型的程序.这个程序虽然短小精悍,但是能利用中断和串行口功能同时完成多项任务,有利于学员掌握中断、串行口及ADC0809的编程应用.执行本程序时,需要在图3基础上再增加一片串入并出芯片74LS164及一只共阳数码管,并通过P1口和7406或74LS240控制8只LE D. ORG 0000H LJMP MAI N ORG 0003H ;0号外中断服务子程序 PUSH ACC ;ACC 入栈保护 MOVX A ,@R0 ;读ADC 转换结果 MOV P1,A ;送P1口显示17总第67期 元增民 AT 89S51单片机与ADC0809模数转换器的三种典型连接 C LR A ;ACC指向ADC0809的0通道 MOVX@R0,A ;再次启动ADC0809 POP ACC ;ACC出栈 RETI ;中断返回MAI N:MOV IE,#10000001B;开0号外中断 C LR A ;ACC指向ADC0809的0通道 MOVX@R0,A ;首次启动ADC0809 MOV DPTR,#ST AB ;DPTR指向段码表ST ART:MOV R0,A ;秒数送R0保存 MOVC A,@A+DPTR ;查表取来秒数段码 M O V S BUF,A ;秒数的段码送串行口输出 AC A LL DE LAY ;延时1秒 ADD A,#1 ;加1秒 DA A ;十进制调整 AN L A,#0FH ;屏蔽掉十位 S JMP ST ART ;循环计时DE LAY:……………… ;1秒延时子程序 E ND执行本程序,首先在主程序中启动ADC0809,然后单片机运行一位秒表程序.在秒表运行过程中,当模数转换完成时,ADC0809发出一个正脉冲E OC(End O f C onvert),反相为负脉冲后给单片机的端子,单片机响应中断,执行完当前指令后即进入中断服务子程序,读取转换结果并送显示,然后再次启动ADC0809后返回主程序.ADC0809完成1次转换需用64个时钟脉冲.如果ADC0809时钟信号是640kH z,那么1次转换需要时间为0.1ms,1秒钟之内就能完成1万次转换,就是说,1秒钟之内要产生1万次中断,理论上对秒表运行肯定有影响,但是实际上作为演示实验,人们根本觉察不到中断对秒表的影响.所以我们把这个实验命名为“秒表运行中进行ADC”,其特征是秒表一边运行,一边连续进行ADC,因此实验成功的标志是代表转换结果的LE D显示数字能与为ADC0809提供模拟电压的电位器实现随动,即拧动电位器时LE D显示数字跟着闪烁.参考文献:[1]R obert Crav otta.32位微处理器致力于8位应用[J].电子设计技术,2005(12):5,56-57.[2]李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,2004.(上接第23页)A=100.11 0.190.1 10.13解:显然矩阵A为对角占优矩阵,且两圆盘R1与R2相交.∵S=1+0.1-0.2=0.9>0,Δ=0.92-4×1.1×0.1=0.37>0,∴R1与R2是可以被分离的.取a=S2P i ≈0.4,令D=0.4 1 1,作变换B=DAD-1=100.040.4 0.2590.1 2.50.13这时R1与R2就已经被分离.三个圆盘都被分离开来了.由G erschg orin圆盘定理可得三个特征值的范围分别为:9.56≤λ1≤10.44,8.65≤λ2≤9.35,2.5≤λ3≤3.5.小结:上面所讲述的方法对于对角占优矩阵是非常行之有效的.但是它还有一定的局限性。
基本C51单片机的A/D转换实验1.实验目的掌握A/D转换芯片ADC0809与单片机的接口方法及ADC0809芯片性能;了解单片机实现数据采集的方法。
2.实验设备及器件PC机一台单片机综合创新实验箱一台8孔排线一根杜邦线3根3.实验内容编写一段程序,通过ADC0809实现单片机对模拟输入通道电压的采集,使采集到的数据显示在数码管上。
4.实验步骤①用1根杜邦线将J200的左针与D3区J44的CH0相接,或者不连,因为印刷板上已连通。
连接一下只是增加学生的感性认识(注意:标CH0的实际是ADC0809的IN7);②将D4区的J2用杜邦线与B7区J100相连(注意:B7区此时必须将拨码开关向下拨,B8区J58短路帽断开,拨码开关向下拨,否则显示有问题);③用两根杜邦线将D4区的J4中的P34、P35与B7区J102的BIT0、BIT1相连;④运行编写好的软件程序,调节电位器,仿真观察显示的是否变化。
ALE AD启动、使能电路图3.12 A/D转换接口电路图5.参考程序/*位码分别接P34和P35 ,段码P1口,其它接线同以前*/AD EQU 30HBAI EQU 31HSHI EQU 32HGEW EQU 33HAD1 EQU 34HORG 0000HLJMP MAINMAIN: MOV A,#00HMOV DPTR,#7F07HMOVX @DPTR,AMOV R6,#0aHDELAY: NOPNOPNOPDJNZ R6,DELAYMOVX A,@DPTRMOV AD,AACALL DISPJMP MAINDISP: MOV A,ADMOV B,#5DIV ABMOV B,#10DIV ABMOV BAI,AMOV A,BMOV SHI,AD0: MOV R0,#100D1:MOV A,BAIMOV DPTR,#TAB1MOVC A,@A+DPTRMOV P1,ACLR P3.4ACALL D1MSSETB P3.4MOV A,SHIMOV DPTR,#TABMOVC A,@A+DPTRMOV P1,ACLR P3.5ACALL D1MSSETB P3.5DJNZ R0,D1RETD1MS: MOV R6,#2DSS: MOV R7,#0FFHDJNZ R7,$DJNZ R6,DSSRETTAB1: DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH,80H TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00HENDC51例程:#include "reg51.h"#define THCO 0xee#define TLCO 0x0unsigned char codeDuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00}; //共阴极数码管-9段码表unsigned char Data_Buffer[4]={10,0,0,0};float AdValue;sbit P34=P3^4; //四个数码管的位码口定义sbit P35=P3^5;sbit P36=P3^6;sbit P37=P3^7;/**************************************************/sbit ADWR=P1^0;sbit RS=P1^1;sbit CS=P1^2;sbit Add1=P1^3;sbit Add2=P1^4;sbit Add3=P1^5;sbit EOC=P1^6;sbit LED=P1^7;/**************************************************/ void Sysinit();void AD_Start(void);void LED_Fresh();void delay_ms(unsigned int x);void main(){ unsigned int i;Sysinit();Add1=0;Add2=0; //模拟量通道输入选择Add3=0;while(1){AD_Start();while(!EOC);LED=!LED;RS=0;AdValue=P0;LED_Fresh();RS=1;for(i=0;i<40000;i++);}}void Timer0_ISR() interrupt 1{static unsigned char Bit=0;TH0=THCO;TL0=TLCO;Bit++;if(Bit>=4)Bit=0;P34=0;P35=0;P36=0;P37=0;//关位码P2=Duan[Data_Buffer[Bit]];switch(Bit){case 0: P34=0;break;case 1: P35=0;break;case 2: P36=0;break;case 3: P37=0;break;}}void LED_Fresh(){unsigned int temp;temp=AdValue;Data_Buffer[1]=temp/100;Data_Buffer[2]=temp/10%10;Data_Buffer[3]=temp%10;}void Sysinit(){TMOD=0x11; //定时器0初始化TH0=THCO;TL0=TLCO;TR0=1;ET0=1;EA=1;}void AD_Start(void){ADWR=1;CS=0;delay_ms(1);ADWR=0;delay_ms(1);ADWR=1;}void delay_ms(unsigned int x){unsigned char y;for(x;x>0;x--)for(y=110;y>0;y--); }。
基于ADC0809的数字电压表摘要:数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表,是诸多数字化仪表的核心与基础,以数字电压表为核心,可以扩展成各种通用数字仪表,专用数字仪表一级各种非电量的数字化仪表几乎覆盖了电子电工测量、工业测量、自动化仪表等各个领域,它的应用已经非常普及了,数字电压表的主要技术指标在:测量范围,显示位数,测量速度,分辨率等方面。
本文是一基于单片机的数字电压表设计为研究内容。
首先对数字电压表作了简单的介绍、接着对A/D转换器作了解、单片机AT89C51与ADC0809的数字电压表的制作原理和系统设计,主要介绍了数字电压表的硬件电路、软件电路和利用Proteus仿真软件进行仿真等内容,以及设计的数字电压表的实用价值和优点。
关键词:AT89C51 ADC0809 A/D转换器 Proteus仿真软件基于ADC0808与ADC0809的数字电压表有多种设计方案第一种,最基础的一通道,数据进行处理显示0.00——5.00V第二种,双通道,数据进行处理显示0.00——5.00V,可先择某一通道显示,可以选择两通道循环显示。
第三种,多通道,数据进行处理显示0.00——5.00V,多通道循环显示。
第四种,多通道,数据进行处理显示0.00——5.00V,可切换单通道显示与多通道循环显示。
(二)系统的主要模块根据设计要求,系统可以分为A/D转换模块、接口模块、显示模块。
1. A/D转换模块采用ADC0809转换芯片,其中A/D转换器用于实现模拟量向数字量的转换,单电源供电。
它是具有8路模拟量输入、8位数字量输出功能的A/D转换器,转换时间为100us,模拟输入电压范围为0V~5V,不需要零点和满刻度校准,功耗低,约15mW。
2. 接口模块采用AT89C51单片机作为系统的控制单元,通过A/D转换将被测量转换为数字量送入单片机中,再由单片机产生显示码送入显示模块显示。
基于51单片机的多路数据采集器一、摘要:用51单片机控制ADC0808将模拟信号(0~0.5V)转换成数值量(0~255),再控制LED数码管以十六进制实时显示出来。
ADC0808为模/数(A/D)转换器。
在Proteus软件上实现电路设计和程序设计,并进行实时交互仿真。
本设计采用了以单片机为开发平台,控制系采用AT89C52单片机,A/D转换采用ADC0808。
系统除能确保实现要求的功能外,还可以方便进行8路其它A/D转换量的测量。
万用板经过排版、布线、焊接、调试等工作后基于51单片机的简易电压表成形。
关键字:51单片机ADC0808 LED数码显示二、设计要求1、用51单片机作为控制器,来控制ADC0808将模拟信号转换成数值量(0—255);2、可准确测量0—0.5V电压,最小分辨率2mV;3、测量误差小于5%;4、用51单片机控制两位数码管显示实时测量电压的16进制数值量;5、单片机采用中断工作方式;6、在Proteus软件上实现多路电压的测量的电路和程序设计,并进行实时仿真;三、功能创新(1) 在Proteus软件上实现了8路电压的测量设计,并仿真成功,且在万用板上焊接、调试成功;(2) 设计一个外部开关通过中断方式来选择任意一路的电压测量,并用单片机控制一位数码管显示路数;(3)通过编程实现直接在LED数码管上显示测量电压值,并精确到1mV;(4) 设计一个由LED灯和蜂鸣器组成的报警电路,当被测电压超过测量范围时,报警电路实现报警;四、硬件电路设计1、系统设计框图根据设计要求与思路,在Proteus软件上设计和仿真该系统的设计方案。
硬件电路由6个部分组成,即单片机电路、复位电路、4位LED显示电路、A/D转换电路和键盘及报警电路、放大电路。
系统设计框图如下:图1 系统框图2、单片机系统电路本次设计选择Atmel公司生产的AT89C52作为控制芯片。
AT89系列与MCS-51系列单片机相比有两大优势:第一,片内程序存储器采用闪速存储器,使程序的写入更加方便;第二,提供了更小尺寸的芯片,使整个电路体积更小。
51单片机驱动ADC0832模数转换程序-lcd1602显示/*这个芯应用不多*/#include ;#define uchar unsigned char#define uint unsigned intuchar Chan0Value,Chan1Value;sbit RS=P1^0; //1602各控制脚sbit RW=P1^1;sbit EN=P1^2;sbit Cs0832= P2^0;//0832各控制脚sbit Clk0832= P3^6;sbit Di0832= P3^7;sbit Do0832= P3^7;void delay1ms(unsigned int ms)//延时1毫秒(不够精确的){int i,j;for(i=0;i;>;i;}for(i=0;i<8;i++)//从低到高取一次数{if(Do0832) Dat2|=0x01<<i;Clk0832=1; //下降沿有效Clk0832=0;}Cs0832=1;Di0832=1;Clk0832=1; //数据读取完成,释放所有数据线if(Dat1==Dat2)return Dat1; //校验两次数相等,输出}/*本程序与其他一般程序最大的不同就是要读两次一次从最高位到最低位,一次从最低位到最高位,两次所读值相等即为正常,可以输出*//******************************LCD1602*********** ***************************//*************************lcd1602程序**************************/void wr_com(unsigned char com)//写指令// { delay1ms(1);RS=0;RW=0;EN=0;P0=com;delay1ms(1);EN=1;delay1ms(1);EN=0;}void wr_dat(unsigned char dat)//写数据// { delay1ms(1);RS=1;RW=0;EN=0;P0=dat;delay1ms(1);EN=1;delay1ms(1);EN=0;}void lcd_init()//初始化设置//{delay1ms(15);wr_com(0x38);delay1ms(5);wr_com(0x80);delay1ms(5);wr_com(0x01);delay1ms(5);wr_com(0x06);delay1ms(5);wr_com(0x0c);delay1ms(5);}void writevalue(uchar add,uchar dat) {wr_com(0x80+add);wr_dat(dat);}void zifuchuan(uchar *ch){while(*ch!=0)wr_dat(*ch++);delay1ms(20);}void main(void){lcd_init();while(1){Chan0Value=GetValue0832(0);delay1ms(100);Chan1Value=GetValue0832(1);wr_com(0x80);zifuchuan("Chanal 0:");writevalue(10,Chan0Value/100+0x30);writevalue(11,Chan0Value%100/10+0x30);writevalue(12,Chan0Value%100%10+0x30);wr_com(0x80+0x40);zifuchuan("Chanal 1:");writevalue(0x40+10,Chan1Value/100+0x30);writevalue(0x40+11,Chan1Value%100/10+0x30); writevalue(0x40+12,Chan1Value%100%10+0x30); delay1ms(1000);}}/*此程序只为调通ADC0832,没有对电压值进行转换要想得到准确电压值,请把Chan0Value和Chan1Value 的值乘以5再除以255即可。
2006 级课程设计自动化学院电子科学与技术专业课程设计题目基于单片机的8路模拟量输入数值显示控制器的设计学生姓名班级060832指导教师日期2009 年 6 月25 日基于单片机的8路模拟量输入数值显示控制器的设计摘要本设计是基于单片机的8路模拟量输入数值显示控制器,随着电子科学技术的发展,电子测量成为广大电子工作者必须掌握的手段,对测量的精度和功能的要求也越来越高,此设计为电子测量的基本数据采集模块,该电路设计简易、功能强大、可扩展性强。
以ADC0809和AT89C51为核心,该系统有三个部分:数据采集,数据处理和显示。
具体包括控制、显示、A/D转换器、电平转换接口、个人计算机等。
设计中用ADC0809进行8路数据的采样,利用AT89C51单片机的串行口发送和接收数据。
显示部分由数码显示器构成。
硬件设计应用电子设计自动化工具,软件设计采用模块化编程方法。
关键词:单片机 AT89C51 ADC0808 数据采集目录1.引言 (4)1.1 国内﹑外本课题发展概况与目前的水平 (4)1.2 研究背景 (4)1.3 目的 (5)1.4 意义 (5)2.总体设计方案 (5)2.1系统设计的结构原理 (5)2.2系统设计的基本原则 (5)2.2.1 硬件设计的基本原则 (6)2.2.2 软件设计的基本原则 (6)3.硬件电路设计 (7)3.1系统概述 (7)3.2 系统工作原理 (7)3.2.1 单片机处理核心模块 (7)3.2.2 ADC模数转换模块 (10)3.2.3 数码管显示 (14)4. 软件设计 (14)4.1 主程序的设计 (15)4.2 A/D转换程序的设计 (15)4.3 数据处理程序的设计 (16)4.4 显示子程序的设计 (16)5.检测与仿真 (16)5.1. 利用单片机选通8路模拟信号实现数值显示仿真 (16)5.2. 利用外接开关选通8路模拟信号实现数值显示仿真 (18)心得体会 (20)致谢 (20)参考文献 (21)附录一:8路模拟单片机控制程序清单 (22)附录二:8路模拟外接开关控制程序清单 (24)1.引言随着微电子技术与计算机技术的发展,人类社会已进入信息时代。
单片机C语言程序设计实训100例--基于8051+PROTEUS仿真《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;.\r\n");Puts_to_SerialPort("-------------------------------\r\n");DelayMS(50);while(1){Putc_to_SerialPort(c+'A');DelayMS(100);Putc_to_SerialPort(' ');DelayMS(100);if(c==25) With PCB layout now offering automation of both component ", "can often be the most time consuming element of the exercise.","And if you use circuit simulation to develop your ideas, ","you are going to spend even more time working on the schematic."};//显示缓冲(2行)uchar Disp_Buffer[32];//垂直滚动显示void V_Scroll_Display(){uchar i,j,k=0;uchar *p=Msg[0];uchar *q=Msg[Line_Count]+strlen(Msg[Line_Count]); //以下仅使用显示缓冲的前16字节空间while(p<q)< p="">{for(i=0;i<16&&p<q;i++)< p="">{ //消除显示缓冲中待显示行首尾可能出现的空格if((i==0||i==15)&&*p==' ') p++;if(*p!='\0'){}else{if(++k>Line_Count) break;p=Msg[k]; //p指向下一串的首地址Disp_Buffer[i]=*p++;}}//不足16个字符时空格补充for(j=i;j<16;j++) Disp_Buffer[j]=' ';//垂直滚动显示while(F0) DelayMS(5);ShowString(0,0," ");DelayMS(150);while(F0) DelayMS(5);ShowString(0,1,Disp_Buffer);DelayMS(150);while(F0) DelayMS(5);ShowString(0,0,Disp_Buffer);ShowString(0,1," ");DelayMS(150);}//最后清屏ShowString(0,0," ");ShowString(0,1," ");}//水平滚动显示void H_Scroll_Display(){uchar i,j,k=0,L=0;uchar *p=Msg[0];uchar *q=Msg[Line_Count]+strlen(Msg[Line_Count]); //将32个字符的显示缓冲前16个字符设为空格for(i=0;i<16;i++) Disp_Buffer[i]=' ';while(p<q)< p="">{//忽略缓冲中首尾可能出现的空格if((i==16||i==31)&&*p==' ') p++;for(i=16;i<32&&p<q;i++)< p="">{if(*p!='\0'){Disp_Buffer[i]=*p++;}elseif(++k>Line_Count) break;p=Msg[k]; //p指向下一串的首地址Disp_Buffer[i]=*p++;}}//不足32个字符时空格补充for(j=i;j<32;j++) Disp_Buffer[j]=' ';//水平滚动显示for(i=0;i<=16;i++){while(F0) DelayMS(5);ShowString(0,L,Disp_Buffer+i);while(F0) DelayMS(5);DelayMS(20);}L=(L==0)1:0; //行号在0,1间交替DelayMS(300);}//如果显示结束时停留在第0行,则清除第1行的内容if(L==1) ShowString(0,1," ");}//外部中断0,由K3控制暂停与继续显示void EX_INT0() interrupt 0{F0=!F0; //暂停与继续显示控制标志位}//主程序void main(){uint Count=0;IE=0x81; //允许外部中断0IT0=1; //下降沿触发F0=0; //暂停与继续显示控制标志位Initialize_LCD();ShowString(0,0,Prompt);ShowString(0,1,Prompt+16);while(1){if(K1==0){V_Scroll_Display();DelayMS(300);}elseif(K2==0)H_Scroll_Display();DelayMS(300);}}}///* 名称:液晶控制与显示程序说明:本程序是通用的1602液晶控制程序。
适用标准文案电子科技大学UNIVERSITY OF ELECTRONIC SCIENCE AND TECHNOLOGY OF CHINA 综合课程设计题目鉴于 51 单片机实现 ADC0808 数模变换与显示学生姓名学号专业学院行政班号2021年 6 月 15 日纲要经过上学期对数据收集的学习,让我对 A/D 转变器有了必定的认识 .A/D 变换器是把收集到的采样模拟信号量化和编码后,变换成数字信号并输出的一种器件 . 而此刻 A/D 变换电路已集成在一块芯片上.本课程设计采纳芯片是ADC0808.ADC0808 是带有 8 位 A/D 变换器、 8 路多路开关以及微办理机兼容的控制逻辑的 CMOS 组件。
它是逐次迫近式 A/D 变换器,能够和单片机直接接口。
本课程设计以 AT89C51 单片机为核心,实现 ADC0808 的数模变换与显示 , 而后把变换后的结果显示在数码管上。
重点字:数据收集, A/D 转变器, ADC0808,逐次迫近式,单片机目录一、设计目的 (1)二、设计要乞降设计指标 (1)三、设计内容 (1)3.1 芯片介⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ (1)3.1.1 A/D 变换模块 (1)3.1.2 AT89C51单片机的构造原理与引脚功能 (3)3.2 路⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯73.3 程序⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯8四、本设计改进建议 (10)五、总结 (11)六、主要参照文件 (12)附录 (12)一、设计目的本课程设计的目的就是要锻炼学生的实质着手能力。
在理论学习的根基上,经过达成一个拥有综合功能的小系统,使学生将讲堂上学到的理论知识与实质应用联合起来,对电子电路、电子元器件等方面的知识进一步加深认识,同时在软件编程、调试、有关仪器设施的使用技术等方面获得较全面的锻炼和提高,为今后能够独立设计单片机应用系统的开发设计工作打下必定的根基。
#include<reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char//#define LCD_DATA P0;sbit DI = P3^4;//定义ADC各口数据;sbit D0 =P3^4;sbit CLK = P3^5;sbit CS = P3^6;sbit LCD_RS= P2^0;//定义LCD引脚sbit LCD_RW= P2^1;sbit LCD_E= P2^2;uchar code DIS[]={"ADC0832-----TEST"};//ADC832 测试;uchar code dsptab[]={'0','1','2','3','4','5','6','7','8','9'};//字符代表码;/*----------------------------------------------------------------------------------延时子程序----------------------------------*/void delay(uint a){ uint b;for(b=0;b<a;b++);}void delay400ms(void)////400ms延时{ uchar a = 5;uint b;while(a--){ b=7269;while(b--);}}/*-----------------------------------------------------------------------------------读状态----------------------------------------*///读状态子程序;有返回值;返回值类型为CHAR型;//读回的状态通过RETURN返回;uchar read_estate(void) //定义有返回值的函数;{ P0=0Xff; //把LCD端口全置1方便读取信号; LCD_RS=0; //RS置0;LCD_RW=1; //RW置1;LCD_E=0; //E端置0;delay(10); //短延时;LCD_E=1; //E端置1;以锁存数据; while(P0&0x80); //检测忙,则一直循环;return(P0); //返回读取的信号;}/*------------------------------------------------------------------------------------ 写数据------------------------------------------*///写数据子程序;无返回值;输入变量I;//I为要写入LCD中的数据;//数据类型CHAR形;void write_data(uchar i) //定义输入变量值I;{read_estate(); //检测忙信号;P0=i; //把I中数据送到LCD数据端;LCD_RS=1; //RS置1;LCD_RW=0; //RW置0;LCD_E=0; //E置0;delay(10); //短延时;LCD_E=1; //E置1;以锁存数据;}/*--------------------------------------------------------------------------------------- 写指令--------------------------------------------*///写指令子程序;无返回值;输入二个变量I和J.//I为要写入LCD的指令;J为判断要不要检测忙.//如果J为0则不判断检测忙;//如果J为1则判断检测忙;void write_dictate(uchar i,j) //定义二个变量;{if(j)read_estate(); //根据需要检测忙;P0=i; //把要写入的数据送到LCD数据端; LCD_RS=0; //RS置0;LCD_RW=0; //RW置0;LCD_E =1; //E端置0;delay(10); //延时;LCD_E =0; //E端置1;以锁存数据;}/*----------------------------------------------------------------------------------读数据--------------------------------------*///读数据子程序;有返回值,返回值类型为CHAR型;/*uchar read_data(void) //定义有返回值的子函数;{LCD_DATA=0Xff; //LCD数据端口置1;LCD_RS=1; //RS置1;LCD_RW=1; //RW置1;LCD_E=0; //E置0;delay(10); //短延时;LCD_E=1; //E置1;以锁存数据;return(LCD_DATA); //返回读取的值;}/*--------------------------------------------------------------------------------------- LCD初始化-----------------------------------------*///LCD初始化程序;主要作用初始化LCD,对LCD进行复位以及设置;void initialization(void) //定义函数;{delay(50); //延时5MS;write_dictate(0x38,0); //写指令38H;不检测忙;delay(50); //延时5MS;write_dictate(0x38,0); //写指令38H;不检测忙;delay(50); //延时5MS;write_dictate(0x38,0); //写指令38H;不检测忙;delay(50);write_dictate(0x38,1); //显示模式设置;检测忙;write_dictate(0x08,1); //关闭显示;检测忙;write_dictate(0x01,1); //显示清屏;检测忙;write_dictate(0x06,1); //显示光标移动设置;检测忙;write_dictate(0x0C,1); //显示开及光标设置;检测忙;}/*----------------------------------------------------------------------------------在指定位置显示一个字符----------------------*/void displayonechar(uchar x, y,ddata){y &= 0x01;x &= 0x0f; //限制X不能大于15,Y不能大于1 if (y) x+= 0x40; //当要显示第二行时地址码+0x40;x+= 0x80; //算出指令码write_dictate(x,0); //这里不检测忙信号,发送地址码write_data(ddata);}/*----------------------------------------------------------------------------------在指定位置显示一串字符----------------------*/void displaylistchar(uchar x,y,uchar code *ddata){uchar a=0;y&=0x01;x&=0xf;while(ddata[a]>0x20){ if(x<=0xff){displayonechar(x, y,ddata[a]);a++;x++;}}}/*----------------------------------------------------------------------------------读ADC0832的数据----------------------------------*/ unsigned char readadc(void){ unsigned char dat,i;CLK=0; //芯片复位CS=1;_nop_();CS=0;_nop_();DI=1; //启动位CLK=1;_nop_();CLK=0;DI=1; //配置位1CLK=1;_nop_();CLK=0;DI=0; //配置位2CLK=1;_nop_();CLK=0; //空闲位_nop_();CLK=1;DI=1;for(i=0;i<=8;i++){ //读出8字节数据dat=dat<<1;_nop_();CLK=1;//这里要先1后0...如果是先0后1则输出结果错误...if(DI){dat|=0x01;}_nop_();CLK=0;}CS=1;//关闭芯片return(dat);//返回数据}void main(){ uint dat;delay400ms();//延时400MSinitialization();//LCD复位;displaylistchar(0,0,DIS);//显示ADC832 测试;displayonechar(0,1,'O'); //在LCD是显示OUT:_.___Vdisplayonechar(1,1,'U');displayonechar(2,1,'T');displayonechar(3,1,':');displayonechar(5,1,'.');displayonechar(8,1,'V');while(1)//无限循环...一直读出电压值显示在LCD上;{ displayonechar(13,1,dsptab[readadc()/100]);displayonechar(14,1,dsptab[(readadc()%100)/10]);displayonechar(15,1,dsptab[readadc()%10]);//在LCD最右边显示255中的某一个数据;dat=readadc()/0.542;//0.542是255除以基准电压也就是ADC0832的VCC...得出来了...这个值可能每个人不同.displayonechar(4,1,dsptab[dat/100]);//下面三行显示电压...displayonechar(6,1,dsptab[(dat%100)/10]);displayonechar(7,1,dsptab[dat%10]);delay400ms();//延时400MS}}。
实验六模数转换ADC0804的应用一、实验目的学习如果用单片机控制ADC0804芯片进行数模转换,掌握数码管动态扫描显示的原理二、实验内容从ADC0804 的模拟量通道输入0-5V 之间的模拟电压,通过ADC0804 转换成数字量送给单片机,经单片机处理后在数码管上以十进制形成显示出来。
动态扫描:就六位数码管显示123456举例说明如下:先让第一个数码管显示1,其余的全部不亮,1大约亮几毫秒,然后熄灭,紧接着立即让第二个数码管显示2,其余的全部不亮,2同样亮几毫秒,依次这样亮到第六个数码管,然后再回来显示1,如此这样以很快的速度不断循环下去,由于人眼的视觉暂留时间大约为20毫秒左右,所以是感觉不出有不亮的数码管存在的,看见的是六个数码管同时在显示,数值是123456,如果我们把这个过程一点点放慢,看见的是从第一个数码管显1,然后移到第二个再显2…也就是说在任一时刻只有一位数码管是亮的。
这就是数码管动态扫描显示的原理。
ADC0804: ADC0804是8位全MOS中速A/D 转换器、它是逐次逼近式A/D 转换器,片内有三态数据输出锁存器,可以和单片机直接接口。
单通道输入,转换时间大约为100us。
ADC0804 转换时序是:当CS=0 许可进行A/D 转换。
WR由低到高时,A/D开始转换。
CS 与WR同时有效时启动A/D转换,转换结束产生INTR 信号(低电平有效),可供查询或者中断信号。
在CS和RD 的控制下可以读取数据结果。
本实验没有使用INTR信号。
三、实验电路四、实验程序//拧动AD 旁边的电位器,会在数码管的前三位显示0-255 之间的数值。
这就是把模拟信号转换成数字信号,即模数转换。
说明:由于不同AD 的自身特性不同,所以时序如果掌握不好的话,很有可能在数码管上不会动态显示变化数值,但按下开发板上复位键后可更新内容。
#include<reg51.h>#include <intrins.h>#define uint unsigned int //宏定义,详情请看C语言书。
山西电子技术2011年第2期应用实践收稿日期:2011-01-10 修回日期:2011-03-08作者简介:刘敏娜(1986 ),女,山东菏泽人,硕士研究生,研究方向:DSP 、单片机、故障诊断与检测。
文章编号:1674 4578(2011)02 0046 02基于51单片机的数字电压表仿真设计刘敏娜,潘宏侠,王 乔(中北大学机械工程与自动化学院,山西太原030051)摘 要:设计采用AT 89C51单片机、A /D 转换器ADC0808和共阳极数码管为主要硬件,分析了数字电压表P ro teus 软件仿真电路设计及编程方法。
将单片机应用于测量技术中,采用ADC0808将模拟信号转化为数字信号,用AT 89C51实现数据的处理,通过数码管以扫描的方式完成显示。
设计的数字电压表可以测量0~5V 的电压值,AT 89C51为8位单片机,当ADC0808的输入电压为5V 时,输出数字量值为+4.99V 。
本设计电路简单、成本低、性能稳定。
关键词:数字电压表;51单片机;ADC0808;数码管LED中图分类号:TP368 文献标识码:A0 引言随着电子科学技术的发展,电子测量成为广大电子工作者必须掌握的手段,对测量的精度和功能的要求也越来越高,而电压的测量甚为突出,因为电压的测量最为普遍。
数字电压表是采用数字化测量技术设计的电压表。
数字电压表与模拟电压表相比,具有读数直观、准确、显示范围宽、分辨力高、输入阻抗大、集成度高、功耗小、抗干扰能力强,可扩展能力强等特点,因此在电压测量、电压校准中有着广泛的应用。
本文采用ADC0808对输入模拟信号进行转换,控制核心AT 89C51单片机对转换的结果进行运算和处理,最后驱动输出装置显示数字电压信号,通过P roteus 仿真软件实现接口电路设计,并进行实时仿真。
P ro teus 软件是一种电路分析和实物模拟仿真软件。
它运行于W indo w s 操作系统上,可以进行仿真、分析(SP ICE )各种模拟器件和集成电路,是集单片机和SP ICE 分析于一身的仿真软件,功能强大,具有系统资源丰富、硬件投入少、形象直观等优点,近年来受到广大用户的青睐。
基于51单片机实现ADC0808数模转换与显示LT摘要通过上学期对数据采集的学习,让我对A/D转化器有了一定的了解.A/D转换器是把采集到的采样模拟信号量化和编码后,转换成数字信号并输出的一种器件.而现在A/D转换电路已集成在一块芯片上.本课程设计采用芯片是ADC0808.ADC0808是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
本课程设计以AT89C51单片机为核心,实现ADC0808的数模转换与显示,然后把转换后的结果显示在数码管上。
关键字:数据采集,A/D转化器,ADC0808,逐次逼近式,单片机目录一、设计目的 (1)二、设计要求和设计指标 (1)三、设计内容 (1)3.1 芯片简介 (1)3.1.1 A/D转换模块 (1)3.1.2 AT89C51单片机的结构原理与引脚功能 (4)3.2电路设计 (7)3.3程序设计 (9)四、本设计改进建议 (11)五、总结 (12)六、主要参考文献 (12)附录 (12)一、设计目的本课程设计的目的就是要锻炼学生的实际动手能力。
在理论学习的基础上,通过完成一个具有综合功能的小系统,使学生将课堂上学到的理论知识与实际应用结合起来,对电子电路、电子元器件等方面的知识进一步加深认识,同时在软件编程、调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立设计单片机应用系统的开发设计工作打下一定的基础。
二、设计要求和设计指标以AT89C51单片机为核心,实现ADC0808的数模转换与显示。
转换后的结果显示在数码管上。
三、设计内容3.1 芯片简介3.1.1 A/D转换模块ADC0808是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制[1]逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
(1)ADC0808的内部逻辑结构由下图3-1-1可知,ADC0808由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端高电平时,才可从三态输出锁存器取走转换完的数据。
图3-1-1 ADC0808的内部逻辑结构(2). ADC0808引脚结构ADC0808各脚功能如下:D7-D0:8位数字量输出引脚。
IN0-IN7:8位模拟量输入引脚。
VCC:+5V工作电压。
GND:地。
REF(+):参考电压正端。
REF(-):参考电压负端。
START:A/D转换启动信号输入端。
ALE:地址锁存允许信号输入端。
(以上两种信号用于启动A/D转换).EOC:转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。
OE:输出允许控制端,用以打开三态数据输出锁存器。
CLK:时钟信号输入端(一般为500KHz)。
本设计采用DCLOCK激励源,频率为12MHz。
A、B、C:地址输入线。
图3-1-2 ADC0808引脚图ADC0808对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:4条ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。
D7-D0为数字量输出线。
CLK为时钟输入信号线。
因ADC0808的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,本设计采用DCLOCK激励源,频率为12MHz。
VREF(+),VREF(-)为参考电压输入。
图3-1-3 ADC0808的接线图图3-1-4 ADC0808的时钟电路设置3.1.2 AT89C51单片机的结构原理与引脚功能AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
AT89C单片机为很多嵌入式控制系统[1]提供了一种灵活性高且价廉的方案。
图3-1-5 AT89C51的引脚图主要特性:·与MCS-51 兼容·4K字节可编程闪烁存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24MHz·三级程序存储器锁定·128×8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路管脚说明:VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH 编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下列所示:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN 信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH 编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
图3-1-6 AT89C51的接线图振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM、定时器、计数器、串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能直到下一个硬件复位为止。
3.2电路设计设计原理图如图所示图3-2-1 设计原理电路图此电路的工作原理是:+5V模拟电压信号通过变阻器RV1分压后由ADC08008的IN0通道进入(由于使用的IN0通道,所以ADDA,ADDB,ADDC 均接低电平),经过模/数转换后,产生相应的数字量经过其输出通道传送给AT89C51芯片的P1口,AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码传送给六位LED,同时它还通过其六位I/O口P0.0、P0.1、P0.2、P0.3、P0.4、P0.5产生位选信号控制数码管的亮灭。
此外,ADC0808的CLOCK用DCLOCK激励源,当激励源发出正脉冲时启动A/D转换,P3.5检测A/D转换是否完成,无论转换成功,均从P1口读取结果送给LED[2]显示出来。
硬件电路已经设计完成,就可以选取相应的芯片和元器件,利用Proteus软件绘制出硬件的原理,并仔细地检查修改,直至形成完善的硬件原理图。