无线多点报警系统毕业设计.doc

上传人:laozhun 文档编号:3944760 上传时间:2023-03-28 格式:DOC 页数:33 大小:749.50KB
返回 下载 相关 举报
无线多点报警系统毕业设计.doc_第1页
第1页 / 共33页
无线多点报警系统毕业设计.doc_第2页
第2页 / 共33页
无线多点报警系统毕业设计.doc_第3页
第3页 / 共33页
无线多点报警系统毕业设计.doc_第4页
第4页 / 共33页
无线多点报警系统毕业设计.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《无线多点报警系统毕业设计.doc》由会员分享,可在线阅读,更多相关《无线多点报警系统毕业设计.doc(33页珍藏版)》请在三一办公上搜索。

1、毕业设计(论文)题 目 无线多点报警系统 摘要本设计基于80c51单片机对12864液晶屏的控制,及80c51单片机对nRF905无线收发模块的控制,和漫反射式光电传感器的用法,本设计将对80c51单片机、nRF905无线收发模块及漫反射式光电传感器进行介绍,建立了相应的电路图,并对电路图进行分析,然后注有详细的程序,并对程序进行详细的分析,从而对80c51单片机、12864液晶屏、E18漫反射式光电开关、nRF905无线收发模块有进一步认识和了解。关键词:80c51单片机、漫反射式光电开关、12864液晶屏、nRF905无线收发模块目录第一章 元器件说明11.1 元器件说明11.1.1 80

2、C51单片机11.1.2 12864液晶11.1.3 nRF905无线收发模块11.1.4 E18-D50NK光电开关11.2 引脚说明11.2.1 80C51单片机引脚介绍11.2.2 12864液晶31.2.3 nRF905无线收发模块41.2.4 E18-D50NK光电开关41.3 相关参数51.3.1 12864液晶相关参数51.3.2 nRF905无线收发模块相关参数51.3.3 E18-D50NK光电开关5第二章 电路图设计62.1单片机62.1.1 8051单片机复位电路62.1.2 8051单片机外部晶振电路62.2检测及发射电路图设计72.2.1电路图设计72.2.2电路图介

3、绍72.3 接收及显示电路图设计72.3.2电路图介绍8第三章 程序设计93.1中断介绍93.1.1实现中断响应和中断返回93.1.2实现优先权排队93.1.3中断的使用103.2 12864应用说明103.3 nRF905时序说明113.3.1发送流程113.3.2接收流程123.3.3节能模式123.3.4器件配置123.3.5 SPI接口配置133.4 检测及发送信号程序133.5 接收及显示信号程序18第四章 总结26第五章 致谢27参考文献28第一章 元器件说明1.1 元器件说明1.1.1 80C51单片机80C51单片机是指MCS-51系列单片机中的一款,它内部有4KB掩膜ROM,

4、对于MCS-51系列单片机来说,其基本功能是完全兼容;8051单片机主要由如下功能部件组成,即 CPU(微处理器)、 数据存储器(RAM)、片内为128个字节(52子系列的为256个字节)、程序存储器(ROM/EPROM)、4个并行8位I/O口(P1口、P2口、P3口、P0口)、串行口、定时器/计数器、中断系统、特殊功能寄存器(SFR)。1.1.2 12864液晶12864液晶带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864, 内置8192个16*16点汉字,和128个16*8点AS

5、CII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示84行1616点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。1.1.3 nRF905无线收发模块nRF905片内集成了电源管理、晶体振荡器、低噪声放大器、频率合成器功率放大器等模块,曼彻斯特编码/解码由片内硬件完成,无需用户对数据进行曼彻斯特编码,因此使用非常方便。1.1.4 E18-D50NK光电开关E18-D50NK光电开关这是一

