通过灯的闪烁来判断数据的接受和发射
有接收端和发射段的程序
如果24L01用reg51那么两个设备都要用reg51,如果用reg52就都得用reg52!
PC通过串口发送给单片机命令[相当于协调器],单片机把命令通过24L01无线发送给另一个单片机,另一个单片机控制灯LED1,LED2,LED3,LED4闪烁。
无线发射程序:
无线接收程序:
- #include"2401.h"
- #define uint unsigned int
- #define uchar unsigned char
- sbit KEY8=P3^7; //发送按键
- sbit beep=P2^3; //喇叭
- sbit LED6=P1^6; //发送数据时显示灯
- sbit LED1=P0^0; //接收到数据后的功能实现灯
- sbit LED2=P0^1;
- sbit LED3=P0^2;
- sbit LED4=P0^3;
- void delay_ms(uint z) //延时函数
- {
- uint y;
- while(z--)
- for(y=110;y>0;y--);
- }
- void main()
- {
- uchar Tx_Buf1[]={1}; //发送的信息1
- uchar Rx_Buf[32]; //接收到的数据暂存器,最多32字节数据
- init_NRF24L01();
- LED6=1; //初始灯6熄灭
- while(NRF24L01_Check()) //检查不到24l01则报警
- {
- beep=0;
- delay_ms(200);
- beep=1;
- delay_ms(200);
- }
- while(1)
- {
- RX_Mode(); //接收模式
- while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式
- {
- if(KEY8==0) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
- {
- delay_ms(5);//消抖动
- if(KEY8==0)
- {
- while(!KEY8);
- TX_Mode(); //发送模式
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- LED6=0;
- delay_ms(300);
- LED6=1;
- delay_ms(300); //发送后LED6闪一下
- break; //退出最近的循环,从而变回接收模式,这句关键
- }
- }
- }
- //1//if(Rx_Buf[0]==1) //若接收到对应的数据则实现对应功能
- //1//{
- //1// Rx_Buf[0]=0; //清空数据
- //1// LED6=0;
- //1// delay_ms(300);
- //1// LED6=1;
- //1// delay_ms(300); //接收到数据 后闪烁
- //1//}
- switch(Rx_Buf[0]){//对数据进行分析来控制灯亮
- case 0:
- break;
- case 1:
- Rx_Buf[0]=0; //清空数据
- LED1=0;
- delay_ms(300);
- LED1=1;
- delay_ms(300);
- break;
- case 2:
- Rx_Buf[0]=0; //清空数据
- LED2=0;
- delay_ms(300);
- LED2=1;
- delay_ms(300);
- break;
- case 3:
- Rx_Buf[0]=0; //清空数据
- LED3=0;
- delay_ms(300);
- LED3=1;
- delay_ms(300);
- break;
- default:
- Rx_Buf[0]=0; //清空数据
- LED4=0;
- delay_ms(300);
- LED4=1;
- delay_ms(300);
- break;
- }
- }
- }
复制代码
全部资料下载地址:
【小成果】2、PC-单片机-单片机无线串口控制.zip
(90.8 KB, 下载次数: 1341)
|