班级:
姓名:
学号:
实验二、基于单片机控制的直流微电压测量系统设计
一、 任务
设计并制作一套直流微电压测量装置,用来测量输入的正负直流微电压,并将结果显示在液晶屏上。整个系统的示意图如图1所示。
图1 直流微电压电流测量示意图
二、要求
1.基本要求
(1)信号调理电路的输入阻抗≧500KW;
(2)测量输入直流微电压范围±400mv,分辨率±10mv;
(3)测量结果显示在液晶屏上(负电压在数值前显示“—”号),误差≦10%。
2.发挥部分
(1)提高测量输入直流微电压范围为±600mv或提高分辨率为±5mv,或两者同时提高,误差≦5%;
(2)其它(如进一步提高分辨率等)。
三、说明
(1)整个系统采用5V电压供电,可由直流电源提供。
(2)MCU推荐采用TI的MSP430系列单片机。
(3)输入的直流微电压可由仪表直接提供或仪表输出分压得到。
(4)正负电压由同一输入端接入测量电路。
实现代码:
#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
unsigned char code duan_m[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X00,0X40};//段选显示0-9
unsigned char code wei_m[]={0Xfe,0Xfd,0Xfb,0Xf7,0Xef,0Xdf,0Xbf,0X7f};//位选
uchar ge_ad,shi_ad,bai_ad,qian_ad,wan_ad;
uchar flag1;
sbit D0 = P0^4,D2 = P0^5, D3 = P0^6, D4 = P0^7, D5 = P3^3;
void display(uchar wei,uchar duan);
void ms_delay(uchar num)//延时函数
{
uchar i = 0, j = 0;
for (i=0; i<mun; i++)
for (j=0; j<125; j++);
}
void interrupt_init()
{
IT0 = 1; // 外部中断0开启
EX0 = 1; //使能外部中断0
EA = 1; //打开总中断开关
}
void data_read()
{
}
void data_display(gew,shiw,baiw,qianw,wanw)
{
display(5,gew);
display(4,shiw);
display(3,baiw);
display(2,qianw);
display(1,wan1);
}
void main()
{
uchar gew,shiw,baiw,qianw,wanw;
interrupt_init();
while (1)
{
if(flag1)
{
gew=ge_ad;
shiw=shi_ad;
baiw=shi_ad;
qianw=qian_ad;
wanw=wan_ad;
flag1=0;
}
data_display(gew,shiw,baiw,qianw,wanw);
}
}
void display(uchar wei,uchar duan)
{
P2=duan_m[duan];
P1=wei_m[wei];
ms_delay(10);
}
void exint0() interrupt 0 #if 0 中断一次说明AD向单片机发送一次数据,记录到全局变量
ge shi bai qian wan 中提供显示#end if
{
if(D5)
{
P0=0xff;
wan_ad=0x0f&P0;
}
if(D4)
{
P0=0xff;
qian_ad=0x0f&P0;
}
if(D3)
{
P0=0xff;
bai_ad=0x0f&P0;
}
if(D2)
{
P0=0xff;
shi_ad=0x0f&P0;
}
if(D1)
{
P0=0xff;
ge_ad=0x0f&P0;
flag1=1;
}
}
C语言测控系统程序设计
数据采集与处理实验报告
学生姓名: xx 学号:xxxxx
实验的目的:
1. 掌握定时器/计数器8254的工作原理与编程。
2. 熟悉中断控制器8259A的工作原理与使用方法。
3. 掌握硬件中断程序设计的原理与编程方法。
4. 掌握数/模、模/数转换器的使用与数据采集的方法。
5. 掌握建立磁盘数据文件的方法。
6. 掌握绘制曲线的方法。
7. 学习频谱分析的方法。
实验用设备:
1. 具有ISA总线插槽和USB接口的PC系列微型计算机,操作系统使用DOS或Windows98。
2. 超低频信号发生器。
3. 超低频示波器。
4. HY1232模入/模出接口板。
实验设备连接如图所示。超低频信号发生器产生正弦信号,信号的频率
在1.0Hz左右,振幅为6~7V。
实验要求:
(1)每12ms中断一次,每中断一次从A/D的0通道采集一个数据,放入整型数组,并从D/A通道输出相同的(如果不可能相同,则输出最接近的)电压。256次之后恢复系统原有功能,显示数组中的内容,并显示对应的电压值。示波器上显示的波形应是一个削波的正弦信号。
(2)将存放到整型数组中的数据,用二进制文件的形式建立磁盘数据文件。然后读出磁盘数据文件中的数据,在CRT上显示。注意对比是否与采集时的数据相同。
(3)将采集的数据绘制成曲线。
(4)实时在线整流,D/A输出的电压UDA>0V 。(选作)
(5)实时在线整流,D/A输出的电压UDA<0V 。(选作)
(6)将采集的数据进行FFT变换,画出幅频特性。(选作)
设计和计算:
程序框图:
程序清单和注释:
#include <dos.h>
#include <stdio.h>
#include <math.h>
#include <graphics.h>
#define SIZE 400
int i=0;
int data1[SIZE],data2[SIZE];
float v[SIZE];
void interrupt ad(void);
int change(int x);
void wdisk(int *pw,int n);
void main(void)
{
int j;
FILE *fp;
int driver=DETECT,mode,x00,x11,y00,y11,m;
int data2[256],x1,x2,xstep,ystep,k;
char stt[10];
double value;
disable();
outportb(0x43,0x36);
outportb(0x40,0x9d);
outportb(0x40,0x2e);
/*10ms*/
setvect(0x08,ad);
enable();
while(i<256)
{;}
for (j=0;j<256;j++)
{
printf ("%5d",data2[j]);
printf ("%.5f\n",v[j]);
}
fp=fopen("f1.dat","wb");
if((fp=fopen("f1.dat","r"))==NULL)
{
printf("Can not open this file.\n");
exit();
}
wdisk(data2,256);
fclose(fp);
initgraph(&driver,&mode," ");
x00=100,y00=210,x11=x00+512,y11=y00+128;
rectangle(x00,y00,x11,y11);
m=(y00+y11)/2;
line(x00,m,x11,m);
xstep=(x11-x00)/16;
ystep=(y11-y00)/8;
for(k=0;k<=16;k++)
{
line(x00+xstep*k,y11,x00+xstep*k,y11+5);
value=xstep*k/2;
gcvt(value,3,stt);
outtextxy(x00+xstep*k-8,y11+8,stt);
}
for(k=0;k<=8;k++)
{
line(x00-5,y00+ystep*k,x00,y00+ystep*k);
value=5-1.25*k;
gcvt(value,3,stt);
outtextxy(x00-45,y00+ystep*k,stt);
}
for(k=0;k<=16;k++)
{
line(x00+xstep*k,y11,x00+xstep*k,y11+5);
value=xstep*k/2;
gcvt(value,3,stt);
outtextxy(x00+xstep*k-8,y11+8,stt);
}
for(k=0;k<=8;k++)
line(x00-5,y00+ystep*k,x00,y00+ystep*k);
x1=x00;
setcolor(5);
for(k=0;k<254;k++)
{
x2=x1+2;
line(x1,m-12.8*v[k],x2,m-12.8*v[k+1]);
x1=x2;
}
getch();
closegraph();
printf("That's all\n\t...");
getch();
}
void interrupt ad(void)
{
outportb(0x280,0x00);
do
;
while(!(inportb(0x285)&0x80));
data1[i]=inportb(0x281)|((inportb(0x282)&0x0f)<<8);
data2[i]=!data1[i]+1;
v[i]=0.00244*(data1[i]-2047);
outportb(0x283,(data1[i]&0x00ff));
outportb(0x284,((data1[i]>>8)&0x0f));
i++;
outportb(0x20,0x20);
}
void wdisk(int *pw,int n)
{
FILE *fp;
if((fp=fopen("f1.dat","wb"))==NULL)
{ printf("Can not open the file !\n");
exit();
}
fwrite(pw,sizeof(int),n,fp);
fclose(fp);
printf("\n Data write to f1.dat.");
}
调试中出现的错误及分析:
中国石油大学(北京)实验报告实验名称:基于声卡的数据采集班级:过程10-4班学号:***姓名:***成绩:实验日期:20**年1月…
实验报告班级姓名学号实验二基于单片机控制的直流微电压测量系统设计一任务设计并制作一套直流微电压测量装置用来测量输入的正负直流微电压…
JIANGSUTEACHERSUNIVERSITYOFTECHNOLOGY数据采集系统实验AD采集模块设计学院名称电气信息工程学院…
PHP数据采集实验报告班级:10网工三班学生姓名:谢昊天学号:1215134046实验目的和要求:1、使学生掌握各种Form表单控…
数据采集与处理技术实验报告书实验名称ADC量化与显示原理实验实验时间20xx年11月24日得分一实验目的1了解数据采集中ADC外围…
PHP数据采集实验报告班级:10网工三班学生姓名:谢昊天学号:1215134046实验目的和要求:1、使学生掌握各种Form表单控…
数字化测图技术及应用实验三全站仪数字测图外业数据采集指导书一实验目的与要求1掌握用GTS102N全站仪进行数字测图外业数据采集的作…
中南大学本科生课程实验报告GPS测量与数据处理学生姓名指导教师陈煌匡翠林学院地球科学与信息物理学院专业班级学生学号测绘0902班G…
电子系统设计报告题目多路数据采集系统设计单片机设计类摘要本设计采用ATmega16单片机作为数据采集系统的控制核心系统分为数据采集…
中国石油大学(北京)实验报告实验名称:基于声卡的数据采集班级:过程10-4班学号:***姓名:***成绩:实验日期:20**年1月…