最新分布式电压采集系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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();