找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13121|回复: 16
收起左侧

NRF24L01玩具遥控器制作,附程序与原理图

  [复制链接]
ID:228376 发表于 2017-8-19 21:39 | 显示全部楼层 |阅读模式
接收机在下载程序时 请务必选择内部晶振频率为6MHz.

131030gn2tgrbb52828vt7.jpg 131005y2nn2mryaeomgafz.jpg

所有资料51hei提供下载:

  1. #include"A_LCD.H"
  2. #include"A_DISPLAY.H"
  3. #include"A_NRF2401.H"
  4. #include"A_ADC.H"
  5. #include"A_EEPROM.H"
  6. #include"a_keyscan.h"
  7. #include"a_desktop.h"
  8. #include"stc12c5.h"
  9. #include"a_delay.h"

  10. sbit SPEAKER=P4^4;
  11. sbit PPM=P2^6;        //未使用

  12. sbit CH8=P2^7;

  13. extern unsigned int poweroff;
  14. extern char code boot[];
  15. extern unsigned code hnist[];
  16. extern char x,y,x4;
  17. extern unsigned char BAT;
  18. extern char databuf;
  19. extern char canshu[10][5][5];
  20. unsigned char value_ch[6];

  21. int value_adc[6];
  22. int value_adc1[6];
  23. unsigned char bdata sta1;   
  24. sbit        RX_DR1        =sta1^6;
  25. sbit        TX_DS1        =sta1^5;
  26. sbit        MAX_RT1        =sta1^4;


  27.                                           //        0         1          2           3    4    5   6     7    8    9    10   11  12    13   14   15  16         17
  28. int time[18]={8000,610, 900, 610, 900, 610,900,  610, 900,  610, 900, 610, 900,610,900, 610,900,610};
  29.                            //   头      一通道    二通道    三通道    四通道    五通道    六通道    七通道          八通道           

  30. unsigned char ppm;

  31. char TxBuf[32]={
  32.                                 0xaa,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
  33.                                 0x04,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,
  34.                                 0x0a,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
  35.                                 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04
  36.                                 };
  37. int TxBuf1[32]={0};
  38. unsigned char lose=0 ,sendtime=0,signal;
  39. unsigned int timeset=0;
  40. unsigned char write_flag=0;

  41. unsigned char s_time;//蜂鸣器鸣叫相关计数变量
  42. unsigned char s_mode;//蜂鸣器鸣叫方式

  43. unsigned char code chacha[]=
  44. {
  45. /*--  调入了一幅图像:这是您新建的图像  --*/
  46. /*--  宽度x高度=8x8  --*/
  47. 0x00,0x82,0x44,0x28,0x10,0x28,0x44,0x82
  48. };

  49. void ADC2TXBUF();

  50. void main()
  51. {
  52. unsigned char i;

  53. P4SW=0xff;
  54. delay_ms(10);
  55. read_all();
  56. delay_ms(1000);
  57. LcmInit();

  58. adcinit();
  59. init_NRF24L01() ;        //这里已经设置好了为接收!        
  60. SPI_RW(0xe1);        //先将发送缓存器里的数据清除

  61.          delay_ms(1000);
  62.     TMOD=0X11;
  63.         TH0=0;
  64.         TL0=0;
  65.         TH1=0;
  66.         TL1=0;
  67.     EA=1;
  68.         //ET0=1;
  69.         //ET1=1;
  70.         TR0=1;
  71.         TR1=1;

  72. for(i=120;i>0;i--)
  73. {
  74.   PUTbmp(0,i,boot,0);
  75. }
  76. delay_ms(50000);
  77. delay_ms(50000);                        



  78. while(1)
  79. {
  80.          LcmClear();
  81.          timeset=0;
  82.         while(y>0)
  83.          {
  84.                 write_flag=1;
  85.                  menu_dis1();
  86.                  menu_dis11();
  87.                  menu_dis12();
  88.                  menu_dis13();
  89.                 menu_dis14();
  90.                  menu_dis15();
  91.                 menu_dis151();
  92.                 menu_dis152();
  93.                  menu_dis153();
  94.                  keyscan();
  95.                 if(timeset>500)
  96.                 y=0;
  97.          }


  98.     PUTbmp(0,0,hnist,0);
  99.          write_all();
  100.         if(canshu[databuf][2][2]==0)
  101.         {
  102.                 ET0=1;
  103.                 ET1=0;
  104.         }
  105.         else
  106.         {
  107.                 ET0=0;
  108.                 ET1=1;
  109.         }
  110.          while(y==0)
  111.          {
  112.         if(write_flag==1)
  113.         {
  114.         
  115.                 write_flag=0;
  116.         }
  117.                 if(canshu[databuf][2][2]==0)
  118.                 number8x8_put(signal,0,19,5,3);
  119.             else
  120.                 PUTchar8x8(0,12,1,chacha);
  121.          
  122.         keyscan();
  123.         
  124.          desk_display();
  125.          }
  126. }
  127. }



  128. void adc_senddata() interrupt 1        
  129. {
  130.                   
  131.                  
  132.                  TH0=(65536-50000)/256;
  133.              TL0=(65536-50000)%256;

  134.                  if(canshu[databuf][2][2]==0)
  135.                  {
  136.                  sta1=SPI_Read(0x07);
  137.                    SPI_Write_Reg(0x20 +0x07,0xFF);          //这步很重要
  138.                  if(MAX_RT1==1)
  139.                  {
  140.                  if(lose<20)
  141.                  lose++;

  142.                  }
  143.                  if(sendtime<20)
  144.                  sendtime++;

  145.                  
  146.                  if(sendtime>19)
  147.                  {
  148.                  signal=(sendtime-lose)/2;
  149.                  sendtime=0;
  150.                  lose=0;
  151.                  }
  152.                  if(signal<7) s_mode=2;
  153.                   
  154.                  ADC2TXBUF();//数据采集与整理并汇入到TxBuf
  155.                  nRF24L01_TxPacket(TxBuf);
  156.                  
  157.                  timeset++;
  158.                

  159.                  s_time++;
  160.         if(s_mode==1)
  161.           {
  162.                 if(s_time>5)
  163.                 {
  164.                         SPEAKER=0;
  165.                 }
  166.                 if(s_time>10)
  167.                 {
  168.                         s_time=0;
  169.                         SPEAKER=1;        
  170.                 }        
  171.           }
  172.   

  173.         if(s_mode==2)
  174.           {
  175.         if(s_time>35&canshu[databuf][2][3]==0&signal<7&canshu[databuf][2][2]==0)
  176.         {
  177.                 SPEAKER=0;
  178.         }
  179.         if(s_time>40)
  180.                 {
  181.                         s_time=0;
  182.                         SPEAKER=1;        
  183.                 }        
  184.           }

  185.         if(s_mode==0)
  186.         {
  187.                 s_time=0;
  188.                 SPEAKER=1;
  189.         }
  190.                  }
  191.         
  192. }

  193. void SPEAKER_WARNING() interrupt 3
  194. {
  195.          
  196.         unsigned char h;
  197.         if(canshu[databuf][2][2]==1)
  198.         {
  199.         TH1=(65536-time[ppm])/256;
  200.         TL1=(65536-time[ppm])%256;
  201.         if(ppm%2==1)
  202.                 PPM=0;
  203.                 else
  204.                 PPM=1;
  205.      ppm++;
  206.         if(ppm==14)
  207.                 {
  208.                 ppm=0;
  209.             time[0]=36400-(time[1]+time[2]+time[3]+time[4]+time[5]+time[6]+time[7]+time[8]+time[9]+time[10]+time[11]+time[12]+time[13]);//36400
  210.                 }
  211.         if(ppm==0)
  212.          ADC2TXBUF();//数据采集与整理并汇入到TxBuf
  213.         
  214.          }
  215. }

  216. void ADC2TXBUF()
  217. {
  218.         unsigned char i,j,k,h;
  219.         int hk1,hk2;
  220.         for(i=0;i<6;i++)
  221.         {
  222.                 value_adc[i]=adc(i)+canshu[databuf][4][i];
  223.                 value_ch[i]=value_adc[i];
  224.                 value_adc[i]=value_adc[i]-128;
  225.         }
  226.         /*********************************************/
  227.          BAT=adc(7);
  228.          if(BAT<189)
  229.                  BAT=0;                                                                         //电池电压采集
  230.         else
  231.                 BAT=(BAT-189)/10;
  232.         /********************************************/
  233.         if(canshu[databuf][2][0]==1)//副翼襟翼混控设置
  234.         {
  235.         hk1=value_adc[4]-value_adc[0];
  236.         hk2=value_adc[4]+value_adc[0];
  237.         value_adc[0]=hk1;
  238.         value_adc[4]=hk2;
  239.         }
  240.         
  241.         if(canshu[databuf][2][0]==2)//副翼升降混控设置
  242.         {
  243.         hk1=value_adc[1]-value_adc[0];
  244.         hk2=value_adc[1]+value_adc[0];
  245.         value_adc[0]=hk1;
  246.         value_adc[1]=hk2;
  247.         }

  248.         if(canshu[databuf][2][1]==1&canshu[databuf][2][0]!=2)//升降尾舵混控设置(V尾混控)
  249.         {
  250.         hk1=value_adc[3]-value_adc[1];
  251.         hk2=value_adc[3]+value_adc[1];
  252.         value_adc[1]=hk1;
  253.         value_adc[3]=hk2;
  254.         }
  255.          
  256.         for(j=0;j<6;j++)  //通道反向以及防止溢出
  257.         {
  258.                 if(canshu[databuf][0][j]==1)
  259.                 value_adc[j]=0-value_adc[j];
  260.                 if(value_adc[j]>127)  value_adc[j]=127;
  261.                 if(value_adc[j]<-127) value_adc[j]=-127;
  262.                 TxBuf[j+1]=value_adc[j];
  263.         }

  264.         if(CH8==1) TxBuf[8]=127;
  265.         else           TxBuf[8]=-127;

  266.         for(k=0;k<4;k++)
  267.         {
  268.                 TxBuf[k+9]=canshu[databuf][1][k];
  269.         }
  270.         for(h=1;h<7;h++)
  271.         {
  272.         time[2*h]=2000+TxBuf[h]*8;
  273.         }
  274.         
  275. }
  276. ……………………

  277. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:

发射和接收机原理图.rar

23.33 KB, 下载次数: 156, 下载积分: 黑币 -5

发射机Keil C工程.rar

135.36 KB, 下载次数: 128, 下载积分: 黑币 -5

发射机固件.rar

154.84 KB, 下载次数: 119, 下载积分: 黑币 -5

固件更新 .rar

176.16 KB, 下载次数: 123, 下载积分: 黑币 -5

接收机.rar

51.14 KB, 下载次数: 162, 下载积分: 黑币 -5

新建文件夹.rar

1.24 KB, 下载次数: 114, 下载积分: 黑币 -5

评分

参与人数 2黑币 +105 收起 理由
ltpzm + 5 赞一个!
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:190051 发表于 2017-8-20 15:16 | 显示全部楼层
请问楼主这个有对码功能?
回复

使用道具 举报

ID:312098 发表于 2018-4-26 23:58 来自手机 | 显示全部楼层
楼主太强大了
回复

使用道具 举报

ID:546443 发表于 2019-5-24 16:32 | 显示全部楼层
这是啥软件编的程序
回复

使用道具 举报

ID:111124 发表于 2019-10-29 11:17 | 显示全部楼层
不错。值得学习。
回复

使用道具 举报

ID:632444 发表于 2019-11-3 08:28 来自手机 | 显示全部楼层
最近一直在想能不能做个按键无线电压回传的模块,具有收发功能,这个好,有方向了
回复

