[信息与通信]课程设计说明书机油压力检测系统_第1页
[信息与通信]课程设计说明书机油压力检测系统_第2页
[信息与通信]课程设计说明书机油压力检测系统_第3页
[信息与通信]课程设计说明书机油压力检测系统_第4页
[信息与通信]课程设计说明书机油压力检测系统_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 微机检测系统课程设计说明书课程设计说明书课 程 名 称: 微机检测系统设计 课 程 代 码: 8416671 题 目: 机油压力检测系统 学院(直属系) : 交通与汽车工程学院 年级/专业/班: 2008级车辆工程汽电1班 学 生 姓 名: 卢汉 学 号: 332008030606004 指 导 教 师: 唐岚 彭忆强 赵玲 开 题 时 间: 2011年 11 月 1 日完 成 时 间: 2011 年 11 月 15日 目 录摘要 31 引言 41.1 问题提出 4 1.2 任务与分析 42 方案设计 52.1系统方案设计论证52.1.1系统的控制方案设计52.2 最终设计方案总体设计框图

2、53 系统硬件设计 63.1 at89c51单片机 63.1.1 at89c51单片机介绍 63.1.2 选用at89c51单片机原因73.2 时钟电路 73.3 复位电路 73.4 pg160128a显示电路83.5 光电报警电路83.6 a/d转换电路94系统软件设计 104.1主程序框图104.2 蜂鸣器子程序框图134.2 显示子程序框图 115 系统调试过程 125.1原理图和印制板图绘制和检查 125.1.1 在protel99se绘制原理图并进行相应的erc检查155.1.2 在protel99se生成pcb图165.2 keil程序调试 175.3 proteus仿真调试 14

3、结论18致谢 19参考文献 20附录一 程序源代码 21附录二 电路原理图和pcb图38附录三 proteus仿真截图39摘 要本课程设计是基于8051单片机为控制核心的机油压力检测系统。在硬件电路部分,此设计的采用8051单片机,adc0832转换器,报警电路。本设计先测量出机油压力的电信号,然后通过单片机对所测出的油压值是否在规定范围内进行判断,进而达到报警的目的,并通过lcd显示压力数值。关键词:8051单片机、机油压力检测、lcd显示、报警1 引 言1.1 问题的提出随着汽车电子化程度越来越高,通过增加更多的电子装置,使汽车工作在更好的状态,充分发挥汽车的性能,保证汽车的安全性,减少汽

4、车故障率,增加汽车寿命等。由于发动机机油压力与发动机工作状况的好坏直接相关,所以如何监测机油压力对发动机有很大的意义。1.2任务与分析本设计的主要任务就是利用单片机实现汽车机油压力的检测功能。检测压力检测系统所具有的功能如下:汽车机油压力检测系统是通过声音和文字信息让驾驶员了解机油压力的状态。该系统利用8051单片机作为微控制器,通过压变式压力传感器对机油压力进行信号检测,传感器输出信号经数字滤波及a/d转换后输入ecu,经计算后在led屏幕上显示机油压力,同时将信号与设定的信号范围进行比较,当不正常区间时报警电路则输出语音报警信号,并通过报警线点亮报警指示灯。2方案设计2.1 系统方案设计论

5、证2.1.1系统的控制方案设计检测压力传感器mpx4250检测到压力信号后,通过adc0832转换后送入at89c51单片机,单片机对数据进行处理,显示等。2.2最终设计方案总体设计框图机油压力传感器a/d转换器8051单片机lcd显示机油压力值压力超过预定值,系统报警图2.1 系统总体设计框图本方案是由压力传感器、a/d模数转换器、at89c51单片机、led显示电路以及相应的报警设备所组成。机油压力传感器采集汽车机油的压力信号,将其转换为相对应的电压信号,将电压信号输送到a/d模数转换器转换为数字信号,并送入到at89c51单片机中,经过单片的数字滤波处理后,在通过pg160128的驱动程

