红外报警器-单片机原理及应用课程设计.doc_第1页
红外报警器-单片机原理及应用课程设计.doc_第2页
红外报警器-单片机原理及应用课程设计.doc_第3页
红外报警器-单片机原理及应用课程设计.doc_第4页
红外报警器-单片机原理及应用课程设计.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

课程设计报告课程名称:单片机原理及应用课程设计设计题目: 红外报警器 系 别: 通信与控制工程系 专 业: 电子信息工程 班 级: 学生姓名: 学 号: 起止日期: 指导教师: 教研室主任: 指导教师评语: 指导教师签名: 年 月 日成绩评定项 目权重成绩1、设计过程中出勤、学习态度等方面0.22、课程设计质量与答辩0.53、设计报告书写及图纸规范程度0.3总 成 绩 教研室审核意见:教研室主任签字: 年 月 日教学系审核意见: 主任签字: 年 月 日摘 要本次红外报警器的设计分为三部分:红外发送、串口通信、红外接收。本次设计用到了两块51单片机开发板,分别称为A机、B机。A机作为红外发送使用,B机作为红外接收用。用外中断0、外中断1控制红外发送的启停和清零。本次设计采用C语言编制程序,A机实现了发送频率为38khz左右的红外线,并将发送次数在A机上显示。再通过串口通信,将发送次数传到B机,同时B机的红外接收头接收红外线,并将接收到的次数在B机上显示,将接收次数与发送次数对比,若相等则继续接收,若不等则驱动蜂鸣器报警。本次设计的外电路有:51单片机最小系统,红外发送电路,红外接收电路,8255扩展单片机I/O口驱动数码管、报警电路等。关键词:红外发送 红外接收 数据传输 报警 目录设计要求11 方案论证与对比11.1 整体设计思路11.2 方案一11.3 方案二11.4 方案对比12 硬件电路设计12.1 红外发送电路的设计12.2 红外接收电路的设计22.3 报警电路的设计22.4 显示电路设计22.5 主控电路设计33系统流程图44系统功能测试与整体指标55使用的仪器及元件56总结与致谢5参考文献6附录一:软件编程7红外报警器设计要求发送端:发送红外线,并记录发送的次数,用数码管显示同时将发送的次数通过串口发给接收端,由按键来控制控制开、停和清零。接收端:接收红外线,并记录接收到的次数,与发送端通过串口连接,当红外接收到的次数小于次数小于串口传送过来的次数时,报警。1 方案论证与对比1.1 整体设计思路A机发射红外线,记录发送次数并显示,发送与B机的联络信号,串口通信,实现数据的传输B机接收红外,记录接收次数,并与传来的数据进行比较,不等,报警1.2 方案一采用汇编语言编制程序,分两个大模块进行编程即发送模块和接收模块,数据的通信放到两个模块中,形成统一的波特率,并握手连接。此外B机接收红外时,采用定时器0的计数功能对所接收的红外进行计数,同时可以显示。1.3 方案二采用C语言编制,模块划分同方案一,但是B机接收红外时通过查询P1.1是否是低电平来计数,与数码管显示不同步。1.4 方案对比方案一编程复杂,寄存器存储器的使用受限,加大了编程的难度。查询红外时需将P1.1口与定时器0相连,才可以用定时器0的计数功能,采用此方案,还需改进开发板。方案二编程相对简单,可以降低设计的难度。查询是否有红外时,不需要改进开发板。综上所述,选择方案二来进行设计。2 硬件电路设计2.1 红外发送电路的设计根据设计要求,51单片机要控制红外发送端,其具体电路如图1所示:图 1 红外发送原理图此处的P1.0即为单片机的P1.0口,这里低电平有效。当P1.0=0时,有红外发送。反之没有红外发送。通过使用单片机内部的定时器,控制P1.0的输出脉冲周期,进而产生38khz的调制红外线,即所需发送的红外线。设计中不断对P1.0取反,取反50次后,即算为A机发了一次红外。之后让P1.0 = 1,持续一小段时间后,再对P1.0反复取反,执行50次后,再计数。依此类推。2.2 红外接收电路的设计接收端采用接收电路,原理图如图2所示:图 2 红外接收电路原理图 这里连接单片机的P1.1口,低点平有效。当P1.1=0时,表示接收到了红外。反之没有接收到红外。2.3 报警电路的设计当接收次数与发送次数不等时,报警。其电路电路如图3示:图 3 报警电路当控制单片机的P3.3引脚为一定频率的脉冲电平时,即产生用于发声脉冲,就可以驱动蜂鸣器电路,也即报警。2.4 显示电路设计用数码管显示发送接收次数,电路如图4示:图 4 显示电路原理图数码管由8255控制,8255的A口控制数码管的位选,低电平有效。B口控制段选,通过编码可以显示09的数字,也是低电平有效。2.5主控电路设计主控电路即单片机的接口及其与8255芯片的连接,其具体电路如图5:图 5 主控芯电路原理图 此部分电路是本次设计的核心,同过对单片机编程,将各部分电路连接成一个整体,实现红外报警器这一设计。使用单片机对可编程I/O扩展芯片8255进行操控,用来控制六位数码管显示。3系统流程图8255与中断初始化红外调制与发送红外次数记录串口发送次数显示红外次数发连络信号A机8255与中断初始化查询红外显示接收红外次数NY接收红外次数记录接收发送?循环已完?Y结束N循环已完?Y结束开始开始B机N报警4系统功能测试与整体指标将代码烧入到相应的A、B机,进行测试,可得到以下的测量结果,见下表:表格 1 系统测试结果测量序号A机发送值B机接收值是否报警1000000000000否2000080000078否3000120000117是4000255000255否5000000000000否6000003000003否由以上表格的数据可知,发送次数为255时,A,B机将自动清零,再重新发送并计数。当发送和接收的值不相等时也即相差大于2时,将会报警,这里的误差允许为2是为了避免开机脉冲造成一个干扰红外而误报。相等时不报警并继续接收。以上已证明红外报警器的功能已实现。5使用的仪器及元件红外报警器元件清单元件及器件数量单片机开发板 版本:2011B2杜邦线25V电源1USB电源线16总结与致谢 通过本次红外报警器的设计,自我感觉已对51单片机有一个深入的了解,为后面单片机的学习打下了基础。编程思想也得到了锻炼,在编程中,学会了严谨的思维模式。我们懂得了,作为一个程序员,要有探索精神,要懂得将问题细化,分模块解决问题,还要有坚持不懈,不怕困难的精神 。实例项目的研究,可以让我们更具体的,更有目标的去学习单片机课程。通过自我学习,我们可以学到课本以外的知识,体验单片机在做项目时可能遇到的问题。另外,我们感谢学校给我们提供课程设计这样一个机会,让我们能自主研究,自主学习,共同探索。参考文献1 张鑫.单片机原理与应用(第二版) 电子工业出版社2 何立民.MCS-51 单片机应用系统设计.北京:北京航空航天大学出版社,2003.3 朱定华,戴汝平.单片微机原理与应用.(M) 北京:清华大学出版社,200316附录一:软件编程 这一部分由A机来完成,实现37 khz的红外发送,并将所发次数记录并显示再通过串口通信传送出去。发送次数最大为255次。具体代码如下:#include#include8255.h#includedelay.h#define uint unsigned int #define uchar unsigned char#define sint signed int #define schar signed char#define ulong unsigned long sbit irsend=P10;/红外控制端接在P1.0上void send_ir();/申明发送红外函数void count_ir_times();/申明计录红次数函数void display_times();/申明显示函数uchar serial_send(uchar dat);/申明串口发送函数void init();/申明串口和外中断初始化函数void timestrans();/申明“次数转换”函数,将红外的次数拆开,为显示作准备。uchar code smg_du=0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28;/定义“09“对应的数码管段码数组uchar code smg_we=0xdf,0xef,0xf7,0xfb,0xfd,0xfe;/定义数码管的位选码uchar timesdata6;/定义timesdata数组,用于保存times拆开后的数据.uchar times;/定义全局变量times,用于保存红外发送的次数。uchar sendover;/定义一个发送完成标志位。uchar start;/定义一个开始标志。/*void main ()/主函数 COM8255=0x80;/初始化8255为工作方式0,端口为输出方式.init();/串口和外中断工作初始化.while(1)/大循环。 if(start)/如果start非零,则执行以下。(此处用start来控制红外的发送开始与暂停,start的值由外中断1的按键来控制)send_ir();/发送红外线。count_ir_times();/记录红外次数。/以上说明:如果start标志被打开,则会发送红外并记录红外次数,如果start标志没有打开,则不会发送红外,且不会计录红外次数。serial_send(times);/通过串口将红外发送的次数times发给B机。display_times();/显示红外次数。serial_send(0x00);/发联络信号。用于使B机退出显示去查询红外。/*void init()/申明串口初始化函数TMOD=0x20;/设置定时器1为工作方式2TH1=0xfd;/装初值,用于产生串口通信的波特率。TL1=0xfd;/装入初值,同上。TR1=1;/启动定时器1SM0=0;SM1=1;/设置串口为工作方式1EA=1;/开总中断。EX0=1;/开外中断0。EX1=1;/开外中断1。IT0=1;/外中断0为负边缘触发。IT1=1;/外中断1为负边缘触发。 void send_ir()/发送红外函数 uchar i;for(i=50;i0;i-)irsend=0; /调制红外为38KHz左右delay_10us(2); /用于控制调制的频率.irsend=1; /翻转。irsend=1;/发完红外后,关掉红外控制口(发送红外时电流很大,发完关掉好些)sendover=1;/发完后,发关完成标志置1,供后面计数查询。/*void count_ir_times()/计录红次数函数if(sendover)/查询红外发送是否完成。完成则执行以下。 sendover=0;/发送完成标志清零,为下次使用作初始化。times+;/次数加1,记录红外次数。/*8void display_times()/显示函数uchar i,j;timestrans();/拆解红外次数。见下方详细函数for(j=50;j0;j-)/此处把显示循环50次,有延时的作用for(i=0;i6;i+)/动态示次数.PB8255=smg_dutimesdatai;/送段码。PA8255=smg_wei;/送位选码。delay_50us(20);/延时点亮。PB8255=0xff;/熄灭。防鬼影。/*uchar serial_send(uchar dat)/串口发送函数 if(dat=255) times=0;/如果发送的是255,则将红外次数清零(程序设计中,255是作为清零的标志,0零是作为双机握手信号,B机中会提到。) SBUF=dat;/将要发送的数据通过串口发送给B机。if(!TI);/等待发送完成。TI=0;/发送完成则软件清零。/*void timestrans()/“16进制数转10进制数”函数timesdata0=times%10;/取得红外次数的个位值存timedata0.timesdata1=times%100/10;/取得红外次数的十位值存timedata1.timesdata2=times%1000/100;/取得红外次数的百位值存timedata2.void int0() interrupt 0serial_send(255);/当按下外中断0的按键时,发送一个255,(发255是供查询的,A机查询到时是255时,会将A机清零,B机如果查询到发的是255,则会将B机清零)void int1() interrupt 2/外中断1start+;/当按一次外中断1按键时,start标志变为1,供A机查询用于控制开始与暂停发送红外。if(start=2) start=0;/当第二次按外中断1按键时,start标志变为0,功能同上。这一部分由B机来完成,B机使用接收头接收红外,将接收次数保存并显示,并与A机传来的次数进行比较,不等,则报警。具体代码如下:#include #include8255.h#includedelay.h#define uint unsigned int #define uchar unsigned char#define sint signed int #define schar signed char#define ulong unsigned long sbit ir=P11;/位定义红外按收引脚sbit beep=P33;/位定义蜂鸣器控制引脚void check_ir();/申明查询红外函数。void display_times();/申明显示函数void serial_init();/申明串口初始化函数void timestrans();/申明次数拆解函数void ring();/申明报警函数。unsigned char code smg_du=0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28;/定义“09“对应的数码管段码数组unsigned char code smg_we=0xdf,0xef,0xf7,0xfb,0xfd,0xfe;/定义六位数码管的位选码uchar timesdata6;/定义timesdata数组,保存16进制数转10进制数的数据.uint times;/定义全局变量times,用于保存红外发送的次数。uchar receiveok;/定义一个接收完成标志位。uchar serialdat;/定义一个串口接收变量,用于存放串口收到的数据。uchar checkir;/定义一个查询红外的标志。uchar ringflag;/定义一个报警标志。void main ()/主函数 COM8255=0x80;/初始化8255为工作方式0,端口为输出方式.serial_init();/串口工作初始化.while(1)/大循环。 check_ir();/查询红外。if(!checkir) display_times();/查询后显示已接收到红外的次数。if(ringflag)/如果报警标志开启,则报警。 ring();/报警。void serial_init()/申明串口初始化函数TMOD=0x20;/设置定时器1为工作方式2TH1=0xfD;TL1=0xfD;/装入初值TR1=1;/启动定时器1SM0=0;SM1=1;/设置串口为工作方式1REN=1;/接收使能。EA=1;/开总中断。ES=1;/串口中断始能。void check_ir()if(!times)/当times为零时(即开机或复位) if(ir);/等待第一次红外。(第二次则不要等待,第二次t

温馨提示

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

评论

0/150

提交评论