6、种集发射与接收于一体的光电传感器。检测距离可以根据要求进行调节1。该传感器具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点,可以广泛应用于机器人避障、流水线计件等众多场合。1.2 引脚说明1.2.1 80C51单片机引脚介绍所用单片机如图1-1所示,引脚功能如下介绍。图1-1单片机图 P0口:8为双向I/O口,占3239脚。其第一功能为通用的输入/输出口线;第二功能是在系统扩展时,P0口可作为8位数据总线和低8位地址总线,通过分时操作达到复用的目的。CPU在外部扩展操作时,P0口先用作地址总线,在ALE信号的作用下将地址锁存,然后再将P0口转作数据总线使用。在做通用的输入/输

7、出口使用时,P0口线的输出驱动电路是开漏的,所以,驱动集电极开路电路或漏极开路电路时需要外接上拉电阻。当作为地址/数据复用总线使用时,口线不是开漏的,无需外接上拉电阻。P0口线的每一位能驱动8个LSTTL负载。P1口:8位双向I/O口,占18脚。P1口一般做通用I/O口使用,用于完成8位数据的并行输入/输出。准双向口是指该口内设有上拉电阻,所以可以方便地由集电极开路电路或漏极开路所驱动,无需外接上拉电阻,其每一位口线能驱动4个LSTTL负载。P2口:8位双向I/O口,占2128脚。其第一功能为基本的输入/输出口线;第二功能是在系统扩展时作高8位地址总线使用。同P1口,P2口的每一位口线能驱动4

8、个LSTTL负载。P3口:8位双向I/O口,占1017脚。P3口是一个双功能端口,即P3口除可作为通用I/O口使用外,其每一条口线都具有第二功能,同P1口,P3口每一位口线能驱动4个LSTTL负载。其中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(外部数据存储器读选通)PSEN:(29脚)外部程序存储器读选通信号,在单片机访问外部扩展程序存储器ROM时,P

9、SEN作为外部扩展程序存储器读选通信号,定时输出脉冲。在单片机访问内部存储器时,PSEN无效。ALE/PROG(30脚):地址锁存准许/片内EPROM编程脉冲输入信号。在单片机访问外存储器时,该引脚是地址锁存信号,用于锁存低8位地址。在ALE为高电时,P0口上的信息为低8位地址,在ALE的下降沿时将P0口上的低8位地址送锁存器所存起来。在ALE为低电平期间,P0口上的信息为志林或数据信息,从而实现低位地址与数据的分离。在单片机不访问片内存储器时,ALE引脚能按主振频率的1/6固定的输出正脉冲,此脉冲可以用作外部的时钟或定时脉冲使用。而当对单片机内部的程序存储器编程时,此引脚为编程脉冲的输入端。

10、RST/VPD:复位/备用电源,RST功能,复位信号输入端,VPD功能,在Vcc掉电情况下,接备用电源。ALE/PROG:地址锁存允许/片内EPROM编程脉冲;ALE功能,用来锁存P0口送出的低8位地址;PROG功能,片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲EA/Vpp:内外ROM选择/片内EPROM编程电源;EA功能,内外ROM选择端;Vpp功能,片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。VCC :芯片电源,接+5V,引入单片机工作电源。VSS : 接地端;XTAL1、XTAL2 : 晶体振荡电路反相输入端和输出端。1.2.2 12864液晶V

11、SS 0V 电源地 VCC 3.0+5V 电源正 V0 对比度(亮度)调整 RS(CS) H/L RS=“H”,表示DB7DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据 R/W(SID) H/L R/W=“H”,E=“H”,数据被读到DB7DB0R/W=“L”,E=“HL”, DB7DB0的数据被写到IR或DR E(SCLK) H/L 使能信号 DB0-DB7 H/L 三态数据线 PSB H/L H:8位或4位并口方式,L:串口方式(见注释1) NC 空脚 RESET H/L 复位端,低电平有效(见注释2) VOUT - LCD驱动电压输出端 BLA 背光源正端(+5V)(见注释

12、3) BLK VSS 背光源负端(见注释3) 1.2.3 nRF905无线收发模块nRF905有14个管脚,管脚作用如下;vcc电源 电源 +3.3-3.6vDCTX_EN数字输入 TX_EN=1TX模式;TX_EN=0RX模式;TRX_CE数字输入 使能芯片发射或接收PWR_UP数字输入 芯片上电uCLK时钟输出 本模块该管脚不用CD数字输出 载波检测AM数字输出 地址匹配DR数字输出 接受或发送数据完成MISO SPI接口 SPI输出MOSI SPI接口 SPI输入SCK SPI时钟 SPI时钟CSN SPI使能 SPI使能GND 接地GND 接地1.2.4 E18-D50NK光电开关vc

