于基单片机8位数据采集设计学生本科毕业设计.docx
- 文档编号:11905290
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:19
- 大小:166.71KB
于基单片机8位数据采集设计学生本科毕业设计.docx
《于基单片机8位数据采集设计学生本科毕业设计.docx》由会员分享,可在线阅读,更多相关《于基单片机8位数据采集设计学生本科毕业设计.docx(19页珍藏版)》请在冰豆网上搜索。
于基单片机8位数据采集设计学生本科毕业设计
甘肃联合大学学生毕业论文
题目:
基于单片机8位数据采集设计
作者:
指导老师:
电子信息工程学院电子信息工程技术系
电子信息工程技术专业11级
三年制一班
2013年10月14日
基于单片机的8位数据采集设计
TheDesignOfMulti-channelDataAcquisitionSystemBasedOnSCM
摘要
本文介绍了基于单片机的数据采集的硬件设计和软件设计,数据采集系统是模拟域与数字域之间必不可少的纽带,它的存在具有非常重要的作用。
本文介绍的重点是数据采集系统,而该系统硬件部分的重心在于单片机。
数据采集与通信控制采用了模块化的设计,数据采集与通信控制采用了单片机AT89S52来实现,硬件部分是以单片机为核心,还包括A/D模数转换模块,显示模块,和串行接口部分。
该系统从机负责数据采集并应答主机的命令。
8路被测电压通过模数转换器ADC0809进行模数转换,实现对采集到的数据进行模拟量到数字量的转换,并将转换后的数据通过串行口MAX232传输到上位机,由上位机负责数据的接受、处理和显示,并用LED数码显示器来显示所采集的结果。
软件部分应用VC++编写控制软件,对数据采集系统、模数转换系统、数据显示、数据通信等程序进行了设计。
关键词:
数据采集AT89S52单片机ADC0809MAX232
Abstract
Thisarticledescribesthehardwaredesignandsoftwaredesignofthedataonwhichbasedonsignal-chipmicrocomputer.Thedatacollectionsystemisthelinkbetweenthedigitaldomainandanalogdomain.Ithasanveryimportantfunction.Theintroductivepointofthistextisadatatocollectthesystem.Thehardwareofthesystemfocusesonsignal-chipmicrocomputer.Datacollectionandcommunicationcontrolusemodulardesign.Thedatacollectedtocontrolwithcorrespondencetoadoptamachine8051tocarryout.Thepartofhardware’scoreisAT89S52,isalsoincludesA/Dconversionmodule,displaymodule,andtheserialinterface.Slavemachineisresponsiblefordataacquisitionandansweringthehostmachine.8roadsweremeasuredtheelectricvoltagetopasstheingeneralusemold-fewconversionofADC0809,therealizationcarriesontheconversionthatimitatestomeasurethenumeraltomeasuretowardsthedatathatcollect.ThensendthedatatothehostmachinethroughMAX232.thehostmachineisresponsiblefordataanddisplay,LEDdigitaldisplayisresponsibledisplaythedata.ThesoftwareispartlyprogrammedwithVC++.Thesoftwarecanrealizethefunctionofmonitoringandcontrollingthewholesystem.Itdesignsmuchprogramlikedata-acquisitiontreatment,data-displayanddata-communicationect.
Keyword:
dataacquisitionAT89S52ADC0809MAX232
目录
第一章绪论3
第二章数据采集系统简介3
第三章硬件部分8
3.1主机部分8
3.1.1主机部分原理图设计8
3.2从机部分13
3.2.1从机的电路原理图设计13
第四章软件部分22
4.1主机程序设计26
4.2从机部分程序设计30
第五章调试结果33
致谢36
参考文献37
附录140
第一章绪论
传统的基于单片机的数据采集系统由于没有上位机的支持,不管采用什么样的数据存储器,它的存储容量都是有限的,所以不得不对存储的历史数据进行覆盖刷新,这样不利于用户对数据进行整体分析,因而也不能对生产过程的状况进行准确的把握。
本系统采用下位机负责模拟数据的采集,从单片机负责采集八路数据,并应答主机发送的命令,上位机即主机是负责处理接受过来的数字量的处理及显示,主机和从机之间用RS-232C进行通信。
这样用户可以在上位机上编写各种程序对文件中的数据进行有效查询和分析,有利于工业过程的长期正常运行和检查。
该系统采用的是AT89S52单片机,此芯片功能比较强大,能够满足设计要求。
第二章数据采集系统简介
数据采集,又称数据获取,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口。
数据采集技术广泛引用在各个领域。
在该系统中需要将模拟量转换为数据量,而A/D是将模拟量转换为数字量的器件,他需要考虑的指标有:
分辨率、转换时间、转换误差等等。
而单片机是该系统的基本的微处理系统,它完成数据读取、处理及逻辑控制,数据传输等一系列的任务。
在该系统中采用的是8051系列的单片机。
双机通信的串行口可以采用RS-232-C标准接口,由芯片MAX232实现双机的通信。
而数据的显示则采用的是LED数码管,该器件比较简单,在生活中接触也较多。
数据采集系统一般由信号调理电路,多路切换电路,采样保持电路,A/D,单片机等组成。
所需要的系统框图如图2.1所示:
图2.1系统框图
第三章硬件部分
3.1主机部分
该系统是一个主从式多路数据采集系统,主机和从机均用单片机实现,它的主机部分负责数据处理和显示,主机和从机之间用RS-232进行通信。
它由AT89S52、MAX232、LED数码显示器组成。
3.1.1主机部分原理图设计
由于主机要对从机有一个命令,所以用到按键,将按键接到单片机AT89S52的P3.4的端口上,按键的一端接地,当P3.4这条I/O线是一个低电平时,则表示按键按下。
主机还要负责对采集到的数据进行处理和LED显示,用两个74HC573,一个与单片机AT89S52的P2.7口相连用于位选,一个与单片机AT89S52的P2.6口相连用于段选。
单片机的P0口的8位数据线与用于段选的74HC573的D0~D7相连,用于数码管上具体的数字的显示。
单片机P0口的八位数据线与用于位选的74HC573的D0~D7相连,用于在哪个数码管上显示。
主机跟从机的连接,又涉及到一个串行口双机通信的问题,根据单片机双机通信距离、抗干扰性等要求,选择RS-232-C串行接口方法,选择串行口MAX232来连接主机和从机,将MAX232的11、12脚分别与单片机AT89S52的P3.1,P3.2脚相连,再将MAX232上的13、14脚分别与db-9的3、6脚相连。
单片机AT89S52的18、19脚与它的晶振电路相连,第9脚与它的复位电路相连。
其原理图如图3.1所示
图3.1主机部分电路原理图
3.2从机部分
该系统的从机负责A/D模数转换,并应答主机的命令,需要用到ADC0809、AT89S52,又由于它们两个的时钟频率不一样,所以又要用到一个74LS74。
3.2.1从机的电路原理图设计
该部分需要对模拟量进行一次模数转换,则要用到一个ADC0809,又因为它们之间的时钟频率不一样又需要用到一个74LS74对其进行一个二分频的工作,这个只需要将74LS74的第3根引脚与单片机AT89S52的第30根引脚相连,将74LS74的第9根引脚与ADC0809的时钟信号引脚相连。
单片机AT89S52的P0口与ADC0809的D0~D7相连,而ADC0809的ADDA、ADDB、ADDC分别与P0口的低三位相连。
其用到的MAX232与主机部分的电路连接方法一样。
其电路图如3.5所示
图3.5从机部分电路设计图
第四章软件部分
4.1主机程序设计
本软件系统有一个主程序,五个子程序,五个子程序分别为向串口发送数据子程序putc_to_serialport()、键盘扫描子程序Keys_Scan()、LED数据显示子程序Display_Result(intd)、延时子程序Delay()、主机串口接受中断子程序Serial_INT()interrupt4。
(1)主程序
主程序对系统进行初始化,主要是进行定时/计数的初始化,然后调用键盘扫描程序Keys_Scan(),再根据按下的键来调用向串口发送数据子程序putc_to_serialport()将相应的数据发送给串行口。
当没有键按下时,则送一个数F给LED显示器。
其流程图见图4.1
(2)向串口发送数据子程序putc_to_serialport()
该程序首先将数据发送到串行口,当T1=0时,表明传送结束。
其流程图如4.2所示
(3)键盘扫描子程序Keys_Scan()
该程序是先将行选好,然后再选定列就可以确定到具体的哪一个按键。
其流程图如图4.3所示
(4)LED显示程序Display_Result(intd)
该子程序用的数码管动态显示方式。
先将单片机的P2.7口选通进行位选,然后将位选的值发送给单片机P1口。
接着将单片机的P2.6口选通进行段选,然后将要显示的数字的值发送给P0口。
然后调用延时,接着将P2.7、P2.6口置0,下面是重复上面的过程,直到要显示的数字全部显示在数码上。
其流程图如4.4所示。
(5)主机串口接受中断子程序Serial_INT()interrupt4。
当RI=1时,接受串口过来的数据,并对该数据进行X*05H/0FFH的处理,接下来用处理过的数据调用LED显示程序Display_Result(intd)。
如图4.4所示
图4.1主程序
图4.2向串口发送数据子程序putc_to_serialport()
图4.3键盘扫描子程序Keys_Scan()
图4.4LED显示程序Display_Result(intd)
图4.5主机串口接受中断子程序Serial_INT()interrupt4
4.2从机部分程序设计
该部分的程序包括一个主程序、三个子程序,三个子程序分别为从机串口接受中断函数Serial_INT()interrupt4、向串口发送数据子程序putc_to_SerialPort(ucharc)和模数转换子程序ADCON。
(1)主程序
主程序是进行系统的初始化,由于主从两个单片机要进行通信,所以两个单片机的初始化应该是相同的,并调用A/D转换。
其流程图如图4.6所示
(2)从机串口接受中断函数Serial_INT()interrupt4
因为发送完成和接受到新字节都会触发串口中断,因此串口中断程序里用if(RI)来表示接受中断,然后将RI清0。
再判断接受到的数据第4位是否为1,如果为1,则按照主机发送过来的通道进行采集,如果为0,则调用循环采集程序。
如图4.7所示
(3)模数转换子程序ADCON
先要选通ADC0809,又因为ADC0809具有8个通道,利用For循环进行8次采集,接下来选择转换通道,F8H~FFH用以选择输入模拟信号的通道IN0~IN7的选择,首先从第一个通道开始,然后执行一条读取转换结果的指令,再将转换得到的结果送给串行口,再依次循环,将通道号自增1,直到8个通道全部转换完。
其流程图如图4.8所示
(4)向串口发送数据子程序putc_to_SerialPort(ucharc)
程序首先将数据发送到串行口,当T1=0时,表明传送结束。
如图4.2所示
图4.6主程序
图4.7从机串口接受中断函数Serial_INT()interrupt4
图4.8模数转换子程序ADCON
第五章调试结果
这个系统是一个主从式的数据采集系统。
系统调试以程序为主,硬件调试应先检测电路的焊接是否正确,然后用外用表检测或通电检测其是否有短路或断路。
软件调试包括调试程序和对硬件准确性的调试。
在整个系统中,主机用到了9个按键,按键0按下后,发送一个00H的数据给从机,而从机接收到这个信号就开始调用一个循环采集方式,然后从机采集完数据后再将转换好的数据和采集线路的通道号发送给主机并用LED数据显示器显示出来;按键1-8用于选择采集方式,分别送相应的采集线路的通道号给从机,然后再将从机转换好的数据和采集线路的通道号发送给主机并用LED数据。
致谢
大学三年学习时光已经接近尾声,在此我想对我的母校,我的父母、亲人们,我的老师和同学们表达我由衷的谢意。
感谢我的家人对我大学三年学习的默默支持;感谢我的母校兰州文理学院给了我在大学三年深造的机会,让我能继续学习和提高;感谢兰州文理学院的老师和同学们三年来的关心和鼓励。
老师们课堂上的激情洋溢,课堂下的谆谆教诲;同学们在学习中的认真热情,生活上的热心主动,所有这些都让我的三年充满了感动。
这次毕业论文设计我得到了很多老师和同学的帮助,其中我的论文指导老师苑老师对我的关心和支持尤为重要。
每次遇到难题,我最先做的就是向苑老师寻求帮助,而苑老师每次不管忙或闲,总会抽空来找我面谈,然后一起商量解决的办法。
苑老师平日里工作繁多,但我做毕业论文的每个阶段,从选题到查阅资料,论文提纲的确定,中期论文的修改,后期论文格式调整等各个环节中都给予了我悉心的指导。
这几个月以来,苑老师不仅在学业上给我以精心指导,同时还在思想给我以无微不至的关怀,在此谨向苑老师致以诚挚的谢意和崇高的敬意。
感谢在整个毕业设计期间和我密切合作的同学,和曾经在各个方面给予过我帮助的伙伴们,在此,我再一次真诚地向帮助过我的老师和同学表示感谢!
参考文献
[1]严洁.单片机原理及其接口技术.机械工业出版社,2010,65-105
[2]范红刚.51单片机自学笔记.北京航空航天大学出版社,2009
[3]高云.基于MSP430的温室多路数据采集系统.农机化研究,2009,No.8
[4]常铁原,王欣,陈文军.多路数据采集系统的设计.电子技术应用,2008,No.11
[5]叶红海,李丽敏.基于单片机的多路数据采集系统的设计与实现.2008,No.4
[6]彭伟.单片机C语言程序设计实训100例.电子工业出版社,2009,46-48,104-110
[7]杨居义,杨晓琴,王益斌等.单片机课程设计指导.清华大学出版社,2009,135-141
[8]刘刚,秦永左,朱杰斌.单片机原理及应用.北京大学出版社,2006,76-98,134-155
[9]林祝亮,武林,杨金华.基于双单片机的多路数据采集系统设计.仪器仪表学报,2006,No.6
[10]元增民,张文希.单片机原理与应用基础.国防科技大学出版社,2006,205-266
[11]王琳,商周,王学伟.数据采集的发展及应用.电测与仪表,2004,No.464
[12]V.Schmidt,Control,dataacquisition,andremoteparticipationforfusionresearch,FusionEng.Des.81(2006)1702–1712.
[13]A.Neto,H.Fernandes,A.Duarte,Firesignal-Dataacquisitionandcontrolsystemsoftware.FusionEngineeringandDesign82(2007)1359-1364
.
附录1
主机部分程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitk1=P3^4;
sbitsmgd=P2^6;
sbitsmgk=P2^7;
ucharPre_KeyNo=16,KeyNo=16;
ucharcodeLEDData[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71}
/*****延时子程序*****/
voidDelay(uintx)
{uchari;
while(x--)
for(i=0;i<120;i++);
}
/**************LED显示子程序***************/
voidDisplay_Result(intd)
{
smgk=1;
P0=0X7C;
smgd=1;
P0=LEDData[d/100];//显示百位
Delay(5);
smgd=0;
smgk=0;
smgk=1;
P0=0X7D;
smgd=1;
P0=LEDData[d/10%10];//显示十位
Delay(5);
smgd=0;
smgk=0;
P0=0x7E;
smgd=1;
P0=LEDData[d%10];//显示个位
Delay(5);
smgk=0;
smgd=0;
smgk=1;
P0=0X7C;
smgd=1;
P0=0x80;//显示小数点
Delay(5);
smgd=0;
smgk=0;
}
/************键盘扫描子程序**************/
voidKeys_Scan()
{ucharTmp,An;
P3=0XF0;//低四位置1,放入4行
Delay
(1);
An=P3^0XF0;//按键后11110000将变成XXXX0000,X中有一个为0,3个仍为1,而异或操作会把3个1变成0,唯一的0变成1
Tmp=An>>4;//该表达式将高4位移到低四位
swith(Tmp)//判断按键发生在哪列
{
case1:
KeyNo=0;break;
case2:
KeyNo=1;break;
case4:
KeyNo=2;break;
case8:
KeyNo=3;break;
default:
KeyNo=16;//无键按下
}
P3=0X0F;//高4位置0,放入4列
Delay
(1);
Tmp=P3^0xF0;//按键后00001111将变成0000XXXX,X中有一个为0,3个仍为1,而异或操作会把3个1变成0,唯一的0变成1
switch(Tmp)//0—3行分别附加起始值0,4,8,12
{case1:
KeyNo+=0;break;
case2:
KeyNo+=4;break;
case4:
KeyNo+=8;break;
case8:
KeyNo+=12;break;
}
}
/********向串口发送数据子程序*********/
voidputc_to_serialport(ucharC)
{SBUF=C;
while(T1==0);
TI=0;
}
Display()
{smgK=1;
P1=0X01;
Smgd=1;
P0=OXOF;
}
/*******主程序*******/
voidmain()
{P0=0x00;
SCON=0x50;//串口工作于方式1
TMOD=0x20;//T1工作于模式2
PCON=0x00;//波特率不加倍
TH1=0xFD;//波特率为9600
TL1=0xFD;
TI=RI=0;
TR1=1;//启动定时器1
IE=0x90;//允许串口中断
while
(1)
{Delay(100);
if(P3!
=0X0F)Keys_Scan();
swith(KeyNo)
{
case0:
putc_to_serialport(0X00);
break;
case1:
putc_to_serialport(0XF8);
break;
case2:
putc_to_serialport(0XF9);
break;
case3:
putc_to_serialport(0XFA);
break;
case4:
putc_to_serialport(0XFB);
break;
case5:
putc_to_serialport(0XFC);
break;
case6:
putc_to_serialport(0XFD);
break;
case7:
putc_to_serialport(0XFE);
break;
case8:
putc_to_serialport(0XFF);
break;
case16:
Display()
}
}
}
/*******主机串口接受中断函数*********/
voidSerial_INT()interrupt4
{if(RI)
{inti,j,m;
longintn;
ucharc;
c=SBUF;
i=c*0x05;
j=i*0x10;
n=j*0x10;
m=n/0xFF;
Display_Result(m);
}
从机部分程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitST=P3^2;
sbitEOC=P3^6;
sbitOE=P3^7;
voidDelay(uintx)
{
uchari;
while(x--)for(i=0;i<120;i++);
}
/********向串口发送数据子程序********/
voidputc_to_SerialPort(ucharc)
{SBUF=c;
while(TI==0);TI=0;
}
/*********A/D转换子程序*********/
voidAdcon()
{intj,m=0XF8;
ucharn;
for(j=0,P0=m;j++;j<8)
{ST=0;ST=1;ST=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数据 采集 设计 学生 本科 毕业设计