欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于51單片機NRF24L01的遙控車制作
[打印本頁]
作者:
小酒壺
時間:
2016-10-30 10:53
標題:
基于51單片機NRF24L01的遙控車制作
關鍵點:在于nrf24l01的通訊上面,我之前用的是分區的程序做的但效果不怎么好,后來選用的是不分區的程序然后通訊十分穩點
下面是視頻地址 遙控演示.mp4 210220備:
http://pan.baidu.com/s/1bo0iDIn
完整程序:
NRF24L01測試程序【不區分收發 頭文件版 C51】.rar
(108.64 KB, 下載次數: 301)
2016-10-30 11:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
以下是部分代碼預覽:
#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;
//===============
//延時函數
//===============
void delayms(uint ms)//延時?個 ms
{
unsigned char a,b;
while(ms--)
{
for(b=64;b>0;b--) // 僅作為粗略延時 中斷繁忙時差距很大
for(a=45;a>0;a--);
}
}
//======================
//主函數
//======================
void main(void)
{
uint while_times = 0;
init_NRF24L01();
delayms(300);
// ENA=1;
// ENB=1;
while(1)
{
ENA=1;
ENB=1;
//===== 發送模式 =====
nrf_TxMod();
if(k1 == 0) //按鍵按下,
{
TxBuf[0] = 1; //把1存入TxBuf[0]中,然后發送出去;接收程序判斷RxBuf[0]的值,等于1的話點亮LED
//【注:RxBuf數組和TxBuf數組中的元素是對應的】
}
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); //將待發送的數據寫入NRF24L01
while_times = 30; //檢測是否發送成功 循環檢測?次 【可更改,讓接收循環次數大于發送循環次數效果較好】
while(while_times-- ) //發送超時,或者發送成功,跳出循環 進入接收模式
{
get_nrf_sta(); //獲取狀態標志
if(TX_DS == 1) //發送成功,跳出循環
break;
}
//===== 接收模式 =====
nrf_RxMod();
while_times = 120; //檢測是否接收成功 循環檢測?次 【可更改,讓接收循環次數大于發送循環次數效果較好】
while(while_times--) //接收超時或者接收成功,跳出循環 進入發送模式
{
get_nrf_sta(); //獲取狀態標志
if(RX_DR == 1) //接收成功
{
nrf_read(RxBuf); //接收成功后,將NRF24L01接收到的數據讀到單片機的RxBuf數組中。
break; //跳出循環
}
}
if(RX_DR == 1) //是因為接收到數據,而不是因為超時才跳出循環
{
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;
}
}
}
}
復制代碼
作者:
小酒壺
時間:
2016-10-30 10:57
PCB 原理圖都有,等我完善了再分享
作者:
gkw
時間:
2018-5-31 09:27
感覺不錯,找了好久質料了
作者:
手可摘星辰1
時間:
2018-5-31 22:51
贊一個 好資料,51黑有你更精彩!!!
作者:
老胖熊
時間:
2018-11-22 13:45
可否分享電路圖?
作者:
lgy123bt
時間:
2018-11-22 15:49
會寫程序就是好
作者:
汪劉生
時間:
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 位選有什么區別嗎?
作者:
太陽黑子1
時間:
2021-2-20 15:27
我還能求一份原理圖和pcb文件嗎?謝謝
作者:
Bwhiteboy
時間:
2021-3-20 17:00
求一份原理圖
作者:
汪劉生
時間:
2021-4-5 20:22
求一份原理圖
作者:
憶1709
時間:
2021-5-14 22:15
請問要實現比例控制前進和后退的油門速度,采用搖桿變阻器,用一路ADC是否可以?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1