基于单片机的无线防盗系统毕业设_第1页
基于单片机的无线防盗系统毕业设_第2页
基于单片机的无线防盗系统毕业设_第3页
基于单片机的无线防盗系统毕业设_第4页
基于单片机的无线防盗系统毕业设_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

1、基于单片机控制的无线防盗系统中文摘要本次设计的主要目的是建立一套完整的安防监控系统,放置房屋、仓库等重要物品。在主人房内实现无线监控,减轻小区或仓库管理员的工作强度,希望能有效解决小区或工厂贵重物品的安全问题。该系统主要由两个模块组成:人体接近动作模块,主要负责实时监测人体接近状态。如果人体接近,传感器立即将标志数据致到 CPU。无线致模块致数据,无线致模块接收到数据后,在主机模块上高速向主机致数据,实现实时监测人体接近的功能;主机模块主要负责接收从监控模块致的数据。当监控模块达到预设效果时,对数据进行处理并致到液晶显示器,产生报警,作为实时监控系统。为丰富系统功能,有效利用系统资源,主机模块

2、增加了不掉电的精确时钟显示,红外遥控控制时间修改和报警解除等功能。考虑到软件的执行效果和系统的整体稳定性,本设计中的所有软件都在物的整体电路和局部电路上调试成功。因此,所提出的方案是可行的。关键词:单片机;无线传输;人体方法;红外线遥控器目录 TOC o 1-3 h z u HYPERLINK l _Toc353884587 总结 PAGEREF _Toc353884587 h - -关键字- HYPERLINK l _Toc353884588 PAGEREF _Toc353884588 h II- HYPERLINK l _Toc353884589 简介 PAGEREF _Toc353884

3、589 h - 1 - HYPERLINK l _Toc353884590 第 1 章功能概述 PAGEREF _Toc353884590 h - 3 -第 2 章 总体计划 HYPERLINK l _Toc353884591 PAGEREF _Toc353884591 h - 4 - HYPERLINK l _Toc353884592 2.1 整体分析 PAGEREF _Toc353884592 h - 4 - HYPERLINK l _Toc353884593 2.2 方案框图 PAGEREF _Toc353884593 h - 4 - HYPERLINK l _Toc353884594

4、第三章系统配置 PAGEREF _Toc353884594 h - 5 - HYPERLINK l _Toc353884595 3.1 人体接近模块 PAGEREF _Toc353884595 h - 5 -3.1.1 STC12C5410AD单片机介绍 HYPERLINK l _Toc353884596 PAGEREF _Toc353884596 h - 5 - HYPERLINK l _Toc353884597 3.1.2 人体感应模块 PAGEREF _Toc353884597 h - 6 - HYPERLINK l _Toc353884598 3.1.3 NRF24L01无线通信模块

5、PAGEREF _Toc353884598 h - 8 - HYPERLINK l _Toc353884599 3.2 主机模块 PAGEREF _Toc353884599 h - 12 - HYPERLINK l _Toc353884600 3.2.1 1602液晶显示器 PAGEREF _Toc353884600 h - 1 2 - HYPERLINK l _Toc353884601 3.2.2 STC89C52RC+单片机介绍 PAGEREF _Toc353884601 h - 1 4 - HYPERLINK l _Toc353884602 3.2.3 红外接收与遥控 PAGEREF _

6、Toc353884602 h - 1 5 - HYPERLINK l _Toc353884603 3.2.4 DS12C887 PAGEREF _Toc353884603 h - 1 7 - HYPERLINK l _Toc353884606 第 4 章 软件设计 PAGEREF _Toc353884606 h - 19 - HYPERLINK l _Toc353884607 4.1 人体接近动作模块流程图 PAGEREF _Toc353884607 h - 1 9 -4.2 主机模块流程图 HYPERLINK l _Toc353884608 PAGEREF _Toc353884608 h -

7、 1 9 -第 5 章 程序代码 HYPERLINK l _Toc353884609 PAGEREF _Toc353884609 h - 20 - HYPERLINK l _Toc353884610 5.1。人体感应模块 c-code PAGEREF _Toc353884610 h -20- HYPERLINK l _Toc353884611 5.1.1 主机模块 c-code PAGEREF _Toc353884611 h - 2 4 -5.2 原理图和实物图- PAGEREF _Toc353884611 h 44- _ _ HYPERLINK l _Toc353884613 结论 PAGE

8、REF _Toc353884613 h - 46 - HYPERLINK l _Toc353884614 至 PAGEREF _Toc353884614 h - 47 - HYPERLINK l _Toc353884615 参考文献 PAGEREF _Toc353884615 h - 48 -介绍随着现代电子技术、计算和通讯技术的飞速发展,与防盗报警器相关的产品也越来越丰富。尤其是红外技术发展迅速,红外探测技术已经渗透到国民经济的各行各业和人们生活的方方面面。近年来,随着改革开放的深入发展和电子电器的快速发展,人民生活水平有了很大提高。各种高档家电和贵重物品为许多家庭所拥有。但是,犯罪分子也越