使用道具 举报

ID:477152 发表于 2019-11-4 21:37 | 显示全部楼层
  不错 哦  模型中国的
回复

使用道具 举报

ID:813064 发表于 2020-12-10 17:47 | 显示全部楼层
2.4G通信怎么对码
回复

使用道具 举报

ID:609550 发表于 2021-1-6 07:14 | 显示全部楼层
有朋友制作成功的么,分享一下好吗?
回复

使用道具 举报

ID:352389 发表于 2021-1-6 19:16 | 显示全部楼层
成功是成功了,功能比不上萝丽三代。萝丽三代只是接收机换成15w408
回复

使用道具 举报

ID:234836 发表于 2021-1-18 18:34 | 显示全部楼层
楼主太强大了
回复

使用道具 举报

ID:274204 发表于 2021-1-28 13:46 | 显示全部楼层
谢谢分享,正在找这方面的资料。不过积分不够啊。。。
回复

使用道具 举报

ID:718620 发表于 2021-3-23 07:38 来自手机 | 显示全部楼层
147222832 发表于 2021-1-6 19:16
成功是成功了,功能比不上萝丽三代。萝丽三代只是接收机换成15w408

这个有明显延时吗?比三代差哪儿
回复

使用道具 举报

ID:243748 发表于 2021-4-19 19:01 来自手机 | 显示全部楼层
这个遥控器有什么功能呀,屏幕用哪一种屏
回复

使用道具 举报

ID:942045 发表于 2021-6-22 02:46 来自手机 | 显示全部楼层
147222832 发表于 2021-1-6 19:16
成功是成功了,功能比不上萝丽三代。萝丽三代只是接收机换成15w408

差在哪了
回复

使用道具 举报

ID:517794 发表于 2021-7-20 17:49 | 显示全部楼层
啦啦啦 make一下
回复

使用道具 举报

ID:999085 发表于 2022-1-9 08:55 | 显示全部楼层
有意思,怎么不给芯片型号啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表