《基于单片机的压力超限报警系统设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的压力超限报警系统设计.doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于单片机的压力超限报警系统设计沈阳航空航天大学课 程 设 计(论文) 题目 基于单片机的压力超限报警系统设计班 级 学 号 学 生 姓 名 指 导 教 师 目 录0。前言11。 总体方案设计22。 硬件电路的设计22.1 单片机系统22.2 MPX4115压力传感器42.3数据转换模块52。4键盘显示模块62.5整体电路图73 软件设计73。1 报警系统软件实现73。2 程序流程图74。联合调试95. 课设小结及进一步设想9参考文献10附录I 元件清单11附录II 整体电路图12附录III 源程序清单13基于单片机的压力超限报警系统 沈阳航空航天大学自动化学院摘要:压力是工业生产过程中的重要
2、参数之一。压力的检测或控制是保证生产和设备安全运行必不可少的条件,现压力检测与报警有常重要的意义.本设计主要通过单片机及专用芯片对传感器所测得的模拟信号进行处理,使其完成对压力的测量与报警,报警上线是通过按键值设定的。关键字:压力;AT89C51单片机;压力传感器;A/D转换器;LED显示.0. 前言近年来,随着微型计算机的发展,他的应用在人们的工作和日常生活中越来越普遍。工业过程控制是计算机的一个重要应用领域。其中由单片机构成的嵌入式系统已经越来越受到人们的关注。现在可以毫不夸张的说,没有微型计算机的仪器不能称为先进的仪器,没有微型计算机的控制系统不能称其为现代控制系统的时代已经到来。压力测
3、量对实时监测和安全生产具有重要的意义。在工业生产中,为了高效、安全生产,必须有效控制生产过程中的诸如压力、流量、温度等主要参数。由于压力控制在生产过程中起着决定性的安全作用,因此有必要准确测量压力。通过压力传感器将需要测量的位置的压力信号转化为电信号,再经过运算放大器进行信号放大,送至8位AD转换器,然后将模拟信号转换成单片机可以识别的数字信号,再经单片机转换成LED显示器可以识别的信息,最后显示输出并判断是否超过警戒线,选择的单片机是基于AT89C51单片机的测量与显示,将压力经过压力传感器变为电信号,再通过运放将电信号放大为标准信号为05V的电压信号,然后进入A/D转换器将模拟量转换为数字
4、量,我们所采样的A/D转换器为ADC0804,ADC0804的辨率最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在05V之间。键盘是单片机系统实现人机对话的常用输入设备。我们通过键盘,向计算机系统输入各种数据和命令,亦可通过使用键盘,让单片机系统处于预定的功能状态.要想实现压力的显示需硬件与软件配合,最终调试出来。1。 总体方案设计本次设计是以单片机组成的压力测量,系统中必须有前向通道作为电信号的输入通道,用来采集输入信息。压力的测量,需要传感器,利用传感器将压力转换成电信号后,再经放大并经A/D转换为数字量后才能由计算机进行有效处理
5、。然后用LED进行显示,并判断是否超过警戒压力,键盘则是用来设定警戒压力大小的 原理图如图1所示。单片机显示A/D转换压力传感器报警键盘图1 压力报警系统原理图2. 硬件电路的设计2.1 单片机系统标准型89系列单片机是与MCS-51系列单片机兼容的.在内部含有4KB或8KB可重复编程的Flash存储器,可进行1000次擦写操作.全静态工作为033MHz,有3级程序存储器加密锁定,内含有128256字节的RAM、32条可编程的I/O端口、23个16位定时器/计数器,68级中断,此外有通用串行接口、低电压空闲模式及掉电模式。AT89C51相当于将8051中的4KB ROM换成相应数量的Flash
6、存储器,其余结构、供电电压、引脚数量及封装均相同,使用时可直接替换。AT89C51在内部采用40条引脚的双列直插式封装,引脚排列如图2所示:图2 AT89C51芯片引脚管脚说明:P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位.在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可
7、用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入.并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故.P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位
8、地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入.作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口:P3口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3。3 /INT1(外部中断1)P3。4 T0(记时器0外部输入)P3。5 T1(记时器1外部输入)P3。6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程
9、和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无
10、效。/PSEN:外部程序存储器的选通信号.在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000HFFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP).XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.2 MPX4115压力传感器 MPX4115传感器是一个硅压力传感器。
11、这个传感器结合了先进的微电子技术,能为高水准模拟输出信号提供一个均衡压力。压力测量范围为15kp-115kp,电压输出0.27V4。76V。气压传感器MPX4115的管脚说明如表1所示,引脚图如图3所示.表1 气压传感器MPX4115的管脚说明123456VOUTGNDVSN/SN/SN/S图3 MPX4115传感器2。3数据转换模块 ADC0804特性:工作电压:5V,即VCC5V.模拟输入电压范围:05V,即0Vin5V.分辨率:8位,即分辨率为1/28=1/256,转换值介于0255之间.转换时间:100us(fCK640KHz时).转换误差:1LSB。参考电压:2.5V,即Vref2。
12、5V. ADC0804的转换原理ADC0804是属于连续渐进式(Successive Approximation Method)的A/D转换器,这类型的A/D转换器除了转换速度快(几十至几百us)、分辨率高外,还有价钱便宜的优点,普遍被应用于微电脑的接口设计上。输出8位的ADC0804,动作步骤如下表示:第一次寻找结果:10000000 (若假设值输入值,则寻找位假设位1)第二次寻找结果:11000000 (若假设值输入值,则寻找位假设位1)第三次寻找结果:11000000 (若假设值输入值,则寻找位该假设位0)第四次寻找结果:11010000 (若假设值输入值,则寻找位假设位1)第五次寻找结
13、果:11010000 (若假设值输入值,则寻找位该假设位0)第六次寻找结果:11010100 (若假设值输入值,则寻找位假设位1)第七次寻找结果:11010110 (若假设值输入值,则寻找位假设位1)第八次寻找结果:11010110 (若假设值输入值,则寻找位该假设位0)这样使用二分法的寻找方式,8位的A/D转换器只要8次寻找。AD0804的具体电路如图4所示。图4 ADC0804电路图2.4键盘显示模块设置键按下时可以通过调节个位、十分位、百分位按键设置报警压力值,松开设置键系统进行压力值的测量显示以及比较,若大于报警压力值则进行报警。图5键盘显示模块数码管则使用动态显示。谓动态显示就是一位
14、一位地轮流点亮各位显示器(扫描),对于显示器的每一位而言,每隔一段时间点亮一次。在同一时刻只有一位显示器在工作(点亮),利用人眼的视觉暂留效应和发光二极管熄灭时的余辉效应,看到的却是多个字符“同时”显示,态显示器的优点是节省硬件资源,成本较低。2.5整体电路图本系统整体电路是由单片机最小系统、压力传感器、键盘及显示模块、模数转换模块等组成,具体连接方式如图6所示。图6整体电路图3 软件设计3。1 报警系统软件实现 压力传感器将输出的模拟信号输送给ADC0804单片机来控制ADC0804的工作状态,使传感器输出的模拟信号转化为数字信号进而输送给单片机,单片机接收到信号后对该信号进行处理再输送到显
15、示数码管端,从而显示压力值,该压力值同时还与按键设置的压力上限值进行比较,若超过压力上限值则进行报警。3。2 程序流程图开始初始化设置键是否按下 N Y设置报警上限设置设置键是否按下 Y N 显示当前压力值是否大于警戒限 N Y报警 结束图7程序框图4.联合调试在Protues上进行仿真实验。首先使用Keil vision 4编写完成的程序编译生成HEX文件,将HEX文件烧录到单片机中,进行仿真实验,结果如图8所示。图8运行结果图5。 课设小结及进一步设想这次课程设计给我最大的收获,应该是仿真过程当中学到的很多东西,这个过程不仅使我重新回顾了Protues仿真软件的运用,也使我更深的了解了一些
16、东西。其次就是软件编程,这次完全是运用以往积累的经验,完成了仿真程序,其中的滋味,也就自己能体会得到,程序修改了很多次,也失败了不少,花费的时间和在protues画图差错上的时间应该是一样多的,同样都是很费脑筋的。在编程这一方面,我的感受就是编模块程序不是最难得,最难得是能够连续运行,进行全面的整合,但想要整合好,你还是的写好模块程序,相互制约,相互影响,是比较麻烦的,为了完成完整的键盘控制系统,在这一块是下功夫了的,这也算是自己第一次,这么完整的弄完一个小型的单片机系统.本次课设也有一些不足之处具体表现如下:系统的测量精度不能保证,可能是因为ADC0804的转换精度不够。键盘的消抖问题没有充
17、分考虑.只能测量一路压力值,无法测量多路压力值。参考文献1 赖麒文.8051 单片机 C语言彻底应用. 北京M:科学技术出版社,2002 2 朱定华,单片机原理及接口技术M。 北京:电子工业出版社 ,2001.63 王雪文, 传感器原理及应用.北京M:北京航空航天出版社,20044 张军,梅丽凤.单片机原理接口技术。北京交通大学出版社,2006。55 张婧武,周灵彬.单片机系统的PROTEUS设计与仿真。北京: 电工出版社,2007。46 周佩玲,彭虎.微机原理与接口技术.北京: 电子工业出版社,2005。47 朱定华。单片机原理及接口技术M. 北京:电子工业出版社 ,2001。6附录I 元件
18、清单元件名称型号数量压力传感器MPX41151单片机AT89C511LED7seg-mpx4ccblue1转换芯片ADC08041电容1uf3电阻51R13导线 若干按键Button4附录II 整体电路图附录III 源程序清单#include /51列单片机头文件#include #define uchar unsigned char#define uint unsigned int int t1,i;float t;void anjian();sbit clock = P31;sbit u=P23;sbit uge=P20;sbit uxiao=P21;sbit uxiao2=P22;sbi
19、t cs=P24;sbit adwr=P36;/定义AD的WR端口sbit adrd=P37; /定义AD的RD端口sbit key1=P10;sbit key2=P11;sbit key3=P12;sbit ting=P30;uchar a,A1,A2,A3,adval;uchar num1=5,num2,num3;uchar code table0=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1;uchar code table1=0x3f,0x06,0x5b,0x4f,0x66
20、,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint xms)uint i,j;for(i=xms;i0;i-) /i=xms即延时约xms毫秒for(j=110;j0;j-);void display(uchar bai,uchar shi,uchar ge) /显示子函数 P2=0xe0;u=1;P0=0x73;u=0;delayms(5); /延时uge=1;P0=table0bai;uge=0; delayms(5); /延时uxiao=1;P0=table1shi; uxiao=0; del
21、ayms(5); /延时uxiao2=1;P0=table1ge;uxiao2=0; delayms(5); /延时void display2(uchar b,uchar s,uchar g)/设置显示 u=1;P0=0xff;u=0;delayms(5); /延时uge=1;P0=table0b;uge=0; delayms(5); /延时uxiao=1;P0=table1s; uxiao=0; delayms(5); /延时uxiao2=1;P0=table1g;uxiao2=0; delayms(5); /延时void anjian() /按键设定阈值cs=1; if(key1=0) d
22、elayms(20);if(key1=0)num1+;if(num1=6) num1=0; while(!key1); if(key2=0) delayms(20);if(key2=0)num2+;if(num2=10) num2=0; while(!key2); if(key3=0) delayms(20);if(key3=0)num3+;if(num3=10) num3=0; while(!key3); void ADAD() cs=0; /置CSAD为0,选通ADCS 以后不必再管ADCS while(1) adwr=1;_nop_();adwr=0;/启动AD转换_nop_();adw
23、r=1;for(a=10;a0;a-) display(A1,A2,A3); if(ting=0) break; while(t num1100+num2*10+num3)/过线 报警 clock=0;if(ting=0) num1=5; num2=0; num3=0;break; P1=0xff; /读取P1口之前先给其写全1 adrd=1; /选通ADCS_nop_();adrd=0; /AD读使能_nop_();/ P1=adval;adval=P1;/AD数据读取赋给P1口adrd=1;t = adval; t = t/255500; t1 = t; A1= t1/100;/分出百,十,和个位 A2= (t1100)/10; A3= (t1%100)%10; void main()/主程序 while(1) ADAD(); while(1) anjian(); display2(num1,num2,num3); if(ting=1) break; while(t num1100+num210+num3)/过线 报警 clock=0; if(ting=0) num1=5; num2=0; num3=0; break; 第17页