13、c:电源输入out:检测信号输出端gnd:接地1.3 相关参数1.3.1 12864液晶相关参数1、显示容量:128x64 2、芯片电压:3.3-5.5v3、模块最佳工作状态:5.0v4、与MCU接口:8位或4位并行/3位串行5、工作温度:-1060度1.3.2 nRF905无线收发模块相关参数1、工作电压范围:DC1.9VDC3.6V 2、采用GFSK调制,433Mhz开放ISM频段免许可证使用 3、170个频道,满足多点通讯和跳频通讯需求,实现组网通讯,TDMACDMAFDMA 4、内置硬件8/1 6位CRC校验,开发更简单,数据传输可靠稳定 5、接收灵敏度达100dBm 6、收发模式切换

14、时间 650us 7、最大发射功率10毫瓦,发射模式:最大电流30mA;接收模式:电流12.2mA 8、内置SPI接口,也可通过I/O口模拟SPI实现。最高SPI时钟可达10M 9、发射速率50 Kbps,外置433MHz天线,空旷通讯距离可达300米左右.11、低功耗,休眠电流2.5uA 1.3.3 E18-D50NK光电开关1、输出电流 DC/SCR/继电器 Control output:100mA/5V供电2、消耗电流 DC25mA3、响应时间 2ms4、指向角:15,有效距离3-50CM可调5、检测物体:透明或不透明体6、工作环境温度:-25+557、标准检测物体:太阳光10000LX

15、以下 白炽灯3000LX以下第二章 电路图设计2.1单片机2.1.1 8051单片机复位电路 图2-1-1复位电路按键复位是通过RST经过电阻与电源相连接或利用RC微分电路产生的正脉冲来实现按键复位的。且这个电路具备自动复位的功能。2.1.2 8051单片机外部晶振电路 图2-1-2时钟电路如图引脚XTAL1和XTAL2之间跨接晶体振荡器和微调电容,可以和芯片内部的振荡器构成一个稳定的自激振荡器,这就是单片机的时钟电路,这种方式称之为内部时钟源方式,电容器主要的作用是帮助振荡器起振,且电容器大小对振荡频率有微调作用,典型值C1=C2=30PF.2.2检测及发射电路图设计2.2.1电路图设计单片

16、机E18-D50NKnRF905图2-2-1检测机发射电路图2.2.2电路图介绍如图P1口与P2口接有漫反射式光电开关,P0口接有nRF905无线收发模块,在使用P0口时一定要外接上拉电阻,当漫反射式光电开关检测到有物体靠近时漫反射式光电开关会把信号传给单片机,单片机接收到信号时进行处理,然后用nRF905无线模块将信号发送出去。2.3 接收及显示电路图设计2.3.1电路图设计单片机nRF905图2-3-1接受信息并显示电路图2.3.2电路图介绍 如图P1口接有nRF905无线收发模块,P0口接有12864液晶信号输入端,P2.0口-P2.3口接有12864液晶控制端,P2.4口接有蜂鸣器控制

17、端。当接收到有信号传来时,nRF905无线收发模块将信号发送到单片机中,一旦有信号进入蜂鸣器就会报警,此时单片机也会对信号进行处理,判断报警地点,然后进行液晶显示。第三章 程序设计3.1中断介绍3.1.1实现中断响应和中断返回当CPU收到中断请求后,能根据具体情况决定是否响应中断,如果CPU没有更急、更重要的工作,则在执行完当前指令后响应这一中断请求。CPU中断响应过程如下:首先,将断点处的PC值(即下一条应执行指令的地址)推入堆栈保留下来,这称为保护断点,由硬件自动执行。然后,将有关的寄存器内容和标志位状态推入堆栈保留下来,这称为保护现场,由用户自己编程完成。保护断点和现场后即可执行中断服务

