20xx_中国教育机器人大赛教育机器人创意设计项目报告书(编辑修改稿)内容摘要:

发送初始状态 void SetTxMode(void) { TRX_CE=0。 TXEN=1。 nrf905_Delay(1)。 // nrf905_Delay for mode change(=650us) } //步骤一 : TRX_ce=0;必须将次引脚置低,使 905 进入 standby 模式 //步骤二:发送 RRP指令 //步骤三:循环调用 SpiWrite函数,读取接收到的数据 //步骤四:等待 DR和 AM引脚复位为低电平 // AM 地址匹配,接收到有效地址,被置高 // DR 接收到有效数据包,并解码后,被置高,当所有有效数据被读取后, // nrf905降 AM和 DR置低,最后需要注意的是,必须首先设置器件的 // 发送 /接收模式才能保证有效的数据发生接收 // 设置nrf905 进 入 接 收 模 式 void SetRxMode(void) { TXEN=0。 TRX_CE=1。 nrf905_Delay(1)。 // nrf905_Delay for mode change(=650us) 12 } // 发 送 数 据 打 包 //步骤一:通过 SpiWrite 函数发送 WTP 命令,准备写入 TX 有效数据 //步骤二:循环调用 SpiWrite 向 TXPayload 寄存器写入有效数据(中间必须夹有 CSN电平变化 //步骤三:延时 //步骤四: 通过 SpiWrite函数发送 WTA命令,准备写入 TX地址 //步骤五:循环调用 SpiWrite向 TXAddress寄存器写入 TX地址 //步骤六: TRC_CE=1;开始发送数据,延时, nrf905数据发送完成 //当 nrf905接收到一条完成的信息时,会将 DR引脚置高。 void TxPacket(uchar *TxRxBuf,uchar n) { uchar i。 TxRxBuf[0]=n。 nRF905Init()。 //初始化 Config905()。 SetTxMode()。 //Config905()。 CSN=0。 SpiWrite(WTP)。 // Write payload mand for (i=0。 i4。 i++) { SpiWrite(TxRxBuf[i])。 // 写入 32直接发送数据 } CSN=1。 nrf905_Delay(1)。 // 关闭 SPI,保存写入的数据 CSN=0。 // SPI使能,保存写入的数据 SpiWrite(WTA)。 // 写数据至地址寄存器 for (i=0。 i4。 i++)// 写入四字节地址 写入与对方地址一样的地址 { SpiWrite(TxAddress[i])。 } CSN=1。 // 关闭 SPI TRX_CE=1。 // 进入发送模式,启动射频发送 nrf905_Delay(1)。 //进入 ShockBurst发送模式后,芯片保存数据 TRX_CE=0。 // 发送完成后返回 ATANDBY模式 while (DR!=1)。 nrf905_Delay(10)。 LED=0。 nrf905_Delay(300)。 LED=1。 13 nrf905_Delay(300)。 //发送后 LED闪烁 } //判断数据接收状态 unsigned char CheckDR(void)//检查是否有新数据传入 Data { DR=1。 //通过对端口写 1,可以使端口为输入状态,这 51的 特性。 不熟悉者可以参阅 51相关书籍作证 (将 DR端口设置为输入状态。 ) if (DR==1) { DR=0。 return 1。 } else { return 0。 } } //NRF905 接收到数据后读取保存 void RxPacket(void) { uchar i。 nrf905_Delay(1)。 //TRX_CE=0。 // 设置 905进入待机模式 nrf905_Delay(100)。 TRX_CE=0。 CSN=0。 // 使能 SPI nrf905_Delay(1)。 SpiWrite(RRP)。 //准备读取接收到的数据 for (i = 0。 i 4。 i++) { TxRxBuf[i]=SpiRead()。 // 通过 SPI 接口从 905 芯片读取数据 } CSN=1。 //禁用 SPI nrf905_Delay(10)。 TRX_CE=1。 } // void clear(void) //清空接收数组 { uchar i。 for(i=0。 i4。 i++) 14 TxRxBuf[i]=0。 } //数据接收 void RX(void) { clear()。 //清空接收数组 nRF905Init()。 //初始化 Config905()。 tf=0。 SetRxMode()。 // 设置为接收模式 while (tf==0) { if(DR) { nrf905_Delay(10)。 RxPacket()。 if(TxRxBuf[1]==0x30) { switch (TxRxBuf[0]) { case 1: wx_jieshou = 1。 break。 case 2: wx_jieshou = 2。 break。 case 3: wx_jieshou = 3。 break。 } LED=0。 nrf905_Delay(300)。 LED=1。 nrf905_Delay(300)。 //接收到数据 后闪烁 tf=1。 DR=0。 } } } } 颜色传感器部分 include define uchar unsigned char define uint unsigned int sbit tcs230_s2=P1^6。 //TCS230 S2 接单片机 sbit tcs230_s3=P1^7。 //TCS230 S3 接单片机 sbit tcs230_en=P3^0。 //TCS230 EN(E0)接 GND uchar flat2 = 0。 15 //颜色传感器函数声明 /*=================================================================== */ void baipingheng()。 void celiang()。 void judge_colour(uint rb1,uint gb1,uint bb1)。 void DelayMs(uint Ms)。 //1MS 基准延时程序 void baipingheng()。 //白平衡子程序 void celiang()。 //实际颜色程序 void DelayMs(uint Ms)。 uint ryz,gyz,byz。 //分别定义红色因子 绿色因子 蓝色因子 uint rb,gb,bb。 //RGB值 /*====================================================================*/ /*==================================================================== 白平衡子程序 ====================================================================*/ void celiang() { //*********求 R值 ************************************ TH0=(6553610000)/256。 TL0=(6553610000)%256。 TH1=0。 TL1=0。 tcs230_s2=0。 tcs230_s3=0。 //选择红色滤光器 tcs230_en=0。 TR0=1。 //10毫秒开始计时 TR1=1。 //开始计数 while(TF0==0)。 //等待定时器溢出 TF0=0。 //清楚定时器 0溢出标志 TR0=0。 //关闭定时 0 TR1=0。 rb=(unsigned long)(TH1*256+TL1)*255/ryz。 if(rb255)rb=255。 //判断 RGB值是否合法 //*********** 求 B 值************************************** TH0=(6553610000)/256。 TL0=(6553610000)%256。 TH1=0。 16 TL1=0。 tcs230_s2=0。 tcs230_s3=1。 //选择蓝色滤光器 TR0=1。 //10毫秒开始计时 TR1=1。 //开始计数 while(TF0==0)。 //等待定时器溢出 TF0=0。 //清楚定时器 0溢出标志 TR0=0。 //关闭定时 0 TR1=0。 bb=(unsigned long)(TH1*256+TL1)*255/byz。 if(bb255)bb=255。 //判断 RGB值是否合法 //*********** 求 G 值************************************** TH0=(6553610000)/256。 TL0=(6553610000)%256。 TH1=0。 TL1=0。 tcs230_s2=1。 tcs230_s3=1。 //选择绿色滤光器 TR0=1。 //10毫秒开始计时 TR1=1。 //开始计数 while(TF0==0)。 //等待定时器溢出 TF0=0。 //清楚定时器 0溢出标志 TR0=0。 //关闭定时 0 TR1=0。 tcs230_en=1。 gb=(unsigned long)(TH1*256+TL1)*255/gyz。 if(gb255)gb=255。 //判断 RGB值是否合法 } /*==================================================================== 白平衡子程序 ====================================================================*/ void baipingheng() { //**************求取红色因子 *********************** TH0=(6553610000)/256。 TL0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。