八路数据采集及报警系统刘梦龙1190716.docx
- 文档编号:5383959
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:16
- 大小:101.47KB
八路数据采集及报警系统刘梦龙1190716.docx
《八路数据采集及报警系统刘梦龙1190716.docx》由会员分享,可在线阅读,更多相关《八路数据采集及报警系统刘梦龙1190716.docx(16页珍藏版)》请在冰豆网上搜索。
八路数据采集及报警系统刘梦龙1190716
电子与信息工程学院
《计算机控制技术》
课程设计报告
课题名称8路数据采集及报警控制系统
专业电子与信息工程学院
班级11通信2班
学生姓名刘梦龙
学号***********
指导教师严辉夏巍陈蕴
2014年7月2日
1.总体设计:
1.1设计思路
1.2课题目的
1.3器件选择
2.硬件电路设计:
2.1数据输入模块
2.2模数转换模块
2.3主控电路-单片机
2.4显示模块
3.系统程序设计:
3.1程序流程框图
3.2主程序
4.总结
5.附录
1.总体设计:
1.1设计思路
我们选择单片机与A/D转换芯片结合的方法实现本设计。
使用的基本元器件是:
AT89C52单片机,ADC0809模数转换芯片,74LS164,数码管,按键,电容,电阻,晶振等。
数字电压测量电路由A/D转换、数据处理及显示控制等组成。
A/D转换由集成电路ADC0809完成。
ADC0809具有8路拟输入端口,地址线(23~-25脚)可决定对哪一路模拟输入作A/D换。
22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。
6脚为测试控制,当输入一个2uS宽高电平脉冲时,就开始A/D转换。
7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平。
9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。
10脚为0809的时钟输入端。
通过对单片机p2.5口置低电平控制LED亮灯报警。
1.2课题目的
(1)掌握数据采集系统的设计方法。
(2)结合8051设计一个8路数据采集系统。
1.3器件选择
单片机是一种面向大规模的集成电路芯片,是微型计算机中的一个重要的分支。
此系统是由CPU、随即存取数据存储器、只读程序存储器、输入输出电路(I/O口),还有可能包括定时/计数器、串行通信口、显示驱动电路(LCD和LED驱动电路)、脉宽调制电路、模拟多路转换器及A/D转换器等电路集成到一个单块芯片上,构成了一个最小但完善的计算机任务。
单片机要使用特定的组译和编译软件编译程序,本设计选用80C51单片机。
键盘是一种常见的输入设备,用户可以向计算机输入数据或命令。
根据案件的识别方法分类,有编码键盘和非编码键盘两种。
通过硬件识别的键盘称编码键盘;通过软件识别的键盘成为非编码键盘。
非编码键盘有两种接口方法:
一种是独立按键接口;另一种是矩阵式按键接口。
本设计使用矩阵键盘。
A/D转换器的种类很多,就位数来说,可以分为8位、10位、12位和16位等。
位数越高其分辨率就越高,价格也就越贵。
A/D转换器型号很多,而其转换时间和转换误差也各不相同。
,在价格、转换速度等多种标准考量下,在本设计选用的是逐渐逼近式A/D转换器——ADC0809。
设计方案的框图
二、硬件电路设计:
2.1数据输入模块
本次采集器设计的输入的模拟信号比较简单,采用滑动变阻器,外接+5V电压作为输入模拟信号,标示为RV1分别接入模数转换芯片ADC0809的IN0-IN7(26,27,28,1,2,3,4,5号管脚)。
完全符合输入模拟信号0-5V的调节范围,有效可靠的模拟电压信号。
2.2模数转换模块
模拟信号通过输入端IN0~IN7:
8路模拟量输入端。
ADDA,ADDB,ADDC三个是数据选择控制端输入片选信号与P3.2,P3.3,P3.4连在一起,由A,B,C和IN0-IN7构成3-8数据器,通过AT89S51中的按键程序控制片选信号。
START是A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
ALE是地址锁存允许信号,输入,高电平有效。
将ALE和START连在一起与P3.4相连,在A/D转换完成后正脉冲的处于高电平,即可控制地址锁存器。
该脉冲依靠编写的单片机中断程序模拟一个正脉冲控制。
OE端口是数据输出允许信号,由单片机输入高电平控制。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
OUT1-OUT8是A/D转换的输出数字端口,与P1口相连。
连接方式是OUT1-OUT2和P1.7-P1.0。
12和16号管脚是接基准电压分别接VCC和GND。
另外10号端口是时钟频率大小不得超过640KHZ。
本次设计中我们采用终端输出脉冲来模拟这个时钟脉冲,但是效果不好,所以采用外接500KHZ的信号。
2.3单片机
这是单片部分的复位电路和时钟脉冲电路。
复位电路采用电平复位的方式,晶振的频率为12MHZ。
连接方式分别连到单片机的19,18,9引脚。
这是单片主控部分的接法,其中P3.1到P3.7与A/D转换芯片相连,做控制口。
在A/D部分已经详细介绍了连法。
P2.0-P2.4是五位数码显示管的控制端。
P0.0-P0.7是显示的数据输出端与五位位数码管的A-G相连。
2.4按键电路
通过串行口和2个IO口P2.5,P2.6使用74LS164扩展的矩阵键盘,实现通道的选择以及上限下限的设置。
上面八个按键实现通道选择,第二行前四个实现参数设置,其他的按键未用到,没有定义。
2.5显示电路
显示部分我们使用的是六位数码管(共阳极),最后一位未用到,其中标示的是P0.0-P0.7和A-DP的连接方式,是数据输出端。
P2.0-P2.4与1-5相连,做控制端口,控制哪一位显示。
2.6报警电路
通过p2.5连接的LED实现报警功能。
超过上限闪烁,低于下限一直点亮。
3.系统程序设计:
3.1程序流程框图
3.2程序清单
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineinputP1
sbitSTART=P3^5;
sbitOE=P3^6;//允许输出信号位
sbitEOC=P3^7;//转换完成信号位
sbitAA=P3^2;
sbitBB=P3^3;
sbitCC=P3^4;
sbitLED=P2^5;
sbitp26=P2^6;
sbitp27=P2^7;
sbitshu1=P2^0;
sbitshu2=P2^1;
sbitshu3=P2^2;
sbitshu4=P2^3;
sbitshu5=P2^4;
uchartt;
ucharmask;
uchart1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchart2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
uinti,j;
uintsx,xx;
ucharrr;
ucharan;
uintaa;
uintget_char(void);
voidcheck_key(void);
voiddelay2ms();
voiddisplay(uinttemp);
/************延时5ms*************/
voiddelay()
{uinti;
for(i=5000;i>0;i--);
}
//大约50us的延时
voiddelay_50us(uinti)
{uintj;
for(;i>0;i--)
for(j=19;j>0;j--);
}
ucharAD()
{
uchardat;
START=0;
START=1;
START=0;
//大于200us
delay_50us(50);
while(EOC==0);
OE=1;
dat=input;
returndat;
OE=0;
}
voidget_add(ucharadd)
{
CC=add/4;
BB=add%4/2;
AA=add%2;
delay();
}
voiddisplay(uinttemp)
{
uinttemp2;
if(tt<8)
temp2=temp;
elseif(tt==8||tt==9)
temp2=sx;
elseif(tt==10||tt==11)
temp2=xx;
shu1=shu2=shu3=shu4=0;
shu1=1;
P0=t1[tt];
delay_50us(30);
shu1=0;
shu2=1;
P0=t1[15];
delay_50us(30);
shu2=0;
shu3=1;
P0=t2[temp2/100];
delay_50us(30);
shu3=0;
shu4=1;
P0=t1[temp2%100/10];
delay_50us(30);
shu4=0;
shu5=1;
P0=t1[temp2%10];
delay_50us(30);
shu5=0;
}
voidc_u(uintbb)
{
aa=bb*2*0.98;
}
voidcheck_key(void)
{an=0;
mask=0x00;
TI=0;
SBUF=mask;
while(TI==0);
if((p26&&p27)==0)
{
delay_50us(200);
if((p26&&p27)==0)
tt=get_char();
an=1;
LED=1;
}
}
uintget_char(void)
{
unsignedcharkey_code,column=0;
/*下列语句分析被按下的键所在的列号*/
mask=0xfe;
while
(1)
{
TI=0;
SBUF=mask;
while(TI==0);
if((p26&&p27)!
=0)
{
mask=_crol_(mask,1);/*mask的值循环左移一位*/
column++;
if(column>=8)
column=0;
continue;
}
elsebreak;
}
/*下列语句分析被按下的键所在的行号并计算键序号*/
if(p26==0)
key_code=column;
else
key_code=8+column;
while(!
(p26&&p27));
delay_50us(200);
while(!
(p26&&p27));
switch(key_code)
{
case8:
sx=sx+100;
break;
case9:
sx=sx-100;
break;
case10:
xx=xx+100;
break;
case11:
xx=xx-100;
break;
default:
break;
}
return(key_code);
}
voidalarm(uinttemp1)
{
if(temp1>sx)
{
LED=0;
delay_50us(70);
LED=1;
//delay_50us(70);
}
if(temp1 LED=0; } voidmain(void) {SCON=0;/*将串行口设置成方式0*/ ES=0; EA=0;/*禁止串口中断*/ xx=300; sx=400; while (1) { check_key(); if(an==1&&tt<8) get_add(tt); rr=AD(); c_u(rr); display(aa); alarm(aa); } } 4.总结 本次课程设计用AT89c51和ADC0809以及四位数码显示管为主要元件,设计出了简单,实用的数据采集器。 本文详细介绍了各个芯片的功能和特点,以及介绍了各芯片之间的连接方式。 还编写了实现数据采集器的相应程序。 本数据采集器最大的优点是结构简单,成本低,且具有很强的可移植性。 为数据采集系统提供了一个可靠的解决方案。 经过本次课程设计,使我深深的体会到了理论应用在实际中的存在相当多的问题。 要把所学的知识融会贯通也不是一件容易的事情。 比如尽管通过Proteus仿真出结果,但是仿真和实际电子元器件依然存在很大的差距。 要学会如何矫正这些误差,实现系统的功能着实不容易。 在焊接元件的时候一不小心也容易出差错。 为后期造成很大的困难, 这次课程设计也让我学到了很多东西,比如对Proteus和keil的使用。 学会如何制作仿真图,调用库元件。 掌握了如何使用示波器以及其他电子设备。 可以使用keil编写简单的程序。 对我以后的工作和学习都有巨大的影响。 5.附录 元件清单 名称 数量(个) 名称 数量(个) AT89c51 1 20up电容 1 ADC0809 1 led 1 30p电容 2 200欧电阻 4 晶振12MHZ 1 按钮开关 16 74LS164 1 六位数码管 1 总体设计原理图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 八路 数据 采集 报警 系统 刘梦龙 1190716