最新分布式电压采集系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分布式电压采集系统

分布式电压采集系统

1.目的

利用单片机双机通信实现多通道采集控制以及采集电压的异地显示。

2.系统组成

图1 系统组成

3.基本设计要求

(1)甲机用于电压信号的采集,要求采集2路电压信号(信号源可由电位器分压得到),将当前采样的通道号和电压值在数码管或LCD进行显示。

(2)实现甲机和乙机的数据通信,采用RS-232方式完成通信接口。

(3)乙机通过键盘设置甲机的采集电压通道,并将给信息发送给甲机。

4.发挥部分

(1)乙机控制甲机电压采集通道,并接收甲机的采集电压数据在乙机的数码管或LCD上进行显示。

(2)增加实现2路信号的同时采集的功能,并进行采样电压的同时显示。

(3)其他发挥。

注:发挥部分前两点可不用同时满足。留出相关测试点,程序固化到单片机中。

电路图:略

甲机程序:

#include

#define uint unsigned int

#define uchar unsigned char

///////相关变量定义///////

bit shift;

uchar num,key;

float temp;

uchar val_int;

uchar val_decimal;

uchar flag=0;

///////I/O口定义/////////

sbit STA_ALE = P3^6;

sbit EOC = P3^1;

sbit OE = P3^7;

sbit ADC_C = P2^0;

sbit ADC_B = P2^1;

sbit ADC_A = P2^2;

sbit W1=P2^3;

sbit W2=P2^4;

sbit W3=P2^5;

sbit W4=P2^6;

sbit wela=P2^7;

////////带小数点数码管显示编码/////////// uchar data numtable_DE[] =

{

0x40,0x79,0x24,0x30,

0x19,0x12,0x02,0x78,

0x00,0x10

};

////////不带小数点数码管显示编码/////////// uchar data numtable[] =

{

0xb0,0xf9,0xa4,0xa0,

0x99,0x92,0x82,0xf8,

0x80,0x90

};

///////数码管动态显示函数声明/////// void disp();

///////延时函数///////

void delay(uint x)

{

uint a,b;

for ( a = x; a > 0; a--)

for ( b = 110; b > 0; b--);

}

///////数码管动态显示函数/////// void disp()

{

P0 = numtable_DE[val_int];

wela=1;

W3=1;

wela=0;

delay(5);

W3=0;

P0 = numtable[(val_decimal/10)]; wela=1;

W2=1;

wela=0;

delay(5);

W2=0;

P0 = numtable[(val_decimal)%10];

wela=1;

W1=1;

wela=0;

delay(5);

W1=0;

}

///////通道编号的数码管显示函数/////// void disp_in(uchar a)

{

P0 = numtable[a];

wela=1;

W4=1;

wela=0;

delay(5);

W4=0;

}

///////通道1的AD转换函数///////

void ADC_1()

{

STA_ALE = 0;

ADC_C = 0;

ADC_B = 0;

ADC_A = 0;

STA_ALE = 1;

delay(5);

STA_ALE = 0;

}

///////通道2的AD转换函数///////

void ADC_2()

{

STA_ALE = 0;

ADC_C = 0;

ADC_B = 0;

ADC_A = 1;

STA_ALE = 1;

delay(5);

STA_ALE = 0;

}

///////判别是哪条通道AD转换函数///////

void ADC(uchar ad_dat) {

if (!shift)

{

OE=0;

ADC_1();

delay(5);

while(!EOC);

OE=1;

disp();

disp_in(1);

ES=0;

SBUF=0xaa;

while(!TI);

TI=0;

SBUF=P1;

while(!TI);

TI=0;

ES=1;

}

if (shift)

{

OE=0;

ADC_2();

相关文档
最新文档