6、序,将其显示在led显示器上。如果机油压力超过预设范围时,单片机会输出控制信号用以驱动相应的声光报警电路,以提示用户机油压力不在正常范围之内。3 系统硬件设计3.1 at89c51单片机3.1.1 at89c51单片机介绍(1)8051单片机在此单片机上集成了微处理器(cpu),内部数据存储器(ram),以及输入输出端口。8051单片机采用40只引脚的双列直插封装方式,各引脚的功能如下:时钟引脚x1及 x2:用于接晶体振荡器,此次设计用的晶振频率为6mhz。reset脚:是复位信号输入端,高电平有效。ale脚:地址锁存允许信号,用于锁存单片机输出的地址信号,高电平有效psen脚:程序存储器输出

7、控制端,在单片机访问外部程序存储器时,此引脚输出的负脉冲作为读外部程序存储器的选通信号,接至程序存储器的oe端。低电平有效。ea脚:其功能为内外程序存储器选择控制端。当ea为高电平时,单片机访问内部程序存储器,当ea为低电平时,单片机直接访问片外程序存储器。本设计用的是8031,由于8031内部无程序存储器,所以此引脚应接地。低电平有效。图3-1 8951单片机i/o口引脚:共4个,分别是p0、p1、p2、p3,均为8位口。这4个i/o口可分别作为基本的input、output端口。其中p0口可作为数据总线和地址总线(低8位)分时复用的端口,p2口可作为地址总线的高8位,即p0口和p2口地起构

8、成16位地址总线,可供寻址的地址范围是:64kb。p3口具有第二功能,即可以产生中断,定时计数等功能。rd、wr引脚:为读和写选通信号,rd用于将单片机的数据写入外设中,wr用于从外设中读取数据。低电平有效at89c51系列单片机都是以8031为核心发展起来的,具有和51系列单片机及基本结构和软件特征,其内部结构如图3-2所示: 振荡器及定时电路at89c51cpu4k字节rom128字节ram2个16位定时器/计数器64k总线扩展控制可编程i/o可编程串行口 图3-2 at89c51单片机框图3.1.2 选用at89c51单片机原因在课程设计里所需外围电路简单,在设计里面使用的引脚较少,占用

9、的资源也比较少。而且该芯片是以at89c51为核心,性能价格比高,应用成熟,且对其内部结构较为熟悉,芯片功能够用而且适用,从而选用at89c51单片机作为主控芯片。3.2 时钟电路本设计采用内部时钟方式的电路。 at89c51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚xtal1,输出端为引脚xtal2。这两个引脚跨接石英晶体振荡器和微调电容,就构成了一个稳定的自激振荡器。电路中的电容c1和c2典型值通常选择为33pf左右。晶体的振荡频率的范围通常是在1.2mhz12mhz之间。晶体的频率越高,则系统的时钟频率也就越高,单片机的运行速度也就越快。.图3

10、-3 时钟电路3.3 复位电路 复位电路通常采用上电自动复位和按钮复位两种方式。本次设计采用上电复位电路。上电复位电路是在上电瞬间来实现的,其电路如图3-4所示。上电时, reset端维持两个机器周期的高电平实现复位。图3-4 复位电路3.4 pg160128a显示电路pg160128a是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及格160128全点阵液晶显示器组成。可完成图形显示,也可以显示108个(1616点阵)汉字。主要技术参数和性能:模块内自带-15负压,用于lcd的驱动电压1. 电源vdd:+5v; 2.显示内容:160(列)128(行)点 3.全屏幕点阵 4.十三种指令 5

11、.与cpu接口采用8位数据总线并行输入输出 6.占空比1/1287.工作温度:-10+55,存储温度:-20+70这里通过pg160128a来显示相关信息。图3-5 显示电路3.5 光电报警电路蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛用于计算机、打印机、复印机、报警器、电子玩具、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器也分为有源蜂鸣器和无源蜂鸣器。通过三极管放大电流驱动蜂鸣器发出报警声。通过led发光二极管作为灯光报警。图3-6 光电报警电路3.6 a/d转换电路adc0832 是美国国家半导体公司生产的一种8 位分辨率、

