单片机系统设计项目(三级项目)设计说明书简易数字电压表的设计.doc

上传人:文库蛋蛋多 文档编号:4147508 上传时间:2023-04-07 格式:DOC 页数:28 大小:988.50KB
返回 下载 相关 举报
单片机系统设计项目(三级项目)设计说明书简易数字电压表的设计.doc_第1页
第1页 / 共28页
单片机系统设计项目(三级项目)设计说明书简易数字电压表的设计.doc_第2页
第2页 / 共28页
单片机系统设计项目(三级项目)设计说明书简易数字电压表的设计.doc_第3页
第3页 / 共28页
单片机系统设计项目(三级项目)设计说明书简易数字电压表的设计.doc_第4页
第4页 / 共28页
单片机系统设计项目(三级项目)设计说明书简易数字电压表的设计.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《单片机系统设计项目(三级项目)设计说明书简易数字电压表的设计.doc》由会员分享,可在线阅读,更多相关《单片机系统设计项目(三级项目)设计说明书简易数字电压表的设计.doc(28页珍藏版)》请在三一办公上搜索。

1、单片机系统设计项目(三级项目)设计说明书(2013/2014学年第二学期) 题 目 : 简易数字电压表的设计 专业班级 : 通信工程11级1班 学生姓名 : 指导教师 :贾少锐、董克俭、付佳 设计周数 : 2周 设计成绩 : 2014年6月20日目录1 数字电压表21.1数字电压表简介21.2数字电压表的优点21.3数字电压表的核心22 设计要求及方案32.1设计目的32.2设计要求33 硬件电路设计43.1 A/D转换模块43.1.1逐次逼近型A/D转换器原理43.1.2 ADC0832的主要特性53.1.3 ADC0832外部引脚及其说明53.1.4 单片机对ADC0832 的控制原理53

2、.2单片机系统83.2.1 AT89C51性能83.2.2 AT89C51各引脚功能83.3复位电路和时钟电路103.3.1复位电路设计103.3.2时钟电路设计113.4 LED显示系统设计113.4.1 LED基本结构113.4.2 LED显示器的选择123.4.3 LED译码方式123.4.4 LED显示器与单片机接口设计133.5总体电路设计144 程序设计154.1程序设计总方案154.2系统子程序设计164.2.1初始化程序164.2.2 A/D转换子程序164.2.3显示子程序165 仿真175.1软件调试175.2显示结果186 总结191 数字电压表1.1数字电压表简介数字电

3、压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特点而得到广泛应用。最近的几十年来,随着半导体技术、集成电路(IC)和微处理器技术的发展,数字电路和数字化测量技术也有了巨大的进步,从而促使了数字电压表的快速发展,并不断出现新的类型。1.2数字电压表的优点随着电子技术的发展,经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。采用单片机的数字电压表,将连续的模拟量如直流电压转换成不连续的离散的数字形式并加以显示,从而具有精度高、抗干扰能力强,可扩展性强、集成方便,还可

4、与PC实时通信的优点。以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。目前,由各种单片机和A/D转换器构成的数字电压表作全面深入的了解是很有必要的。传统的指针式刻度电压表功能单一,进度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。数字电压表是诸多数字化仪表的核心与基础。数字电压表从1952年问世以来,经历了不断改进的过程,从最早采用继电器、电子管和形式发展到了现在的全固态化、集成化(IC化),另一方面,精度提高了0.01%-0.005%。1.3数字电压表的核心目前,数字电压表的内部核心部件是A/D转换器,转换的精度很大程度上影响着数字电压表的准

5、确度,因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面。A/D转换器分成四种:计数式A/D转换器、双积分式A/D转换器、逐次逼近式A/D转换器和并行式A/D转换器。目前最常用的是双积分式A/D转换器和逐次逼近式A/D转换器,其中双积分式A/D转换器转换精度高,抗干扰性能好,价格便宜,但是转换速度慢,因此这种转换器主要用于速度要求不高的场合。而逐次逼近式A/D转换器转换速度快,但精度相对较差。因此未来的A/D转换器将兼顾精度和速度,成本也会随着集成电路的发展而降低。 2 设计要求及方案 2.1设计目的 (1)对于巩固所学的电子技术理论知识,培养解决实际问题的能力,加强基本的技能训练具有