18、程序,执行完毕,CPU由中断服务程序返回主程序,中断返回过程如下:首先恢复原保留寄存器的内容和标志位的状态,这称为恢复现场,由用户编程完成。然后,再加返回指令RETI,RETI指令的功能是恢复PC值,使CPU返回断点,这称为恢复断点。恢复现场和断点后,CPU将继续执行原主程序,中断响应过程到此为止。 3.1.2实现优先权排队通常,系统中有多个中断源,当有多个中断源同时发出中断请求时,要求计算机能确定哪个中断更紧迫,以便首先响应。为此,计算机给每个中断源规定了优先级别,称为优先权。这样,当多个中断源同时发出中断请求时,优先权高的中断能先被响应,只有优先权高的中断处理结束后才能响应优先权低的中断。

19、计算机按中断源优先权高低逐次响应的过程称优先权排队,这个过程可通过硬件电路来实现,亦可通过软件查询来实现。定时器初值与中断周期时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设置相应的标志位供软件查询。即中断时比启动时经过了N+1个机器周期。所以,我们只要在T0中预先存入一个比满值0FFFFh小N的数,然后启动定时器,便会在N个机器周期后产生中断。这个值便是所谓的“初值”。下面

20、计算我们需要的初值:时钟为6MHz,12个时钟周期为一个机器周期,20mS中有10000个机器周期。(10000)10=(2710)16,则0FFFFh-2710h+1=0D8F0h。由于响应中断、保护现场及重装初值还需要78个机器周期,把这个值再加上7,即T0应装入的初值是0D8F7h。每次中断进入后,先把A及 W的值压入堆栈,然后即把0D8F7h装入T0。设置一个单元,每次中断加1我们可以取内部RAM中一个单元,取名为INCPI(Increase Per Interrupt),在中断中,装完T0初值后,用INCINCPI指令将其加一。从这个单元中,无论中断程序还是主程序,都可以从中获得20

21、mS的1256之间任意整数倍的信号。例如:有一段向数码管送显的程序,需要每0.5秒执行一次以便刷新显示器,便可以设一单元(称为等待单元)W_DI ,用/MOV A,INCPI/ADD A,#25/MOV W_DI ,A/语句让其比当前的INCPI值大25,然后在每次中断中检查是否于INCPI值相等。若相等,说明已过了25个中断周期,便执行送显程序,并且让W_DI 再加上25,等待下个0.5秒。我们可以设置多个等待单元,以便取出多个不同的时基信号。让中断程序在每次中断时依次查询各个等待单元是否与INCPI相等,若相等,则执行相应的处理,并重新设置该等待单元的值,否则跳过。例如:用0.5秒信号刷新

22、或闪烁显示器,用1秒信号产生实时时钟,或输出一定频率的方波,以一定间隔查询输入设备等。3.1.3中断的使用1、开全局中断 51是 EA = 12、对应中断使能 比如定时器1 ET1 = 1、定时器0 ET0 = 13、定时器工作方式配置: 有三种方式 双8位定时 16位定时 还有捕捉方式 定时器2有4种 ,具体不介绍了 TMOD 是定时器0和定时器1方式配置的寄存器 TMOD = 0x01,定时器0工作在方式1(16位计数)4、打开定时器 TR0 = 1;定时器1打开是 TR1 = 1;5、中断服务程序:就是定时时间到,你要处理的事务3.2 12864应用说明1、 使用前的准备先给模块加上工作

23、电压,再按照下图的连接方法调节LCD的对比度,使其显示出黑色的底影。此过程亦可以初步检测LCD有无缺段现象。2、 字符显示带中文字库的128X64-0402B每屏可显示4行8列共32个1616点阵的汉字,每个显示RAM可显示1个中文字符或2个168点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。带中文字库的128X64-0402B内部提供1282字节的字符显示RAM缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定