12、双通道a/d转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用adc0832 可是使我们了解a/d转换器的原理,有助于我们单片机技术水平的提高。这里通过adc0832将压力传感器输出的电压信号转换为数字信号,并送入到单片机中进行处理。图3-7 a/d转换电路4 系统软件设计4.1主程序框图(1)主程序流程框图如下: (2)信号采集子程序框图如下:开始置数据区首地址a/d转换开始等待转换储存,返回图4-2 信号采集程序设置采集个数否是开始信号采集数字滤波开始求出机油压力值lcd显示数值图4-1主程序流程框图是否超出预设范围?报警提示结束 (

13、3) 数字滤波流程框图如下: (4) 报警、显示流程框图如下: 中断开始设置数据存储区首址设置采集数据个数对数据进行处理恢复现场返回图4-3 数字滤波流程框图 开始是否达到一次持续报警声的周期个数蜂鸣器连接的io口电平取反返回重装定时器初值延时一次重装持续周期数noyes图4-4报警流程框图说明:程序首先采集输入信号,然后通过数字滤波消除干扰,经过程序的计算求出压力的值,并送入显示设备,驱动显示设备显示压力值,并判断压力值是否为正常范围内,如果是则驱动光电报警电路,否则继续采集信号。通过定时器中断,以达到一定的延时时间,每次对蜂鸣器连接的io口取相反电平,以形成方波电路,并在达到一定的次数后延

14、时一次,以达到嘀、嘀的效果的报警声。4.2显示子程序框图开始初始化调用显示函数返回图4-5 显示子程序流程图5 系统调试过程通过上面的设计,设计已经基本完成。下面主要实现altium designer的原理图、印制板图的绘制和做相关检测,对keil进行相应的检查和调试,并用proteus对所设计系统进行仿真。5.1原理图和印制板图绘制和检查5.1.1 在protel99se绘制原理图并进行相应的erc检查打开protel99ser,绘制系统的原理图。原理图包括能输出时钟电路,驱动电路以及复位电路。绘制完成的原理图如图5-1:图5-1 原理图的绘制绘制完原理图之后,对原理图进行编译检测。erc检

15、测结果如图5-2,无错误:图5-2 编译检查5.1.2 在protel99se生成pcb图在创建完原理图后,对各元器件的引脚进行封装,在原理图中创建网络表(net),然后再protel99s中新建pcb ,对于生成的pcb图中各器件进行调整,并布线,最终生成pcb图。结果如图5-3所示:图5-3 生成pcb图5.2 keil程序调试程序调试结果如图5-4所示:creating hex file from 机油压力检测系统.机油压力检测系统 - 0 error(s), 0 warning(s).图5-4 程序调试结果5.3 proteus仿真调试在proteus中建立仿真图。按下开始仿真按钮,开

16、始进行仿真实验,结果如图5-5,图5-6,图5-7所示:图5-5 proteus仿真图(正常运行)图5-6 proteus仿真图(压力过高)图5-7 proteus仿真图(压力过低)仿真电路图中实现对压力检测的控制,输出到pg160128a显示。当输入信号大于130或者输入信号小于100时,报警灯会被点亮,同时蜂鸣器就会报警。仿真虽然能运行,但在实际电路中,还需要加入其它的一些电路才能保证单片机能正常工作,实现其功能。 结 论通过mpx4250检测到发动机机油压力信号,转换为电压值,然后通过adc0832转换后产生一个数字信号输入到at89c51单片机中进行处理,再通过单片机驱动pg16012

