基于单片机的直流电压表的课程设计.doc
直流电压表摘要 随着时代的进步, 用指针式万用表测量小幅度直流电压已经显得有些不太方便。因为指针式的测量不够精确,随着长时间的使用可能会造成欧姆调零以及机械调零的磨损, 这都会对数据的测量造成很多困难,而采用数字式电压表来测量就可以避免这种情况的发生,而且操作更加方便。 下面本文将介绍一种由数字电路以及单片机构成的数字电压表的设计方法。 数字电压表(Digital Voltmeter)简称 DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表关键字89C51单片机 电压表 Keil ADC0832数模转换器 目录第一章概述5第二章 直流电压表的设计总方案7第三章 硬件电路设计9第四章 软件电路设计23第五章 个人负责模块AD0832驱动程序设计26第六章 直流电压表的安装与调试33第七章 存在故障分析与进一步改进35第八章 结论37参考文献38附录39第一章 概述1.1 课程设计的题目直流电压表 1.2课程设计的课题概述本设计运用 89C51 和 ADC0832 进行 A/D 转换,根据数据采集的工作原理,设计现数字电压表,最后完成单片机与 PC 的数据通信,传送所测量的电压值。该新数字电压表测量电压类型是直流,测量范围是 0-51V(本设计量程为 0-5V)。 电路包括:数据采集电路的单片机最小化系统设计、 单片机与 PC 接口电路、单片机时钟电路、复位电路等。下位机采用 89C51 芯片,A/D转换采用 ADC0832 芯片。通过 下载口与 PC 进行通信,传送所测量的直流电压数据。 1.3课程设计的设计指标(1)利用51系列单片机和相关器件,设计一个直流电压表。(2)测量电压范围:0-5V(3)测量精度:0.01V(4)设置最低电压阈值,低于该值则系统报警。(5)其他功能(创新部分)。提示:为实现设置最低电压阈值,低于该值则系统报警功能,系统可以设置3个功能键,即:K1设置键、K2数字加键、K3数字减键。通过对数字加键或数字减键操作,可以对设定上限或下限电压每次操作增加或减小0.01度;通过K1的操作次序确定当前的显示和校正内容,由S2和S3进行校正第二章 直流电压表的设计总方案11.1 直流电压表的基本组成和设计思路2.1.1基本组成89c51单片机最小系统ADC数模转换电路报警电路USB下载口2.1.2设计思路(1) 根据设计要求,选择AT89c51单片机为核心控制器件;(2) A/D转换采用ADC0832实现,与单片机的接口为P24,P25,P26;(3) 电压显示采用LCD1602实现(4) LCD的输入是与并行口P0产生2.1.3设计方案硬件电路设计有8部分组成:A/D转换电路,AT89C51单片机系统,LCD显示系统、报警电路、按键调节电路、时钟电路、复位电路以及测量电压输电路。硬件电路设计框图如图1所示: 图1数字电压表系统硬件设计框图软件电路主要有LCD驱动、显示函数、0832A/D转换函数模块、按键调节模块、报警函数模块还有延迟程序等6大模块组成,大体流程图如下;第三章 硬件电路设计3.1 A/D转换模块A /D转换在单片机接口中应用广泛,串行A /D转换器具有功耗低、性价比较高、芯片引脚少等特点。ADC0832是NS(National Semiconductor)公司生产的具有Microwire / Plus串行接口的8位A /D转换器,通过三线接口与单片机连接,适宜在袖珍式智能仪器中使用。主要性能指标有: 功耗低, 只有15mW; 8位分辨率,逐次逼近型,基准电压为5V;输入模拟信号电压范围为05V;输入和输出电平与TTL和CMOS兼容;在250kHz时钟频率时,转换时间为32us;具有两个可供选择的模拟输入通道。 3.1.2 A/D转换的原理 3.1.2.1ADC0832的引脚及配置位功能ADC0832有D IP和SO IC两种封装,D IP封装ADC0832引脚排列如图1所示。各引脚说明如下图2:图2 ADC8032引脚图CS片选端,低电平有效。CH0, CH1两路模拟信号输入端。D I两路模拟输入选择输入端。DO模数转换结果串行输出端。CLK串行时钟输入端。VCC /REF正电源端和基准电压输入端。GND电源地。ADC0832工作时,模拟通道的选择及单端输入和差分输入的选择,都取决于输入时序的配置位当差分输入时,要分配输入通道的极性,两个输入通道的任何一个通道都可作为正极或负极。 3.1.3ADC0832的工作时序当CS由高变低时,选中ADC0832。在时钟的上升沿,D I端的数据移入ADC0832内部的多路地址移位寄存器。在第一个时钟期间, D I为高,表示启动位,紧接着输入两位配置位。当输入启动位和配置位后,选通输入模拟通道,转换开始。转换开始后,经过一个时钟周期延迟, 以使选定的通道稳定。ADC 0832 接着在第4个时钟下降沿输出转换数据。数据输出时先输出最高位(D7D0) ;输出完转换结果后,又以最低位开始重新输出一遍数据(D7 D0) ,两次发送的最低位共用。当片选CS为高时,内部所有寄存器清0,输出变为高阻态。如果要再进行一次模/数转换,片选CS必须再次从高向低跳变,后面再输入启动位和配置位。3.2 LCD1602显示模块 3.2.1 LCD显示的原理 3.2.1.1 线段的显示:点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。 3.2.1.2 字符的显示 用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。 3.2.1.3 汉字的显示汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5右边为2、4、6根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节直到32B显示完就可以LCD上得到一个完整汉字3.2.2 1602字符型LCD简介 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。一般1602字符型液晶显示器实物如图 3.2.2.1 1602LCD的基本参数及引脚功能LCD1602主要技术参数:显示容量:16×2个字符 ;芯片工作电压:4.55.5V ;工作电流:2.0mA(5.0V); 模块最佳工作电压:5.0V ;字符尺寸:2.95×4.35(W×H)mm引脚功能说明如表1 :编号 符号 引脚说明 编号 符号 引脚说明 1 VSS 电源地 9 D2 数据 2 VDD 电源正极 10 D3 数据 3 VL 液晶显示偏压 11 D4 数据 4 RS 数据/命令选择 12 D5 数据 5 R/W 读/写选择 13 D6 数据 6 E 使能信号 14 D7 数据 7 D0 数据 15 BLA 背光源正极 8 D1 数据 16 BLK 背光源负极 表1 引脚接口说明表 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。 第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第714脚:D0D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。3.2.2.2 1602液晶模块内部的控制器控制指令 序号 指令 RSR/WD7D6D5D4D3D2 D1 D01 清显示 0 0 0 0 0 0 0 0 0 1 2 光标返回 0 0 0 0 0 0 0 0 1 * 3 置输入模式 0 0 0 0 0 0 0 1 I/D S 4 显示开/关控制 0 0 0 0 0 0 1 D C B 5 光标或字符移位 0 0 0 0 0 1 S/C R/L * * 6 置功能 0 0 0 0 1 DLN F * * 7 置字符发生存贮器地址 0 0 0 1 字符发生存贮器地址 8 置数据存贮器地址 0 0 1 显示数据存贮器地址 9 读忙标志或地址 0 1 BF计数器地址 10 写数到CGRAM或DDRAM) 1 0 要写的数据内容 11 从CGRAM或DDRAM读数 1 1 读出的数据内容 1602液晶模块内部的控制器共有11条控制指令,如上表所示1602液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。(说明1为高电平,0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置 指令2:光标复位,光标返回到地址00H 指令3:光标和显示位置设置I/D,光标移动方向,高电平右移,低电平左移,S:屏幕上所有文字是否左移或右移,高电平表示有效,低电平表示无效。 指令4:显示开关控制。D:控制整体的显示开与关,高电平表示开显示,低电平表示关显示。C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令5:光标或显示移位 S/C :高电平时显示移动的文字,低电平时移动光标 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时为双行显示,F:低电平时显示5X7的点阵字符,高电平时显示5X10的显示字符。 指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。 指令9:读忙信号和光标地址 BF:忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平表示不忙。3.2.2.3 基本操作时序 读写操作时序如图所示; 写操作时序如图: 3.3按键模块和报警电路按键如图所示报警电路如图:为实现设置最低电压阈值,低于该值则系统报警功能,系统设置了3功能键,即:S2设置键、S3数字加键、S4数字减键。通过对数字加键或数字减键操作,可以对设定上限或下限电压每次操作增加或减小0.01度;通过K1的操作次序确定当前的显示和校正内容,由S3H和S4校正3.4单片机系统3.4.1 AT89c51的性能 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51 ?指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51功能性能与成品MCS-51成品指令系统完全兼容;4KB可编程闪束存储器;寿命1000次写/查循环;数据保留时间十年;全静态工作:0-24MHZ;三级程序存储器锁定;128*8B内部RAM;32个课编程I/O口线;2个16位定时/计时器;5个中断;可编程串行UART通道;片内振荡器和掉电模式。3.4.2 AT89C51个引脚的功能 VCC:供电电压。GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 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口管脚是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口同时为闪烁编程和编程校验接收一些控制信号。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.4.3 单片机晶振电路XTAL1、XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。3.4.4单片机复位电路复位电路的基本功能是 系统上电时提供复位信号直至系统电源稳定后撤销复位信号为可靠起见电源稳定后还要经一定的延时才撤销复位信号以防电源开关或电源插头分-合过程中引起的抖动而影响复位第四章 软件电路设计4.1 初始化程序所谓初始化,是对将要用到的51单片机内部部件或扩展芯片进行初始化工作状态设定。初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等。程序如下所示: TMOD=0x01;/定时器0,模式1TH0=TIME0H;/定时器初值的高八位送入TH0TL0=TIME0L;/定时器初值的低八位送入TH0TR0=1;/启动定时器ET0=1;/开定时器中断EA=1;/开总中断4.2 A/D转换程序A/D转换程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其中流程图如图:4.3显示程序运用LCD1602进行驱动显示,程序模块包括LCD初始化、1个字符子程序、1个命令子程序、1个数据子程序、1个数据子程序以及组字符写入LCD进行驱动显示;模式设置为:8位2行5*7点阵,控制指令如图下图,按照指令进行编写程序,驱动LCD1602.4.4按键调节程序为实现设置最低电压阈值,低于该值则系统报警功能,系统设置3个功能键,即:K1设置键、K2数字加键、K3数字减键。通过对数字加键或数字减键操作,可以对设定上限或下限电压每次操作增加或减小0.01度;通过K1的操作次序确定当前的显示和校正内容,由S2和S3进行校正,并且可以一位位进行调节并不影响临近数值,稳定第五章 个人负责模块最小系统,报警程序设计 5.1 晶振电路及功能介绍 单片机系统里都有晶振,在单片机系统里晶振作用非常大,全程叫晶体振荡器,他结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率。单片机晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。 晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。我们采用的晶振是12M的石英晶振,经过两个磁片电容后分别接入XTAL1、XTAL2脚,使用单片机的内部晶振电路。12M晶振为单片机提供1uS的机器周期。5.2 按键复位电路单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。5.21上电复位AT89S51的上电复位电路,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1?F。上电复位的工作过程是在加电时,复位电路通过电 容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。在图2的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序5.22 按键位手动按钮复位需要人为在复位输入端RST上加入高电平。一般采用的办法是在RST端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。在设计中,我们采用按键复位,在电路图中,电容的的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K*10UF=0.1S。在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。5.3 报警程序设计的驱动程序编写及详细分析 void vShowVoltage (uint uiNumber,uchar cNumber) ucharucaNumber3; uchar ucCount; if(uiNumber<255)&&(uiNumber>0) ucaNumber0=cNumber0;ucaNumber1=cNumber1;ucaNumber2=cNumber2; for(ucCount=0;ucCount<3;ucCount+) Show_1_Char(ucaNumberucCount+48); if(ucCount=0) Show_1_Char('.');elseShow_Char("-.-");适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在05V之间。芯片转换时间仅为32S,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择. 5.2 AD0832的工作原理 5.2.1 ADC0832的特点8位分辨率;双通道A/D转换; 输入输出电平与TTL/CMOS相兼容; 5V电源供电时输入电压在05V之间; 工作频率为250KHZ,转换时间为32S; 一般功耗仅为15mW; 8P、14PDIP(双列直插)、PICC 多种封装; 商用级芯片温宽为0°C to +70°C,工业级芯片温宽为40°C to +85°C; 5.2.2 ADC0832的优点ADC0832A/D转换芯片0255级,可以适应一般的模拟量转换要求其内部电源输入与参考电压的复用,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI数据输入端,可以轻易的实现通道功能的选择。 5.2.3 ADC0832的工作模式只用一通道 DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI并联在一根数据线上使用。 5.2.3 ADC0832的工作时序当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可任意。当要进行A/D转换时,须先将 CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号. 2位数据为1,0时,只对CH0进行单通道转换(本程序用通道0)为1,1时,只对CH1进行单通道转换;为0,0时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入;为0,1时,将CH0作为负输入端IN-,CH1作为正输入端IN+进行输入。 从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。 也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATD0。 随后输出8位数据,到第19个脉冲时数据输出完成,也标志着一次A/D转换的结束。5.3 0832的工作时序图5.4 0832的驱动程序编写及详细分析单片机串行口方式0 与ADC0832 的接口,单片机P25接ADC0832的CS, TXD (接0832的CLK)作为时钟信号输出端, RXD (接0832的DO和D I)作为启动位、配置位的发送端以及A /D转换后输出数据的接收端。由于ADC0832在CS变低后的前3个周期内,DO端为高阻态;转换开始后,D I线禁止,因此,D I端和DO端可连接在一起.ADC0832的时钟频率最高为400kHz,单片机晶振可选用4MHz,在TXD的输出频率为4MHz/12 =333. 3kHz,符合要求。ADC0832输出的串行数据共15位,由两段8位数据组成,前一段是最高位在先,后一段是最高在后,两段数据的最低位共用。只有在时钟的下降沿,ADC0832的串行数据才移出一位。由单片机控制时钟信号的发送, 并由TXD 发出, 以达到控制ADC0832输出数据位的目的。为了得到一列完整的8位数据,单片机分两次采集含有不同位的数据,再合成一列完整的8位数据.由上面的0832的工作时序,及硬件设计编写了下面的0832的驱动程序。程序分析如下: sbit ADC0832CS=P25;/启动ad8032,片选低电平有效 sbit ADC0832CLK=P26;/时钟 sbit ADC0832DO=P24;/单片机串行口方式0与ADC0832的接口 sbit ADC0832DI=P24;unsigned char adc0832Rece(unsigned char ADC0832MODLE)/定义adc0832的输入模式/可两通道/可差分输入/把模拟电压值转换成8位二进制数并返回 unsigned char adc0832Buf=0,number=0; /初值 ADC0832CS=0; /cs=0低电平有效,AD0832片选有效for(;number<3;number+)/输出命令 ADC0832DI=(bit)(ADC0832MODLE&0x80);/选择CH0,通过组合选取通道(SGL/DIF) ADC0832MODLE<<=1; ADC0832CLK=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); ADC0832CLK=0;/形成下降沿1 _nop_(); _nop_();/形成一次时钟脉冲,数据传一位 for(number=0;number<7;number+)/丢弃高七位数据 ADC0832DO=1; adc0832Buf<<=1;/ 将所收到的数据进行左移一位 ADC0832CLK=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); ADC0832CLK=0;/形成下降沿2 _nop_(); _nop_();/形成一次时钟脉冲,数据传一位 if(ADC0832DO=1)adc0832Buf+; adc0832Buf=0;for(number=0;number<8;number+)/接收八位数据 ADC0832DO=1; /接着收数据 adc0832Buf>>=1;/ 将所收到的数据进行右移一位 ADC0832CLK=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); ADC0832CLK=0;/形成下降沿3 _nop_(); _nop_();/形成一次时钟脉冲,数据传一位 if(ADC0832DO=1)adc0832Buf+=0x80; ADC0832CS=1;/将CS置高电平禁用芯片return(adc0832Buf);第五章直流电压表安装与调试5.1 直流电压表的实际完成的电路5.2 直流电压表实现的总体功能测量电压范围:0-5V测量精度:0.01V设置最低电压阈值,低于该值则系统报警。能够实现电压值的05V的范围内调节,并且仿真及实物调试成功5.3 直流电压表所实现的功能评价总体的电路指标全部实现,在电压输出的范围还有更多的提升空间,继续努力。第六章 存在故障分析与进一步改进12344.1存在故障分析存在的问题是对单片机c语言编写设计不熟悉,调用函数经常出错。4.2进一步改进的可能和方法解决的方法是查找资料,请教同学与老师,对c语言进一步的了解和更好的学会使用。第七章 结论本次课程设计对数字电压表电路认真的学习探讨以及对单片机技术有 了更进一步的熟悉,实际操作和课本上的知识有很大联系,但又高于 课本,一个看似很简单的电路,要动手把它设计出来就比较困难了, 因为是设计要求我们在以后的学习中注意这一点, 要把课本上所学到 的知识和实际联系起来,同时通过本次电路的设计,不但巩固了所学 知识,也是我们把理论与实践从真正意义上结合起来,增强了学习的 综合能力通过这次设计不仅锻炼了我们的团队协作精神,而且提高 了创新能力 在这一个半月的试验中,在收获知识的同时,还收获了阅历,收获 了成熟在此过程中,我们通过查找大量资料,请教老师,以及不懈 的努力,不仅培养了独立思考,动手操作的能力在各种其他方面的能力上也都有了提高,特别是在c语言这一块, 而且在与老师和同学的交流过程中, 互动学习,将知识融会贯通更重要的是我们学会了很多学习的方法,而这是日后最实用的,真的是受益匪浅要面对社会的挑战,只有不断学习, 实践,再学习,再实践不管怎样,这些都是一种锻炼,一种知识的 完全积累,可以把这个当做基础东西,只有掌握了这些最基础的,才可以更进一步,取得更好的成绩。参考文献1皮大能, 单片机课程设计指导书,北京理工大学出版社, 2010. 2田希晖, C51单片机技术教程计, 人民邮电出版社, 2007.3苏小红, C语言大学实用教程第二版, 电子工业出版社, 2009.附录1程序 #include<REG52.h> #include <intrins.h>#define TIME0H 0xFE#define TIME0L 0x0C#define uchar unsigned char#define uint unsigned int sbit LCDRS=P20; sbit LCDRW=P21; sbit LCDE=P22; sbit ADC0832CS=P25; sbit ADC0832CLK=P26; sbit ADC0832DO=P24; sbit ADC0832DI=P24; sbit Up= P10; /加1键 sbit Down=P11;/减1键