9、来越多。这是看大多数人的防盗意识还不够强。盗窃现象并不少见。因此,越来越多的家庭非常担心财产安全。防盗报警系统是一种特殊的电子系统,当在防盗现场检测到入侵者时,可以发出报警信号。一般由探测器(报警器)、传输系统和报警控制器组成。当探测器检测到意外情况时,产生报警信号,通过传输系统送至报警控制器,发出声、光或其他报警信号。检测器(报警器)的种类很多,根据检测到的物理量不同可分为微波、红外线、激光、超声波和振动等;根据电信号传输方式的不同,可分为无线传输和有线传输。离开。由于红外线对光不可见,具有很强的隐蔽性和性能,因此被广泛应用于防盗、警示等安防设备中。这时,红外报警器的简单性和高灵敏度为人们解

10、决了很多问题。但市面上的报警器大多用在一些大公司的金融机构,而且价格高昂,普通人难以接受。如果设计生产出一款便宜、灵敏、可靠的防盗报警器,肯定能满足大部分人的需求。在人们的防盗和财产安全方面能起到更有效的作用。本设计采用性价比高的51单片机作为处理器,1602字符液晶屏作为显示器件。 NRF24L01无线传输模块作为主无线传输模块,双晶热释电传感器作为辅助检测装置。单片机方面,虽然51系列单片机与AVR、ARM系列单片机在处理速度上存在一定差距,但作为8位单片机,51单片机简单实用的资源决定了它是主流低速单片机产品,本设计对单片机的速度没有特殊要求,也以单片机作为首选控制芯片。在显示器的选择上

11、,考虑到数码管只能显示数字和几个简单的字母,不能满足显示要求,所以决定使用液晶显示器。考虑到这种设计可以简化为没有汉字的显示,我们决定使用1602字符的LCD。虽然这个液晶显示器不能显示汉字,但它可以显示所有的数字、英文字母和一些更复杂的字符。系里还有字符库,编程很方便。在无线传输设备的选择上,NRF24L01无线模块有6个无线通道,可以实现1对6无线传输,可以低速传输,也可以高速传输。非常适合与51系列低速单片机接口连接,价格方面远低于其他无线模块。通过严格控制这些主要元器件的选型,有效降低了系统的设计成本,虽然性能会弱于市面上的产品。系统,但对于灵敏度要求不是很高的家庭和仓库来说,无疑是更

12、好的选择。第一章 功能概述人体接近模块上的红外热释电传感器在上电后持续监测外部红外热信号。当其监测区域内产生一定的红外热信号(人体红外信号)变化时,热释电传感器将热信号转换成电信号,通过其模块电路转换成单片机可以识别的电平信号. MCU检测到信号后,将其转换成字符串致给无线模块。无线模块接收到数据后,转换成数据包高速致出去,立即转换为接收模式,等待主机致确认信号。收到确认信号后,确认致成功。 ,传输模块进入待机模式,等待下一个数据的到来。主机模块的功能由时间产生芯片、显示时间和信号变化的显示器(液晶屏)、报警器(蜂鸣器)、信号接收器(无线模块)、时间修改器(红外接收头和红外遥控器)。其中,时间

13、芯片可以产生精确的时间信号并保存在其内部寄存器中。单片机读取其寄存器的时间数据,处理后致给显示器。无线模块接收到从模块致的数据后,将人体接近模块的数据存储在无线数据模块中,然后通过SPI总线将数据传输给单片机,单片机微型计算机处理数据并将其致到液晶显示器。如果接收到的数据超过或达到预设的效果,蜜糖设备会产生告警。红外接收头主要通过外部中断接收红外遥控器致的数据包,然后将数据包致给单片机。单片机的外部中断检测到数据后,停止主程序的执行,转而执行中断程序。返回值实现时间修改、蜜装置报警解除等功能。人体近距离无线报警器的实现过程是:当人体接近热释电传感器时,传感器检测到信号动作,并将信号传送给从模块

14、的CPU。 CPU 检测到输入信号并立即通过 SPI 总线无线传输。预设标志数据在模块中致。传输完成后,无线模块自动添加地址位、校验位、起始位等,打包成数据包,以增强模式高速致出去。主机模块检测到数据包并确认数据正确,去掉致模块添加的数据部分,取出致的数据致给主机模块的CPU,CPU检测是否是人身体接近信号。判断无误后,CPU向显示器致显示F指令,刷新显示器初始设置的N显示,并控制蜂鸣器发声,通知主机安装室有人进入检测区域。当主机检测到房间监控人员察觉到时,可以使用遥控钥匙取消报警,然后处理问题。此外,主机模块还附有精确的万年历功能。主机开机后会进入显示自检界面,进入欢迎界面再进入时钟显示界面

