基于单片机的键盘无线数据通信系统毕业设计_第1页
基于单片机的键盘无线数据通信系统毕业设计_第2页
基于单片机的键盘无线数据通信系统毕业设计_第3页
基于单片机的键盘无线数据通信系统毕业设计_第4页
基于单片机的键盘无线数据通信系统毕业设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

第34页共34页探讨无线数据通信在MCU系统中的应用作品名称: 基于单片机的键盘无线数据通信系统

毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名:日期:

学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名: 日期:年月日导师签名:日期:年月日

探讨无线数据通信在MCU系统中的应用摘要本作品研究的内容是通过MCU控制无线数据芯片,以此来实现大量数据的无线高速传输,无论是在国防军事方面,还是民用通讯方面都有很重要的研究意义。可改装数控操控设备、医疗设备、数据通信设备等,使数据控制、交换、采集简单化,对无线数据通信在MCU系统中的应用和多单片机协同工作中具有非常宝贵的参考价值。实物的作品,实现了一种基于PS/2接口和电脑进行无线数据通信的系统。电脑键盘输入的数据通过单片机采集传送到射频发射模块。在一百米,甚至到几公里(只需加PA模块拓展)将数据传送给另一块单片机,单片机再通过USB接口转换芯片和电脑进行通信。产品贴切实际具有抗干扰能力强、输入电压宽、功耗低、距离远、可靠性高、拓展性好,且成本低廉,确实为一款优秀实用的电子产品。关键词:PS/2接口,2.4G射频,MCU核心,MAX232,USB通信目录一、作品研究的背景 错误!未定义书签。二、数据无线传输的发展现状及前景 错误!未定义书签。三、作品研究的目的和意义 错误!未定义书签。四、作品的简介 错误!未定义书签。五、基本思路和设计关键技术 错误!未定义书签。1、整体设计思路和框图 错误!未定义书签。2、数据采集模块 错误!未定义书签。3、PS/2电器特性 错误!未定义书签。4、数据传输模块介绍 错误!未定义书签。5、射频模块SHOCKBURSTTM模式应用 错误!未定义书签。6、直接收发模式应用技术 错误!未定义书签。7、数据接收模式应用技术 错误!未定义书签。8、MCU硬件串行通信应用技术 错误!未定义书签。9、PS/2接口与无线发射模块的数据传送应用技术 错误!未定义书签。10、数据传输模块介绍 错误!未定义书签。六、工艺文件 错误!未定义书签。1、PCB电路图 错误!未定义书签。2、元件装配图 错误!未定义书签。3、元件清单 错误!未定义书签。七、软件设计 错误!未定义书签。1、程序流程图 错误!未定义书签。2、发射板主程序 错误!未定义书签。3、接收板主程序 错误!未定义书签。4、USB通信程序 错误!未定义书签。5、无线模块通信程序 错误!未定义书签。八、主要技术指标、调试及性能分析 错误!未定义书签。1、性能分析 错误!未定义书签。2、结论 错误!未定义书签。参考文献 错误!未定义书签。一、数据无线传输系统设计的研究背景随着社会的发展,数据传输已经成为人们生产、生活中不可或缺的一部分,小到用餐时的点菜系统,大到国家中央情报局的情报交换。数据传输中按传输介质可分为有线传输和无线传输。有线传输就是用线缆传输信息,如光纤,同轴电缆,双绞线等等。在许多情况下,用户往往由于受到地理环境和工作内容的限制,例如山地、港口和开阔地等特殊地理环境,对有线网络、有线传输的布线工程带来极大的不便,采用有线的施工周期将很长,甚至根本无法实现。无线就是不用线缆传递信息,而是利用电磁波传递信息,分发射部分和接收部分。采用无线可以摆脱线缆的束缚,有安装周期短、维护方便、扩容能力强,迅速收回成本的优点。近十几年来,移动通信技术飞速发展,越来越多的信息采集和远程控制系统采用了无线数据传送技术。与有线数据传输相比,无线数据传输布线成本低、安装简便、便于移动的优点,使其在遥控遥测、门禁系统、无线抄表、小区传呼、工业数据采集、无线遥控系统、无线鼠标等领域都得到了广泛的应用,而且它在高科技领域的应用也正在迅猛发展,比如卫星、导弹、无人侦察机等的数据采集,遥控机器人等的控制,以及一些监控设备等。此外,在现代军事通讯领域方面,无线传输技术也有重要的战略地位。在未来高科技战斗中,由于军事卫星通讯手段在未来战争中容易被摧毁且难以紧急恢复,所以人们可以利用无线短波、超短波等方式实现数据是无线传输,因而取得战争中的主动权。民用方面,在一些线路架设比较困难的地方,或者有天然的阻隔的地理条件较复杂较恶劣的地方数据的无线传输便显示出了巨大威力。无线传输还便于通讯设备移动,具有明显的灵活性。二、数据无线传输的发展现状及前景进入二十一世纪,无线数据通讯技术在我国蓬勃发展,也得到了信息产业部以及各行各业的高度重视,因为任何有线数据传输网络只能是网状覆盖,而无线数据传输网可达到真正的面覆盖。目前主要的短距离无线数据传输技术主要有蓝牙、Zigbee、IEEE802.11x、微功率短距离无线通讯技术,与已具备相当规模的无线长距离通讯网络(比如蜂窝移动通讯网、卫星数据通讯)相比,短距离无线通讯系统在基本结构、服务范围、应用层次以及通讯业务(数据、话音、视频)上,均有很大不同。下面分别介绍这几种无线传输技术。蓝牙技术(Bluetooth)主要面对网络中的各种数据和语言设备,通过无线方式将它们连接起来,从而方便快速的实现数据传输,它使用2.4GHZ的ISM频段,最大传输率1Mbit/s。IEEE802.11x的技术标准是无线局域网的国际标准,也是用2.4GHZ的ISM频段,协议主要在OSI的物理层和数据链路层,虽然传输速度快,但此类设备比较昂贵,技术复杂。Zigbee是一种新型的短距离、低速度、低功耗无线网络技术,是一种介于无线标记技术和蓝牙之间的技术,基于IEEE无线个人区域网标准,数据传输速率通常为10kb/s到250kb/s,有效覆盖范围10到75米,由于其协议简单、成本低、网络容量大等优点,使其在无线传感网络中得到广泛的应用。在未来,短距离无线数据传输将向着更高传输速率、更高传输精确度的方向发展,而且传输设备的成本也会进一步降低,传输协议也会进一步简单,从而是短距离无线通讯走入我们的生活,给我带来更多方便。三、作品研究的目的和意义本作品研究的内容是通过MCU按照无线协议控制无线数据芯片,以此来实现大量数据的无线高速传输,无论是在国防军事方面,还是民用通讯方面都有很重要的研究意义。可改装数控操控设备、医疗设备、数据通信设备等,使数据控制、交换、采集简单化,对无线数据通信在MCU系统中的应用和多单片机协同工作中具有非常宝贵的参考价值。四、作品简介实物作品,实现了一种基于PS/2接口和电脑进行无线数据通信的系统。电脑键盘输入的数据通过单片机采集传送到射频发射模块。在一百米,甚至到几公里(只需加PA模块拓展)将数据传送给另一块单片机,单片机再通过USB接口转换芯片和电脑进行通信。五、基本思路和关键技术1、整体设计思路和框图通过单片机将键盘数据采集,再利用单片机转换将信号转换成数字信号,然后通过SPI总线将数据传输给无线发送芯片,无线发送芯片将数据发送出去。同样,接收端单片机通过SPI总线控制接收端芯片,将无线传输过来的数据接收,再经过USB接口芯片转换,将数据传送给电脑,从而实现了无线数据传输。系统整体流程图如图1所示:图1.整体设计流程图2、PS/2数据采集接口一般,具有五脚连接器的键盘称之为AT键盘,而具有六脚mini-DIN连接器的键盘则称之为PS/2键盘。在本作品中使用的是六脚mini-DIN连接器,其实这两种连接器都只有四个脚有意义,它们分别是Clock(时钟脚)、Data(数据脚)、+5V(电源脚)和Ground(电源地)。在PS/2键盘与PC机的物理连接上只要保证这四根线一一对应就可以了。在本设计中只需将+5V(电源脚)与单片机的40脚相连,Ground(电源地)与单片机的20脚相连,Clock(时钟脚)与单片机的12脚外部中断相连,Data(数据脚)与其它任一I/O口相连即可。[1]现在比较常用的连接器如图3所示。图3PS/2的mini-DIN连接器3、PS/2电气特性 PS/2通讯协议是一种双向同步串行通讯协议。通讯的两端通过Clock(时钟脚)同步,并通过Data(数据脚)交换数据。任何一方如果想抑制另外一方通讯时,只需要把Clock(时钟脚)拉到低电平。[4]如果是PC机和PS/2键盘间的通讯,则PC机必须做主机,也就是说,PC机可以抑制PS/2键盘发送数据,而PS/2键盘则不会抑制PC机发送数据。一般两设备间传输数据的最大时钟频率是33kHz,大多数PS/2设备工作在10~20kHz。推荐值在15kHz左右,也就是说,Clock(时钟脚)高、低电平的持续时间都为40μs。每一数据帧包含11~12个位,具体含义如表2所列。表2数据帧格式说明表1个起始位总是逻辑08个数据位(LSB)低位在前1个奇偶校验位奇校验1个停止位总是逻辑11个应答位仅用在主机对设备的通讯中4、数据传送输模块介绍nRF2401是北欧集成电路公司生产的单片射频收发芯片,工作于2.4~2.5GHzISM频段,芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置。芯片能耗非常低,以-5dBm的功率发射时,工作电流只有10.5mA,接收时工作电流只有18mA,多种低功率工作模式,节能设计更方便。其DuoCeiverTM技术使nRF2401可以使用同一天线,同时接收两个不同频道的数据。引脚分布图其特点如下:●全球开放的2.4GHz频段多频道125个满足多频及跳频需要●高速率1Mbps高于蓝牙内置硬件CRC电路及多点通信控制高数据吞吐量●采用0.18um先进加工技术极具竞争力的成本●1.9-3.6V低电压低功耗满足低功耗设计需要●广泛适用于手持终端PDA无线数字耳机数字视频数码相机以及其他短距离高速无线通信应用●集成度高所有高频元件包括电感滤波器振荡器等已经全部集成在芯片内部使得产品一致性良好成本低性能稳定且不受外界影响●内部具有点对多点通信协议控制每个芯片可以通过软件设置最多40bit地址只有收到本机地址时才会输出数据提供一个中断指示编程方便点对多点通信示意图●嵌入CRC通信效验协议纠检错是无线通信设计的难点,nRF2401内置了CRC硬件电路和协议;●双接收功能独特设计nRF2401的DuoCeiver技术可以同时接收两个nRF2401的数据可以有效降低成本拓展用途●编程配置发射功率工作频率等所有工作参数全部通过SPI串口软件设置完成●外围元件极少,只需一个晶振和一个电阻即可设计射频电路;●发射功率和工作频率等所有工作参数可全部通过软件设置;●电流消耗很小,-5dBm输出功率时的典型峰值电流为10.5mA;●芯片内部设置有专门的稳压电路,因此,使用任何电源(包括DC/DC开关电源)均有很好的通信效果;●采用DuoCeiver技术可同时接收两个nRF2401的数据;●采用ShockBurstTM模式时,能适用极低的功率操作和不严格的MCU执行;●带有集成增强型8051内核、9路10bitADC、UART异步串口、SPI串口和PWM输出;●内置看门狗;●无需外部SAW滤波器;●可100%RF检验;●带有数据时隙和数据时钟恢复功能.3内部工作原理和外部组成原理图nRF2401的内部结构原理及外部组成框图如图2所示,下面介绍其工作原理.5、射频模块ShockBurstTM模式应用技术nRF2401的ShockBurstTMRX/TX模式采用片上先进先出(FIFO)来进行低数据率的时钟同步和高数据率的传输,因此极大的降低了功耗.ShockBurstTM发射主要通过MCU接口引脚CE、CLK1和DATA来完成.当MCU请求发送数据时,置CE为高电平,此时的接收机地址和有效载荷数据作为nRF2401的内部时钟,可用请求协议或MCU将速率调至1Mbps;置CE为低电平可激活ShockBurstTM发射.双接收模式ShockBurstTM接收主要使用MCU接口引脚CE、DR1、CLK1和DATA来实现.当正确设置射频包输入载荷的地址和大小后,置CE为高电平可激活RX.此后便可在nRF2401监测信息输入200μs,若收到有效数据包,则给MCU一个中断并置DR1为高电平,以使MCU以时钟形式输出有效载荷数据,待系统收到全部数据后,此时RF2401再置DR1为低电平,此时如果CE保持高电平,则等待新的数据包.若CE置低电平,则开始接收新的序列。DuoCeiverTM的双信道接收模式:nRF2401的DuoCeiverTM技术为RX提供了两个独立的专用数字信道,因而可代替两个单独接收系统.图3所示是DuoCeiverTM同时双接收信道结构图.nRF2401可以通过一个天线接口从相隔8MHz的两个1Mbps接收机上接收数据.同时将两个数字信道的输出反馈到两个单独的MCU接口.具体的两个信道如下:数字信道1:CLK1,DATA,DR1;数字信道2:CLK2,DOUT2,DR2;应当说明的是,数字信道2的频率只有在比数字信道1的频率高出8MHz时,才能保证正常接收.6、直接收发模式应用技术在直接收发模式下,nRF2401如传统的射频收发器一样工作。在直接发送时接口引脚为CE、DATA。当微控制器有数据要发送时,把CE置高,nRF2401射频前端被激活。所有的射频协议必须在微控制器程序中进行处理(包括字头、地址和CRC校验码)。在直接接收模式时接口引脚为CE、CLK1和DATA。一旦nRF2401被配置为直接接收模式,DATA引脚将根据天线接收到的信号开始高低变化(由于噪声的存在),CLK1引脚也开始工作,一旦接收到有效的字头,CLK1引脚和DATA引脚将协调工作,把射频数据包以其被发射时的数据从DATA引脚送给微控制器,字头必须是8位。由于DR引脚没用上,所有的地址和CRC校验必须在微控制器内部进行。7、数据接收模式应用技术接收端单片机可以通过输入C语言程序对无线射频芯片NRF24L01的参数进行设置,设为接收模式,即可接受检验信号。接收到检验信号后,NRF24L01的自动应答功能会发送应答信号给发送端已确认收到信号,接着NRF24L01通过IRQ中断通知接收端单片机,单片机进行数据接收并通过USB芯片将其转换成电脑识别的信号传给电脑。接收端的单片机在接收到中断的同时,要同发射端芯片进行时间上的协同,以此来保证发送和接收的配合。最后清除NRF24L01的状态寄存器,再次为下一次数据的接收做好准备。8、MCU硬件串行通信应用技术RS-232是现在主流的串行通信接口之一。由于RS232接口标准出现较早,难免有不足之处,主要有以下四点:(1)接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。(2)传输速率较低,在异步传输时,波特率为20Kbps;因此在“南方的老树51CPLD开发板”中,综合程序波特率只能采用19200,也是这个原因。(3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。在MAX232与单片机进行通信时,串行口的SBUF是作为同步移位寄存器使用的。在串行口发送时,SBUF相当于一个并行进入、串行输出的移位寄存器,由单片机的内部总线并行接收8位数据,并从RXD信号线串行输出。在接收操作时,它又相当于一个串行输入、输出的移位寄存器。在本设计中MAX232与单片机的串口通信原理图如下所示:上图为本设计应用的RS232串行通信原理图9、PS/2接口的键盘与无线发射模块的数据传送应用技术在本设计中PS/2键盘与单片机的连接方式如图9所示。P3.2口接PS/2数据线;P3.3(INT0)接PS/2时钟线,即采用外部中断0的方式来接受PS/2接口键盘的传输数据。①从设备到主设备的通信当从设备向主设备发送数据时,首先检查时钟线,以确认时钟线是否为高电平。如果是高电平,从设备就可以开始传输数据;反之,从设备要等待获得总线的控制权,才能开始传输数据。传输的每一帧由11位组成,发送时序及每一位的含义如图7所示。图7从设备到主设备的通信

每一帧数据中开始位总是为0,数据校验采用奇校验方式,停止位始终为1。从设备到主设备通信时,从设备总是在时钟线为高时改变数据线状态,主设备在时钟下降沿读人数据线状态。②主设备到从设备的通信主设备与从设备进行通信时,主设备首先将时钟线和数据线设置为“请求发送”状态,具体方式为:首先下拉时钟线至少100us抑制通信,然后下拉数据线“请求发送”最后释放时钟线。在此过程中,从设备在不超过10us的间隔内必须检查这个状态,当设备检测到这个状态时,它将开始产生时钟信号。此时数据传输的每一帧由12位构成,其时序和每一位含义如图8所示。

图8主设备到从设备的通信与从设备到主设备通信相比,其每帧数据多了一个ACK位。这是从设备应答接收到字节的应答位,由从设备通过拉低数据线产生,应答位ACK总是为0。主设备到从设备通信过程中,主设备总是在时钟线为低电平时改变数据线的状态,从设备在时钟上升沿读人数据线状态。STC89STC89S52PS/2键盘GNDGND+5VVCCCLKDATAP3.3P3.23图9硬件连接电路单片机接收完数据后便要进入nRF24L01的发射模块。在本设计中nRF24L01选择ShockBurstTM收发工作模式。在ShockBurstTM发射流程中,接口引脚为CE,CLK1,DATA,当微控制器有数据要发送时,其把CE置高,使nRF24L01工作。当nRF24L01工作后,才把接收机的地址和要发送的数据按时序送入nRF24L10、无线接收应用技术在nRF24L01工作在ShockBurstTM接收流程中,接口引脚CE、DR1、CLK1和DATA(接收通道1),首先要配置本机地址和要接收的数据包大小。一但进入接收状态,便把CE置高,200us后,nRF2401进入监视状态,等待数据包的到来。当接收到正确的数据包(正确的地址和CRC校验码),nRF2401自动把字头、地址和CRC校验位移去,nRF2401通过把DR1(这个引脚一般引起微控制器中断)置高通知微控制器,之后微控制器把数据从nRF2401移出,所有数据移完,nRF2401把DR1置低,此时,如果CE为高,则等待下一个数据包,如果CE为低,开始其它工作流程六、PCB电路板制作的关键技术材料1、PCB电路图图基于PS/2接口的无线数据传送系统的PCB图2、装配图3、元件清单元件标号封装参数C1rad0.1104C2rad0.1104C3rad0.1104C4rad0.1104C5rad0.1104C6rad0.1104C7rad0.1104C8rad0.1104C9rad0.1104C10cap0.1220UC11cap0.110UC12cap0.110UC13rad0.10.1C14rad0.120C15rad0.120C16rad0.120C17rad0.120C18cap0.1100UC19cap0.1100UC20cap0.1100UC21cap0.1100UD1ledLEDD2ledJ1sip4ISPJ2USB1USBJ3DB9RA/MDB9JP1IDC1024L01LED1ledLEDR1AXIAL0.41KR2AXIAL0.41KR3AXIAL0.41KR4AXIAL0.41KR5AXIAL0.410KR6AXIAL0.422R7AXIAL0.422RP1SIP910KS1BUT1TESTU1SOJ-28PDIUSBD12U2DIP408051U3DIP16MAX232U4AS1117aAMS1117Y1XTAL16MY2XTAL122.1184M七、软件设计流程图1、主程序流程图主程序先对系统初始化,接收机初始化后等待进入中断接收数据,转换数据传给芯片转换。发送机初始化后,等待PS/2的数据信号,采集转换给射频模块,无线送出数据。主程序流程图如下图所示。开始开始系统初始化外部中断N发送数据Y图发送机主程序流程图开始开始系统初始化外部中断N接收数据传给电脑Y接收机主程序流程图2、子程序流程图在有外部中断发生时,表示PS/2接口的键盘将向单片机发送数据,待数据发送完成后,单片机保存数据并由无线发射模块发射出去。其程序流程图如图12所示。外部中断外部中断产生键值数据?数据采集完?nRF24L01发射数据Y转换NY返回N图发送端外部中断子程序流程图nRFnRF24L01接收数据数据移位完毕?外部中断Y返回送USB转换N接收端外部中断子程序流程图2、发射主程序#include<reg52.h>#include<intrins.h>#include"24L01.h"#defineucharunsignedchar#defineuintunsignedintsbitKB_CLK=P3^3;sbitKB_DATA=P3^2;uintn=0;voidDelay_NS(uintx){for(;x>0;x--);}voiddelay_nms(unsignedintt){unsignedinti,j;for(i=0;i<t;i++)for(j=0;j<120;j++);}voidSend_Key(uchardat){uinti;KB_CLK=0;Delay_NS(10);KB_DATA=0;KB_CLK=1;while(KB_CLK);KB_DATA=0;while(!KB_CLK);for(i=0;i<8;i++){while(KB_CLK)_nop_();KB_DATA=dat&0x01;if(KB_DATA)n++;while(!KB_CLK)_nop_();dat>>=1;}switch(n){case0:case2:case4:case6:KB_DATA=1;break;case1:case3:case5:case7:KB_DATA=0;break;default:break;}while(KB_CLK)_nop_();while(KB_CLK)_nop_();KB_DATA=1;while(!KB_CLK)_nop_();while(KB_CLK)_nop_();while(!KB_CLK)_nop_();}ucharKey_Scan(void){uchari,key_temp;KB_CLK=1;KB_DATA=1;key_temp=0;while(KB_CLK);for(i=0;i<8;i++){key_temp>>=1;while(!KB_CLK);while(KB_CLK);_nop_();if(KB_DATA){key_temp|=0x80;}}while(KB_CLK);returnkey_temp;}unsignedcharkey2asc(unsignedcharKey){unsignedchartemp=0xff,i; for(i=0;i<49;i++) { if(Key==kbdasciicode[i][0]) { temp=kbdasciicode[i][1]; break; } } if(temp==0xff){ for(i=0;i<37;i++) { if(Key==kbdcontrolcode[i][0]) { temp=kbdcontrolcode[i][1]; break; } } } if(temp==0xff){ for(i=0;i<18;i++) { if(Key==E0startedcode[i][0]) { temp=E0startedcode[i][1]; break; } } }returntemp;}ucharGet_Key(void){ucharKey_Code[3],temp=0xff;Key_Code[0]=Key_Scan();Key_Code[1]=Key_Scan();Key_Code[2]=Key_Scan();temp=key2asc(Key_Code[0]);if(temp!=0xff)nRF24L01_TxPacket(&temp);putchar(temp);Delay_NS(2000);returnKey_Code[0];}voidLED_Indication(){Send_Key(0xED);Delay_NS(10);Send_Key(0x07);Delay_NS(10);}intmain(){ucharKey_Code;LED_Indication();UsartInt();Init_NRF24L01();for(;;){Key_Code=Get_Key();P1^=1;if((Key_Code==0x77)||(Key_Code==0x58)){P1^=2;}delay_nms(100);}}2、接收主程序#include<AT89X52.H>#include"pdiusbd12.h"#include"UsbCore.h"#include"24L01.h"voidSendReport(uint8hid_code){uint8Buf[8]={0,0,0,0,0,0,0,0};uint8i=2;if(hid_code==KeyLCtrl){Buf[0]|=0x01;}elseif(hid_code==KeyLShift){Buf[0]|=0x02;}elseif(hid_code==KeyLAlt){Buf[0]|=0x04;}else{Buf[2]=hid_code;}}unsignedcharasc_USB_code(unsignedcharasc_code){unsignedchartemp=0xff,i;for(i=0;i<49;i++) { if(asc_code==hidasciicode[i][1]) { temp=hidasciicode[i][0]; break; } } if(temp==0xff){ for(i=0;i<37;i++) { if(asc_code==hidcontrolcode[i][1]) { temp=hidcontrolcode[i][0]; break; } } } if(temp==0xff){ for(i=0;i<18;i++) { if(asc_code==E0startedcode[i][1]) { temp=E0startedcode[i][0]; break; } } }returntemp;}voidmain(void){uint16id;uint8InterruptSource;xdataunsignedcharRxBuf[1];EA=1;InitUART();init_NRF24L01();SetRX_Mode();nRF24L01_RxPacket(RxBuf);id=D12ReadID();Prints("YourD12chip\'sIDis:");PrintShortIntHex(id);UsbDisconnect();UsbConnect();ConfigValue=0;while(1){if(D12GetIntPin()==0)//如果有中断发生{D12WriteCommand(READ_INTERRUPT_REGISTER);InterruptSource=D12ReadByte();if(InterruptSource&0x80)UsbBusSuspend();if(InterruptSource&0x40)UsbBusReset();if(InterruptSource&0x01)UsbEp0Out();if(InterruptSource&0x02)UsbEp0In();if(InterruptSource&0x04)UsbEp1Out();if(InterruptSource&0x08)UsbEp1In();if(InterruptSource&0x10)UsbEp2Out();if(InterruptSource&0x20)UsbEp2In();}if(ConfigValue!=0){if(!Ep1InIsBusy){ SetRX_Mode();if(nRF24L01_RxPacket(RxBuf)){uint8hid_code; P2^=2;hid_code=asc_USB_code(RxBuf[0]);SendReport(hid_code);UartPutChar(RxBuf[0]);}}}}}3、USB接口通信程序#include<AT89x52.H>#include"PDIUSBD12.H"#include"config.h"voidD12WriteCommand(uint8Command){D12SetCommandAddr();D12ClrWr();D12SetPortOut();D12SetData(Command);D12SetWr();D12SetPortIn();}uint8D12ReadByte(void){uint8temp;D12SetDataAddr();D12ClrRd();temp=D12GetData();D12SetRd();returntemp;}uint16D12ReadID(void){uint16id;D12WriteCommand(Read_ID);//写读ID命令id=D12ReadByte();//读回ID号低字节id|=((uint16)D12ReadByte())<<8;//读回ID号高字节returnid;}voidD12WriteByte(uint8Value){D12SetDataAddr();D12ClrWr();D12SetPortOut();D12SetData(Value);D12SetWr();D12SetPortIn();}uint8D12ReadEndpointLastStatus(uint8Endp){D12WriteCommand(0x40+Endp);//读取端点最后状态的命令returnD12ReadByte();}voidD12SelectEndpoint(uint8Endp){D12WriteCommand(0x00+Endp);//选择端点的命令}voidD12ClearBuffer(void){D12WriteCommand(D12_CLEAR_BUFFER);}voidD12AcknowledgeSetup(void){D12SelectEndpoint(1);D12WriteCommand(D12_ACKNOWLEDGE_SETUP);D12SelectEndpoint(0);D12WriteCommand(D12_ACKNOWLEDGE_SETUP);}uint8D12ReadEndpointBuffer(uint8Endp,uint8Len,uint8*Buf){uint8i,j;D12SelectEndpoint(Endp);D12WriteCommand(D12_READ_BUFFER);D12ReadByte();j=D12ReadByte();if(j>Len){j=Len;}#ifdefDEBUG1Prints("读端点");PrintLongInt(Endp/2);Prints("缓冲区");PrintLongInt(j);Prints("字节。\r\n");#endiffor(i=0;i<j;i++){D12ClrRd();*(Buf+i)=D12GetData();D12SetRd();#ifdefDEBUG1PrintHex(*(Buf+i));if(((i+1)%16)==0)Prints("\r\n");#endif}#ifdefDEBUG1if((j%16)!=0)Prints("\r\n");#endifreturnj;}voidD12ValidateBuffer(void){D12WriteCommand(D12_VALIDATE_BUFFER);}uint8D12WriteEndpointBuffer(uint8Endp,uint8Len,uint8*Buf){uint8i;D12SelectEndpoint(Endp);D12WriteCommand(D12_WRITE_BUFFER);D12WriteByte(0);D12WriteByte(Len);#ifdefDEBUG1Prints("写端点");PrintLongInt(Endp/2);Prints("缓冲区");PrintLongInt(Len);Prints("字节。\r\n");#endifD12SetPortOut();for(i=0;i<Len;i++){D12ClrWr();D12SetData(*(Buf+i));D12SetWr();#ifdefDEBUG1PrintHex(*(Buf+i));if(((i+1)%16)==0)Prints("\r\n");#endif}#ifdefDEBUG1if((Len%16)!=0)Prints("\r\n");#endifD12SetPortIn();D12ValidateBuffer();returnLen;}voidD12SetAddress(uint8Addr){D12WriteCommand(D12_SET_ADDRESS_ENABLE);D12WriteByte(0x80|Addr);}voidD12SetEndpointEnable(uint8Enable){D12WriteCommand(D12_SET_ENDPOINT_ENABLE);if(Enable!=0){D12WriteByte(0x01);}else{D12WriteByte(0x00);}}4、无线模块应用程序#include<reg52.h>#include<intrins.h>typedefunsignedcharuchar;typedefunsignedcharuint;sbit MISO =P0^2;sbit MOSI =P0^4;sbit SCK =P0^1;sbit CE =P0^0;sbit CSN =P0^5;sbit IRQ =P0^3;sbit KEY1=P2^0;sbit LED=P2^1;#defineTX_ADR_WIDTH5 #defineRX_ADR_WIDTH5 #defineTX_PLOAD_WIDTH1 #defineRX_PLOAD_WIDTH1 uintconstTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; uintconstRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; #defineREAD_REG0x00 #defineWRITE_REG0x20 #defineRD_RX_PLOAD0x61 #defineWR_TX_PLOAD0xA0 #defineFLUSH_TX0xE1 #defineFLUSH_RX0xE2 #defineREUSE_TX_PL0xE3 #defineNOP0xFF #defineCONFIG0x00#defineEN_AA0x01#defineEN_RXADDR0x02#defineSETUP_AW0x03#defineSETUP_RETR0x04#defineRF_CH0x05#defineRF_SETUP0x06#defineSTATUS0x07#defineOBSERVE_TX0x08#defineCD0x09#defineRX_ADDR_P00x0A#defineRX_ADDR_P10x0B#defineRX_ADDR_P20x0C#defineRX_ADDR_P30x0D#defineRX_ADDR_P40x0E#defineRX_ADDR_P50x0F#defineTX_ADDR0x10#defineRX_PW_P00x11#defineRX_PW_P10x12#defineRX_PW_P20x13#defineRX_PW_P30x14#defineRX_PW_P40x15#defineRX_PW_P50x16#defineFIFO_STATUS0x17voidinerDelay_us(unsignedcharn);voidinit_NRF24L01(void);uintSPI_RW(uintuchar);ucharSPI_Read(ucharreg);voidSetRX_Mode(void);uintSPI_RW_Reg(ucharreg,ucharvalue);uintSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars);uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars);unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf);uint bdatasta;sbit RX_DR =sta^6;sbit TX_DS =sta^5;sbit MAX_RT =sta^4;voidinerDelay_us(unsignedcharn){ for(;n>0;n--) _nop_();}voidinit_NRF24L01(void){inerDelay_us(100); CE=0; CSN=1; SCK=0; inerDelay_us(10); SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH); SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH); SPI_RW_Reg(WRITE_REG+EN_AA,0x01); SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01); SPI_RW_Reg(WRITE_REG+RF_CH,0); SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH); SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07); SPI_RW_Reg(WRITE_REG+CONFIG,0x0f); }uintSPI_RW(uintuchar){ uintbit_ctr; for(bit_ctr=0;bit_ctr<8;bit_ctr++) { MOSI=(uchar&0x80); inerDelay_us(10); uchar=(uchar<<1); SCK=1; inerDelay_us(10); uchar|=MISO; inerDelay_us(10); SCK=0; }return(uchar); }ucharSPI_Read(ucharreg){ ucharreg_val; CSN=0; inerDelay_us(10); SPI_RW(reg); reg_val=SPI_RW(0); CSN=1; inerDelay_us(10); return(reg_val);}uintSPI_RW_Reg(ucharreg,ucharvalue){ uintstatus; CSN=0; inerDelay_us(10); status=SPI_RW(reg); SPI_RW(value); CSN=1; return(status);}uintSPI_Read_Buf(ucharreg,uchar*pBuf,ucharuchars){ uintstatus,uchar_ctr; CSN=0; inerDelay_us(10); status=SPI_RW(reg); for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++) pBuf[uchar_ctr]=SPI_RW(0); CSN=1; inerDelay_us(10); return(status);}uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars){ uintstatus,uchar_ctr; CSN=0; inerDelay_us(10); status=SPI_RW(reg); for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++) SPI_RW(*pBuf++); CSN=1; return(status);}voidSetRX_Mode(void){ CE=0; inerDelay_us(10); CE=1; inerDelay_us(130);}unsignedcharnRF24L01_RxPacket(unsignedchar*rx_buf){unsignedcharrevale=0; sta=SPI_Read(STATUS); if(RX_DR) { CE=0; inerDelay_us(10); SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//readreceivepayloadfromRX_FIFObuffer revale=1; } SPI_RW_Reg(WRITE_REG+STATUS,sta); returnrevale;}八、主要技术指标及性能分析1、性能分析硬件调试前先检查印制板的质量问题,在检查无误后可通电检查。软件调试用KeilC51编译器,源程序编译应分段或以子程序为单位逐个进行,最后可结合硬件运行调试。在单片机下载程序后,上电复位后,查看数据。通过调试后,可验证无线数据传送系统的数据传送良好。以下是实物测式数据表:距离传输延时误码工作电流隔墙1米近似即时无约12mA无5米近似即时无约14mA无20米近似即时无约15mA无50米近似即时无约15mA无90米近似即时无约16mA无120米微小延时无约18mA无120米微小延时少量约20mA有2、结论基于PS/2接口的无线数据传输系统,稳定可靠,PS/2键盘接口更加灵巧,无线传输数据的方便快捷,相信这套系统能够得到一定的应用,特别是这种基于MCU的无线通信技术应用和改造面很广。参考文献[1]李建忠.单片机原理及应用.西安:西安电子科技大学出版社,2008.02[2]郭天祥.51单片机C语言教程.北京:电子工业出版社,2009.6基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计基于单片机船舶电力推进电机监测系统基于单片机网络的振动信号的采集系统基于单片机的大容量数据存储技术的应用研究基于单片机的叠图机研究与教学方法实践基于单片机嵌入式Web服务器技术的研究及实现基于AT89S52单片机的通用数据采集系统HYPERLIN

温馨提示

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

评论

0/150

提交评论