这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 毕业设计专区 » 基于单片机的数字电压表设计

共1条 1/1 1 跳转至

基于单片机的数字电压表设计

专家
2013-01-17 10:38:36     打赏

作者:河南工业大学 高晓丹 王延锋 祁浩阳
指导教师:孙福艳 徐晓光

  作品简介

  该作品利用STC15F2K60S2单片机的A/D转换功能,将输入的模拟电压量转化为数字电压量,并通过驱动电路将转换好的数字电压量通过数码管显示出来。其测量范围为0-5V。具有调试方便,实用等优点。

  平台选型说明  

 

  设计说明

  基于STC15F2K60S2单片机的工作原理,模数转换功能和数据的串转并行输出等结构,将模拟电压量通过模数转换0通道转换为相应的数字量,再经过74HC595串转并驱动电路输出到数码管中,以十进制代码的形式显示出来,从而达到模拟量和数字量的转换。
  外部电路连接很简单,主要是设计程序。程序如下
  #include "STC15F2K.h"
  #include "UART.H"
  #include 
  uchar bdata OutByte;
  sbit Bit_Out=OutByte^7;
  sbit SER=P4^4;
  sbit SRCLK=P4^2;
  sbit RCLK=P4^1;
  uchar code Segment[]={
  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
  0x7c,0x39,0x5e,0x79,0x71,0x76,0x73,0x3e,0x00};
  uint GetADC;
  uchar out[5]="0000";
  #define URMD 0
  #define ADC_POWER 0x80
  #define ADC_FLAG 0x10
  #define ADC_START 0x08
  #define ADC_SPEEDLL 0x00
  #define ADC_SPEEDL 0x20
  #define ADC_SPEEDH 0x40
  #define ADC_SPEEDHH 0x60
  void UAS(uint Data,uchar *p);
  void Delay(uint n);
  void InitADC();
  uchar ch = 0;
  uchar m;
  void OneLed_Out(uchar i,uchar Location)
  {
  uchar j;
  OutByte=Location;
  for(j=1;j<=8;j++)
  {
  SER=Bit_Out;
  SRCLK=0;SRCLK=1;SRCLK=0;
  OutByte=OutByte<<1;
  }
  m=out[i]-0x30;
  OutByte=~Segment[m];
  for(j=1;j<=8;j++)
  {
  SER=Bit_Out;
  SRCLK=0;SRCLK=1;SRCLK=0;
  OutByte=OutByte<<1;
  }
  RCLK=0;RCLK=1;RCLK=0;
  Delay(1);
  }
  void main()
  {
  uchar tmp[]="0123456789";
  uchar Location=0x01,i;
  P2=0x01;
  InitADC();
  IE = 0xa0;
  InitUART();
  while (1)
  {
  Location=0x01;
  UAS(GetADC,out);
  for(i=0;i<4;i++)
  {
  OneLed_Out(i,Location);
  Location=_crol_(Location,1);
  }
  }
  }
  void adc_isr() interrupt 5 using 1
  {
  ADC_CONTR &= !ADC_FLAG;
  GetADC=(ADC_RES<<2)| (ADC_RESL&0xFC);
  ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
  }
  void InitADC()
  {
  P1ASF = 0xff;
  ADC_RES = 0;
  ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
  Delay(2);
  }
  void Delay(uint n)
  {
  uint x;
  while (n--)
  {
  x = 5000;
  while (x--);
  }
  }
  void UAS(uint Data,uchar *p)
  {
  uchar a[]="0123456789";
  *p=a[Data/1000];
  *(p+1)=a[Data%1000/100];
  *(p+2)=a[Data%100/10];
  *(p+3)=a[Data%10]; }

 

  作品特色

  该数字电压表比普通电压误差更小,因为它把输出的实测电压变为原来的200倍,使测量更加准确,而且该电压表的测量范围比较小:0—5V,便于小范围使用。

系统演示视频:http://v.eepw.com.cn/video/play/id/2478




关键词: 基于     单片机     数字     电压表     设计     uchar    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]