15、。界面显示当前年、月、日、时、分、秒、周。并且根据当前时间不断刷新。该时钟有两个明显的特点:一是采用DS12C887时钟芯片作为时间产生芯片。这款芯片最大的特点就是在主机断电后可以持续工作长达10年,而且时间准确。二是取消了原来用主机键盘调时间日期的模式,用红外遥控器修改时间,方便了工作人员,充分利用了遥控器的资源。第二章总体规划2.1 总体分析本设计主要是通过对重要区域人体的接近检测,实现当人体接近重要区域时,放置在重要区域附近的主机系统的显示和报警,从而准确地显示当前时间和时间。主机系统,并通过红外遥控器修改当前时间。功能。整个系统采用单片机作为控制元件,辅以人体接近放电模块,用于检测人体

16、接近并将信号传送给单片机作为检测传感器; NRF24L01无线传输模块作为两个系统之间的无线传输设备;红外接收器用作红外信号。接收装置。整个过程中,传感器不断检测外界信号,并将其传输给单片机,实现对人体接近程度的实时监测。红外遥控器的按键用于修改当前时间和日期值,可作为人体接近报警的释放开关。第三章系统配置3.1 人体接近模块3.1.1 STC12C5410AD单片机介绍STC12C5410AD系列单片机是宏晶科技生产的单时钟/机器周期(1T)单片机。是新一代8051单片机,具有高速/低功耗/超强抗干扰。指令生成与传统8051单片机完全兼容,但速度快8-12倍,部分集成了MAX810专用复位电

17、路。 4路PWM,8路高速10位A/D,D/A转换,适用于电机控制,强干扰场合。1、增强型8051CPU,1T,单时钟/机器周期,指令代码与传统8051单片机完全兼容。2、工作电压:5.5-3.3V。3、工作频率范围0-35MHZ,相当于普通单片机8051的0-420MHZ,实际工作频率可达48MHZ。 4,10K闪存存储空间。5、片内集成了512字节的RAM。6、15个通用I/O口,可设置为四种模式:准双向口/弱上拉、无推/强上拉、仅输入/高阻、开漏、各I/O口驱动能力 可以达到20MA,但整个芯片最大不能超过55MA。7. ISP(On-Line System Programming)/I

18、AP(In-Application Programmable),不需要专门的编程器或专门的仿真器,用户程序可以直接通过串口下载,几秒钟就可以完成一个.8、EEPROM功能。9.看门狗。10、时钟源:外部高精度时钟,外部R/C振荡器。用户在下载程序时可以选择使用内部振荡器或外部时钟。室温下下振荡器的频率为5.2MHZ-6.8MHZ。当精度要求不高时,可选择外部时钟。11、一共2个16位定时器/计数器,但是PCA模块可以多产生4个定时器。12、2个外部中断,可选择下降沿触发和低电平触发两种方式。13. 4路PWM。14、8通道10位高精度A/D、D/A转换。15、通用全双工异步串口(UART)。由

