電賽用的程序設計,包含了轉彎、無線控制、循跡和人體溫度檢測
單片機源程序如下:
- #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.png (3.92 KB, 下載次數: 98)
下載附件
2020-11-24 16:46 上傳
所有程序51hei提供下載:
智能小車.zip
(137.92 KB, 下載次數: 75)
2020-11-24 14:13 上傳
點擊文件名下載附件
小車 下載積分: 黑幣 -5
|