标题:
2.4G无线双向收发系统单片机源程序与PCB文件
[打印本页]
作者:
伟民电子
时间:
2017-9-20 20:52
标题:
2.4G无线双向收发系统单片机源程序与PCB文件
2.4G无线收发程序
pcb文件如下:
0.png
(42.44 KB, 下载次数: 79)
下载附件
2017-9-21 00:20 上传
0.png
(51.49 KB, 下载次数: 74)
下载附件
2017-9-21 00:20 上传
单片机源程序如下:
/*
2.4G无线双向收发模块源程序
(C)西安电子科技大学 编写:郭世忠 谢金波 版本:V5.3 日期:2015/02/02
相对V5.1 将看门狗清狗语句由主循环结尾处移至开始处。解决单片机先按键,后上电,造成首次看门狗随机复位,系统频繁重启问题。
相对V5.2 把重复15次发送中的SetRX_Mode()取消,放到最后,只留一句。
*/
//---------------------------------用户配置区--------------------------------------------
#define LOCAL_LED_ON //1.本地LED是否点亮,注释掉本句即可禁止本地LED显示
//---------------------------------------------------------------------------------------
#define ADD1 50 //0-255
#define ADD2 34 //0-255
#define ADD3 65 //0-255
#define ADD4 83 //0-255 //2.用户使用的4*8bit=32bit地址
//---------------------------------------------------------------------------------------
//----------------------------------以下代码请勿修改!-----------------------------------
#include "c8051f330.h"
#include "nRF24L01.h"
#include "config.h"
#include "key.h"
#define TIMER0_RELOAD_HIGH (65535-5150)/256 //定时器0的装入值
#define TIMER0_RELOAD_LOW (65535-5150)%256 //系统时钟3.0625MKHz,12分频,20.00ms:理论装载值5104,实际装载值5150
//系统时钟3.0625MKHz,12分频,10.00ms:理论装载值2552,实际装载值2585
//系统时钟3.0625MKHz,12分频, 5.00ms:理论装载值1276,实际装载值1280
//系统时钟3.0625MKHz,12分频,25.00ms:理论装载值6380,实际装载值6475
//系统时钟3.0625MKHz,12分频,30.00ms:理论装载值7656,实际装载值7736
/*定义LED和震动电机相应的驱动端口*/
sbit MOTOR=P0^0; //振动电机
sbit LED1=P1^3;
sbit LED2=P1^4; //四个LED端口
sbit LED3=P1^5;
sbit LED4=P1^6;
unsigned char TxBuf[3]={1,2,3};
unsigned char RxBuf[3]={1,2,3};
unsigned char motor_flag=0,motor_shake_times=0,delay_count=0;
unsigned char tf=0,getdata=0;
unsigned char get_key_time=0;
unsigned char Enable_Get_Ack=0;
unsigned char LED_Time_Out=0;
unsigned char Enable_Clear_LED=0;
unsigned char receive_counter=0;
/****************************************************************************
* 名 称:delay_20ms()
* 入口参数:无
* 出口参数:无
* 说 明: 使用定时器准确延时20ms
****************************************************************************/
void delay_20ms( unsigned char time )
{
delay_count=0;
while(delay_count<time); //装值1,理论 20ms,实测 20ms
//装值2,理论 40ms,实测40.4ms
//装值3,理论 60ms,实测 60ms
//装值4,理论 80ms,实测 80ms
//装值5,理论100ms,实测 100ms
}
/****************************************************************************
* 名 称:delay_1ms()
* 入口参数:无
* 出口参数:无
* 说 明: 简单延时1ms
****************************************************************************/
void delay_1ms( unsigned int time )
{
unsigned int i,j;
for(j=0;j<time;j++)
for(i=0;i<325;i++); //装值 1,实测 1ms
//装值 2,实测2.08ms
//装值 3,实测3.12ms
//装值 4,实测4.08ms
//装值 5,实测5.12ms
//装值10,实测10.2ms
}
/****************************************************************************
* 名 称:MOTOR_SHAKE()
* 入口参数:无
* 出口参数:无
* 说 明: 振动电机振动驱动函数,利用移位进行驱动
****************************************************************************/
void MOTOR_SHAKE( void )
{
unsigned char temp;
if(motor_shake_times!=0)
{
temp=motor_shake_times&0x01;
MOTOR=temp;
motor_shake_times=motor_shake_times>>1;
}
else
{
MOTOR=0;
}
}
/****************************************************************************
* 名 称:MOTOR_SCAN()
* 入口参数:无
* 出口参数:无
* 说 明: 利用定时器0进行的振动电机振动扫描函数
****************************************************************************/
void MOTOR_SCAN( void )
{
if(motor_flag==20)
{
motor_flag=0;
MOTOR_SHAKE();
}
}
/****************************************************************************
* 名 称:MOTOR_ON()
* 入口参数:电机震动次数
* 出口参数:无
* 说 明: 开启电机振动,相当于赋值
****************************************************************************/
void MOTOR_ON( unsigned char cishu )
{
motor_shake_times=cishu;
}
/****************************************************************************
* 名 称:Timer0_ISR()
* 入口参数:无
* 出口参数:无
* 说 明: 定时器0中断处理函数
****************************************************************************/
void Timer0_ISR( void ) interrupt 1
{
TH0=TIMER0_RELOAD_HIGH;
TL0=TIMER0_RELOAD_LOW;
get_key_time++;
delay_count++;
motor_flag++;
LED_Time_Out++;
Key_ScanIO();
MOTOR_SCAN();//电机20ms扫描一次
}
/****************************************************************************
* 名 称:IRQ_ISR()
* 入口参数:无
* 出口参数:无
* 说 明: 外部中断处理函数,用于处理无线模块的收发及状态转换
****************************************************************************/
void IRQ_ISR( void ) interrupt 0
{
switch(ReadInterrupt_Status())
{
case 1:{EA=0;
nRF24L01_RxPacket(RxBuf);
ClearInterrptFlag();
EA=1;
if(RxBuf[2]!=90)
{
if(receive_counter<250)
receive_counter++;
else
receive_counter=2;
}
getdata=1;
}
break; //接收到数据中断
//case 2:{EA=0;ClearInterrptFlag();SetRX_Mode();delay_1ms(1);EA=1;}break; //发送成功中断
case 2:{EA=0;ClearInterrptFlag();EA=1;}break; //发送成功中断
case 3:{EA=0;ClearInterrptFlag();SetRX_Mode();delay_1ms(1);EA=1;}break; //最大发射次数到,即发送失败中断
default:{EA=0;ClearInterrptFlag();SetRX_Mode();delay_1ms(1);EA=1;}break;//其他无关量
}
}
/****************************************************************************
* 名 称:Send_Data()
* 入口参数:无
* 出口参数:无
* 说 明: 发送端数据发送函数,连续发送15次,函数值由数组直接传递
****************************************************************************/
void Send_Data( void )
{
nRF24L01_TxPacket(TxBuf); //连发15次
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
2.4G无线双向收发系统.rar
(207.09 KB, 下载次数: 59)
2017-9-20 20:50 上传
点击文件名下载附件
2.4G
下载积分: 黑币 -5
作者:
xi-xi
时间:
2019-6-14 22:09
文件不全啊,谨慎下载
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1