19、于STC12系列是高速的,所以也可以使用定时器软件来实现多个串口。16、SPI同步通讯口,具有主/从模式。17、工作温度范围:-40+85。3.1.2 人体感应模块基于红外技术的自控产品,灵敏度高,可靠性强,超低压工作模式,广泛应用于各类自动感应电气设备,特别是干电池供电的自控产品。模块电气参数:模块特点:1、全自动感应:人进入感应罩时输出高电平,人离开感应罩时自动延时高电平输出低电平。2光敏控制(可选,出厂未设置:可设置光敏控制,白天或强光时不感应。温度补偿(可选,出厂未设置,夏季,当环境温度升至30321:时,检测距离略短,温度补偿可以做一定的性能补偿。4丨两种触发方式:跳线可供选择) 不

20、可重复触发模式:即感应输出高电平后,只要延迟时间段结束,输出就会自动从高电平变为低电平; 可重复触发模式:即传感器输出高电平后,在延迟时间段内,如果有人体在传感器周围移动,其输出将保持高电平,高电平不会被延迟直到那个人离开。为低电平(传感器模块检测到人体每次活动后会自动延长一个延迟时间段,最后一次活动的时间为延迟时间的起点)。 5带感应闭锁时间(默认设置:无闭锁时间。感应模块每次感应输出后(高电平变为低电平),可立即设置一个闭锁时间段,在此期间传感器不接受任何感应该功能可以实现“感性输出时间”和“闭锁时间”之间的间隔工作,可应用于间隔检测产品;同时该功能可以有效抑制负载切换过程中产生的各种扰动

21、。(本时间可设置从零点几秒到几十个6丨工作电压范围:默认工作电压为0到-20乂.飞.微功耗:静态电流50微安,特别适用于自动控制干电池供电产品 8丨输出高电平信号:可方便地与各种电路连接。模块感应周长:3.1.3 NRF24L01无线通信模块概述:nRF24L01是一款工作在2.42.5GHz全球ISM频段的单片无线收发芯片。无线收发器包括:频率发生器、增强型 SchockBurstTM 模式控制器、功率放大器、晶体振荡器、调制器、解调器。输出功率、通道选择和协议的设置可以通过SPI接口进行设置。极低的电流消耗:发射模式下发射功率为-6dBm时电流消耗为9mA,接收模式下为12.3mA。掉电和

22、待机模式下的电流消耗更低。示意图:功能说明:操作模式:nRF24L01可以设置为以下主要模式,表 6有关 nRF24L01 I/O 引脚的更详细说明,请参见下面的表 7。nRF24L01在不同模式下的引脚功能表 7. nRF24L01 引脚功能待机模式:待机模式 I 降低了系统的平均电流消耗,同时确保快速启动。在待机模式 I 下,晶振正常工作。一些时钟缓冲器在待机模式 II 中处于活动模式。当致器 TX FIFO 寄存器为空且 CE 为高电平时,进入待机模式 II。在待机模式下,寄存器配置内容保持不变。掉电模式:在掉电模式下,nRF24L01 的功能被禁用以将电流消耗保持在最低水平。进入掉电模

23、式后,nRF24L01 停止工作,但寄存器容量保持不变。启动时间见表 13。掉电模式由寄存器中的 PWR_UP 位控制:nRF24L01具有以下数据包处理方式:ShockBurstTM(数据传输率为1Mbps时与nRF2401、nRF24E1、nRF2402、nRF24E2相同)增强型ShockBurstTM模式ShockBurstTM 模式:在 ShockBurst 模式下,nRF24L01 可以连接成本更低的低速 MCU。高速信号处理由芯片的射频协议处理,nRF24L01提供SPI接口,数据速率取决于单片机本身的接口速度。 ShockBurst 模式内容与微控制器进行低速通信并与无线部分进

24、行高速通信,从而降低了通信的平均电流消耗。在 ShockBurstTM 接收模式下,当接收到有效地址和数据时,IRQ 会通知 MCU,然后 MCU 可以从 RX FIFO 寄存器中读取接收到的数据。在 ShockBurstTM 致模式下,nRF24L01 自动生成前导码和 CRC 校验,见表 12。 数据致IRQ 完成后通知 MCU。单片机的查询时间减少了,也就意味着单片机的工作量减少了,软件的开发时间也减少了。 nRF24L01 部分具有三个不同的 RX FIFO 寄存器(6 个通道共享该寄存器)和三个不同的 TX FIFO 寄存器。在掉电模式、待机模式和数据传输期间,MCU 可以随时访问

25、FIFO 寄存器。这内容 SPI 接口以低速传输数据,并可用于 MCU 硬件上没有 SPI 接口的情况。增强型 ShockBurstTM 模式:增强的 ShockBurstTM 模式可以更轻松、更高效地实现双向协议。典型的两种方式是:致方要求终端设备收到数据后有响应信号,以便致方检测是否有数据丢失。一旦数据丢失,可以通过重新致功能恢复丢失的数据。增强型 ShockBurstTM 模式可以同时控制响应和重传功能,而不会增加 MCU 的工作量。图一nRF24L01星型网络结构图二nRF24L01接口nRF24L01在接收模式下可以接收6个不同通道的数据,见图4。每个数据通道使用不同的地址,但共用同

26、一个通道。也就是说,6个不同的nRF24L01在设置为发射模式后可以与同一个设置为接收模式的nRF24L01通信,设置为接收模式的nRF24L01可以识别这六个发射器。数据通道 0 是唯一可以配置为 40 位自身地址的数据通道。 15 个数据通道分别为 8 位自地址和 32 位公共地址。所有数据通道均可设置为增强型 ShockBurst 模式。3.2 主机模块3.2.1 1602液晶实物图:介绍1602液晶也叫1602字符液晶,是专门用于显示字母、数字、符号等的点阵液晶模组,由若干个5*7或5*11的点阵组成,每个点阵字符位可以显示一个字符。每个位之间有一个点空间,每行之间也有一个空间,起到字

27、符间距和行间距的作用,也正因为如此,它不能显示图形。 LCD可显示两行字符,每行可显示16个字符。模块编程简单,刷新速度快。它是一种低端高性能显示设备。引脚功能引脚说明1602字符LCD通常有14针线或16针线LCD,额外的2根线是背光电源线VCC(15针)和地线GND(16针)。控制原理与14针相同。 LCD 完全相同,其中:寄存器选择控制表注意:关于 E=H 脉冲 - 开始时,将 E 初始化为 0,然后将 E 设置为 1,然后清 0。 忙碌标志(DB7):当该位清为 0 时,LCD 将不再能够处理其他命令需要。接口图3.2.2 STC89C52RC+单片机介绍STC89C52RC+ MCU

28、是宏晶科技推出的新一代超抗干扰/高速/低功耗MCU。指令代码与传统8051单片机完全兼容,12个时钟/机器周期,6个时钟/机器周期可任意选择1.增强12时钟/机器周期,6时钟/机器周期8051CPU。2、工作电压为5.5-3.4V。3、工作频率在0-40MHZ左右,相当于传统8051单片机0-80MHZ的实际工作频率,可以达到48MHZ。 4.片上集成4K闪存。5、片内集成了512字节的RAM。6. 有32个通用I/O口。复位后P1/P2/P3口为准双向口/弱上拉(普通8051传统I/O口),P0口为开漏输出。上拉电阻;当用作公共 I/O 端口时,需要一个额外的上拉电阻。7. ISP(On-L

29、ine System Programming)/IAP(In-Application Programmable),不需要专门的编程器或专门的仿真器,用户程序可以直接通过串口下载,几秒钟就可以完成一个.8、EEPROM功能。9.看门狗。10、共有3个16位定时器/计数器,其中定时器0也可以作为两个8位定时器使用。11,4个外部中断,下降沿触发或低电平触发。12、通用全双工异步串口(UART),由于STC12系列是高速的,还可以使用定时器软件实现多串口。13. ISP(On-Line System Programming)/IAP(In-Application Programmable),不需要专

30、门的编程器或专门的仿真器,用户程序可以直接通过串口下载,几秒钟就可以完成一个.14、工作温度范围:-40+85。15. 封装:PLCC-40、PIDP-44。16、引脚图3.2.3 红外接收器和遥控红外接收器原理我们知道,人眼所能看到的可见光是按照波长从长到短的顺序排列的,按照红色的顺序排列,橙,黄色,绿色,青色,蓝色,紫色。其中,红光的波长范围为0.620.76m;紫光的波长周长为 0.38 至 0.46 m。波长比紫光短的光称为紫外光,波长比红光长的光称为紫外光红外线的。红外遥控是利用波长在0.761.5m之间的近红外线来传递控制。信号。红外线遥控系统红外遥控器概述:红外光的光谱在红光之外

31、,波长为0.761.5m,比红光的波长长。红外线遥控是一种利用红外线传输信息的控制方式。红外遥控器具有抗干扰、电路简单、编解码容易、功耗低、成本低等优点。红外遥控器适用于几乎所有家用电器的控制。红外遥控系统的主要部分是调制、发射和接收,如图:图1 红外遥控系统1、调制红外遥控器以调制方式传输数据,即数据与一定频率的载波进行“与”运算,既可以提高传输效率,又可以降低功耗。调制载波频率一般在30khz到60khz之间,大多采用38kHz的方波,占空比为1/3,如图2所示,由发射端使用的455kHz晶振决定。在发射端,晶振需要进行整数分频,分频系数一般为12,所以455kHz1237.9kHz38k

32、Hz。图 2 载波波形2、发射系统 目前,可以实现红外发射的芯片有很多种,可以根据选择发出不同类型的代码。由于发射系统一般由电池供电,因此要求芯片的功耗非常低。大部分芯片设计为休眠状态,只有在按下按钮时才工作,这样可以降低功耗。芯片使用的晶振要有足够的抗物理冲击能力,不能使用普通石英晶体。通常使用陶瓷谐振器。瓷谐振器的精度不如石英晶体高,但通常可以忽略一点误差。红外线通过红外线发光二极管 (LED) 发射。红外发光二极管(红外发射管)的结构与普通发光二极管基本相同。材料不同于普通的发光二极管。当在红外发射管上施加一定的电压时,它会发出红外光而不是可见光。图 3b 发射极输出驱动电路图 3a 简

33、单的驱动电路图3a和图3b是LED的驱动电路,图3a是最简单的电路。选择元件时,要注意三极管的开关速度快,还要考虑LED的正向电流和反向漏电流,一般流过LED。最大正向电流为100mA,电流越大,发射波形的强度越大。图 3a 中的电路有一点缺陷。当电池电压下降时,流过LED的电流会减少,发射波形的强度会降低,遥控距离会变小。图 3b 所示的发射极输出电路可以解决这个问题,两个二极管将晶体管基极电压钳位在1.2V左右,所以三极管的发射极电压固定在0.6V左右,发射极电流IE基本不变。根据IEIC,流过LED的电流也基本不变,保证了在电池电压降低时,可以保证一定的遥控距离。3、接口电路图:3.2.

34、4 DS12C887时钟芯片芯片特性DS12C887实时时钟芯片功能丰富,可直接替代IBMPC上的时钟日历芯片DS12887,同时它的引脚也是MC146818B,DS12887 兼容。由于DS12C887可以自动生成世纪、年、月、增加了日、时、分、秒等时间信息,并增加了世纪寄存器,解决了问题。解决“千年”难题; DS12C887自带锂电池,当外部电源关闭时,其外部时间信息也可保存10年;有两种模式:12 小时制和 24 小时制。在 12 小时制模式下, AM 和 PM 用于区分上午和下午;有两种表达时间的方式,一种用二进制数表示,一种用BCD码表示; DS12C887RAM有128个字节,其中

35、11个字节用于存储时间信息,4个Byte RAM用于存储DS12C887的控制信息,称为控制寄存器,113字节的通用RAM可供用户使用;此外,用户可以程序实现多种方波输出,并可通过三路中断软件来阻止。引脚功能DS12C887的管脚排列如图1所示。各管脚的作用描述如下:GND、VCC:直流电源,其中VCC接+5V输入,GND接地。当VCC输入为+5V时,用户可以访问DS12C887 RAM中的数据,并且可以对其进行读写;当 VCC 输入小于+4.25V时,禁止用户读写内部RAM,用户无法正确获取芯片的时间信息;当 VCC 输入小于+3V 时,DS12C887 会自动切换到内部锂电池供电。 ,以保

36、证该部分的电路能够正常工作。(1) MOT:模式选择引脚,DS12C887有两种工作模式,即摩托罗拉模式和英特尔模式。当 MOT 接 VCC 时,选择的工作模式为摩托罗拉模式。当 MOT 连接到 GND 时,选择 Intel 模式。本文主要讨论 Intel 模式。(23) SQW:方波输出引脚,当电源电压VCC大于4.25V时,SQW引脚可以输出方波。此时,用户可以通过对控制寄存器进行编程,得到13种方波信号输出。AD0AD7:复用地址数据总线,该总线采用时分复用技术,在总线周期的前半部分,AD0AD7上出现的地址信息可用于选通DS12C887的RAM,后半部分总线周期 AD0AD7 上出现的

37、数据信息。(14) AS:地址选通输入引脚。读写操作时,AS的上升沿将AD0AD7上出现的地址信息锁存到DS12C887,下一个下降沿清除AD0AD7上的地址信息,DS12C887不管是否有效都会这样做.(17) DS/RD:数据选择或读输入引脚,该引脚有两种工作模式,当MOT接VCC时,选择Motorola 16在每个总线周期的最后一部分 DS 为高电平的操作模式称为数据选通。在读操作中,DS 的上升沿使 DS12C887 将部分数据致到总线 AD0AD7 供外部读取。在写操作中,DS的下降沿会锁存DS12C887中AD0AD7总线上的数据;当 MOT 连接到 GND 时,选择 Intel

38、工作模式。该模式下,该管脚为读使能输入管脚,即Read Enable。(15) R/W:读/写输入,该管脚也有2种工作模式,当MOT接VCC时,R/W工作在摩托罗拉模式。这时这个管脚的作用就是区分是读操作还是写操作。 R/W为高时为读操作,R/W为低时为写操作;当 MOT 连接到 GND 时,该引脚工作在 Intel 模式下,应作为写使能输入,即 Write Enable。(13) CS:片选输入,低电平有效。(19) IRQ:中断请求输入,低电平有效,该管脚对DS12C887的时钟、日历和RAM没有影响,只影响内部控制寄存器。在典型应用中,RESET可以直接接VCC,以保证DS12C887掉

39、电时,其内部控制寄存器不受影响。DS12C887 有 11 个字节的 RAM 用于存储时间信息和 4 个字节用于存储控制信息。接口电路图:第四章软件设计4.1 人体接近动作模块流程图4.2 主机模块流程图第五章程序代码1.1 人体接近模块C代码/*这部分是人体感应模块致模块的驱动* * */*存放在function.h头文件中* * * /* * *#include STC12C5410AD.h#include #define uint 无符号整数#define uchar 无符号字符#define ulong unsigned long/*12*IO端口定义* * *sbit味噌=P16;位

40、 MOSI =P15;位 SCK =P17;位 CE =P12;位 CSN =P14;/sbit IRQ =P1.1;sbit ds1820_clk_hb=P37;/* NRF24L01* *#define TX_ADR_WIDTH 5 / 5 uints TX 地址宽度#define RX_ADR_WIDTH 5 / 5 uints RX 地址宽度#define TX_PLOAD_WIDTH 5 / 5 uints TX 有效载荷#define RX_PLOAD_WIDTH 5 / 5 uints TX 有效载荷/*NRF24L01寄存器指令* * * *#define READ_REG 0

41、 x00 /读寄存器指令#define WRITE_REG 0 x20 /写寄存器命令#define RD_RX_PLOAD 0 x61 /读取和接收数据命令#define WR_TX_PLOAD 0 xA0 / 写入待处理数据命令#define FLUSH_TX 0 xE1 /刷新致FIFO命令#define FLUSH_RX 0 xE2 /刷新接收FIFO命令#define REUSE_TX_PL 0 xE3 /定义重复加载数据指令#define NOP 0 xFF / 保留/*SPI(nRF24L01)寄存器地址* * * *#define CONFIG 0 x00 /配置致和接收状态,

42、CRC校验方式响应致和接收状态#define EN_AA 0 x01 /自动应答功能设置#define EN_RXADDR 0 x02 / 可用通道设置#define SETUP_AW 0 x03 /致接收地址宽度设置#define SETUP_RETR 0 x04 /自动重发功能设置#define RF_CH 0 x05 /工作频率设置#define RF_SETUP 0 x06 /传输速率、功耗功能设置#define STATUS 0 x07 / 状态寄存器#define OBSERVE_TX 0 x08 /致监控函数#define CD 0 x09 /地址检测#define RX_ADD

43、R_P0 0 x0A /通道0接收数据地址#define RX_ADDR_P1 0 x0B /通道1接收数据地址#define RX_ADDR_P2 0 x0C /通道2接收数据地址#define RX_ADDR_P3 0 x0D /通道3接收数据地址#define RX_ADDR_P4 0 x0E /通道4接收数据地址#define RX_ADDR_P5 0 x0F /通道5接收数据地址#define TX_ADDR 0 x10 /致地址寄存器#define RX_PW_P0 0 x11 /接收通道0接收数据长度#define RX_PW_P1 0 x12 /接收通道0接收数据长度#defi

44、ne RX_PW_P2 0 x13 /接收通道0接收数据长度#define RX_PW_P3 0 x14 /接收通道0接收数据长度#define RX_PW_P4 0 x15 /接收通道0接收数据长度#define RX_PW_P5 0 x16 /接收通道0接收数据长度#define FIFO_STATUS 0 x17 / FIFO堆栈进出状态寄存器设置/uchar TX_ADDRESSTX_ADR_WIDTH= 0 x01,0 x20,0 x20,0 x20,0 x20; /本地地址/uchar RX_ADDRESSRX_ADR_WIDTH= 0 x01,0 x20,0 x20,0 x20,

45、0 x20; /接收地址uchar TX_ADDRESS1RX_ADR_WIDTH=0 x02,0 x20,0 x20,0 x20,0 x20; /本地地址1uchar bdata sta; /状态标志sbit RX_DR =sta6;sbit TX_DS =sta5;sbit MAX_RT =sta4;/* * */* 延迟函数/* * */无效 inerDelay_us(无符号字符 n)for(;n0;n-)_nop_();/* * * * */*函数:uint SPI_RW(uint uchar)/*功能:NRF24L01的SPI写时序/* * * * */uint SPI_RW(uin

46、t ucharx)uint bit_ctr;for(bit_ctr=0;bit_ctr8;bit_ctr+) / 输出 8 位MOSI = (ucharx & 0 x80); / 输出 uchar, MSB 到 MOSIucharx = (ucharx 1); / 将下一位移入 MSB.SCK = 1; / 将 SCK 设置为高.ucharx |=味噌; / 捕获当前 MISO 位SCK = 0; / .然后再次将 SCK 设置为低电平返回(ucharx); / 返回读取的 uchar/* * * * */*函数:uint SPI_Write_Buf(uchar reg, uchar *pBu

47、f, uchar uchars)/*功能:写入数据:寄存器地址,pBuf:要写入数据的地址,uchars:要写入的数据个数/* * * * */uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)单位状态,uchar_ctr;CSN = 0; /SPI使能状态 = SPI_RW(reg);for(uchar_ctr=0; uchar_ctruchars; uchar_ctr+) /SPI_RW(*pBuf+);南航 = 1; /关闭SPI返回(状态); /* * * * */*功能:NRF24L01读写寄存器功能/* * * * */

48、uint SPI_RW_Reg(uchar reg, uchar 值)单位状态;CSN = 0; / CSN 低,初始化 SPI 事务状态 = SPI_RW(reg); / 选择寄存器SPI_RW(值); / .并向其写入值.南航 = 1; / CSN 再次高返回(状态); / 返回 nRF24L01 状态 uchar/* * * * */*函数:void nRF24L01_TxPacket(unsigned char *tx_buf)/*功能:在tx_buf中致数据/* * * * */无效 nRF24L01_TxPacket(uchar * tx_buf)CE=0; /待机I模式SPI_W

49、rite_Buf(WRITE_REG + RX_ADDR_P1,TX_ADDRESS1,TX_ADR_WIDTH); / 加载接收器地址 SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); / 加载数据/ SPI_RW_Reg(WRITE_REG + CONFIG, 0 x0e);CE=0; / IRQ收发完成中断响应,16位CRC,主致CE=1; /将CE设置为高以刺激数据传输inerDelay_us(70);CE=0;CE=1;inerDelay_us(70);无效初始化_NRF24L01(无效)inerDelay_us(100);CE=

50、0; /芯片使能CSN=1; / SPI 禁用SCK=0; / Spi时钟线初始化高SPI_Write_Buf(WRITE_REG + TX_ADDR,TX_ADDRESS1,TX_ADR_WIDTH); / 写入本地地址 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS1, TX_ADR_WIDTH); / 写入接收器地址 SPI_RW_Reg(WRITE_REG + EN_AA, 0 x03); / 通道 0 和通道 1 自动 ACK 响应内容 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0 x03); / 内容使用通