17、8a显示压力的相关信息。并在超过安全阈值时通过通过单片机p1.0和p1.1实现声光报警。由于显示程序的复杂性,所以选用了c语言作为开放程序加快了开发进度。本次设计由于时间较为仓促,难免考虑不周全,还有许多功能需要完善,这需要下来再去深究。在本次课程设计里面,我把电路和单片机必备的一些基本操作技能再次熟悉了一遍。 对于机油压力检测,我只进行了最简单的程序编写和仿真,而往往在实际中是作为一个系统中的很小子环节来进行应用的,所以还需要我进一步学习更多的单片机及相关测试传感器知识。致 谢在本课程设计资料搜集期间,他人的研究资料对我提供了莫大的帮助,这里表示感谢。值此即将完成课程之际,我要衷心地感谢唐岚

18、老师。在课程设计过程中,得到了她的精心指导和热情帮助,她的一些建议和意见给我很深的启发。在此由衷感谢。参考文献1谭浩强.c程序设计(第三版)m.北京.清华大学出版社.2005(2007重印)2 张毅刚,彭喜元等. mcs-51单片机应用设计(第3版)m.哈尔滨.哈尔滨工业大学出版社.2001.3徐琤颖.protel99se eda技术及应用.m.北京.机械工业出版社.2009.1重印4古辉,刘均等.微型计算机接口及控制技术.m.北京.机械工业出版社.2009.1附录一 程序源代码/*机油压力检测系统.c*/#include #include #include #define uint unsi

19、gned int#define uchar unsigned charextern char fnlcminit(); / lcm 初始化extern void fnsetpos(unsigned char urow, unsigned char ucol);/ 设置当前地extern uchar dprintf(uchar x,uchar y,char *fmt);/ ascii(8*16) 及 汉字(16*16) 显示函数/adc0832相关sbit cs = p34;sbit clk = p32;sbit dio = p33;/sbit alarm = p10;/报警sbit ledal

20、arm = p11;/报警灯uint thelasttime; /一次鸣响持续次数uchar get_ad_result()uchar i,dat1=0,dat2=0;/起始控制位 cs = 0;clk = 0; dio = 1; _nop_(); _nop_();cs = 0;_nop_(); _nop_();clk = 1; _nop_(); _nop_();/第一个下降沿之前,设di = 1 / 0/选择单端/差分(sgl/dif)模式中的单端输入模式clk = 0;dio = 1; _nop_(); _nop_();clk = 1; _nop_(); _nop_();/第二个下降沿之前

21、,设di = 0 / 1,选择ch0/ch1 clk = 0;dio = 0; _nop_(); _nop_();clk = 1;dio = 1; _nop_(); _nop_();/第三个下降沿之前,设di = 1clk = 0;dio = 1; _nop_(); _nop_();/第4-11个下降沿读数据(msb-lsb)for(i=0;i8;i+) clk = 1; _nop_(); _nop_();clk = 0; _nop_(); _nop_();dat1 = dat1 msb)for(i=0;i8;i+)dat2 = dat2 | (uchar)(dio)i);clk = 1; _

22、nop_(); _nop_();clk = 0; _nop_(); _nop_();cs = 1;return (dat1 = dat2) ? dat1:0;unsigned char dsp4; /作为压力存储传入函数显示void delay() /蜂鸣器鸣响间隔延时 uint i, j = 200;while(j-) for (i = 0; i = 500; i+);void main() uchar ad_result; /获取的ad值float ad = 0; /当前压力值bit balarm = 0; /蜂鸣器鸣响标记,0为没响,1正在响float y1, y2, dy;/限幅滤波d

23、y = 2;/定时器初始化tmod = 0x01;et0 = 1;ea = 1;th0 = 0xfc;tl0 = 0x18;/pg160128a初始化 fnlcminit();fnsetpos(0,0); dprintf(30,12,机油压力检测系统);dprintf(20, 58, 当前压力: );dprintf(110, 58, 千帕);ad_result = get_ad_result();y1 = (ad_result * 5.0 / 255.0 / 5.1 - 0.04) / 0.00369 - 3.45;)while(1) ad_result = get_ad_result();y

