基于STC89C52单片机的数字电压表

来源: 作者:2017年11月15日 17:44

   基于stc89c52单片机的数字电压表

  设计报告

  一、设计题目

  二、设计内容与要求

  三、设计目的意义

  四、系统硬件电路

  五、程序流程图与源程序

  六、系统功能分析与说明

  七、设计体会

  八、参考文献

  基于STC89C52的简易数字电压表的设计

  摘要:本课题是利用单片机设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码管显示,使用的元器件数目较少。外界电压模拟量输入到A/D转换部分的输入端,通过ADC0809转换变为数字信号,输送给单片机。然后由单片机给数码管数字信号,控制其发光,从而显示数字。此外,本文还讨论了设计过程中的所用的软件硬件环境,调试所出现的问题等。

  关键词:单片机; STC89C52;数字电压表; ADC0809,四位数码管

  一、设计题目

  基于STC89C52的简易数字电压表的设计。

  二、设计内容与要求

  用STC89C52单片机和ADC0809组成一个数字电压表,要求能够测量0~5V的直流电压值,并用四位数码管显示,并要求所用元器件最少。

  三、设计目的意义

  1.通过亲身的设计应用电路,将所用的理论知识应用到实践中,增强实践动手能力,进而促进理论知识的强化。

  2.通过数字电压表的设计系统掌握51单片机的应用。掌握A/D转换的原理及软件编程及硬件设计的方法,掌握根据课题的要求,提出选择设计方案,查找所需元器,设计并搭建硬件电路,编程写入EPROM并进行调试等。

  四、系统硬件电路图

  4.1 系统原理框图

  选择STC89C52作为单片机芯片,选用四位8段共阳极LED数码管实现电压显示,利用ADC0809作为数模转换芯片。将数据采集接口电路输入电压传入ADC0809数模转换元件,经转换后通过D0至D7与单片机P1口连接,把转换完的模拟信号以数字信号的信号的形式传给单片机,信号经过单片机处理从LED数码显示管显示。P2口接数码管位选,P0接数码管段选,实现数据的动态显示,如图4.1所示。

  基于STC89C52单片机的数字电压表
        4.2 STC89C52的结构

  在本次课题设计中我们选择了STC89C52芯片。STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

  4.2.1 STC89C52内部结构概述

  主要功能特性

  兼容MCS51指令系统8K可反复擦写Flash ROM

  3个16位可编程定时/计数器中断时钟频率0-24MHz

  2个串行中断可编程UART串行通道

  2个外部中断源共6个中断源

  2个读写中断口线3级加密位

  低功耗空闲和掉电模式软件设置睡眠和唤醒功能

  基于STC89C52单片机的数字电压表

  4.2.2 CPU结构

  CPU 是单片机的核心部件。它由运算器和控制器等部件组成。

  1. 运算器

  运算器以完成二进制的算术/逻辑运算部件ALU为核心。它可以对半字节(4)、单字节等数据进行操作。例如,能完成加、减、乘、除、加1、减1、BCD码十进制调整、比较等算术运算,完成与、或、异或、求反、循环等逻操作,操作结果的状态信息送至状态寄存器

  运算器还包含有一个布尔处理器,用以处理位操作。它以进位标志位C为累加器,可执行置位、复位、取反、位判断转移,可在进位标志位与其他可位寻址的位之间进行位数据传诵等操作,还可以完成进位标志位与其他可位寻址的位之间进行逻辑与、或操作。

  2.程序计数器PC

  PC是一个16位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。

  3.指令寄存器

  指令寄存器用于存放指令代码。CPU执行指令时,由程序存储器中读取的指令代码送如指令寄存器,经指令译码器译码后由定时有控制电路发出相应的控制信号,完成指令功能。

  4.2.3 存储器和特殊功能寄存器

  1. 存储器(Memory)是计算机系统中的记忆设备,用来存放程序和数据。计算机中的全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。它根据控制器指定的位置存入和取出信息。

  2.特殊功能寄存器

  特殊功能寄存器(SFR)的地址范围为80H~FFH。在MCS-51中,除程序计数器PC和四个工作寄存器区外,其余21个特殊功能寄存器都在这SFR块中。其中5个是双字节寄存器,它们共占用了26个字节。各特殊功能寄存器的符号和地址见附表2。其中带*号的可位寻址。特殊功能寄存器反映了8051的状态,实际上是8051的状态字及控制字寄存器。用于CPU PSW便是典型一例。这些特殊功能寄存器大体上分为两类,一类与芯片的引脚有关,另一类作片内功能的控制用。与芯片引脚有关的特殊功能寄存器是P0~P3,它们实际上是4个八位锁存器(每个I/O口一个),每个锁存器附加有相应的输出驱动器和输入缓冲器就构成了一个并行口。MCS-51共有P0~P3四个这样的并行口,可提供32根I/O线,每根线都是双向的,并且大都有第二功能。其余用于芯片控制的寄存器中,累加器A、标志寄存器PSW、数据指针DPTR等的功能前已提及。

  4.2.4 P0-P3口结构

  P0口功能 :P0口具有两种功能:第一,P0口可以作为通用I/O接口使用,P0.7—P0.0用于传送CPU的输入/输出数据。输出数据时可以得到锁存,不需外接专用锁存器,输入数据可以得到缓冲。第二,P0.7—P0.0在CPU访问片外存储器时用于传送片外存储器de低8位地址,然后传送CPU对片外存储器的读写

  P1口 功能 :P1口的功能和P0口de第一功能相同,仅用于传递I/O输入/输出数据。

  P2口的功能 :P2口的第一功能和上述两组引脚的第一功能相同,即它可以作为通用I/O使用。它的第二功能和P0口引脚的第二功能相配合,作为地址总线用于输出片外存储器的高8位地址。

  P3口功能 :P3口有两个功能:第一功能与其余三个端口的第一功能相同;第二功能作控制用,每个引脚都不同。

  表4.1 P3口第二功能

  引脚名称功能

  P3.0RXD串行数据接收口

  P3.1TXD串行数据发送口

  P3.2INT0外中断0输入

  P3.3INT1外中断1输入

  P3.4T0计数器0计数输入

  P3.5T1计数器1计数输入

  P3.6WR外部RAM写选通信号

  P3.7RD外部RAM读选通信号

  4.2.5 时钟电路和复位电路

  1.时钟电路

  单片机的时钟一般需要多相时钟,所以时钟电路由振荡器和分频器组成。

  MCS-51内部有一个用于构成振荡器的可控高增益反向放大器。两个引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。在片外跨接一晶振和两个匹配电容C1、C2如图2.5所示。就构成一个自激振荡器。振荡频率根据实际要求的工作速度,从几百千赫至24MHz可适当选取某一频率。匹配电容C1、C2要根据石英晶体振荡器的要求选取。

  当晶振频率为12MHz时,C1C2一般选30pF左右。图2.5中PD是电源控制寄存器PCON.1的掉电方式位,正常工作方式PD=0。当PD=1时单片机进入掉电工作方式,是一种节能工作方式。上述电路是靠MCS-51单片机内部电路产生振荡的。也可以由外部振荡器或时钟直接驱动MCS-51。

  基于STC89C52单片机的数字电压表

  

  2.复位电路

  复位是单片机的初始化操作。其功能主要是将程序计数器(PC)初始化为0000H,使单片机从0000H单元开始执行程序,并将特殊功能寄存器赋一些特定值。复位是使单片机退出低功耗工作方式而进入正常状态一种操作。复位是上电的第一个操作,然后程序从0000H开始执行。在运行中,外界干扰等因素可能会使单片机的程序陷入死循环状态或“跑飞”。要使其进入正常状态,唯一办法是将单片机复位,以重新启动。

  复位后,程序计数器(PC)及各特殊功能寄存器(SFR)的值如表4.2所示。

  表4.2 程序计数器及各特殊功能寄存器的复位值

  寄存器复位状态寄存器复位状态

  PC0000HTH100H

  ACC00HP0~P3FFH

  PSW00HIPxx000000B

  SP07HIE0xx00000B

  DPTR0000HTMOD00H

  TCON00HSCON00H

  TL000HSBUF不定

  TH000HPCON0xxx0000B

  TL100H

  RST引脚是复位端,高电平有效。在该引脚输入至少连续两个机器周期以上的高电平,单片机复位。RST引脚内部有一个斯密特ST触发器(图2.10)以对输入信号整形,保证内部复位电路的可靠,所以外部输入信号不一定要求是数字波形。使用时,一般在此引脚与VSS引脚之间接一个8.2kΩ的下拉电阻,与VCC引脚之间接一个约10μF的电解电容,即可保证上电自动复位。

  基于STC89C52单片机的数字电压表