51、道 0 和通道 1 接收地址SPI_RW_Reg(WRITE_REG + RF_CH, 0); / 设置通道工作在2.4GHZ,收发器必须一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); / 设置通道0接收数据的长度,这次为5字节SPI_RW_Reg(WRITE_REG + RX_PW_P1, RX_PLOAD_WIDTH); /设置1通道接收数据的长度,本次设置为5字节SPI_RW_Reg(WRITE_REG + RF_SETUP, 0 x07); /设置发射速率为1MHZ,发射功率为最大值0dBSPI_RW_Reg(WRITE_REG

52、 + CONFIG, 0 x0e); / IRQ收发完成中断响应,16位CRC,主机致CE=1;/*这部分是人体接近模块的主要功能* */* *#include“函数.h”sbit led=P37;sbit hw=P34;#define led_on() led=0#define led_off() led=1void delay_ms(uint x)uchar i,j;而(x-)for(i=0;i4;i+)for(j=0;j250;j+);无效的主要()uchar tx_buf=1,1,1;/ uchar TX=0,0,0;硬件=1;led_off();init_NRF24L01();而(1

53、)如果(硬件=1)延迟毫秒(100);带领();nRF24L01_TxPacket(tx_buf);延迟毫秒(100);led_off();SPI_RW_Reg(WRITE_REG+STATUS,0XFF); /清除标志1.2 主机模块C代码/* */ / LCD显示驱动函数存放在LCD.C/* * */ #include #include #define uchar 无符号字符#define uint 无符号整数/*595引脚定义*/位 SCLK=P10;位RCK=P12;位 SI=P11;/*LCD引脚定义*/位 rs = P15;sbit rw = P14;sbit ep = P13;/