24、义字形)的内容。三种不同字符/字型的选择编码范围为:00000006H(其代码分别是0000、0002、0004、0006共4个)显示自定义字型,02H7FH显示半宽ASCII码字符,A1A0HF7FFH显示8192种GB2312中文字库字形。字符显示RAM在液晶模块中的地址80H9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如下表所示。80H 81H 82H 83H 84H 85H 86H 87H 90H 91H 92H 93H 94H 95H 96H 97H 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH 98H 99H 9AH 9BH 9

25、CH 9DH 9EH 9FH 3 、图形显示先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址)垂直地址范围 AC5.AC0水平地址范围 AC3AC0绘图RAM 的地址计数器(AC)只会对水平地址(X 轴)自动加一,当水平地址=0FH 时会重新设为00H 但并不会对垂直地址做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定。GDRAM的坐标地址与资料排列顺序如下图:4、应用说明用带中文字库的128X64显示模块时应注意以下几点:欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。显示ASCII字符过程与显示

26、中文字符过程相同。不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。当字符编码为2字节时,应先写入高位字节,再写入低位字节。模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指令。如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。指令执行的时间请参考指令表中的指令执行时间说明。“RE”为基本指令集与扩充指令集的选择控制位。当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位

27、,否则使用相同指令集时,无需每次均重设“RE”位.3.3 nRF905时序说明3.3.1发送流程1. 当微控制器有数据要发送时,通过SPI接口,按时序把接收机的地址和要发送的数据送传给nRF905,SPI接口的速率在通信协议和器件配置时确定;2. 微控制器置高TRX_CE和TX_EN,激发nRF905的ShockBurstTM发送模式;3. nRF905的ShockBurstTM发送:l 射频寄存器自动开启;l 数据打包(加字头和CRC校验码);l 发送数据包;l 当数据发送完成,数据准备好引脚被置高;4. AUTO_RETRAN被置高,nRF905不断重发,直到TRX_CE被置低;5. 当T

28、RX_CE被置低,nRF905发送过程完成,自动进入空闲模式。ShockBurstTM工作模式保证,一旦发送数据的过程开始,无论TRX_EN和TX_EN引脚是高或低,发送过程都会被处理完。只有在前一个数据包被发送完毕,nRF905才能接受下一个发送数据包。3.3.2接收流程1. 当TRX_CE为高、TX_EN为低时,nRF905进入ShockBurstTM接收模式;2. 650us后,nRF905不断监测,等待接收数据;3. 当nRF905检测到同一频段的载波时,载波检测引脚被置高;4. 当接收到一个相匹配的地址,地址匹配引脚被置高;5. 当一个正确的数据包接收完毕,nRF905自动移去字头、

29、地址和CRC校验位,然后把数据准备好引脚置高6. 微控制器把TRX_CE置低,nRF905进入空闲模式;7. 微控制器通过SPI口,以一定的速率把数据移到微控制器内;8. 当所有的数据接收完毕,nRF905把数据准备好引脚和地址匹配引脚置低;9. nRF905此时可以进入ShockBurstTM接收模式、ShockBurstTM发送模式或关机模式。当正在接收一个数据包时,TRX_CE或TX_EN引脚的状态发生改变,nRF905立即把其工作模式改变,数据包则丢失。当微处理器接到地址匹配引脚的信号之后,其就知道nRF905正在接收数据包,其可以决定是让nRF905继续接收该数据包还是进入另一个工作

30、模式。3.3.3节能模式 nRF905的节能模式包括关机模式和节能模式。在关机模式,nRF905的工作电流最小,一般为2.5uA。进入关机模式后,nRF905保持配置字中的内容,但不会接收或发送任何数据。 空闲模式有利于减小工作电流,其从空闲模式到发送模式或接收模式的启动时间也比较短。在空闲模式下,nRF905内部的部分晶体振荡器处于工作状态。nRF905在空闲模式下的工作电流跟外部晶体振荡器的频率有关。 3.3.4器件配置所有配置字都是通过SPI接口送给nRF905。SIP接口的工作方式可通过SPI指令进行设置。当nRF905处于空闲模式或关机模式时,SPI接口可以保持在工作状态。3.3.5

