




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于51单片机数字电压表的设计目录TOC\o"1-3"\h\u1648一、系统总体方案选择与说明 12241.1设计要求 1274741.2设计思路 1232741.3设计方案 12764二、硬件电路设计 273792.1AT89C51的功能介绍 2267922.1.1简单概述 227162.1.2主要功能特性 3130112.1.3AT89C51的引脚介绍 345112.2ADC0808的引脚及功能介绍 575472.2.1芯片概述 525086ADC0808芯片模型 5293802.2.2引脚简介 5250692.2.3ADC0808的转换原理 6175252.2.4ADC0808的内部结构 639782.2.5ADC0808电路接线图 636342.3显示电路 727372.3.1LM016L的结构及功能 790232.3.2LM016L的引脚功能介绍 723402.3.3LM016L的电路接线图 13241792.4复位电路设计 13208262.5振荡电路设计 142034三、软件设计与说明 1021551四、系统仿真与调试 121437五、总结 1315444参考文献 1420186附录 1527706附录A系统原理图 1527249附录B程序清单 16一、系统总体方案选择与说明1.1设计要求(1)使用51单片机,AD0809,数码管等元件组成(2)能测量0-5V的直流电压(3)能连续、稳定显示所测电压(4)测量误差<0.02V)1.2设计思路⑴根据设计要求,选择AT89C51单片机为核心控制器件。⑵A/D转换采用ADC0808实现。=3\*GB2⑶电压显示采用LCD显示。1.3设计方案数字电压表的设计即将连续的模拟电压信号经过A/D转换器转换成二进制数值,再经由单片机软件编程转换成十进制数值并通过显示屏显示。该设计主要由三个模块组成:A/D转换模块,数据处理模块及显示模块。A/D转换主要由芯片ADC0808来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。数据处理则由芯片AT89C51来完成,其负责把ADC0808传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着ADC0808芯片工作。时钟电路时钟电路复位电路A/D转换电路测量电压输入显示系统AT89C51P2P0P3数字电压表系统硬件设计框图二、硬件电路设计2.1AT89C51的功能介绍2.1.1简单概述AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。AT89C51是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图3-2所示。图3-2AT89C51芯片模型2.1.2主要功能特性(1)4K字节可编程闪烁存储器。(2)32个双向I/O口;128×8位内部RAM。(3)2个16位可编程定时/计数器中断,时钟频率0-24MHz。(4)可编程串行通道。(5)5个中断源。(6)2个读写中断口线。(7)低功耗的闲置和掉电模式。(8)片内振荡器和时钟电路。2.1.3AT89C51的引脚介绍89C51单片机多采用40只引脚的双列直插封装(DIP)方式,下面分别简单介绍。(1)电源引脚电源引脚接入单片机的工作电源。Vcc(40引脚):+5V电源。GND(20引脚):接地。(2)时钟引脚XTAL1(19引脚):片内振荡器反相放大器和时钟发生器电路的输入端。XTAL2(20引脚):片内振荡器反相放大器的输出端。图3-3电源接入方式(3)复位RST(9引脚)在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。(4)/Vpp(31引脚)为外部程序存储器访问允许控制端。当它为高电平时,单片机读片内程序存储器,在PC值超过0FFFH后将自动转向外部程序存储器。当它为低电平时,只限定在外部程序存储器,地址为0000H~FFFFH。Vpp为该引脚的第二功能,为编程电压输入端。(5)ALE/(30引脚)ALE为低八位地址锁存允许信号。在系统扩展时,ALE的负跳沿江P0口发出的第八位地址锁存在外接的地址锁存器,然后再作为数据端口。为该引脚的第二功能,在对片外存储器编程时,此引脚为编程脉冲输入端。(6)(29引脚)片外程序存储器的读选通信号。在单片机读片外程序存储器时,此引脚输出脉冲的负跳沿作为读片外程序存储器的选通信号。(7)pin39-pin32为P0.0-P0.7输入输出脚,称为P0口。P0是一个8位漏极开路型双向I/O口。内部不带上拉电阻,当外接上拉电阻时,P0口能以吸收电流的方式驱动八个LSTTL负载电路。通常在使用时外接上拉电阻,用来驱动多个数码管。在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,不需要外接上拉电阻。(8)Pin1-Pin8为P1.0-P1.7输入输出脚,称为P1口,是一个带内部上拉电阻的8位双向I/0口。P1口能驱动4个LSTTL负载。(9)Pin21-Pin28为P2.0-P2.7输入输出脚,称为P2口。P2口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
(10)Pin10-Pin17为P3.0-P3.7输入输出脚,称为P3口。P3口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载,这8个引脚还用于专门的第二功能。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接控制信息。2.2ADC0808的引脚及功能介绍2.2.1芯片概述ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。ADC0808是ADC0809的简化版本,功能基本相同。一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。ADC0808是一种典型的A/D转换器。它是由8位A/D转换器,一个8路模拟量开关,8位模拟量地址锁存译码器和一个三态数据输出锁存器组成;+5V单电源供电,转化时间在100us左右;内部没有时钟电路,故需外部提供时钟信号。芯片模型如图所示。ADC0808芯片模型2.2.2引脚简介ADC0808芯片有28条引脚,采用双列直插式封装,各引脚功能如下:(1)IN0~IN7:8路模拟量输入端。这里只接一路电压信号,其输入信号是由直流电源及可调电阻提供。(2)D0~D7:8位数字量输出端口,其另一端连接到AT89C51单片机进行数值转换(3)START:A/D转换启动信号输入端。由单片机P3.6口写信号与P2.0口相或取反输入一个正脉冲使其启动(脉冲上升沿使0808复位,下降沿启动A/D转换)。(4)ALE:地址锁存允许信号,高电平有效。(5)EOC:输出允许控制信号,高电平有效。EOC为A/D转换结束信号,当A/D转换结束时,此端输出一个高电平取反给P3.3口(转换期间一直为低电平)。(6)OE:输出允许控制信号,高电平有效。当A/D转换结束时,此端由单片机P3.7读信号与P2.0口相或后取反输入一个高电平,才能打开输出三态门,输出数字量。(7)CLK:时钟信号输入端。(8)A、B、C:转换通道地址,控制8路模拟通道的切换。A、B、C分别与地址线或数据线相连,三位编码对应8个通道地址端口,A、B、C=000~111分别对应IN0~IN7通道的地址端口。2.2.3ADC0808的转换原理ADC0808采用逐次比较的方法完成A/D转换,由单一的+5V电源供电。片内带有锁存功能的8路选1的模拟开关,由A、B、C的编码来决定所选的通道。ADC0809完成一次转换需100μs左右,它具有输出TTL三态锁存缓冲器,可直接连接到AT89C51的数据总线上。通过适当的外接电路,ADC0808可对0~5V的模拟信号进行转换。2.2.4ADC0808的内部结构ADC0808是CMOS单片型逐次逼近式A/D转换器,它有8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器。2.2.5ADC0808电路接线图2.3显示电路2.3.1LM016L的结构及功能LM016L液晶模块采用HD44780控制器,HD44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,HD44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。IR用于寄存指令码,只能写入不能读出,DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据,BF为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,DDTAM用来存储显示的字符,能存储80个字符码,CGROM由8位字符码生成5*7点阵字符160中和5*10点阵字符32种.CGRAM是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或CGRAM单元。2.3.2LM016L的引脚功能介绍1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:VSS:一般接地VDD:接电源(+5V)V0:液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。RS:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。R/W:R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。E:E(或EN)端为使能(enable)端,下降沿使能DB0:底4位三态、双向数据总线0位(最低位)DB1:底4位三态、双向数据总线1位DB2:底4位三态、双向数据总线2位DB3:底4位三态、双向数据总线3位DB4:高4位三态、双向数据总线4位DB5:高4位三态、双向数据总线5位DB6:高4位三态、双向数据总线6位DB7:高4位三态、双向数据总线7位(最高位)2.3.3LM016L的电路接线图LCD显示电路电路图2.4复位电路设计复位操作有两种基本形式:一种是上电复位,另一种是按键复位。按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按键复位的电路如下图所示。按键复位电路电路图2.5振荡电路设计单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器(大小为1MHZ)和两只电容(电容和一般取30pF)。这样就构成一个稳定的自激振荡器。振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产生ALE信号,此时得到的信号时机器周期信号。振荡电路如图所示振荡电路电路图三、软件设计与说明主程序的内容包括:起始地址、中断服务程序的起始地址、有关内存单元及相关部件的初始化和一些子程序的调用等。根据设计要求,设计出如图所示的主程序流程图。结束调用显示子程序调用A/D转换子程序初始化开始结束调用显示子程序调用A/D转换子程序初始化开始A/D转换子程序设计:A/D转换程序的功能是采集数据,在整个系统设计中占有很高的地位。当系统置好后,单片机扫描转换结束管脚P3.3的输入电平状态,当输入为高电平则转换完成,将转换的数值显示输出。若输入为低电平,则继续扫描。程序流程图如图所示。开始开始显示转换结果处理转换结果显示转换结果处理转换结果调用A/D转换程序,开始A/D转换转换是否完成?转换是否完成?NNN结束四、系统仿真与调试本设计应用Proteus7.8及KEIL51软件进行仿真,首先根据自己设计的电路图用Proteus7.8软件画出电路模型,然后我们用KEIL51软件对自己所编写的程序进行编译、链接,若程序没有错误和警告便可生成一个***.hex文件,然后再将此文件加到Proteus7.8电路图上使软硬件结合仿真。仿真结果如下图所示。五、总结在这次单片机课程设计之初,我了无头绪,但在不断查阅资料,和同学的相互讨论之后对本次课程设计有了基本的认识。经过近两周的努力,虽然基于单片机的简易数字电压表基本完成,但设计中的不足之处仍然存在。这次设计是我第一次设计电路,并用Proteus实现了仿真。在这过程中,我对电路设计,单片机的使用等都有了新的认识。通过这次设计学会了Proteus和Keil软件的使用方法,掌握了从系统的需要、方案的设计、功能模块的划分、原理图的设计和电路图的仿真的设计流程,积累了不少经验。经过这两个星期的学习,我觉得自己不论是在理论知识方面还是在动手能力方面都有了不小的进步,自己从中受益匪浅。这次设计很好的把以前学到的理论知识应用于实践中去,使我认识到理论知识与实践之间有一定的差距,只有通过不断的努力学习和实践相结合才能更好地掌握这门学科。通过这次设计不仅学会了如何去查找相关资料,更重要的是通过查找资料和翻阅书籍学到了不少知识,扩大了知识面,提高了知识水平。经过单元设计和系统设计巩固了以前所学的专业知识,自己真正认识到理论联系实际的重要性,为以后的学习和工作提供了很多有价值的经验。通过这次设计不仅增强了自己的动脑能力和动手能力,也提高了我思考问题、分析问题、解决问题的能力,更重要的是学会用工程化的思想来解决问题。这在以前的学习过程中是不曾学到的。这次设计使我认识到完整、严谨、科学分析问题、解决问题的思想是多么的重要,只有拥有了科学的态度才能设计出有用的产品。另外通过本次设计,使我认识到自己所学到的理论知识在应用到实际中去的能力有很大的欠缺,需要在以后的学习中进一步提高。通过这次课程设计,使我对单片机的认识了解有了更加深刻的认识。参考文献1、《单片机原理及应用》李建忠编西安电子科技大学出版社2、《单片微型计算机原理与接口技术》高峰编电子工业出版社3、《单片机应用新技术教程》邹逢兴编高等教育出版社4、《16位微型计算机原理接口及其应用》朱宇光编电子工业出版社5、《微型计算机原理与接口技术》吴秀清编中国科学技术出版社6、《微型计算机接口技术》邓亚平编清华大学出版社7、《单片机原理及及应用》王迎旭编机械工业出版社附录附录A系统原理图附录B程序清单#include"includes.h" #defineTIME0H0x3C#defineTIME0L0xB0//全局变量unsignedcharuc_Clock=0; //定时器0中断计数bitb_DATransform=0;voidvShowVoltage(unsignedintuiNumber)//把电压显示在LCD上{ unsignedcharucaNumber[3],ucCount; if(uiNumber>999) uiNumber=999; ucaNumber[0]=uiNumber/100; //把计算数字的每个位存入数组。 ucaNumber[1]=(uiNumber-100*(int)ucaNumber[0])/10 ucaNumber[2]=uiNumber-100*(int)ucaNumber[0]-10*ucaNumber[1]; for(ucCount=0;ucCount<3;ucCount++) { vShowOneChar(ucaNumber[ucCount]+48); //从首位到末位逐一输出。 if(ucCount==0) vShowOneChar('.'); }}//主函数*voidmain(){设置定时器0 TMOD=0x01; //定时器0,模式1。 TH0=TIME0H; TL0=TIME0L; TR0=1; //启动定时器。 ET0=1; //开定时器中断。 EA=1; //开总中断 vdInitialize(); vWriteCMD(0x84); //写入显示起始地址(第二行第一个位置) vShowChar("Voltage:"); vWriteCMD(0xC9); vShowChar("(V)"); while(1) { if(b_DATransform==1) { b_DATransform=0; vWriteCMD(0xC4); vShowVoltage(uiADTransform()); } }}voidTime0()interrupt1//定时器0中断函数//{ if(uc_Clock==0) { uc_Clock=5; b_DATransform=1; } else uc_Clock--; TH0=TIME0H; //恢复定时器0。 TL0=TIME0L;}#include"SMC1602.h"//SMC1602驱动程序voidvWriteCMD(unsignedcharucCommand)//把1个命令写入LCD{ vDelay(); //先延时。 LCDE=1; //然后把LCD改为写入命令状态。 LCDRS=0; LCDRW=0; LCDPORT=ucCommand; //再输出命令。 LCDE=0; //最后执行命令。}voidvWriteData(unsignedcharucData) //把1个数据写入LCD { vDelay(); //先延时。 LCDE=1; //然后把LCD改为写入数据状态。 LCDRS=1; LCDRW=0; LCDPORT=ucData; //再输出数据。 LCDE=0; //最后显示数据。}voidvShowOneChar(unsignedcharucChar){ switch(ucChar) { case'':vWriteData(0x20);break; case'!':vWriteData(0x21);break; case'"':vWriteData(0x22);break; case'#':vWriteData(0x23);break; case'$':vWriteData(0x24);break; case'%':vWriteData(0x25);break; case'&':vWriteData(0x26);break; case'>':vWriteData(0x27);break; case'(':vWriteData(0x28);break; case')':vWriteData(0x29);break; case'*':vWriteData(0x20);break; case'+':vWriteData(0x2A);break; case'-':vWriteData(0x2D);break; case'/':vWriteData(0x2F);break; case'=':vWriteData(0x3D);break; case'<':vWriteData(0x3E);break; case'?':vWriteData(0x3F);break; case'.':vWriteData(0x2E);break; case':':vWriteData(0x3A);break; case'0':vWriteData(0x30);break; case'1':vWriteData(0x31);break; case'2':vWriteData(0x32);break; case'3':vWriteData(0x33);break; case'4':vWriteData(0x34);break; case'5':vWriteData(0x35);break; case'6':vWriteData(0x36);break; case'7':vWriteData(0x37);break; case'8':vWriteData(0x38);break; case'9':vWriteData(0x39);break; case'A':vWriteData(0x41);break; case'B':vWriteData(0x42);break; case'C':vWriteData(0x43);break; case'D':vWriteData(0x44);break; case'E':vWriteData(0x45);break; case'F':vWriteData(0x46);break; case'G':vWriteData(0x47);break; case'H':vWriteData(0x48);break; case'I':vWriteData(0x49);break; case'J':vWriteData(0x4A);break; case'K':vWriteData(0x4B);break; case'L':vWriteData(0x4C);break; case'M':vWriteData(0x4D);break; case'N':vWriteData(0x4E);break; case'O':vWriteData(0x4F);break; case'P':vWriteData(0x50);break; case'Q':vWriteData(0x51);break; case'R':vWriteData(0x52);break; case'S':vWriteData(0x53);break; case'T':vWriteData(0x54);break; case'U':vWriteData(0x55);break; case'V':vWriteData(0x56);break; case'W':vWriteData(0x57);break; case'X':vWriteData(0x58);break; case'Y':vWriteData(0x59);break; case'Z':vWriteData(0x5A);break; case'a':vWriteData(0x61);break; case'b':vWriteData(0x62);break; case'c':vWriteData(0x63);break; case'd':vWriteData(0x64);break; case'e':vWriteData(0x65);break; case'f':vWriteData(0x66);break; case'g':vWriteData(0x67);break; case'h':vWriteData(0x68);break; case'i':vWriteData(0x69);break; case'j':vWriteData(0x6A);break; case'k':vWriteData(0x6B);break; case'l':vWriteData(0x6C);break; case'm':vWriteData(0x6D);break; case'n':vWriteData(0x6E);break; case'o':vWriteData(0x6F);break; case'p':vWriteData(0x70);break; case'q':vWriteData(0x71);break; case'r':vWriteData(0x72);break; case's':vWriteData(0x73);break; case't':vWriteData(0x74);break; case'u':vWriteData(0x75);break; case'v':vWriteData(0x76);break; case'w':vWriteData(0x77);break; case'x':vWriteData(0x78);break; case'y':vWriteData(0x79);br
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手绘金鱼国画与西瓜主题艺术课件
- 数学高段课标及教学培训
- 地震逃生和基本救护知识
- 护理查房病历汇报
- 电工电子技术 课件 7. 三相交流异步电动机电路的连接与测试
- 办公室智慧管理方案
- 统编版2024~2025学年度六年级语文第二学期期中模拟卷(有答案)
- 教育功能唐智松
- 第一单元评估检测题( A 卷)单元测试(无答案)三年级下册数学西师大版
- 建筑工程风险管理案例分析
- 中医五脏心完整版本
- 邮政集团社招柜员笔试题
- 第9课 古代的商路、贸易与文化交流 -2023-2024学年高二历史同步教学课件(选必3文化交流与传播)
- 船舶机舱自动化4.4 主机遥控系统的转速与负荷控制
- Mini-CEX的测评内容人文关怀
- 家政保洁培训课件教学
- 医学生创新创业课件概述
- 《秤的发展史》课件
- 医院感染科护士对防控感染的终末消毒与彻底清洁
- 酒店饭店服务流程
- 英语八年级英语上册阅读理解100及答案经典
评论
0/150
提交评论