6、明显的积极作用。 (2)掌握数字电压表的设计原理,组装、焊接与调试方法。 (3)熟悉A/D转换器芯片ADC0832和单片机AT89C51的使用方法,并掌握其工作原理。2.2设计要求 (1)以MCS-51系列单片机为核心器件,组成一个简单的直流数字电压表。 (2)监测两路的输入电压值,能够测量范围为0-5V的直流输入电压值。 (3)用8位串行A/D转换器,8位分辨率,逐次逼近型,基准电压为5伏。 (4)用两位LED进行轮流显示或单路选择显示,显示精度0.1伏,并通过串口通信在PC机上进行显示。2.3设计方案硬件电路设计由6个部分组成; A/D转换电路,AT89C51单片机系统,LED显示系统、时

7、钟电路、复位电路以及测量电压输入电路。硬件电路设计框图如图1所示。时钟电路 复位电路A/D转换电路测量电压输入显示系统AT89C51 P1 P2 P0 P2图1 硬件电路设计框图3 硬件电路设计3.1 A/D转换模块现实世界的物理量都是模拟量,能把模拟量转化成数字量的器件称为模/数转换器(A/D转换器),A/D转换器是单片机数据采集系统的关键接口电路,按照各种A/D芯片的转化原理可分为逐次逼近型,双重积分型等等。双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点。与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0832、ADC0808、ADC0809等,

8、它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送到单片机进行分析和显示。一个n位的逐次逼近型A/D转换器只需要比较n次,转换时间只取决于位数和时钟周期,逐次逼近型A/D转换器转换速度快,因而在实际中广泛使用。3.1.1逐次逼近型A/D转换器原理逐次逼近型A/D转换器是由一个比较器、A/D转换器、存储器及控制电路组成。它利用内部的寄存器从高位到低位依次开始逐位试探比较。转换过程如下:开始时,寄存器各位清零,转换时,先将最高位置1,把数据送入A/D转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入的模拟

9、量大,则1不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟量对应的二进制数字量。其原理框图如图2所示。图2 逐次逼近式A/D转换器原理图顺序脉冲发生器逐次逼近寄存器ADC电压比较器输入电压输入数字量3.1.2 ADC0832的主要特性ADC0832是NS(National Semiconductor)公司生产的串行接口8位A/D转换器,通过三线接口与单片机连接,功耗低,性能价格比较高,适宜在袖珍式的智能仪器仪表中使用。ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。芯片具有双数据输出可作为数据校验,以减少数据误差,

10、转换速度快且稳定性能强。独立的芯片使能输入,使多器件连接和处理器控制变得更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。其主要特点如下: 8位分辨率,逐次逼近型,基准电压为5V; 5V单电源供电; 输入模拟信号电压范围为05V; 输入和输出电平与TTL和CMOS兼容; 在250KHZ时钟频率时,转换时间为32us; 具有两个可供选择的模拟输入通道; 功耗低,15mW。3.1.3 ADC0832外部引脚及其说明ADC0832有DIP和SOIC两种封装,DIP封装的ADC0832引脚排列如图3所示。各引脚说明如下: CS片选端,低电平有效。 CH0,CH1两路模拟信号输入端。 DI两

11、路模拟输入选择输入端。 DO模数转换结果串行输出端。 CLK串行时钟输入端。图3 ADC0832引脚图 Vcc/REF正电源端和基准电压输入端。 GND电源地。3.1.4 单片机对ADC0832 的控制原理图4 ADC0832与单片机的接口电路图如图所示,一般情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS端置于

