资源描述
单片机技术课程设计说明书 数字电压表 院、 部: 电子与信息工程学院 学生姓名: xxxxx 指导教师: xx 职称: 讲师 专 业: 自动化 班 级: 自本1001班 完成时间: 2012年12月25日 摘 要本文介绍了一种基于单片机的简易数字电压表的设计,该电路采用ADC0809 A/D转换元件,实现数字电压表的硬件电路与软件设计。该系统的数字电压表电路简单, 可以测量05V的电压值,并在lED数码管上显示该设计主要由三个模块组成:A/D转换模块,数据处理模块及显示模块。A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。数据处理则由单片机AT89C51来完成,其负责把ADC0809传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着ADC0809芯片工作。该系统的数字电压表电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。此数字电压表可以测量0-5V的1路模拟直流输入电压值,并通过一个四位一体的7段数码管显示出来。关键字:单片机;数字电压表;A/D转换;AT89C51;ADC0809ABSTRACTThis paper introduces a kind of chip based on a digital voltage meter design, the circuit uses ADC0809 A/D converter, digital voltage meter to achieve hardware circuit and software design. The system of the digital voltage meter circuit is simple, can be measured by 0 5V voltage value, and in the LED digital tube displayThis design mainly consists of three modules: A/D module, data processing module and display module. Conversion of A/D mainly by the chip ADC0809 to complete, it is responsible for the acquisition of analog quantity is converted into corresponding digital quantity in transmitted to a data processing module. Data processing by the MCU to complete the AT89C51, its responsible for the ADC0809 transmission to a digital quantity after a certain amount of data processing, to produce a corresponding display code to the display module for display; in addition, it also controls the operation of the ADC0809 chip.The system of the digital voltage meter circuit is simple, with less elements, low cost, and high measuring precision and reliability. The digital voltage meter can measure 0-5V 1 analog input DC voltage value, and through a four one of the 7 digital tube display. Key words: single-chip microcontroller; digital voltmeter; A/D converter; AT89C51; ADC0808I目 录1 设计总体方案1 1.1 设计要求1 1.2 设计思路1 1.3 设计方案12 设计课题硬件系统的设计2 2.1 AT89C51单片机2 2.2 ADC0809引脚功能4 2.3 复位电路设计5 2.4 时钟电路设计5 2.5 LED显示系统设计6 2.5.1 LED的基本结构6 2.5.2 LED显示器的选择7 2.5.3 LED译码方式7 2.5.4 LED显示器与单片机接口设计8 2.6 总体电路设计93 程序设计10 3.1 程序设计总方案10 3.2 系统子程序设计10 3.2.1 初始化程序10 3.2.2 A/D转换子程序10 3.2.3 显示子程序11 3.3 软件程序清单114 仿真12 4.1 软件调试12 4.2 显示结果及误差分析12 4.2.1 显示结果12 4.2.2 误差分析14结束语15致谢16参考文献17附录A 程序清单18附录B 实物图22附录C PCB图23附录D 电路原理图25附录E 原器件清单26I1 设计总体方案1.1 设计要求 设计一个能够测量直流电压的数字电压表。测量电压范围05V,测量精度小数点后两位。该电压表上电或按键复位后能自动显示系统提示符“P.”, 进入测量准备状态,按测量开始键则开始测量,并将测量值显示在显示器上,按测量结束键则自动返回“P.”状态。 1.2 设计思路(一)根据设计要求,选择AT89C51单片机为核心控制器件。(二)A/D转换采用ADC0809实现,与单片机的接口为P0口和P2口中的高位引脚。(三)电压显示采用4位一体的LED数码管。(四)LED数码的段码输入,由并行端口P1产生:位码输入,用并行端口P3低四位产生。1.3 设计方案 硬件电路设计由6个部分组成,A/D转换电路、AT89C51单片机系统LED显示系统、时钟电路、复位电路以及测量电压输入电路。硬件电路设计框图如图1所示:图1 数字电压表系统硬件设计框图 2 设计课题硬件系统的设计2.1 AT89C51单片机本设计的核心就是运用了单片机去实现软件控制信号,达到了软件和硬件的结合,下面就是介绍89C51单片机,单片机的引脚图如图2所示: 图2 AT89C51的引脚图AT89C51芯片的各引脚功能为:P0口:这组引脚共有8条,P0.0为最低位。这8个引脚有两种不同的功能,分别适用于不同的情况,第一种情况是89C51不带外存储器,P0口可以为通用I/O口使用,P0.0-P0.7用于传送CPU的输入/输出数据,这时输出数据可以得到锁存,不需要外接专用锁存器,输入数据可以得到缓冲,增加了数据输入的可靠性;第二种情况是89C51带片外存储器,P0.0-P0.7在CPU访问片外存储器时先传送片外存储器的低8位地址,然后传送CPU对片外存储器的读/写数据。P0口为开漏输出,在作为通用I/O使用时,需要在外部用电阻上拉。P1口:这8个引脚和P0口的8个引脚类似,P1.7为最高位,P1.0为最低位,当P1口作为通用I/O口使用时,P1.0-P1.7的功能和P0口的第一功能相同,也用于传送用户的输入和输出数据。P2口:这组引脚的第一功能与上述两组引脚的第一功能相同即它可以作为通用I/O口使用,它的第一功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但并不是像P0口那样传送存储器的读/写数据。P3口:这组引脚的第一功能和其余三个端口的第一功能相同,第二功能为控制功能,每个引脚并不完全相同,如下表1所示:表1 P3口各位的第二功能 P3口各位 第二功能 P3.0 RXT(串行口输入) P3.1 TXD(串行口输出) P3.2 /INT0(外部中断0输入) P3.3 /INT1(外部中断1输入) P3.4T0(定时器/计数器0的外部输入) P3.5T1(定时器/计数器1的外部输入) P3.6/WR(片外数据存储器写允许) P3.7/RD(片外数据存储器读允许)Vcc为+5V电源线,Vss接地。ALE:地址锁存允许线,配合P0口的第二功能使用,在访问外部存储器时,89C51的CPU在P0.0-P0.7引脚线去传送随后而来的片外存储器读/写数据。在不访问片外存储器时,89C51自动在ALE线上输出频率为1/6震荡器频率的脉冲序列。该脉冲序列可以作为外部时钟源或定时脉冲使用。/EA:片外存储器访问选择线,可以控制89C51使用片内ROM或使用片外ROM,若/EA=1,则允许使用片内ROM, 若/EA=0,则只使用片外ROM。/PSEN:片外ROM的选通线,在访问片外ROM时,89C51自动在/PSEN线上产生一个负脉冲,作为片外ROM芯片的读选通信号。RST:复位线,可以使89C51处于复位(即初始化)工作状态。通常89C51复位有自动上电复位和人工按键复位两种。XTAL1和XTAL2:片内震荡电路输入线,这两个端子用来外接石英晶体和微调电容,即用来连接89C51片内OSC(震荡器)的定时反馈回路。2.2 ADC0809引脚功能ADC0809的引脚如图3所示,下面对引脚功能做简要说明: 图3 ADC0809引脚IN0IN7:8个模拟量的输入端。D0D7:8位数字量输出端。START:启动A/D转换,加正脉冲后A/D转换开始。EOC:转换结束信号。转换开始时,EOC信号变低电平;转换结束时,EOC信号返回高电平。该信号可以作为CPU查询A/D转换是否完成的信号,也可以作为向CPU发出中断申请的信号。OE:输出允许信号,输入高电平有效。OE端的电平由低变高时,转换结果被送到数据线上。此信号有效时,CPU可以从ADC0809中读取数据,同时也可以作为ADC0809的片选信号。CLK:实时时钟,频率范围为10KHZ1280KHZ,典型值为640KHZ。ALE:通道地址锁存允许信号,输入高电平有效。在ALE=1时,锁存ADDAADDC,选中模拟量输入。ADDCADDC:通道地址选择输入,其排列顺序从低到高依次为ADDA 、ADDB、 ADDC。该地址与8个模拟量输入,通道的对应关系如表1所示:VREF+、VREF-正负参考电压。一般情况下,VREF+接+5V,VREF-接地。此时的转换关系如表2所示:VCCGND:工作电源和接地ADC0809的模拟通道选择表2所示:表2 地址与模拟量通道之间的对应关系ADDCADDBADDA选中通道000IN0001IN1010IN2011IN3100IN4101IN5110IN6111IN72.3 复位电路设计单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST,采用施密特触发输入。当震荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保时器件复位。复位完成后,如果RST端继续保持高电平,MCS-51就一直处于复位状态,只要RST恢复低电平后,单片机才能进入其他工作状态。单片机的复位方式有上电自动复位和手动复位两种,图4是51系列单片机统常用的上电复位和手动复位组合电路,只要VCC上升时间不超过1ms,它们都能很好的工作。 图4 复位电路2.4 时钟电路设计单片机中CPU每执行一条指令,都必须在统一的时钟脉冲的控制下严格按时间节拍进行,而这个时钟脉冲是单片机控制中的时序电路发出的。CPU执行一条指令的各个微操作所对应时间顺序称为单片机的时序。MCS-51单片机芯片内部有一个高增益反相放大器,用于构成震荡器,XTAL1为该放大器的输入端,XTAL2为该放大器输出端,但形成时钟电路还需附加其他电路。本设计系统采用内部时钟方式,利用单片机内部的高增益反相放大器,外部电路简,只需要一个晶振和 2个电容即可,如图5所示: 图5 时钟电路电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数,电路中,电容器C1和C2对震荡频率有微调作用,通常的取值范围是3010pF,在这个系统中选择了33pF;石英晶振选择范围最高可选24MHz,它决定了单片机电路产生的时钟信号震荡频率,在本系统中选择的是12MHz,因而时钟信号的震荡频率为12MHz。2.5 LED显示系统设计2.5.1 LED的基本结构LED是发光二极管显示器的缩写。LED由于结构简单、价格便宜、与单片机接口方便等优点而得到广泛应用。LED显示器是由若干个发光二极管组成显示字段的显示器件。在单片机中使用最多的是七段数码显示器。LED七段数码显示器由8个发光二极管组成显示字段,其中7个长条形的发光二极管排列成“日”字形,另一个圆点形的发光二极管在显示器的右下角作为显示小数点用,其通过不同的组合可用来显示各种数字。LED引脚排列如下图6所示: 图6 LED引脚排列2.5.2 LED显示器的选择在应用系统中,设计要求不同,使用的LED显示器的位数也不同,因此就生产了位数,尺寸,型号不同的LED显示器供选择,在本设计中,选择4位一体的数码型LED显示器,简称“4-LED”。本系统中前一位显示电压的整数位,即个位,后两位显示电压的小数位。4-LED显示器引脚如图7所示,是一个共阴极接法的4位LED数码显示管,其中a,b,c,e,f,g为4位LED各段的公共输出端,1、2、3、4分别是每一位的位数选端,dp是小数点引出端,4位一体LED数码显示管的内部结构是由4个单独的LED组成,每个LED的段输出引脚在内部都并联后,引出到器件的外部。 图7 4位LED引脚对于这种结构的LED显示器,它的体积和结构都符合设计要求,由于4位LED阴极的各段已经在内部连接在一起,所以必须使用动态扫描方式(将所有数码管的段选线并联在一起,用一个I/O接口控制)显示。2.5.3 LED译码方式译码方式是指由显示字符转换得到对应的字段码的方式,对于LED数码管显示器,通常的译码方式有硬件译码和软件译码方式两种。硬件译码是指利用专门的硬件电路来实现显示字符码的转换。软件译码就是编写软件译码程序,通过译码程序来得到要显示的字符的字段码,译码程序通常为查表程序。本设计系统中为了简化硬件线路设计,LED译码采用软件编程来实现。由于本设计采用的是共阴极LED,其对应的字符和字段码如下表3所示:表3 共阴极字段码表 显示字符 共阴极字段码 0 3FH 1 06H 2 5BH 3 4FH 4 66H 5 6DH 6 7DH 7 07H 8 7FH 9 6FH2.5.4 LED显示器与单片机接口设计由于单片机的并行口不能直接驱动LED显示器,在一般情况下,必须采用专用的驱动电路芯片,使之产生足够大的电流,显示器才能正常工作。如果驱动电路能力差,即负载能力不够时,显示器亮度就低,而且驱动电路长期在超负荷下运行容易损坏,LED显示器的驱动电路设计是一个非常重要的问题。为了简化数字式直流电压表的电路设计,在LED驱动电路的设计上,可以利用单片机P0口上外接的上拉电阻来实现,即将LED的A-G段显示引脚和DP小数点显示引脚并联到P1口与上拉电阻之间,这样,就可以加大P1口作为输出口德驱动能力,使得LED能按照正常的亮度显示出数字,如图8所示: 图8 LED与单片机接口间的设计2.6 总体电路设计经过以上的设计过程,可设计出基于单片机的简易数字直流电压表硬件电路原理图如图9所示:图9 简易数字电压表电路图此电路的工作原理是:+5V模拟电压信号通过变阻器VR1分压后ADC0809的IN0通道进入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低电平),经过模/数转换后,产生相应的数字量经过其输出通道D0-D7传送给AT89C51芯片的P0口,AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码传送给四位LED,同时它还通过其四位I/O口P3.0、P3.1、P3.2产生位选信号控制数码管的亮灭。此外,AT89C51还控制ADC0809的工作。其中,单片机AT89C51通过定时器的中断从P2.4口输出方波,接到ADC0809的CLOCK,P2.6发正脉冲启动A/D转换,P2.5检测A/D转换是否完成,转换完成后,P2.7置高从P0口读取转换结果送给LED显示出来。3 程序设计3.1 程序设计总方案根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图10所示: 图10 数字式直流电压表主程序框图3.2 系统子程序设计3.2.1 初始化程序所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等。3.2.2 A/D转换子程序A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图11所示:图11 A/D转换流程图3.2.3 显示子程序显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11s定时,通过软件延时程序来实现5ms的延时。3.3 软件程序清单程序清单见附录A4 仿真4.1 软件调试软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与u Visions3 IDE工具软件结合进行编程仿真调试。本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真我采用的是Proteus软件,而程序方面,采用的是汇编语言,用Keil软件将程序写入单片机。4.2 显示结果及误差分析4.2.1 显示结果(1)当IN0口输入电压值为0V时,显示结果如图12所示,测量误差为0V。 图12 输入电压为0V时,LED的显示结果(2)当IN0输入电压值为1.64V时,显示结果如图13所示。测量误差为0.0V。图13 输入电压为1.64 V的显示结果(3) 当IN0口输入电压值为3.74时,显示结果如图14所示。测量误差为0.0V。图14 输入电压为3.74时,LED的显示结果4.2.2 误差分析 通过以上仿真测量结果可得到简易数字电压表与“标准”数字电压表对比测试表,如下表3所示:表3 简易数字电压表与“标准”数字电压表对比测试表标准电压值/V简易电压表测量值/V绝对误差/V0.000.000.000.500.510.011.001.000.001.641.640.002.002.000.002.502.500.003.003.000.003.743.740.004.004.000.004.995.000.01由于单片机AT89C51为8位处理器,当输入电压为5.00V时,ADC0809输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。这就决定了电压表的最高分辨率只能到0.0196V,从上表可看到,测试电压一般以0.01V的幅度变化。 从上表可以看出,简易数字电压表测得的值基本上比标准电压值偏大0-0.01V,这可以通过校正ADC0809的基准电压来解决。因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。结束语 将本设计的程序下载到单片机中,通过测试,基本上完成了任务书的要求,并且抢答的精确度也比较高,有一使用价值和商业利用价值。本次设计的电压表小巧玲珑,携带方便,具有一定的使用价值。致 谢 通过这次比较完整的设计,使我们摆脱了单纯的理论知识学习状态,达到了理论与实践的结合锻炼了我的综合运用所学的专业基础知识,解决实际设计问题的能力,同时,也提高了我们查阅文献资料、设计手册、设计规范以及电脑制图等专业能力水平,而且通过整体的掌握对布局的取舍以及对细节的斟酌处理,都使我们能力得到了锻炼、经验得到了丰富,抗压能力以及耐力在不同程度上得到了提高,这是我们都想看到的也是我们进行设计的目的所在。虽然这次设计内容繁多、过程繁琐但我们收获很多,在这次设计过程中我们不仅对A/D转换芯片ADC0809有了进一步熟悉,随着设计的不断深入对它的工作原理、启动设置、转换结束判断及输出等都基本掌握,在和老师的沟通交流的过程中我们对设计有了新的认识,并且对实物的连接与布局有了新的看法,对我们的专业有了进一步的认识。感谢凌云老师对本次课程设计的精心指导,感谢众多同学对我们的关心与帮助。让我对学习单片机的有了很大的帮助。参考文献1马忠梅,籍顺心,张凯,马岩.单片机的C语言应用程序设计M.北京: 北京航空航天大学出版社,2006 Ma Zhongmei,J, Zhang Kai, MaYan. MCU C language program design M .beijing: Beijing aerospace university press, 20062李广弟,朱月秀,冷祖祁.单片机基础M.北京:北京航空航天大学出版 社,2007 Li Guangdi, ZhuYuexiu, Leng Zuqi. Microcontroller M .beijing: Beijing university of aeronautics and press, 2007 3李光飞.单片机课程设计实例指导M.北京:北京航空航天大学出版社, 2004.9 Li Guangfei. This course design example guide M .beijing: Beijing university of aeronautics and press, 2004.9 4邢增平.Protel 99 SE设计专家指导M.北京:中国铁道出版社,2004 Xing Zengping. Protel 99 SE design expert guidance M .beijing: China railway publishing house, 2004 附录A 程序清单 ORG 0000H /程序开始地址 LJMP START /跳转到开始程序 ORG 000BH /定时计数器0中断向量 LJMP NT /跳到子程序 START: MOV A, #00H/初始化 SETB P3.7 /EOC值1 CLR P3.0 /位选信号 CLR P3.1 CLR P3.2 MOV P2, A /P2口置0 MOV A, #0FFH /P0,P1口置1 MOV P0, A MOV P1, A MAIN: MOV SP, #60H /开辟堆栈 MOV IE, #82H /选择中断方式 MOV TMOD, #02H /选择工作方式 MOV P1, #0CH /亮P SETB P3.0LOOP103: SETB P2.7 /判断是否开始 MOV A, P2 JB ACC.7, LOOP103 /判断转换是否结束 MOV TH0, #0FFH /赋初值 MOV TL0, #0FFH SETB TR0 /开启计数器MAIN2: LCALL ADZH /长调用AD转换 LCALL SMZH /长调用数模转换 LCALL SMXS /长调用数模显示 LJMP MAIN2 /跳至MAIN2ADZH: MOV A, #00H /AD转换 MOV P2, A MOV R0, #70H AJMP ADCYWAIT: JB P3.7, DATASAVE /判断采样是否结束 AJMP WAIT /跳回等待ADCY: SETB P2.3 /AD采样单元 SETB P2.4 /上升沿,清除数据 NOP /延迟 NOP /延迟 CLR P2.3 /产生下降沿 开始工作 CLR P2.4 NOP /延迟 NOP AJMP WAIT /跳回单元DATASAVE: SETB P2.5 /数据传输单元 MOV P0 , #0FFH /扫面前置1 MOV A, P0 /扫描P0口状态 MOV R0, A /将值送至R0 RET /返回主程序SMZH: MOV A, R0 /数值转换子程序 MOV B, #51 /对输入数据进行处理 DIV AB /扫描的数除以51 MOV 78H, A /商存放到78H这个单元 MOV A, B /余数存放到A CLR F0 /清楚用户自定义标识 SUBB A, #1AH MOV F0, C /C位放到F0中 MOV A, #10 /乘以10余数变整数 MUL AB MOV B, #51 /对十分位数进行处理 DIV AB JB F0, LOOP1 /判断是否借位 ADD A, #5LOOP1: MOV 79H, A /百分位显示 MOV A, B /对百分位进行显示 CLR F0 /清除F0 SUBB A, #1AH /A减去25 MOV F0, C /标志位存放到F0 MOV A, #10 MUL AB MOV B, #51 DIV AB JB F0, LOOP2 ADD A, #5LOOP2: MOV 7AH, A RET SMXS: MOV R0, #78H /数码显示 LCALL PLAY /长调用PLAY子程序 SETB P3.0 /位选 CLR P1.7 /小数点 MOV R7, #0FFH /延时显示LOOP: DJNZ R7, LOOP /延时等待 CLR P3.0 INC R0 /显示十分位 LCALL PLAY SETB P3.1 MOV R7, #0FFH /计数初值LOOP3: DJNZ R7, LOOP3 /延时显示 CLR P3.1 /给低电平 INC R0 /显示百分位 LCALL PLAY /调用显示子程序 SETB P3.2 /给高电平 MOV R7, #0FFH LOOP4: DJNZ R7, LOOP4 /延时等待 CLR P3.2 /给低电平 RET /返回 PLAY: MOV A, R0 /查表法数码管显示 MOV DPTR, #TABLE /表格放入DPTR MOVC A, A+DPTR /查表 MOV P1, A /显示的数从P1口输出 RET /返回主程序NT: CPL P2.6 /脉冲信号取反 RETI /返回TABLE: DB 0C0H,0F9H,0A4H,0B0H /段码表 DB 99H,92H,82H,0F8H DB 80H,90H,0CH END 25附录B 实物图附录C PCB图图C1 PCB底层图图C2 PCB顶层图图C3 PCB元器件分布图附录D 电路原理图附录E 原器件清单元器件清单规格数量AT89C511ADC08091电阻10k1电阻480k8瓷片电容103u2电位器10k1四脚开关2底座40脚1数码管1USB线接口1晶振12MHz1底座28脚1双面板1极性电容1uF1
展开阅读全文