电子信息毕业设计 基于AT89s51的燃气泄漏报警与应急处理器.docx
《电子信息毕业设计 基于AT89s51的燃气泄漏报警与应急处理器.docx》由会员分享,可在线阅读,更多相关《电子信息毕业设计 基于AT89s51的燃气泄漏报警与应急处理器.docx(28页珍藏版)》请在冰豆网上搜索。
![电子信息毕业设计 基于AT89s51的燃气泄漏报警与应急处理器.docx](https://file1.bdocx.com/fileroot1/2023-2/4/848d1b35-e993-4fd2-baa3-440a6374806e/848d1b35-e993-4fd2-baa3-440a6374806e1.gif)
电子信息毕业设计基于AT89s51的燃气泄漏报警与应急处理器
目录
1前言1
2系统总体方案设计2
2.1方案比较2
2.2方案论证与选择3
3软件设计4
3.1程序流程图4
3.2主程序4
3.3菜单程序6
3.4测试程序8
3.5计时程序11
3.6系统介绍程序12
3.7结果显示程序13
4系统调试14
5系统功能和指标参数15
6总结与体会18
7参考文献19
附录:
TurboC2.020
1前言
速度素质是指人体进行快速运动的能力,即在单位时问内迅速完成某一动作或通过某一距离的能力。
它包括反应速度、动作速度和周期性运动的位移速度。
反应速度是速度素质中的一个重要的部分。
反应速度是指人体对刺激发生反应的快慢。
从生理机制分析,反应快慢取决于“反射弧”的五个环节:
感受器——传人神经——中枢延搁——传出神经——效应器。
反应速度通常用“从刺激到开始发生反应的时间”,即反应时来衡量。
目前.国内外常用反应时指标研究运动员的机能状态及心理活动过程。
反应速度是人类的基本生理素质之一。
反应测试系统这个题目的提出是建立在学习接口技术课程的基础上。
通过课程的学习,对计算机接口技术中各个重要的接口芯片内部原理、实现功能有了一定程度的掌握。
在此之上,提出在接口技术范畴内一些较为复杂的仪器设计,主要复杂在进行多个芯片、功能的组合以实现更为高级实用的功能。
反应测试仪能够定量的测试人的反映速度。
利用这种仪器,可以在人才的选拔中起到积极的作用。
例如选择少年体育运动员、舞蹈、杂技、魔术学员及其他要求机敏素质的培养对象时,可以提供科学的数据。
所以,反应测试仪的潜在实用价值极大。
并且,在计算机专业中,反应测试仪的提出,主要对计算机接口芯片的控制和计算功能提出更高的要求。
从各种文献资料中我们可以发现,现有的对此项目的研究是深入而广泛的。
如机动车驾驶员反应测试仪、药物药理反应测试仪、听觉稳态诱发测试仪等等各个方面的课题研究层出不穷。
而在技术上主要集中在单片机控制和由系统集成接口芯片进行功能组合等方向。
并且在测试范围上也是种类众多。
单从刚刚提到的反应测试仪器就可看到有对神经反应速度、身体反应速度等不同方面进行测试的。
由于本人水平有限,无法全面把握计算机接口技术知识的互相衔接,在本项目中,仅对几个功能原理比较简便的芯片进行实验,并且对其功能组合也并不复杂,以求在自身水平范围内,选择最少、最简洁、最低廉的功能组合实现题目所提要求。
即设计一个能测试人的反应(响应)时间的仪器。
按启动钮,测试开始,一旦看到灯亮,立即按测试钮,八段码显示反应时间xx.xx秒。
在知识范围和时间范围以内,在完成题目基本要求的基础之上,对本仪器功能进行力所能及的扩充。
如:
在反应时间测试精度上、仪器操作的简便性上、被测试者的易测试性等方面。
2系统总体方案设计
2.1方案比较
方案一:
这里介绍的人体反应速度测试器由数字电路芯片和LED发光二极管等组成,可以测出你对信号的反应能力,并将反应能力分为段,段数越高反应速度越快,经常进行反应测试训练,可以逐步提高你的反应速度。
反应测试器由开机延时、测试信号灯、时钟脉冲、减法计数、启动显示、停止控制等部分组成。
电路由3种共4只CMOS数字集成电路构成。
其中IC1是双4位静态移位寄存器4015,其内部含有2组独立的4位串入—并出移位寄存器,在本电路中将两组级联使用。
IC2是四2输入端或非门电路4001,IC3、IC4是6反相器4069,每个芯片内含有6个独立的反相器,具有较大的驱动电流能力,可以直接驱动发光二极管。
电源开关闭合后,LED10电源指示发光管点亮,之后延迟数秒,测试信号灯LED1点亮,减法计数器电路在时钟脉冲的作用下开始递减,由LED2—LED9组成的测试显示发光管依次熄灭,在这过程中,当被测试人按下停止按钮K2时,则时钟脉冲停振,减法计数器处于保持状态,LED2—LED9的熄灭个数将记录为被测试者的反应速度。
图2.1方案一框图
方案二:
本次设计,是在已经学习的接口技术课程及所做实验基础上,加深对计算机内部的几个重要的接口芯片的技术功能的熟练掌握。
并且积累一些进行计算机硬件设计、线路排布以及硬件程序编写的经验。
对计算机接口芯片技术的原理在实验过程中加深理解,并且开拓自己在计算机硬件设计中的思路。
在本次设计过程中,我们主要是在PC机上进行,用C语言编写程序,主要运用软件来实现,硬件方面不用花多大的功夫,就利用我们常用的键盘和PC机显示就行了。
图2.2方案二框图
2.2方案论证与选择
从原理框图来看,显然方案二要简单一些。
方案一用的是移位寄存器来完成计时,而方案二是在PC机上直接利用软件来实现;从显示来看,方案一是用LED来显示,方案二则是利用PC机的显示器来显示。
从整体来看,方案一需设计硬件电路,而方案二就直接用我们常用的电脑就可以完成了,无论从经济还是设计的工作量考虑,显然方案二都要优越于方案一,因此我选择方案二来完成这次的设计。
3软件设计
3.1程序流程图
图4.1程序流程图
3.2主程序
/***********************************************************************
**FileName:
**Author:
**Vertion:
0.1
**Modified:
12-10
************************************************************************/
#include
#include
#include
#include
#include
#include
#defineN5
voidTest(void);
voidInit(void);
voidCount(void);
voidInstruct(void);
voidDrawFace(intx,inty,intz);
intmain(void)
{
clrscr();
while
(1)
{
switch(menu_select())
{
case0:
Test();break;
case1:
Instruct();break;
case2:
exit(0);
}
}
return0;
}
3.3菜单程序
/***************************************************/
intmenu_select(void)
{
char*f[]={/*定义菜单字符串数组*/
"**************MENU*************",/*菜单的标题行*/
"1.Start",
"2.Instruction",
"3.Quit",
"Pressdirectionkeytochoose"};/*退出*/
chars[80];
inti;
intkey=0;/*记录所压键值*/
intc=0;
textcolor(YELLOW);/*设置文本颜色为黄色*/
textbackground(BLUE);/*设置背景颜色为兰色*/
gotoxy(10,2);
putch(0xda);/*输出左上角边框┏*/
for(i=1;i<44;i++)
putch(0xc4);/*输出上边框水平线*/
putch(0xbf);/*输出右上角边框┓*/
for(i=3;i<22;i++)/*输出左右两边的垂直线*/
{
gotoxy(10,i);putch(0xb3);
gotoxy(54,i);putch(0xb3);
}
gotoxy(10,22);putch(0xc0);/*输出左上角边框┗*/
for(i=1;i<44;i++)
putch(0xc4);/*输出下边框水平线*/
putch(0xd9);/*输出右下角边框┛*/
window(11,3,53,21);/*制作显示菜单的窗口,大小根据菜单条数设计*/
clrscr();/*清屏*/
for(i=0;i<5;i++)
{
gotoxy(10,i+1);
cprintf("%s",f[i]);/*输出菜单项数组*/
}
i=1;
gotoxy(10,2);/*设置默认选项在第一项*/
textbackground(LIGHTGREEN);/*设置背景颜色为浅绿*/
cprintf("%s",f[1]);/*输出菜单项,表示选中*/
gotoxy(10,2);/*移动光标到菜单的第一项*/
while(key!
=13)/*所压键不是回车键时*/
{
while(bioskey
(1)==0);/*查询是否压下了一个键*/
key=bioskey(0);/*返回下一个在键盘压下的键*/
key=key&0xff?
key&0xff:
key>>8;/*对所压的键进行判断*/
gotoxy(10,i+1);
textbackground(BLUE);/*设置背景颜色为蓝色*/
cprintf("%s",f[i]);/*输出菜单项*/
if(key==72)i=i==1?
3:
i-1;/*如压向上光标键↑,i减1,如已到第一行再上移,则到最后一行*/
if(key==80)i=i==3?
1:
i+1;/*如压向下光标键↓,i加1,如已到最后一行再下移,则到第一行*/
gotoxy(10,i+1);/*光标移动i的下一项*/
textbackground(LIGHTGREEN);/*将背景颜色设为浅绿*/
cprintf("%s",f[i]);/*输出菜单项*/
c=i-1;/*给代表菜单选项的整数赋值*/
}
textbackground(BLACK);/*设置背景颜色为黑色*/
window(1,1,80,25);/*恢复原窗口大小*/
returnc;/*返回代表菜单选项的整数值*/
}
3.4测试程序
/******************************************************************/
voidTest(void)
{
inti=0,k=0;
intx,y,x1;
staticintn;
floatval[5],mid;
charch[3];
charstr[8];
clock_tstart,end;
clrscr();
Init();
srand(time(NULL));
Count();
do
{
k=(rand()%100);
if(k>=65&&k<=90)
{
x=rand()%100+200;
y=rand()%100+150;
setfillstyle(SOLID_FILL,YELLOW);
bar(x,y,x+50,y+50);
setcolor(RED);
settextstyle(0,0,2);
sprintf(ch,"%c",k);
outtextxy(x+10,y+10,ch);
start=clock();
if((getch())==k+32)
{
end=clock();
val[i]=(end-start)/CLK_TCK;
}
else
{
n=n+1;
setfillstyle(SOLID_FILL,YELLOW);
bar(200,400,500,420);
setcolor(RED);
settextstyle(0,0,2);
outtextxy(200,400,"Sorry,youmissit!
");
val[i]=0.00000;
sleep
(1);
}
i++;
setfillstyle(SOLID_FILL,BLACK);
bar(100,100,500,450);
}
}while(isetfillstyle(SOLID_FILL,YELLOW);
bar(190,100,500,400);
setcolor(RED);
settextstyle(0,0,2);
outtextxy(200,100,"Thetimeused:
");
for(i=0,x=140;i{
sprintf(str,"%d",i+1);
outtextxy(200,x,str);
outtextxy(220,x,":
");
sprintf(str,"%f",val[i]);
outtextxy(240,x,str);
outtextxy(370,x,"S");
}
if(n==5)
{
outtextxy(200,250,"Ulostall!
");
}
else
{
mid=(float)(val[0]+val[1]+val[2]+val[3]+val[4])/(N-n);
outtextxy(200,250,"Youlost:
");
sprintf(ch,"%d",n);
outtextxy(350,250,ch);
sprintf(str,"%f",mid);
outtextxy(200,270,"Theequaltimeis:
");
outtextxy(250,290,str);
outtextxy(380,290,"S");
if(mid<1.000000)
{
outtextxy(300,310,"VeryGood!
");
}
elseif(mid>1.000000&&mid<2.000000)
{
outtextxy(300,310,"Good!
");
}
else
{
outtextxy(300,310,"bad!
");
}
}
outtextxy(200,350,"Pressanykeyto...");
getch();
closegraph();
}
3.5计时程序
/*****************************************************/
voidCount(void)
{
charstr[3];
inttime1=7;
do
{
setfillstyle(SOLID_FILL,YELLOW);
bar(100,100,450,120);
setcolor(RED);
settextstyle(0,0,2);
sprintf(str,"%d",time1);
outtextxy(110,100,"BereadyWestart..");
outtextxy(410,100,str);
sleep
(1);
time1=time1-1;
}while(time1>=0);
setfillstyle(SOLID_FILL,BLACK);
bar(100,100,450,120);
}
/*****************************************/
voidInit(void)
{
intgd=DETECT,gm,errorcode;
initgraph(&gd,&gm,"");
errorcode=graphresult();
if(errorcode!
=grOk)
{
printf("Graphicserror:
%s\n",grapherrormsg(errorcode));
printf("Pressanykeytoexit!
\n");
getch();
exit
(1);
}
}
3.6系统介绍程序
/*******************************************/
voidInstruct(void)
{
clrscr();
Init();
setcolor(RED);
settextstyle(0,0,3);
outtextxy(100,50,"WELCOMETOTHESYSTEM");
setcolor(WHITE);
settextstyle(0,0,1);
outtextxy(50,100,"Thissystemisdesigedtotestthereactionofthepepole.Thesystem");
outtextxy(20,120,"willdispalyacharonthescrenn,whenyouseewhatitis.Youmustprint");
outtextxy(20,140,"thesameoneassoonaspossible.Ifyoumatchit.Thesystemwillrecord");
outtextxy(20,160,"thetimeandcalculatethescoreofyou.Ifyoucan'tmatchit.Iamsorry");
outtextxy(20,180,"youlostit.Goodlucknexttime!
Wewilltestfivechareveryloop.");
outtextxy(50,250,"Pressanykeytocontinue......");
DrawFace(350,350,50);
getch();
closegraph();
}
3.7结果显示程序
/***************************************************************************/
voidDrawFace(intx,inty,intz)
{
setfillstyle(SOLID_FILL,YELLOW);
fillellipse(x,y,z-10,z-10);
setcolor(RED);
line(x-20,y-20,x-10,y-20);
line(x+10,y-20,x+20,y-20);
line(x,y+20,x-10,y+10);
line(x,y+20,x+10,y+10);
fillellipse(x+10+z,y-10,5,5);
fillellipse(x+50+z,y-30,40,20);
outtextxy(x+20+z,y-40,"comeon!
");
}
/********************************************************************************/
4系统调试
由于本设计所用到的硬件就是我们的电脑,这是不需要我们去设计的,也就不需要调试了,所以本次设计的调试就主要是软件调试了。
软件的调试和硬件也差不多,首先是通过观察,看有没有大的低级错误,观察无误后就将程序分成几个部分,比如说各个子程序都分别分成各个部分进行调试,如各个子程序都运行正常后,还得看他们是否能实现我们设计的功能,都能达到我们设计的功能后。
再将各个子程序以及主程序放一起,并进行链接,看编译能否通过,如果没问题就可以运行了。
能正常运行后,再看看其是否能达到设计的功能以及指标。
从整个来看的话,软件的调试要简单易行一些,而且一般不会象硬件调试那样,如果不小心就会很容易造成硬件的顺坏,相反,软件调试一般是不会造成硬件的顺坏的。
还有软件的调试不会象硬件调试那么盲目,一般来说,软件调试的过程中都会有一些提示的。
5系统功能和指标参数
1)进入菜单时界面如下,有三个选项:
1、Start(开始);2、Instruction(人体反应测试介绍);3、Quit(退出)。
图5.1主菜单图
2)选择Start(开始)选项,进入人体反应测试界面,如下图所示,界面上随机显示字母,测试根据显示的字母按下键盘上相应的按键。
图5.2测试字母显示界面
如果按下的不是以上界面显示的字母,则出现出错提示,如下图所示。
图5.2出错提示界面
3)按完五个键后,显示出测试结果,如下图所示。
分别显示出了每次按键反应的时间
图5.3结果显示界面
4)选择Instruction(人体反应测试介绍)选项则进入人体反应测试系统的简要介绍,其界面如下。
图5.4人体反应测试系统介绍界面
6总结与体会
身为测控专业的学生,设计是我们将来必需具备的技能。
而这次课程设计恰恰给我们提供了一个应用自己所学知识去勇于创新和实践的平台。
从通过理论设计,到仿真软件仿真,再到确定具体方案,再到安装实际电路,最后到调试电路、成型。
整个过程都需要我充分利用所学的知识进行思考、借鉴。
可以说,本次课程设计是针对前面所学的知识进行的一次比较综合的检验。
总的来说,这次课程设计虽然很累,但却是苦中有乐,非常充实。
在这次实习中,正确的思路是很重要的,只有你的设计思路是正确的,那你的设计才有可能成功。
因此我们在设计前必须做好充分的准备,认真查找详细的资料,为我们设计的成功打下坚实的基础,所以跑图书馆和上网查资料成为了我每天的必修课。
本次课程设计不仅培养了我们的科学严谨的学习态度,使我们认识到不管做任何事都要付出一定的努力,才会有大的收获。
同时也让我们领略到电子技术科学知识领域的广袤。
相信这次课程设计过后,我们的理论水平和实践动手能力都会有一个质的飞跃,也为今后的实践课程及毕业设计打下了坚实的基础。
要做好本次的课程设计,熟练地掌握课本上的理论知识是前提。
这样才能对试验中出现的问题进行一定的分析和解决。
当然能完成本次设计,更离不开老师辛勤地指导,老师能在百忙中来指导我,每当我遇到了棘手的问题,老师总能给我最好的建议,教我改进得方法,不厌其烦地指出我在设计中存在的问题和错误,使我能更好地完成设计。
正是老师不厌其烦的指导和每天下午的讲解,让我的设计思路越发清晰,明朗,清除了应该从哪些方面着手,工作。
终于有了这次课程设计作品的诞生,这是我上大学以来第一次把所学的电子电工知识运用到实践当中,兴奋之余也开始对今后的学习奋斗目标有了比较明确的规划,感谢老师让我顺利完成了这次的课程设计,虽然整个过程很辛苦,却是苦中有乐!
7参考文献
[1]