12、低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK提供时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1个时钟脉冲到来之前DI端必须是高电平,表示启动位。在第2、3个时钟脉冲到来之前DI端应输入2位数据用于选择通道功能,其功能项见表1。表1 ADC0832配置位输入方式配置位选择通道CH0CH1CH0CH1单端输入10+11+如表1所示,当配置位2位数据为1、0时,只对CH0 进行单通道转换。当配置2位数据为1、1时,只对CH1进行单通道转换。到第3个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出D

13、O进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATAA7,随后每一个脉冲下沉DO端输出下一位数据,直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0.随后输出8位数据,从第19个脉冲数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。图5为时序说明图。图5 时序说明图3.2单片机系统3.2.1 AT89C51性能AT89C51是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含有4KB的可反复擦写的只读程

14、序存储器和128字节的随机存储器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,它为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51功能性能:与MCS-51成品指令系统完全兼容;4KB可编程闪速存储器;寿命:1000次写/擦循环;数据保留时间:10年;全静态工作:0-24MHz;三级程序存储器锁定;128*8B内部RAM;32个可编程I/O口线;2个16位定时/计数器;5个中断源;可编程串行UART通道;片内震荡器和掉电模式。

15、3.2.2 AT89C51各引脚功能AT89C51提供以下标准功能:4KB的Flash闪速存储器,128B内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路,同时,AT89C51可降至0Hz静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作,掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有工作直到下一个硬件复位。AT89C51采用PDIP封装形式,引脚配置如图6所示。图6 AT89C51的引脚图AT89C51芯片的各引脚功能为:P0口:

16、这组引脚共有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口作为通

17、用I/O口使用时,P1.0-P1.7的功能和P0口的第一功能相同,也用于传送用户的输入和输出数据。P2口:这组引脚的第一功能与上述两组引脚的第一功能相同即它可以作为通用I/O口使用,它的第一功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但并不是像P0口那样传送存储器的读/写数据。P3口:这组引脚的第一功能和其余三个端口的第一功能相同,第二功能为控制功能,每个引脚并不完全相同,如下表2所示。表2 P3口各位的第二功能P3口各位 第二功能 P3.0 RXT(串行口输入) P3.1 TXD(串行口输出) P3.2/INT0(外部中断0输入) P3.3/IN