54、*MS 电平延时函数*/delay_ms(uchar ms) / 延迟子程序uchar我;而(毫秒-)for(i = 0; i 250; i+)_nop_();_nop_();_nop_();_nop_();/*74HC595驱动函数*/无效 send_HC595 (uchar wrDat)uchar我;对于(i=0;i8;i+)SI=wrDat&0 x80; /从数据的最高位开始输入wrDat=1; /输入后左移思考,准备输入第二个数字SCLK=0;_nop_();_nop_();SCLK=1; /时钟产生高电平跳变,数据移位RCK=0;_nop_();_nop_();RCK=1; /Lat

55、ch产生高电平跳变,数据输出/*向LCD写入命令数据*/lcd_wcmd(uchar cmd)延迟毫秒(10);rs = 0;rw = 0;ep = 0;_nop_();_nop_();致_HC595(cmd);_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;/*LCD显示位置设置*/lcd_pos(uchar pos)lcd_wcmd(pos | 0 x80);/*向LCD写入显示数据*/lcd_wdat(uchar dat)延迟毫秒(10);rs = 1;rw = 0;ep = 0;

56、致_HC595(数据);_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;/*LCD初始化设置*/lcd_init()lcd_wcmd(0 x38); /延迟毫秒(1);lcd_wcmd(0 x0c); /延迟毫秒(1);lcd_wcmd(0 x06); /延迟毫秒(1);lcd_wcmd(0 x01); /清除LCD的显示内容延迟毫秒(1);/*LCD清屏*lcd_clr()lcd_wcmd(0 x01); /清除LCD的显示内容延迟毫秒(1);/* * */*液晶字符显示功能*/LCD

