作者:河南工业大学 高晓丹 王延锋 祁浩阳
指导教师:孙福艳 徐晓光
作品简介
该作品利用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