18、T1(外部中断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,

19、则允许使用片内ROM, 若/EA=0,则只使用片外ROM。/PSEN:片外ROM的选通线,在访问片外ROM时,89C51自动在/PSEN线上产生一个负脉冲,作为片外ROM芯片的读选通信号。RST:复位线,可以使89C51处于复位(即初始化)工作状态。通常89C51复位有自动上电复位和人工按键复位两种。XTAL1和XTAL2:片内震荡电路输入线,这两个端子用来外接石英晶体和微调电容,即用来连接89C51片内OSC(震荡器)的定时反馈回路。3.3复位电路和时钟电路3.3.1复位电路设计单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-5

20、1单片机有一个复位引脚RST,采用施密特触发输入。当震荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保时器件复位。复位完成后,如果RST端继续保持高电平,MCS-51就一直处于复位状态,只要RST恢复低电平后,单片机才能进入其他工作状态。单片机的复位方式有上电自动复位和手动复位两种,图7是51系列单片机统常用的上电复位和手动复位组合电路,只要Vcc上升时间不超过1ms,它们都能很好的工作。图7 复位电路3.3.2时钟电路设计单片机中CPU每执行一条指令,都必须在统一的时钟脉冲的控制下严格按时间节拍进行,而这个时钟脉冲是单片机控制中的时序电路发出的。CPU执行一条指令的各个微操作所对

21、应时间顺序称为单片机的时序。MCS-51单片机芯片内部有一个高增益反相放大器,用于构成震荡器,XTAL1为该放大器的输入端,XTAL2为该放大器输出端,这两个引脚跨接晶振和微调电容,就构成一个稳定的自激振荡器。 如图8所示。图8 时钟电路电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数,电路中,电容器C1和C2对震荡频率有微调作用,通常的选择为30pF左右。对外接电容的值虽然没有严格的要求,但电容的大小会影响振荡器的频率的高低、振荡器的稳定性和起振的快速性,在这个系统中选择了30pF。晶振选择范围通常在1.2MHZ-12MHZ,它决定了单片机电路产生的时钟信号震荡频率,在本

22、系统中选择的是12MHZ,因而时钟信号的震荡频率为12MHZ。3.4 LED显示系统设计3.4.1 LED基本结构LED是发光二极管显示器的缩写。LED由于结构简单、价格便宜、与单片机接口方便等优点而得到广泛应用。LED显示器是由若干个发光二极管组成显示字段的显示器件6。在单片机中使用最多的是七段数码显示器。LED七段数码显示器由8个发光二极管组成显示字段,其中7个长条形的发光二极管排列成“日”字形,另一个圆点形的发光二极管在显示器的右下角作为显示小数点用,其通过不同的组合可用来显示各种数字。LED引脚排列如下图9所示。图9 LED引脚排列3.4.2 LED显示器的选择在应用系统中,设计要求不

23、同,使用的LED显示器的位数也不同,因此就生产了位数,尺寸,型号不同的LED显示器供选择,在本设计中,选择4位一体的数码型LED显示器,简称“4-LED”。本系统中前一位显示电压的整数位,即个位,后一位显示电压的小数位。4-LED显示器引脚如图10所示,是一个共阳极接法的4位LED数码显示管,其中a,b,c,d, e,f,g为4位LED各段的公共输出端,1、2、3、4分别是每一位的位数选端,dp是小数点引出端,4位一体LED数码显示管的内部结构是由4个单独的LED组成,每个LED的段输出引脚在内部都并联后,引出到器件的外部。图10 4位LED引脚对于这种结构的LED显示器,它的体积和结构都符合

24、设计要求,由于4位LED阳极的各段已经在内部连接在一起,所以必须使用动态扫描方式(将所有数码管的段选线并联在一起,用一个I/O接口控制)显示。3.4.3 LED译码方式译码方式是指由显示字符转换得到对应的字段码的方式,对于LED数码管显示器,通常的译码方式有硬件译码和软件译码方式两种。硬件译码是指利用专门的硬件电路来实现显示字符码的转换。软件译码就是编写软件译码程序,通过译码程序来得到要显示的字符的字段码,译码程序通常为查表程序。本设计系统中为了简化硬件线路设计,LED译码采用软件编程来实现。由于本设计采用的是共阳极LED,其对应的字符和字段码如下表3所示。表3 共阴极字段码表显示字符共阴极字

25、段码003H19fH225H30dH499H549H641H71fH801H909H3.4.4 LED显示器与单片机接口设计由于单片机的并行口不能直接驱动LED显示器,所以,在一般情况下,必须采用专用的驱动电路芯片,使之产生足够大的电流,显示器才能正常工作7。如果驱动电路能力差,即负载能力不够时,显示器亮度就低,而且驱动电路长期在超负荷下运行容易损坏,因此,LED显示器的驱动电路设计是一个非常重要的问题。为了简化数字式直流电压表的电路设计,在LED驱动电路的设计上,可以利用单片机P0口上外接的上拉电阻来实现,即将LED的A-G段显示引脚和DP小数点显示引脚并联到P0口与上拉电阻之间,这样,就可

26、以加大P0口作为输出口德驱动能力,使得LED能按照正常的亮度显示出数字,如图11所示。图11 LED与单片机接口间的设计3.5总体电路设计经过以上的设计过程,可设计出基于单片机的简易数字直流电压表硬件电路原理图如图12所示。图12 简易数字电压表电路图此电路的工作原理是:模拟电压信号通过变阻器RV1分压后由ADC08032的CH0通道进入,经过模/数转换后,产生相应的数字量经过其输出通道D0-D7传送给AT89C51芯片的P3.4口,AT89C51负责把接收到的数字量经过数据处理,产生正确的8段数码管的显示段码传送给四位LED,同时它还通过其四位I/O口P2.4、P2.5、P2.6、P2.7产

27、生位选信号控制数码管的亮灭。此外,AT89C51还控制ADC0832的工作。简易数字直流电压表的硬件电路已经设计完成,就可以选取相应的芯片和元器件,利用Proteus软件绘制出硬件的原理,并仔细地检查修改,直至形成完善的硬件原理图。但要真正实现电路对电压的测量和显示的功能,还需要有相应的软件配合,才能达到设计要求。4 程序设计4.1程序设计总方案 根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图13所示。开始初始化调用A/D转换子程序调用显示子程序结束图13 数字式电压表主程序框图4.2系统子程序设计4.2.1初始化程序所

28、谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等。4.2.2 A/D转换子程序A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图14所示。启动转换A/D转换结束?输出转换结果数值转换显示结束开始图14 A/D转换流程图4.2.3显示子程序显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效

29、果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现50ms定时。5 仿真5.1软件调试 软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等

30、等。Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与u Visions3 IDE工具软件结合进行编程仿真调试。本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真我采用的是Proteus软件,而程序方面,采用的是汇编语言,用Keil软件将程序写入单片机。5.2显示结果图15 LED的显示结果 图16 硬件操作结果6 总结本次的课程设计是基于单片机的,由于我组成员对于单片机的掌握都不是很精通,所以在过程中出现了很多问题。尤其是在代码的编写方面,我们遇到了很大的阻力,我们对本次设计的思路流程都很清晰,但是不太会用代码编程与之结合和起来,我们上网百度了很多资料

31、,也向一些同学请教。基本达到了设计要求。首先我们解决了数码管乱码的问题,因为开始的程序是针对共阴的数码管,所以仿真显示不正确,显示错位。与之一起的问题还有处理获取到的AD转换的数据问题,因为需要把获得0832的数据转换成小数,然后显示在数码管上。还有一个问题就是利用串口向上位机发送数据,在一开始,我们删减了一些程序,发现在仿真和单片机上都可显示数据但是,却不可以在PC机上窗口显示,显示的是一堆乱码,后来仔细研究定时和串口中断才正常显示。经过我们通过两周的努力,我们完成了简易数字电压表的设计。对平时用到的数字电压表的工作原理有了清晰的认识。在这过程中,对电路设计、单片机的使用等都有了新的认识。同

32、时熟悉了Proteus和Keil软件的使用方法,掌握了从系统的需要、方案的设计、功能模块的划分、原理图的设计和电路图的仿真的设计流程,积累了不少经验。但是我们也认识到了自身的不足,会在今后的日子里努力学习单片机及电路的相关知识,努力提高自己的能力。 参考文献1胡健.单片机原理及接口技术.北京:机械工业出版社,2004年10月2王毓银.数字电路逻辑设计.高等教育出版社,2005年12月3于殿泓、王新年.单片机原理与程序设计实验教程.西安电子科技大学出版社,2007年5月4谢维成、杨加国.单片机原理与应用及C51程序设计实例.电子工业出版社,2006年3月5李广弟.单片机基础.北京航空航天大学出版

33、社,2007年5月6姜志海,黄玉清等著.单片机原理及应用M .北京:电子工业出版社.2005年7月 7魏立峰.单片机原理及应用技术.北京大学出版社,2005年8周润景.Protues在MCS-51&ARM7系统中的应用百例.第一版.北京:电子工业出版社,2006年9边春远等著.MCS-51单片机应用开发实用子程序M .北京:人民邮电出版社.2005年9月.10苗红霞.单片机实现数字电压表的软硬件设计J .河海大学常州分校学报,2002,(03).11宋凤娟,孙军,李国忠.基于89C51单片机的数字电压表设计J .工业控制计算机,2007,(04).附录/*导入头文件*/#include /包含

34、单片机寄存器的头文件#include /包含_nop_()函数定义的头文件/*定义变量*/sbit CS=P35; /将CS位定义为P3.5引脚sbit Clk=P33; /将CLK位定义为P3.3引脚sbit DATI=P34; /将DIO位定义为P3.4引脚sbit DATO=P34;unsigned char dat = 0x00,0x00;unsigned char datt=0x00,0x00;unsigned char data1= 0x00;unsigned char data2= 0x00;unsigned char dat2= 0x00;unsigned char count

35、 = 0x00; unsigned char CH; unsigned char dis = 0x00, 0x00; unsigned char a;unsigned char m;unsigned char code digit10=0123456789; /定义字符数组显示数字unsigned char code Str1=Volt1=; /说明显示的是电压unsigned char code Str2=Volt2=; unsigned char shu=0x00,0x2e,0x00,0x0d,0x0a; unsigned char i,j;/*共阳LED段码表*/unsigned cha

36、r code tab=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09;/*延时子程序*/void delay(unsigned char m) int i,j; for(i=0;im;i+)for(j=0;j50;j+); / int k; / for(k=10;km;k+);/*读取电压值*/unsigned char adc0832(unsigned char CH)unsigned char i,test,adval;adval = 0x00;test = 0x00;Clk = 0; /初始化DATI = 1; /第1个时钟脉冲下沉之前

37、DI端必须是高电平,表示启始信号_nop_(); /运行一个机器周期CS = 0;_nop_();Clk = 1;_nop_();if ( CH = 0x00 ) /选择了通道0Clk = 0;DATI = 1; /通道0的第一位,第2个时钟脉冲下沉之前DI端是高电平_nop_();Clk = 1;_nop_();Clk = 0;DATI = 0; /通道0的第二位,第3个时钟脉冲的下沉之前DI端是低电平_nop_();Clk = 1;_nop_(); else /选择了通道1Clk = 0;DATI = 1; /通道1的第一位,第2个时钟脉冲下沉之前DI端是高电平_nop_();Clk =

38、1;_nop_();Clk = 0;DATI = 1; /通道1的第二位,第3个时钟脉冲下沉之前DI端是高电平_nop_();Clk = 1;_nop_(); Clk = 0; DATI = 1;for( i = 0;i 8;i+ ) /读取前8位的值 _nop_(); adval = 1; Clk = 1; _nop_(); Clk = 0;if (DATO) adval |= 0x01;else adval |= 0x00; for (i = 0; i = 1; if (DATO) test |= 0x80; else test |= 0x00; _nop_(); Clk = 1; _no

39、p_(); Clk = 0; if (adval = test) /比较前8位与后8位的值,如果不相同舍去 datCH = test; _nop_(); CS = 1; /释放ADC0832 DATO = 1; Clk = 1; return datCH;/*将电压值转换成小数形式*/void convdata(unsigned char i) dis0 = i/51; /个位 dis1 = (unsigned char)(float)i/51-i/51)*10); /小数点后第一位/*数码管显示子程序*/void display(void) if(CH=0) P2=0xef; /选中第一个L