31、 SPI接口配置SPI接口由状态寄存器、射频配置寄存器、发送地址寄存器、发送数据寄存器和接收数据寄存器5个寄存器组成。状态寄存器包含数据准备好引脚状态信息和地址匹配引脚状态信息;射频配置寄存器包含收发器配置信息,如频率和输出功能等;发送地址寄存器包含接收机的地址和数据的字节数;发送数据寄存器包含待发送的数据包的信息,如字节数等;接收数据寄存器包含要接收的数据的字节数等信息。3.4 检测及发送信号程序 #include #define uchar unsigned char #define uint unsigned int #define WC 0x00/写配置寄存器命令 #define WT

32、P 0x20/写发送数据命令 #define WTA 0x22/写发送地址命令 sbit TX_EN=P06;/选择模式 sbit TRX_CE=P05;/使能芯片发送或接收 sbit PWR_UP=P04;/芯片上电 sbit MOSI=P02;/SPI输入 sbit MISO=P03;/SPI输出 sbit CSN=P00; /SPI使能 sbit SCK=P01;/SPI时钟 sbit CD=P07;/载波检测 sbit AM=P30;/地址匹配 sbit DR=P31;/接受或发送数据完成 uchar shu16;/检测到的数据暂时放在此数组内 uchar code canshu=/n

33、RF905参数设置 0x01,0x0c,0x44,0x20,0x20,0xe7,0xe7,0xe7,0xe7,0x58 ; void miao(uint x)/延时 uint i,j;for(i=x;i0;i-)for(j=110;j0;j-); void init()/nRF905初始化 CSN=1;/SPI使能禁用 SCK=0;/在输入数据或命令时要将时钟拉低DR=1;/接受或发送数据完成AM=1;/地址匹配PWR_UP=1;/芯片上电TRX_CE=0;/使能芯片接收TX_EN=1;/选择模式 void peizhi()/寄存器设置 uchar i;CSN=0;/往nRF905输入数据或指

34、令时,要将使能端用低电平write(WC);/写配置寄存器命令for(i=0;i10;i+)write(canshui);CSN=1;/SPI使能禁用 void write(uchar a)/往nRF905中写数据或指令 uchar i,j;j=a;for(i=0;i8;i+)miao(1);SCK=0;MOSI=(j&0x80);/将要输入的数据或j=j1; /命令从高之低依次输入nRF905miao(1);SCK=1;miao(1);SCK=0; void fasong()/发送数据 uchar i;CSN=0;write(WTP);/写发送数据命令for(i=0;i16;i+)write

35、(shui);/将数组发送出去CSN=1;miao(1);CSN=0;write(WTA);/写发送地址命令for(i=0;i4;i+)write(canshui+5);/将地址输入CSN=1;TRX_CE=1;/发送数据miao(1);TRX_CE=0;/停止发送TR0=0; void jiance()/光电传感器检测 uchar i,a,temp; P1=0x00;temp=P1;if(temp!=0x00)for(i=0;i0)shui=1;elseshui=0;temp=temp1;/数据输完后向左移一位 P2=0x00;temp=P2;if(temp!=0x00)for(i=8;i0

36、)/判断检测数据是否大于0shui=1;elseshui=0;temp=temp1; /数据输完后向左移一位 void main() TMOD=0x01;/检测时需要用到中断TH0=0x00;/给初值TL0=0x01;EA=1; /全局中断打开ET0=1;/定时器计数器0 init();/nRF905初始化peizhi();/nRF905寄存器配置while(1)/进入大循环,直至中断开始uchar a,b;P1=0x00;P2=0x00;a=P1;b=P2;if(a!=0x00|b!=0x00)TR0=1; void time()interrupt 1 TH0=0x00;TL0=0x01;j