上电或手动复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或手动复位的操作。

  4.3器件的比较与选择

  4.3.1显示器

  本次设计中有显示模块,而常用的显示器件比较多,有数码管,LED点阵,1602液晶,12864液晶等。

  1. 数码管是最常用的一种显示器件,它是由几个发光二极管组成的8字段显示器件,其特点是价格非常的便宜,使用也非常的方便,显示效果非常的清楚。小电流下可以驱动每光,发光响应时间极短,体积小,重量轻,抗冲击性能好,寿命长。但数码管只能是显示0——9的数据。不能够显示字符。这也是数码管的不足之处。

  2. LED点阵显示器件是由好多个发光二极管组成的。具有高亮度,功耗低,视角大,寿命长,耐湿,冷,热等特点,LED点阵显示器件可以显示数字,英文字符,中文字符等。

  3. 1602液晶是工业字符型液晶,能够同时显示16*2即32个字符。1602液晶模块内部的字符发生存储器已经存储了160个不同的点阵字符图形,这些字这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。使用时直接编写软件程序按一定的时序驱动即可。它的特点是显示字迹清楚,价格相对便宜。

  4. 12864液晶也是一种工业字符型液晶,它不仅能够显示1602液晶所可以显示的字符,数字等信息,而且还可以显示8*4个中文汉字和一些简单的图片,显示信息也非常的清楚。使用时也直接编写软件程序按一定的时序驱动即可。不过它的价格比1602液晶贵了很多。

  综合上述,根据本设计的要求和价格的考虑,选择数码管显示器。

  基于STC89C52单片机的数字电压表