24、2 = (ad_result * 5.0 / 255.0 / 5.1 - 0.04) / 0.00369 - 3.45;if (abs(y2 - y1) = dy) /变化不能太快,否则会失效 ad = y2;y1 = y2;else ad = y1;sprintf(dsp,%-3.0f,ad);dprintf(82,58,dsp);if (ad 130 & balarm = 0) tr0 = 1;thelasttime = 300;balarm = 1; dprintf(30, 88, 警告: 压力);dprintf(98, 88, 过); dprintf(110, 88, 高);ledal

25、arm = 0;else if (ad = 100 & ad = 130) tr0 = 0;balarm = 0;dprintf(30, 88, );ledalarm = 1;void tm_int0() interrupt 1 /定时中断,产生方波,驱动蜂鸣器 th0 = 0xfc;tl0 = 0x18;alarm = !alarm;if (0 = -thelasttime) delay();thelasttime = 200;/*showfun.h*#include #include #include #include #include #include #include #define

26、ulong unsigned long#define uint unsigned int#define uchar unsigned charsbit ce=p27;sbit reset=p33;/以8*8字符计算,显示屏横向、纵向可以显示的字符个数/以240*128为例:#define linechar 30 /一行16个字符(8*8)#define columnchar 16 /总共16列 #define stx 0x02#define etx 0x03#define eot 0x04#define enq 0x05#define bs 0x08#define cr 0x0d#define

27、 lf 0x0a#define dle 0x10#define etb 0x17#define space 0x20#define comma 0x2c#define true 1#define false 0#define high 1#define low 0/ t6963c 端口定义#define lcmdw xbyte0x8000 / 数据口#define lcmcw xbyte0x8100 / 命令口/显示内存分配/0000h-67ffh 文本区/6800h-77ffh 4k 图形区/7800h-7fffh 2k cgram区#define disram_size 0x7fff /设

28、置显示ram的大小#define txtstart 0x0000 /设置文本区的起始地址#define grstart 0x6800 /设置图形区的起始地址#define cgramstart 0x7800 /设置cgram的起始地址/ t6963c 命令定义#define lc_cur_pos 0x21 / 光标位置设置#define lc_cgr_pos 0x22 / cgram偏置地址设置#define lc_add_pos 0x24 / 地址指针位置#define lc_txt_stp 0x40 / 文本区首址#define lc_txt_wid 0x41 / 文本区宽度#define

29、 lc_grh_stp 0x42 / 图形区首址#define lc_grh_wid 0x43 / 图形区宽度#define lc_mod_or 0x80 / 显示方式:逻辑“或”#define lc_mod_xor 0x81 / 显示方式:逻辑“异或”#define lc_mod_and 0x82 / 显示方式:逻辑“与”#define lc_mod_tch 0x83 / 显示方式:文本特征#define lc_dis_sw 0x90 / 显示开关 / d0=1/0:光标闪烁启用/禁用;/ d1=1/0:光标显示启用/禁用;/ d2=1/0:文本显示启用/禁用/ d3=1/0:图形显示启用/

30、禁用;#define lc_cur_shp 0xa0 / 光标形状选择:0xa0-0xa7表示光标占的行数#define lc_aut_wr 0xb0 / 自动写设置#define lc_aut_rd 0xb1 / 自动读设置#define lc_aut_ovr 0xb2 / 自动读/写结束#define lc_inc_wr 0xc0 / 数据一次写,地址加1#define lc_inc_rd 0xc1 / 数据一次读,地址加1#define lc_dec_wr 0xc2 / 数据一次写,地址减1#define lc_dec_rd 0xc3 / 数据一次读,地址减1#define lc_noc_wr 0xc4 / 数据一次写,地址不变#define lc_noc_rd 0xc5 / 数据一次读,地址不变#define lc_scn_rd 0xe0 / 屏读#define lc_scn_cp 0xe8 / 屏拷贝#define lc_bit_op 0xf0 / 位操作:d0-d2:定义d0-d7位;d3:1置位;0:清除/*/* lcm 240128 显示程序 */* mc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论