找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6193|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STC8A8K64S4A12單片機(jī)2.4G遙控小車,模擬量搖桿 舵機(jī)超聲波 OELD顯示 附帶程序哦

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:404207 發(fā)表于 2018-12-11 21:55 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
沒發(fā)過什么帖子 ,打字就不多了,用圖片來解釋:
遙控發(fā)射模塊

小車模型

此小車用STC8A8K64S4A12作為控制芯片,也是51內(nèi)核,對玩小車的人來說  移植也是比較簡單的。這里我沒有自己做一個遙控器,用2個8A8K的開發(fā)板做收發(fā)遙控 玩玩就行了。發(fā)射模塊上我用模擬量遙控制,用的是板子上2.5V的基準(zhǔn)電壓。一開始用了超聲波測距,還用了舵機(jī)云臺再180度角內(nèi)轉(zhuǎn)動并連續(xù)測距里,但是后面添加2.4G后,發(fā)現(xiàn)大部分時間被超聲波測距占用了,導(dǎo)致2.4G反應(yīng)遲鈍,于是屏蔽了超聲波,反應(yīng)速度立馬提高。在顯示方面,本來用了SPI的協(xié)議,可以黑白反顯,但是2.4G也是SPI,就改成了IIC,所以沒有黑白反顯的功能了。

制作出來的實物圖如下:


直接附上程序吧
#include "oled.h"
#include  "pwm.h"
#include "delay.h"
#include "dingshiqi.h"
#include "csb.h"
#include "NRF24L01.h"
extern uint8  RxPayload[32];   //無線接收緩存
extern uint8 flag,sudu,CSB;

/***************************************************************************
* 描  述 : 主函數(shù)
* 入  參 : 無
* 返回值 : 無
**************************************************************************/
int main()            //主函數(shù)
{     
static uint16 n1,n2;
//static uint16  c;   
       uint8 i;
       bit kai=1;
    n1=50;
    n2=50;
    P0M1=0x00;    //推挽輸出
    P0M0=0xC0;
//   Timer1Init();
//   Timer0Init();                //TO定時器是超聲波
    PWM0_Configuration();          //控制舵機(jī)的
    PWM1_Configuration();       //控制舵機(jī)的
    EA=1;

  Init_NRF24L01_MA();         //初始化
  Set_RxMode_MA();       //配置nRF24L01為接收模式

  delay_ms(150);
    OLED_Init() ;
  OLED_Fill(0x00);                    //清屏
  
   for(i=0;i<8;i++)
    {
     LCD_P16x16Ch(i*16,0,i);     
   };
   
    for(i=8;i<11;i++)
    {
     LCD_P16x16Ch(i*16-16*8,4,i);     
   };
     for(i=15;i<18;i++)
    {
     LCD_P16x16Ch(i*16-16*15,2,i);     
   };
   LCD_P8x16Str(48, 2,":");
   LCD_P8x16Str(48, 4,":");
  LCD_P8x16Str(80, 4,"'C");
   LCD_P8x16Str(0, 6,"PWMY:");
   CSZX(90);     //超聲波的控制舵機(jī)角度
   XCZX(90);    //轉(zhuǎn)向角的控制舵機(jī)角度
   delay_ms(1500);   //讓舵機(jī)有時間轉(zhuǎn)到中間
  while(1)
  {  
  if(NRF24L01_RxPacket_MA(RxPayload)==RX_OK)  
   if(RxPayload[0] == 0x01)                                  //檢驗校驗碼
   {   
   while( !(NRF24L01_RxPacket_MA(RxPayload+1)==RX_OK));    //等待接收數(shù)據(jù)
    while( !(NRF24L01_RxPacket_MA(RxPayload+2)==RX_OK));    //等待接收數(shù)據(jù)
    while( !(NRF24L01_RxPacket_MA(RxPayload+3)==RX_OK));   //等待接收數(shù)據(jù)
   }

   
    if(RxPayload[0] == 0x01 && RxPayload[3] == 0x02)   //符合校驗碼的值 ,則中間的數(shù)據(jù)是正確的,不然亂碼,錯位的數(shù)據(jù)就不對
    {
     n1=RxPayload[1];
     n2=RxPayload[2];
  
     RxPayload[0] = 0;
     RxPayload[1] = 0;
     RxPayload[2] = 0;
     RxPayload[3] = 0;
     
    }
   
    XCZX(75+15*n1/50);            
    if(n2<48)moter(0,(49-n2)*80/45);
         else if(n2<52)   moter(0,0);
       else  moter(1,(n2-52)*80/45);
//      CSBZX_();                //控制超聲波舵機(jī)轉(zhuǎn)向的
//        if(CSB==1)          //超聲波測距
//   {                                
//     StartModule();               //啟動HC-SR04模塊 (控制控制口發(fā)一個10uS以上的高電平)
//     while(!ECHO);              //當(dāng)HC-SR04模塊的接收端ECHO為低電平時,程序執(zhí)行空語句,即等待ECHO端口變?yōu)楦唠娖讲艌?zhí)行下面的語句
//     TR0=1;                     //當(dāng)HC-SR04模塊的接收端ECHO為高電平時,開啟定時器0計數(shù)
//     while(ECHO);               //若HC-SR04模塊的接收端ECHO仍為高電平,程序執(zhí)行空語句,即等待ECHO端口變?yōu)榈碗娖讲艌?zhí)行下面的語句
//     TR0=0;                    //當(dāng)HC-SR04模塊的接收端ECHO變?yōu)榈碗娖綍r,關(guān)閉定時器0
//     c=Conut();                   //計算距離并在oled屏上顯示
//     CSB=0;
//   
//   if(c<=400) {moter(0,10);kai=0;}
//     else kai=1;
//   }
   
}

}



全部資料51hei下載地址:
nRF24L01無線發(fā)射(硬件SPI)OLED.zip (5.39 MB, 下載次數(shù): 142)


評分

參與人數(shù) 2黑幣 +65 收起 理由
shineyunze978 + 15 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:404695 發(fā)表于 2018-12-12 11:28 | 只看該作者
真的是超級超級棒啊,簡直可以拿去參加飛思卡爾
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表