单位数码管如图4.4所示,四位共阳极数码管如图4.5所示。

  
 

  基于STC89C52单片机的数字电压表4.3.2模数(A/D)芯片

  A/D转换器是模拟量输入通道中的一个环节,单片机通过A/D转换器把输入模拟量变成数字量再处理。A/D转换的常用方法有:①计数式A/D转换,②逐次逼近型A/D转换,③双积分式A/D转换,④ V/F变换型A/D转换。在这些转换方式中,记数式A/D转换线路比较简单,但转换速度较慢,所以现在很少应用。双积分式A/D转换精度高,多用于数据采集及精度要求比较高的场合,如5G14433(31/2位),AD7555(41/2位或51/2位)等,但速度更慢。随着大规模集成电路的发展,目前不同厂家已经生产出了多种型号的A/D转换器,以满足不同应用场合的需要。如果按照转换原理划分,主要有3种类型,即双积分式A/D转换器、逐次逼近式A/D转换器和并行式A/D转换器。目前最常用的是双积分和逐次逼近式。

  (1)A/D芯片的比较

  双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点,比如ICL71XX系列等,它们通常带有自动较零、七段码输出等功能。与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0808、ADC0809等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送单片机进行分析和显示。

  1. AD0809是8位逐次逼近型A/D转换器,它是由一个8路的模拟开关、一个地址锁存译码器、一个A/D 转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。些A/D转换器是的特点是8位精度,属于并行口,如果输入的模拟量变化大快,必须在输入之前增加采样电路。

  2. AD0832也是8位逐次逼近型A/D转换器,可支持致命伤个单端输入通道和一个差分输入通道。它易于和微处理器接口或独立使用;可满量程工作;可用地址逻辑多路器选通各输入通道。

  3. TLC2543C是12位开关电容逐次逼近A/D转换,每个器件有三个控制输入端,片选,输入/输出时钟以及地址输入端。它可以从主机高速传输转换数据。它有高速的转换,通用的控制能力,具有简化比率转换,刻度以及模拟电路与逻辑电路和电源噪声隔离,耐高温等特点。

  综合上述,逐次逼近型A/D转换既照顾了转换速度,有具有一定的精度,这里选用的是逐次逼近型的A/D转换芯片ADC0809。

  基于STC89C52单片机的数字电压表

  基于STC89C52单片机的数字电压表

  

  (2)ADC0809 的工作原理

  1.IN0-IN7:8 条模拟量输入通道

  ADC0809 对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。

  地址输入和控制线:4条。ALE 为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A, B,C 三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B 和C 为地址输入线,用于选通IN0-IN7 上的一路模拟量输入。通道选择表如表4.3所示。

  

  基于STC89C52单片机的数字电压表

  2.数字量输出及控制线:11 条

  ST 为转换启动信号。当ST 上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D 转换;在转换期间,ST 应保持低电平。EOC 为转换结束信号。当EOC 为高电平时,表明转换结束;否则,表明正在进行A/D 转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7-D0 为数字量输出线。

  CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,

  VREF(+),VREF(-)为参考电压输入。

  3. ADC0809 应用说明

  ①ADC0809 内部带有输出锁存器,可以与AT89S51 单片机直接相连。

  ②初始化时,使ST 和OE信号全为低电平。

  ③送要转换的哪一通道的地址到A,B,C 端口上。

  ④在ST 端给出一个至少有100ns 宽的正脉冲信号。

  ⑤是否转换完毕,我们根据EOC 信号来判断。

  ⑥当EOC变为高电平时,这时给OE 为高电平,转换的数据就输出给单片机了。

  AD0809的启动方式为脉冲启动方式,启动信号START启动后开始转换,EOC 信号在

  START 的下降沿10us后才变为无效的低电平。这要求查询程序待EOC无效后再开始查询,

  转换完成后,EOC 输出高电平,再由OE 变为高电平来输出转换数据。我们在设计程序时

  可以利用EOC 信号来通知单片机(查询法或中断法)读入已转换的数据,也可以在启动

  AD0809 后经适当的延时再读入已转换的数据。AT89S51的输出频为晶振频的1/6(2MHZ),AT89S1 与SUN7474连接经与7474的ST脚提供AD0809 的工作时钟。AD0809 的工作频范围为10KHZ-1280KHZ,当频率范围为500KHZ 时,其转换速度为128us。

  4.4.2 系统原理图

  基于STC89C52单片机的数字电压表

  4.4.3 系统PCB

  

  五、程序流程图与源程序

  5.1 程序流程图

   基于STC89C52单片机的数字电压表
        基于STC89C52单片机的数字电压表
         基于STC89C52单片机的数字电压表

  5.4 C语言程序清单

  #include《reg51.h》

  typedef unsigned char uchar;

  typedef unsigned int uint;

  code unsigned char SEGMENT[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

  code unsigned char SELECT[4]={0xFD,0xF7,0xDF,0x7F};

  uint X1;

  sbit P2_1=P2^1;

  sbit P2_3=P2^3;

  sbit P2_5=P2^5;

  sbit P2_7=P2^7;

  sbit START=P2^2;

  sbit OE=P2^6;

  sbit EOC=P2^4;

  sbit spk=P2^0;

  void delay(uint i)

  {

  uint j;

  for(j=0;j《=i;j++);

  }

  void Delayms(uint i)

  {

  uchar j,k;

  for(j=0;j《=i;j++)

  for(k=0;k《=114;k++);

  }

  void TImer(void)

  {

  TMOD=0x01;

  TH0=0xdc;

  TL0=0x00;

  EA=1;

  ET0=1;

  TR0=1;

  }

  uchar Scankey(void)

  {

  uchar key;

  if((P3&0x0f)==0x0f) return(0xff);

  Delayms(10);

  if((P3&0x0f)==0x0f) return(0xff);

  key=P3&0x0f;

  while((P3&0x0f)!=0x0f);

  return(key);

  }

  void display(unsigned int wen)

  {

  staTIc unsigned char num=0;

  P2_1=1;

  P2_3=1;

  P2_5=1;

  P2_7=1;

  P0=0xff;

  switch(num)

  {

  case 0:P0=SEGMENT[wen%10];break;

  case 1:P0=SEGMENT[wen/10%10];break;

  case 2:P0=SEGMENT[wen/100%10];break;

  case 3:P0=SEGMENT[wen/1000]&0x7f;break;

  }

  P2=SELECT[num];

  num++;

  num%=4;

  }

  void ADC0809()

  {

  uchar temp=2;

  START=0;

  delay(5);

  START=1;

  delay(5);

  START=0;

  delay(5);

  while(!EOC);

  OE=1;

  P1=0xff;

  temp=P1;

  X1=(unsigned int)temp*19.53;

  OE=0;

  if(X1==0)

  {

  spk=0;

  }

  else

  spk=1;

  }

  void TImer_0(void) interrupt 1

  {

  staTIc unsigned int num=0;

  TH0=0xdc;

  TL0=0x00;

  num++;

  if(num==50)

  {

  num=0;

  ADC0809();

  }

  }

  void main()

  {

  timer();

  while(1)

  {

  display(X1);

  delay(500);

  }

  }

  六、系统功能分析与说明

  6.1 数字电压表的概述

  数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。本章重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原理。

  6.2 数字电压表的介绍

  模拟电压表具有电路简单、成本低、测量方便等特点,但测量精度较差,特别是受表头精度的限制,即使采用0.5级的高灵敏度表头,读测时的分辨力也只能达到半格。再者,模拟式电压表的输入阻抗不高,测高内阻源时精度明显下降。数字电压表作为数字技术的成功应用,发展相当快。数字电压表(Digital VoIt Me-ter,DVM),以其功能齐全、精度高、灵敏度高、显示直观等突出优点深受用户欢迎。特别是以A/D转换器为代表的集成电路为支柱,使DVM向着多功能化、小型化、智能化方向发展。DVM应用单片机控制,组成智能仪表;与计算机接口,组成自动测试系统。目前,DVM多组成多功能式的,因此又称数字多用表(Digital Multi Meter,DMM)。

  DVM是将模拟电压变换为数字显示的测量仪器,这就要求将模拟量变成数字量。这实质上是个量化过程,即将连续的无穷多个模拟量用有限个数字表示的过程,完成这种变换的核心部件是A/D转换器,最后用电子计数器计数显示,困此,DVM的基本组成是A/D转换器和电子计数器。

  DVM最基本功能是测直流电压,考虑到仪器的多功能化,可将其他物理量,如电阻、电容、交流电压、电流等,都变成直流电压,因此,还应有一个测量功能选择变换器,它包含在输入电路中。DVM对直流电压直接测量时的测量精度最高,其他物理量在变换成直流电压时,受功能选择变换器精度的限制,测量精度有所下降。

  6.3 数字电压表工作原理

  数字电压表的系统工作原理:首先,被测电压信号进入A/D转换器,单片机中控制信号线发出控制信号,启动A/D转换器进行转换,其采样得到的数字信号数据在相应的码制转换模块中转换为显示代码。最后发出显示控制与驱动信号,驱动外部的数码管显示相应的数据。图2.1所示为DVM的基本组成框图,需指出的是,图中将DVM分成模拟和数字两大部分,从框图上看,A/D转换器包含在模拟部分,这样划分并不严格,因为A/D转换器本身具有数字电路的性质,特别是大规模集成化A/D转换器是模拟与数字两系统相互结合的,就连逻辑控制也集成在其中。

  基于STC89C52单片机的数字电压表6.4 数字电压表发展及未来

  回顾一下DVM的发展过程,大致可以分为以下三个阶段。

  1.数字化阶段

  20世纪50年代到60年代中期,DVM的特点是运用各种原理实现模/数(A/D)转换,即将模拟量转化成数字量,从而实现测量仪表的数字化。1952年,第一台问世的数字电压表是采用电子管的伺服比较式;1956年出现谐波式V/T(电压/时间变换型);1961年出现全晶体管化的逐次逼近比较式;1963年出现电压/频率(V/F)变换型(单积分式);1966年出现双积分式(双斜式)等。这一时期的显示位数是3.5-5.5位

  2.高精度阶段

  由于精密电测量的需要,DVM开始向高准确、高位数方向发展,出现了所谓复合型原理的仪表。如1971年日本研制的TR-6567(三次采样积分式);1973年英国研制的SM-215(两次采样电感分压比较型);1972年日本研制的TR-6501型DVM已达到了8位数。与此同时对积分方案进行了改进和提高,出现了如Dana公司的6900型(7位)、Solartron公司生产的7075型(8位),其准确度可达到百万分之几。

  3.智能化阶段

  由于电子技术、大规模集成电路(LSI)及计算机技术的发展,是人们不久就研制出微处理器(P)数字电压表,实现了DVM数据处理自动化和可编程序,因为带有存储器并使用软件支持,所以可以进行信息处理,可通过标准接口组成自动测试系统(ATS)例如,Fluke公司的8506型、Solartron公司的7065型和7081型、Datron公司的1071和1281型,以及Fluke公司的最新产品8508A型等。它们除了完成原有DVM的各种功能外,还能够自校、自检,保证了自动测量的高准确度,实现了仪器、仪表的智能化。当前,智能式仪表发展十分迅速,而微处理式DVM在智能仪表中占的比重最大。智能化的DVM为实现各种物理量的动态测量提供了可能。

  6.5 软硬件调试

  软件调试的任务是利用开发工具进行调试,发现和纠正程序的错误,同时也能发现硬件的故障。软件调试是一个模块接一个模块进行的。首先单独调试各子程序是否能够按照预期的功能,接口电路的控制是否正常。最后调试整个程序。尤其注意的是各模块间能否正确的传递参数。

  1. 检查数码管显示模块程序。观察数码管上是否能够显示相应的字符。

  2. 检查A/D转换模块程序。可以在硬件电路的输入端输入已知的几个电压,分别观察数码管上是否显示相应的电压值。

  3. 检查数据的转换模块程序。

  程序可分为数据采集系统、数据转换系统、显示系统,这三部分先独立测试,然后整体调试。

  ①数据采集系统:因为ADC0809本身并没有内部时钟,需要外部时钟来提供工作的时钟频率。如果利用单片机ALE端脚提供的频率为6MHZ,而ADC0809工作的频率在10KHZ-1MHZ。因此,需要增加含触发器功能的器件,从面增加了系统的复杂程度。后来,经过小组不断的讨论与思考,最终用软件编程来提供ADC0809工作的时钟频率,从而解决了这个问题。

  ②显示系统的调试:要显示的数据存放在71H、72H、73H、74H单元中,先在30H~39H分单元中存放0~9的数,运行显示程序,进行查表指令,察看显示的结果是否与存放值一样。在测试的过程中发现小数点没有显示,通过下面几条指令,把小数点显示出来。

  MOVC A,@A+DPTR

  CJNE R2,#0FEH,NOT_ONE ;不是左边第一个数码管,则转移

  ORL A,#80H ;左边第一个数码管显示小数点

  NOT_ONE: MOV P0,A ;数码管段选

  另外,发现四位数码管显示的亮度不一样,有时还存在闪烁的情况,后来经过调整各位数码管显示的间隔,调用延时函数解决了亮度不一的问题。

  ③整体测试:把三部分进行程序联调,编译程序,看是否存在错误。经过多次的尝试与查找相资料,最后做出并完善了整体的方案。

  4.系统进一步改进方案

  进一步提高测量精度,把精确到小数点后一位改为精确到小数点后三位。

  6.5系统功能分析

  本课题是利用单片机设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,使用的元器件数目较少。外界电压模拟量输入到A/D转换部分的输入端,通过A/D转换变为数字信号,输送给单片机。然后由单片机给数码管数字信号,控制其发光,从而显示数字。

  七、设计体会

  经过近二周的单片机课程设计,终于完成了我的数字电压表的设计,基本达到设计要求。

  对于此次课程设计,有许多的感触与体会,遇到的难题多,学习到的知识也就更多。

  第一,硬件电路遇到了ADC0809无内部时钟,需外接外部时钟,如何解决这个问题,我们小组进行了多次讨论,最终确定了在程序中提供时钟信号,大大降低了硬件电路的复杂度。

  第二,则是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。其中,我遇到了很多的问题,虽然以前还做过这样的设计,但是以前的都是用C语言进行编程。而此次运用汇编语言编程,着实让我当头一棒,因为除了微机原理实验进行过相关编程,汇编语言的编程能力还停留在理论阶段。在此次编程中,首先,我是先用C语言编程,进行调试后,成功的达到了课程设计的要求。其次,查找汇编语言的相关资料,经过不懈的努力与调试,终于将汇编语言版的成功编程出来。

  第三,在一个课题中,要设计一个成功的电路,必须要有耐心,要有坚持的毅力。在整个电路的设计过程中,重要的是各个单元电路的连接及电路的细节设计上,如在多种方案的选择中,我们仔细比较分析其原理以及可行的原因。这就要求我们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。完成这次设计后,我在书本理论知识的基础上又有了更深层次的理解。

  第四,在本次设计的过程中,我还学会了高效率的查阅资料、运用工具书、利用网络查找资料。我发现,在我们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整,这就要求我们应更加注重实践环节。

  最后,还要在此感谢课程设计的指导老师们和我的组员们,他们在整个过程中都给予了我充分的帮助与支持。

  八、参考文献

  [1] 李华.MCS-51系列单片机实用接口技术[M].1989.

  [2] 周立功。单片机实验与实践。北京:北京航空航天大学出版社。

  [3] 吴国经。单片机应用技术。北京:中国电力出版社,2003.

  [4] 徐惠民 安德宁 丁玉珍。单片微型计算机原理、接口及应用。北京:北京邮电大学出版社,2007年。

  [5] 徐爱钧。《智能化测量控制仪表原理与设计》(第二版)[M]。北京:北京航空航天大学出版社,2004.

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
收藏 人收藏
分享:
发表评论

elecfans网友

分享到:

用户评论(0