標(biāo)題:
基于51單片機(jī)NRF24L01的遙控車制作
[打印本頁(yè)]
作者:
小酒壺
時(shí)間:
2016-10-30 10:53
標(biāo)題:
基于51單片機(jī)NRF24L01的遙控車制作
關(guān)鍵點(diǎn):在于nrf24l01的通訊上面,我之前用的是分區(qū)的程序做的但效果不怎么好,后來(lái)選用的是不分區(qū)的程序然后通訊十分穩(wěn)點(diǎn)
下面是視頻地址 遙控演示.mp4 210220備:
http://pan.baidu.com/s/1bo0iDIn
完整程序:
NRF24L01測(cè)試程序【不區(qū)分收發(fā) 頭文件版 C51】.rar
(108.64 KB, 下載次數(shù): 301)
2016-10-30 11:18 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
以下是部分代碼預(yù)覽:
#include "mcu.h"
#include "NRF24L01.H"
#define LED1_ON P3|=(1<<0) //P36置一,LED亮,這種置一方法類似于STM32,推薦使用
#define LED1_OFF P3&=~(1<<0) //P36置零,LED滅
#define k1 (P2&(1<<0)) //P20為按鍵 ==0為按下,!=0 為彈起
#define LED2_ON P3|=(1<<1) //P36置一,LED亮,這種置一方法類似于STM32,推薦使用
#define LED2_OFF P3&=~(1<<1) //P36置零,LED滅
#define k2 (P2&(1<<1)) //P20為按鍵 ==0為按下,!=0 為彈起
#define LED3_ON P3|=(1<<2) //P36置一,LED亮,這種置一方法類似于STM32,推薦使用
#define LED3_OFF P3&=~(1<<2) //P36置零,LED滅
#define k3 (P2&(1<<2)) //P20為按鍵 ==0為按下,!=0 為彈起
#define LED4_ON P3|=(1<<3) //P36置一,LED亮,這種置一方法類似于STM32,推薦使用
#define LED4_OFF P3&=~(1<<3) //P36置零,LED滅
#define k4 (P2&(1<<3)) //P20為按鍵 ==0為按下,!=0 為彈起
sbit ENA=P3^4;
sbit ENB=P3^5;
//===============
//延時(shí)函數(shù)
//===============
void delayms(uint ms)//延時(shí)?個(gè) ms
{
unsigned char a,b;
while(ms--)
{
for(b=64;b>0;b--) // 僅作為粗略延時(shí) 中斷繁忙時(shí)差距很大
for(a=45;a>0;a--);
}
}
//======================
//主函數(shù)
//======================
void main(void)
{
uint while_times = 0;
init_NRF24L01();
delayms(300);
// ENA=1;
// ENB=1;
while(1)
{
ENA=1;
ENB=1;
//===== 發(fā)送模式 =====
nrf_TxMod();
if(k1 == 0) //按鍵按下,
{
TxBuf[0] = 1; //把1存入TxBuf[0]中,然后發(fā)送出去;接收程序判斷RxBuf[0]的值,等于1的話點(diǎn)亮LED
//【注:RxBuf數(shù)組和TxBuf數(shù)組中的元素是對(duì)應(yīng)的】
}
else if(k2==0)
{
TxBuf[0] = 2;
}
else if(k3==0)
{
TxBuf[0]=3;
}
else if(k4==0)
{
TxBuf[0]=4;
}
else
{
TxBuf[0]=0;
}
nrf_trans(TxBuf); //將待發(fā)送的數(shù)據(jù)寫入NRF24L01
while_times = 30; //檢測(cè)是否發(fā)送成功 循環(huán)檢測(cè)?次 【可更改,讓接收循環(huán)次數(shù)大于發(fā)送循環(huán)次數(shù)效果較好】
while(while_times-- ) //發(fā)送超時(shí),或者發(fā)送成功,跳出循環(huán) 進(jìn)入接收模式
{
get_nrf_sta(); //獲取狀態(tài)標(biāo)志
if(TX_DS == 1) //發(fā)送成功,跳出循環(huán)
break;
}
//===== 接收模式 =====
nrf_RxMod();
while_times = 120; //檢測(cè)是否接收成功 循環(huán)檢測(cè)?次 【可更改,讓接收循環(huán)次數(shù)大于發(fā)送循環(huán)次數(shù)效果較好】
while(while_times--) //接收超時(shí)或者接收成功,跳出循環(huán) 進(jìn)入發(fā)送模式
{
get_nrf_sta(); //獲取狀態(tài)標(biāo)志
if(RX_DR == 1) //接收成功
{
nrf_read(RxBuf); //接收成功后,將NRF24L01接收到的數(shù)據(jù)讀到單片機(jī)的RxBuf數(shù)組中。
break; //跳出循環(huán)
}
}
if(RX_DR == 1) //是因?yàn)榻邮盏綌?shù)據(jù),而不是因?yàn)槌瑫r(shí)才跳出循環(huán)
{
if(RxBuf[0] == 1)
{
LED2_OFF;
LED4_OFF;
LED1_ON;
LED3_ON;
}
if(RxBuf[0] == 2)
{
LED1_OFF ;
LED3_OFF;
LED2_ON;
LED4_ON;
}
if(RxBuf[0] == 3)
{
LED1_ON;
LED2_OFF;
LED4_ON;
LED3_OFF;
}
if(RxBuf[0] == 4)
{
LED3_ON ;
LED2_ON;
LED1_OFF;
LED4_OFF;
}
else if(RxBuf[0] == 0)
{
LED1_OFF;
LED2_OFF;
LED3_OFF;
LED4_OFF;
}
}
}
}
復(fù)制代碼
作者:
小酒壺
時(shí)間:
2016-10-30 10:57
PCB 原理圖都有,等我完善了再分享
作者:
gkw
時(shí)間:
2018-5-31 09:27
感覺(jué)不錯(cuò),找了好久質(zhì)料了
作者:
手可摘星辰1
時(shí)間:
2018-5-31 22:51
贊一個(gè) 好資料,51黑有你更精彩!!!
作者:
老胖熊
時(shí)間:
2018-11-22 13:45
可否分享電路圖?
作者:
lgy123bt
時(shí)間:
2018-11-22 15:49
會(huì)寫程序就是好
作者:
汪劉生
時(shí)間:
2020-10-6 10:57
#define LED1_ON P3|=(1<<0) //P36置一,LED亮,這種置一方法類似于STM32,推薦使用
#define LED1_OFF P3&=~(1<<0) //P36置零,LED滅
#define k1 (P2&(1<<0)) //P20為按鍵 ==0為按下,!=0 為彈起
#define LED2_ON P3|=(1<<1) //P36置一,LED亮,這種置一方法類似于STM32,推薦使用
#define LED2_OFF P3&=~(1<<1) //P36置零,LED滅
#define k2 (P2&(1<<1)) //P20為按鍵 ==0為按下,!=0 為彈起
#define LED3_ON P3|=(1<<2) //P36置一,LED亮,這種置一方法類似于STM32,推薦使用
#define LED3_OFF P3&=~(1<<2) //P36置零,LED滅
#define k3 (P2&(1<<2)) //P20為按鍵 ==0為按下,!=0 為彈起
#define LED4_ON P3|=(1<<3) //P36置一,LED亮,這種置一方法類似于STM32,推薦使用
#define LED4_OFF P3&=~(1<<3) //P36置零,LED滅
#define k4 (P2&(1<<3)) //P20為按鍵 ==0為按下,!=0 為彈起
這種宏定義和 51 sibt 位選有什么區(qū)別嗎?
作者:
太陽(yáng)黑子1
時(shí)間:
2021-2-20 15:27
我還能求一份原理圖和pcb文件嗎?謝謝
作者:
Bwhiteboy
時(shí)間:
2021-3-20 17:00
求一份原理圖
作者:
汪劉生
時(shí)間:
2021-4-5 20:22
求一份原理圖
作者:
憶1709
時(shí)間:
2021-5-14 22:15
請(qǐng)問(wèn)要實(shí)現(xiàn)比例控制前進(jìn)和后退的油門速度,采用搖桿變阻器,用一路ADC是否可以?
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1