57、_DIS_CH(位 pos1, uchar pos2, uchar CH)如果(位置 1=0)lcd_pos(pos2);lcd_wdat(CH); /pos2的第一行显示别的lcd_pos(0 x40+pos2);lcd_wdat(CH); /pos2的第二行显示/* * */*LCD字符串显示函数*/void LCD_DIS_STR(bit pos1,uchar pos2,uchar *s) /LCD字符串输入显示,pos1行,pos2列显示如果(位置 1=0)lcd_pos(pos2);而(*s!=0)lcd_wdat(*s);+s;别的lcd_pos(0 x40+pos2);而(*s!

58、=0)lcd_wdat(*s);+s;/*闪烁功能*/void LCD_BL(bit a,bit b,bit c) /c=0时光标灭,c=1时光标亮uchar kk=0 x8;如果(a!=0) kk+=4;如果(b!=0) kk+=2;如果(c!=0) kk+=1;lcd_wcmd(kk); /将数据写入命令寄存器/*这部分是时间显示部分* * * /*存储在 dis_tim.c* * * /* * * * * #include#include“函数.h”位ds=P17;sbit rw=P27;sbit=P26;位 cs=P25;#define uchar 无符号字符#define uint

59、无符号整数#define ulong unsigned long#define ds_BUF P0uchar miao,fen,shi,day,week,month,year;uchar 码 num10=0,1,2,3,4,5,6,7,8,9; uchar 代码 w74=MON,TUE,WED,THU,FRI,SAT,SUN;void write_ds(uchar add,uchar DAT);uchar read_ds(uchar add);无效 first_init_ds();无效 dis_date();无效的dis_time();无效的dis_week();/*向DS12C887中写入数

60、据* void write_ds( uchar 添加,uchar DAT)cs=0;作为=1;ds=1;rw=1;ds_BUF=添加;作为=0;rw=0;ds_BUF=DAT;作为=1;rw=1;cs=1;/*读取DS12C887中的数据* uchar read_ds (uchar添加)uchar时间;cs=0;作为=1;ds=1;rw=1;ds_BUF=添加;作为=0;ds=0;ds_BUF=0 xff;时间=ds_BUF;作为=1;ds=1;cs=1;返回时间;/*第一次操作输入,以后不用再写/*第一个操作 DS12C887* void first_init_ds()/ write_ds(

温馨提示

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

评论

0/150

提交评论