基于单片机的八路数据采集系统方案.docx
- 文档编号:7208419
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:12
- 大小:111.93KB
基于单片机的八路数据采集系统方案.docx
《基于单片机的八路数据采集系统方案.docx》由会员分享,可在线阅读,更多相关《基于单片机的八路数据采集系统方案.docx(12页珍藏版)》请在冰豆网上搜索。
基于单片机的八路数据采集系统方案
基于单片机的八路数据采集系统
摘要:
单片机数据采集系统是计算机在工业控制中最为普遍的应用系统¸它的任务是采集生产过程中的各种工况参数经过处理后送入内存储器,CPU再对这些参数数据进行分析,运算和处理。
本系统设计一个单片机系统,负责数据的采集和显示,设计一个多路数据输入输出系统,实现8路输入和输出。
采用89C51系列单片机、ADC0809、LCD1602等芯片实现硬件仿真,采用C语言编程。
最后硬件电路在Proteaus下仿真实现。
关键词:
数据采集;8路输入输出;LCD。
一、方案设计
数据采集电路的原理框图1所示。
图1数据采集电路的原理框图
根据设计要求,采用的方案如下:
硬件部分实现对8路数据采集和显示的功能,包括MCS-51单片机、ADC0809、LCD1602;软件部分实现单片机对8路输入数据的采集以及对LCD的显示操作。
主要设计思想:
单片机P1与ADC0809相连,P0与LCD连接。
模拟信号通过IN0——IN7输入到ADC0809中转换为数字信号,P1获得此值后,经过处理得到每位的数据后,通过P2口写数据到LCD屏上。
二、硬件电路设计
(一)MCS51单片机
MCS-51单片机的内部资源主要有并行I/O接口、定时器/计数器、串行接口以及中断系统。
I/O接口
51系列单片机有4个8位并行的I/O端口:
P0、P1、P2、P3口。
这4个口既可以并行输入或输出8位数据,又可以按位方式使用,即每一位均能独立作为输入或输出接口用。
定时器/计数器电路
1.MCS-51单片机有两个16位的可编程定时/计数器:
定时/计数器T0和定时/计数器T1。
2.每个定时/计数器既可以对系统时钟计数实现定时,也可以对外部信号计数实现计数功能,这些功能都是通过编程设定来实现的。
3.每个定时/计数器有多种工作方式,其中T0有四种工作方式;T1有三种工作方式,T2有三种工作方式。
通过编程可设定工作于某种方式。
4.每一个定时/计数器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式来处理。
串行接口
MCS-51单片机具有一个全双工的串行异步通信接口,可以同时发送、接收数据。
发送、接收数据可通过查询或中断的方式来处理。
它有四种工作方式:
方式0称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。
方式1称为8位的异步通信方式,通常用于双机通信。
方式2和方式3称为9位的异步通信方式,通常用于多机通信。
中断系统
MCS-51单片机提供5个(52子系列提供6个)硬件中断源:
两个外部中断源INT0(P3.2)和INT1(P3.3),两个定时/计数器T0和T1的溢出中断TF0和TF1,1个串行口发送T1和接收R1中断。
以下为本系统用到的串口中断部分指令:
EA:
中断允许总控位。
EA=0,屏蔽所有的中断请求;EA=1,开放中断。
EA的作用是使中断允许形成两级控制。
ES:
串行口中断允许位。
ES=1允许串行口中断。
REN为允许接收控制位。
REN=1,则允许接收。
TI位发送中断标志位。
RI为接收中断标志位。
(二)数据采集、模数转换模块
这一模块主要有ADC0808转化器和电位器组成成。
ADC0808是CMOS单片型逐次逼近式A/D转换器,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。
输入输出端
1.IN0~IN7:
8路模拟量输入端。
2.OUT1~OUT8:
8位数字量输出端。
传输通道选择端
ADDA、ADDB、ADDC:
3位地址输入线,用于选通8路模拟输入中的一路。
使能端
1.ALE:
地址锁存允许信号,输入,高电平有效。
2.START:
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
3.EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
4.OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
5.CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
6.REF(+)、REF(-):
基准电压。
(三)显示模块
显示模块选用1602型LCD显示模块。
1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。
1602型LCD可以显示2行16个字符,有8位数据总线D0-D7和RS,R/W,EN三个控制端口,工作电压为5V,并且具有字符对比度调节和背光功能。
各引脚功能
1.VSS:
电源地。
2.VDD:
电源正极。
3.VEE:
液晶显示偏压信号。
4.RS:
数据/命令选择端。
5.R/W:
读写选择端。
6.E:
使能信号。
7.D0-D7:
数据输入/输出口。
三、软件编程
设计思想:
ADC0809的使能控制端连接在单片机P3口,操作时由程序控制。
当A/D转换结束后由单片机将P1口A/D转换后的数据附给P0口,进而由连接在P0口的LCD显示。
程序如下:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitadoe=P3^7;//OE接3.7
sbiteoc=P3^3;//EOC接3.1
sbitadstart=P3^6;//start接3.2
sbita0=P3^0;//A3.3
sbita1=P3^1;//B3.4
sbita2=P3^2;//C3.5
sbitlcdrs=P3^5;//LCDRS3.6
sbitlcden=P3^4;//LCDEN3.7
sbitdula=P2^6;
sbitwela=P2^7;
longinttemp,b1,b2,b3,b4,b5;
uchartt;
ucharcodetable[]="0123456789.V";//显示电压
voiddelay(uintz)//延时
{
uintx,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
voidwrite_command(ucharcom)//写命令
{
dula=0;
wela=0;
lcdrs=0;//输入指令
P0=com;
delay(5);
lcden=1;//读数据
delay(5);
lcden=0;//写指令或者数据
}
voidwrite_data(uchardate)//写数据
{
lcdrs=1;//输入数据
P0=date;//显示
delay(5);
lcden=1;//读数据
delay(5);
lcden=0;//写指令或数据
}
voidinit()//初始化
{
lcden=0;
write_command(0x38);//不可变,显示模式设置:
16*2显示,5*7点阵,8位数据接口
write_command(0x0c);//屏幕开启和光标闪烁
write_command(0x06);//显示开关及光标设置
write_command(0x01);//清屏
}
voidstart()//开始AD转换
{
adoe=0;
adstart=0;
_nop_();
adstart=1;
adstart=0;
}
voidxianshi()//AD转化结果显示
{
write_data(table[b1]);//最高位
delay
(1);
write_data(table[10]);//小数点
delay
(1);
write_data(table[b2]);//第二位
delay
(1);
write_data(table[b3]);//第三位
delay
(1);
write_data(table[11]);//电压V
delay
(1);
}
voidfirst_mark()//0-4路通道的标号
{
write_command(0x01);
write_command(0x80);
write_data('A');
delay
(1);
write_command(0x80+0x01);
write_data('=');
delay
(1);
write_command(0x80+0x09);
write_data('B');
delay
(1);
write_command(0x80+0x0a);
write_data('=');
delay
(1);
write_command(0x80+0x40);
write_data('C');
delay
(1);
write_command(0x80+0x41);
write_data('=');
delay
(1);
delay
(1);write_command(0x80+0x49);
write_data('D');
delay
(1);
write_command(0x80+0x4a);
write_data('=');
delay
(1);
}
voidsecond_mark()//5-7路通道的标号
{
write_command(0x01);
write_command(0x80);
write_data('E');
delay
(1);
write_command(0x80+0x01);
write_data('=');
delay
(1);
write_command(0x80+0x09);
write_data('F');
delay
(1);
write_command(0x80+0x0a);
write_data('=');
delay
(1);
write_command(0x80+0x40);
write_data('G');
delay
(1);
write_command(0x80+0x41);
write_data('=');
delay
(1);
delay
(1);write_command(0x80+0x49);
write_data('H');
delay
(1);
write_command(0x80+0x4a);
write_data('=');
delay
(1);
}
voidmain()
{
a2=0;
init();//调用LCD初始化子程序
TMOD=0x01;
EA=1;//开总中断
TH0=(65535-1000)/256;
TL0=(65535-1000)%256;
ET0=1;//开定时器0中断
TR0=1;//定时器0置位
first_mark();
while
(1)
{
a0=0;//0路或4路通道的AD转化
a1=0;
start();
while(!
eoc);
adoe=1;
temp=P1;
delay(3);
adoe=0;
b1=(temp*500/255)/100;//最高位
b2=(temp*500/255)%100/10;//第二位
b3=(temp*500/255)%10;//第三位
write_command(0x80+0x02);
xianshi();
a0=1;//1路或5路通道的AD转化
a1=0;
start();
while(!
eoc);
adoe=1;
temp=P1;
delay(3);
adoe=0;
b1=(temp*500/255)/100;//最高位
b2=(temp*500/255)%100/10;//第二位
b3=(temp*500/255)%10;//第三位
write_command(0x80+0x0b);
xianshi();
a0=0;//2路或6路通道的AD转化
a1=1;
start();
while(!
eoc);
adoe=1;
temp=P1;
delay(3);
adoe=0;
b1=(temp*500/255)/100;//最高位
b2=(temp*500/255)%100/10;//第二位
b3=(temp*500/255)%10;//第三位
write_command(0x80+0x42);
xianshi();
a0=1;//3路或7路通道的AD转化
a1=1;
start();
while(!
eoc);
adoe=1;
temp=P1;
delay(3);
adoe=0;
b1=(temp*500/255)/100;//最高位
b2=(temp*500/255)%100/10;//第二位
b3=(temp*500/255)%10;//第三位
write_command(0x80+0x4b);
xianshi();
}
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if((a2==0&&tt==20)==1)//LCD第二屏显示
{
tt=0;
a2=1;
second_mark();
}
if((a2==1&&tt==20)==1)//LCD第一屏显示
{
tt=0;
a2=0;
first_mark();
}
}
四、系统调试和结果分析
根据方案设计结果,进行了硬件电路在Proteaus下的仿真。
当通过电位器调节AD转换器输入端的电压时,模拟电压值经过AD转换后,经由单片机将转换后的电压值发送至P0口,供LCD进行显示。
仿真过程描述:
通过keil软件对所编程序进行编译,生成.hex文件,在proteaus软件中,用MCS51单片机调用.hex即可进行硬件的仿真。
该仿真包括两部分:
1、对8路电压进行采集,经由AD转换器进行转化,转化后的16进制数存于单片机的内部存储器中。
2、对转换后的电压进行显示。
将内部存储器中存储的转化后的电压对应的16进制数付给P0口,由LCD进行显示。
调节电位器LCD的显示数据也会发生变化。
调试中遇到的问题:
将程序下载至开发板上的单片机进行硬件调试时主要遇到以下两个问题:
1、LCD不显示数据,LED出现乱闪。
解决方法:
将LED的段选和位选端关闭后再进行硬件调试,问题得到解决。
2、调节电位器后,AD转换的数据不变化只显示5V。
解决方法:
AD转换程序出现错误,更改程序后问题得到解决。
五、结论及进一步设想
本系统设计一个单片机系统,实现8路数据的采集和显示,它的任务是采集生产过程中的各种工况参数经过处理后送入内存储器,CPU再对这些参数数据进行分析,运算和处理。
采用89C51系列单片机、AD转换器、LCD1602等器件,并采用C语言编程,在Proteaus下实现了硬件仿真,得到了一个8路数据输入输出系统。
根据实验结果,本设计已经完成了设计任务,达到要求。
但是由于仿真与实际应用是有很大差别的,该单片机的8路数据采集系统还存在着实际的应用方面的缺陷,可以通过把C语言编程、单片机、真实的硬件电路等更精密的器件综合到一起,控制在工厂生产过程中需要采集和控制的数据,从而进一步改善该系统,使其能够应用到实际的生产过程中。
参考文献:
[1]谢维成,杨加国.单片机原理与应用及C51程序设计.北京:
清华大学出版社,2009
[2]于海生等.微型计算机控制技术.北京;清华大学出版社,2008
[3]刘复华.单片机及其应用系统.北京:
清华大学出版社,1992
[4]李斌,董慧颖.可重组机器人研究和发展现状.沈阳工业学院学报,2000
附录1电路原理图
附录2PCB图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 八路 数据 采集 系统 方案