37、iance();/报警检测fasong();/发送数据miao(1); 3.5 接收及显示信号程序#include #define uchar unsigned char#define uint unsigned int#define RC 0x10/读配置寄存器命令#define RTP 0x21/读发送数据命令#define RTA 0x23/读发送地址命令#define RRP 0x24/读接收数据命令sbit CSN=P10; /SPI使能sbit MOSI=P11;/SPI输入sbit MISO=P12;/SPI输出sbit PWR_UP=P13;/芯片上电sbit TRX_CE=P

38、14;/使能芯片发送或接收sbit TX_EN=P15; /选择模式sbit CD=P16;/载波检测sbit AM=P17;/地址匹配sbit SCK=P30;/SPI时钟sbit DR=P31;/接受或发送数据完成sbit PSB=P20;/选择串并口输入方式sbit RS=P21;/数据与命令选择端sbit RW=P22;/读写端口sbit EN=P23;/LCD是能sbit xiang=P24;/蜂鸣器uchar shu16;/将接收到的数据放在此数组中uchar code display1=无线多点报警系统;/LCD第一行显示uchar code display2=报警地点:;/LC

39、D第二行显示uchar display3=A区报警;/LCD第三行显示uchar display4=B区报警;/LCD第四行显示uchar code canshu=0x01,0x0c,0x44,0x20,0x20,0xe7,0xe7,0xe7,0xe7,0x58;/nRF905设置参数void miao(uint x)/延时uint i,j;for(i=x;i0;i-)for(j=110;j0;j-);void init()/nRF905初始化设置CSN=1;/SPI使能禁用SCK=0;/在输入数据或命令时要将时钟拉低DR=1;/接受或发送数据完成AM=1;/地址匹配PWR_UP=1;/芯片上

40、电TRX_CE=0;/使能芯片接收TX_EN=0;/选择模式void peizhi()/配置寄存器uchar i;CSN=0;/往nRF905输入数据或指令时,要将使能端用低电平write(RC);/输入读配置寄存器指令for(i=0;i10;i+)/将数据输入nRF905write(peizhii);CSN=1;/SPI使能禁用void write(uchar a)/往nRF905中写数据或指令uchar i,j;j=a;for(i=0;i8;i+)miao(1);SCK=0;MOSI=(j&0x80);/将要输入的数据或j=0;i-)SCK=1;if(MISO) /判断输入数据是0是1sh

41、ui=1;elseshui=0;void jieshou()/接收数据uchar i,x;TRX_CE=0;CSN=0;write(RRP);/读写入接收数据命令read();CSN=1;while(DR|AM);/如果DR与AM有一个为1TRX_CE=1; /则进入接收模式void zhiling(uchar s)/往LCD内写指令RS=0;/RS为0时为指令RW=0;/RW为0时为写EN=0;/LCD使能关闭P0=s;miao(5);/将指令给P0口EN=1;miao(5);/使能打开,输入指令EN=0;void xianshi(uchar r)/LCD显示RS=1;/RS为1时为数据RW

42、=0;/写数据EN=0;P0=r;miao(5);/将要写数据给P0口EN=1;miao(5);/使能打开,写数据EN=0;void lcd_init()/LCD初始化设置PSB=1;/设置并口输入zhiling(0x30);miao(5);/基本指令操作zhiling(0x0c);miao(5);/开显示,关光标zhiling(0x01);miao(5);/显示清零void lcd1()/LCD前两行显示uchar i;zhiling(0x80);/在LCD第一行左边第一格显示i=0;while(display1i!=0)/进入循环,从左到右直至“0”结束xianshi(display1i);i+;zhiling(0x90);/在LCD第二行左边第一格显示i=0;while(display2i!=0)/进入循环,从左到右直至“0”结束xianshi(display2i);i+;void lcd2()/LCD后两行显示uchar i;if(shu0=1|shu1=1|shu2=1|shu3=1|shu4=1|shu5=1|shu6=1|shu7=1) /判断是高8位还是低8位报警zhiling(0x88);/在LCD第三行左边第一格显示i=0;while(display3i!=0)/进入循环,从左

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号