基于单片机的八路数据采集系统
摘 要:单片机数据采集系统是计算机在工业控制中最为普遍的应用系统?它的任务是采集生产过程中的各种工况参数经过处理后送入内存储器,CPU再对这些参数数据进行分析,运算和处理。本系统设计一个单片机系统,负责数据的采集和显示,设计一个多路数据输入输出系统,实现8路输入和输出。采用89C51系列单片机、ADC0809、LCD1602等芯片实现硬件仿真,采用C语言编程。最后硬件电路在Proteaus下仿真实现。 关键词:数据采集;8路输入输出;LCD。
一、方案设计
数据采集电路的原理框图1所示。
模拟输入通道1 ADC0809 MCS-51 单片机 LCD1602 模拟输入通道2 模拟输入通道8
图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的作用是使中断允许形成两级控制。
1
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
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
#define uchar unsigned char #define uint unsigned int sbit adoe=P3^7; //OE接3.7 sbit eoc=P3^3;
//EOC接3.1
sbit adstart=P3^6; //start接3.2 sbit a0=P3^0; sbit a1=P3^1; sbit a2=P3^2;
//A 3.3 //B 3.4 //C 3.5
sbit lcdrs=P3^5; //LCD RS 3.6 sbit lcden=P3^4; //LCD EN 3.7 sbit dula=P2^6; sbit wela=P2^7;
long int temp,b1,b2,b3,b4,b5; uchar tt;
uchar code table[]=\显示电压
3
void delay(uint z) //延时 {
uint x,y; for(x=z;x>0;x--) for(y=100;y>0;y--); }
void write_command(uchar com)//写命令 {
dula=0; wela=0;
lcdrs=0; //输入指令 }
void write_data(uchar date)//写数据 {
lcdrs=1; //输入数据 }
void init()//初始化 {
lcden=0; P0=date; //显示 delay(5);
lcden=1; //读数据 delay(5);
lcden=0; //写指令或数据 P0=com; delay(5);
lcden=1; //读数据 delay(5);
lcden=0; //写指令或者数据
4