电赛用的程序设计,包含了转弯、无线控制、循迹和人体温度检测
单片机源程序如下:
- #include "reg52.h"
- #include "nRF24L01.h"
- #define uint unsigned int
- #define uchar unsigned char
- sbit KEY1 = P2^0;
- sbit KEY2 = P2^1;
- sbit KEY3 = P2^2;
- sbit KEY4 = P2^3;
- sbit KEY5 = P2^4;
- sbit KEY6 = P2^5;
- sbit KEY7 = P2^6;
- sbit KEY8 = P2^7;
- sbit beep = P1^6; //喇叭
- sbit LED = P1^7 ; //发送数据时显示灯+接收到数据后的功能实现灯
-
- void delay_ms(uint z) //延时函数
- {
- uint y;
- while(z--)
- for(y=110;y>0;y--);
- }
- void main()
- {
- uchar Tx_Buf1[]={1,2,3,4,5,6,7,8}; //发送的信息1
- uchar Rx_Buf[32]; //接收到的数据暂存器,最多32字节数据
- init_NRF24L01();
- LED=0; //初始灯6熄灭
- beep = 0;
- 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(KEY1==0) //按了按键1,则变成发送模式,发送对应数据,发送完后变成接收模式
- {
- delay_ms(5);//消抖动
- if(KEY1==0)
- {
- while(!KEY1);
- TX_Mode(); //发送模式
- Tx_Buf1[0]=1; //将1发送过去
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- LED=0;
- delay_ms(50);
- LED=1;
- delay_ms(50); //发送后LED1闪一下
- break; //退出最近的循环,从而变回接收模式,这句关键
- }
- }
- else if(KEY2==0)
- {
- delay_ms(5);//消抖动
- if(KEY2==0)
- {
- TX_Mode(); //发送模式
- Tx_Buf1[0]=2; //将2发送过去
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- LED=0;
- delay_ms(50);
- LED=1;
- delay_ms(50);
- if(KEY2==1)
- {
- TX_Mode(); //发送模式
- Tx_Buf1[0]=6; //将2发送过去
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- }
- break; //退出最近的循环,从而变回接收模式,这句关键
- }
- }
- else if(KEY3==0)
- {
- delay_ms(5);//消抖动
- if(KEY3==0)
- {
- TX_Mode(); //发送模式
- Tx_Buf1[0]=3; //将3发送过去
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- LED=0;
- delay_ms(50);
- LED=1;
- delay_ms(50);
- if(KEY3==1)
- {
- TX_Mode(); //发送模式
- Tx_Buf1[0]=6; //将6发送过去
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- }
- break; //退出最近的循环,从而变回接收模式,这句关键
- }
- }
- else if(KEY4==0) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
- {
- delay_ms(5);//消抖动
- if(KEY4==0)
- {
- TX_Mode(); //发送模式
- Tx_Buf1[0]=4; //将4发送过去
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- LED=0;
- delay_ms(50);
- LED=1;
- delay_ms(50);
- if(KEY4==1)
- {
- TX_Mode(); //发送模式
- Tx_Buf1[0]=6; //将6发送过去
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- }
- break; //退出最近的循环,从而变回接收模式,这句关键
- }
- }
- else if(KEY5==0)
- {
- delay_ms(5);//消抖动
- if(KEY5==0)
- {
- TX_Mode(); //发送模式
- Tx_Buf1[0]=5; //将5发送过去
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- LED=0;
- delay_ms(50);
- LED=1;
- delay_ms(50);
- if(KEY5==1)
- {
- TX_Mode(); //发送模式
- Tx_Buf1[0]=6; //将6发送过去
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- }
- break; //退出最近的循环,从而变回接收模式,这句关键
- }
- }
- else if(KEY6==0) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
- {
- delay_ms(5);//消抖动
- if(KEY6==0)
- {
- while(!KEY6);
- TX_Mode(); //发送模式
- Tx_Buf1[0]=6; //将6发送过去
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- LED=0;
- delay_ms(50);
- LED=1;
- delay_ms(50);
- break; //退出最近的循环,从而变回接收模式,这句关键
- }
- }
- else if(KEY7==0) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
- {
- delay_ms(5);//消抖动
- if(KEY7==0)
- {
- while(!KEY7);
- TX_Mode(); //发送模式
- Tx_Buf1[0]=7; //将7发送过去
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- LED=0;
- delay_ms(50);
- LED=1;
- delay_ms(50);
- break; //退出最近的循环,从而变回接收模式,这句关键
- }
- }
- else if(KEY8==0) //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式
- {
- delay_ms(5);//消抖动
- if(KEY8==0)
- {
- while(!KEY8);
- TX_Mode(); //发送模式
- Tx_Buf1[0]=8; //将7发送过去
- nRF24L01_TxPacket(Tx_Buf1); //发送命令数据
- LED=0;
- delay_ms(50);
- LED=1;
- delay_ms(50);
- break; //退出最近的循环,从而变回接收模式,这句关键
- }
- }
- }
- if(Rx_Buf[0]==1) //若接收到对应的数据则实现对应功能
- {
- Rx_Buf[0]=0; //清空数据
- LED=0;
- delay_ms(300);
- LED=1;
- delay_ms(300); //接收到数据 后闪烁
- }
- }
- }
复制代码
所有程序51hei提供下载:
智能小车.zip
(137.92 KB, 下载次数: 75)
|