40、ED灯 P0=tabdis0 & 0xfe; /将通道0的个位在第一个LED灯上显示 delay(1);P0=0xff; P2=0xdf; /选中第二个LED灯 P0=tabdis1; /将通道0的小数点后一位在第二个LED灯上显示 delay(1);P0=0xff;elseP2=0xbf; /选中第三个LED灯 P0=tabdis0 & 0xfe; /将通道1的个位在第三个LED灯上显示 delay(1);P0=0xff; P2=0x7f; /选中第四个LED灯 P0=tabdis1; /将通道1的小数点后一位在第四个LED灯上显示 delay(1);P0=0xff; /*定时器0的定义*/

41、void Init_Timer0(void)TMOD |= 0x21; /定时器0工作在方式1,16位定时器,使用|符号可以在使用多个定时器时不受影响 EA=1; /总中断打开ET0=1; /定时器0中断打开TR0=1; /定时器0开关打开 /*串口的定义*/void chuankou(void) SCON = 0x50; / SCON: 模式 1, 8-bit异步收发, 使能接收,波特率可变 TMOD |= 0x20; / TMOD: timer 1, mode 2, 8-bit 重装初值,晶振 11.0592MHz TH1 = 0xFD; /波特率9600、数据位8、起始位1,停止位1,TL1 = 0XFD; TR1 = 1; /定时器1开关打开REN = 1; /REN=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号