找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3142|回复: 1
收起左侧

2.4G无线遥控车制作 STC15单片机源程序

[复制链接]
ID:396717 发表于 2019-12-23 08:48 | 显示全部楼层 |阅读模式
遥控采用STM32F1系列单片机,资料中有关于手柄的原理图,接收端的车用的STC15L408的单片机。因为是小组合作的项目所以两个单片机是不同的。整体的思路还是很简单的。后面附上实物图。(遥控器的PCB图如果要直接打板的话需要有点小修改,原理图我修改了但是板子没有更新过去)

制作出来的实物图如下:
IMG_0725.JPG IMG_0724.JPG C153AE9787DC5414BB531BAB2FE5EDFB.png []}EP}KOJ@(F`FJ$LX4@%[J.png

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
51hei.png 51hei.png

单片机源程序如下:
  1. #include "stc15f2k60s2.h"
  2. #include "nrf.h"
  3. #include "oled.h"
  4. #include "usart.h"
  5. #include "motor.h"

  6. #define L_UPPER_LIMIT                                                240                                        //调节占空比
  7. #define R_UPPER_LIMIT                                                215
  8. unsigned char Count_200ms = 0;
  9. unsigned char Count_10ms = 0;

  10. /************************************ 函数声明 *******************************************/
  11. void Timer0Init(void);
  12. void Timer2Init(void);
  13. void Task_5Hz(void);
  14. void Task_100Hz(void);

  15. void main()
  16. {
  17.         Motor_Init();
  18.         Uart_Init();                                //串口初始化
  19.         NRF24L01_Init();                //NRF初始化
  20.         NRF24L01_Check();
  21.         OLED_Init();
  22.         OLED_Clear();
  23.         Timer0Init();        
  24.         Timer2Init();
  25.         
  26.         while(1)
  27.         {
  28.                 if(Count_200ms >= 100)
  29.                 {
  30.                         Count_200ms = 0;
  31.                         Task_5Hz();
  32.                 }
  33.                
  34.                 if(Count_10ms >= 10){
  35.                         Count_10ms = 0;
  36.                         Task_100Hz();
  37.                 }        
  38.         }
  39. }

  40. /**********************************************************************************
  41. * 函   数:Task_5Hz()
  42. * 功   能:200ms执行一下里面的任务
  43. * 备   注:
  44. **********************************************************************************/
  45. void Task_5Hz()
  46. {
  47.         Car_StaSet();
  48.         PWM_Set();
  49.         OLED_ShowNum(0, 4, PWMAA, 3, 16);
  50.         OLED_ShowNum(64, 4, PWMBB, 3, 16);
  51. }

  52. /**********************************************************************************
  53. * 函   数:Task_100Hz()
  54. * 功   能:10ms执行一下里面的任务
  55. * 备   注:
  56. **********************************************************************************/
  57. void Task_100Hz()
  58. {
  59.         NRF_24L01();
  60.         MoreThanMAX_Tim();
  61. }

  62. /**********************************************************************************
  63. * 函   数:Timer0Init()
  64. * 功   能:定时器0配置
  65. * 备   注:
  66. **********************************************************************************/
  67. void Timer0Init(void)                //100微秒@11.0592MHz
  68. {
  69.         EA = 1;
  70.         AUXR |= 0x80;                //定时器时钟1T模式
  71.         TMOD &= 0xF0;                //设置定时器模式
  72.         TL0 = 0xAE;                //设置定时初值
  73.         TH0 = 0xFB;                //设置定时初值
  74.         TF0 = 0;                //清除TF0标志
  75.         TR0 = 1;                //定时器0开始计时
  76.         ET0 = 1;
  77. }


  78. /**********************************************************************************
  79. * 函   数:Timer2Init()
  80. * 功   能:定时器2配置
  81. * 备   注:
  82. **********************************************************************************/
  83. void Timer2Init(void)                //50微秒@11.0592MHz
  84. {
  85.         AUXR |= 0x04;                //定时器时钟1T模式
  86.         T2L = 0xD7;                //设置定时初值
  87.         T2H = 0xFD;                //设置定时初值
  88.         AUXR |= 0x10;                //定时器2开始计时
  89.         IE2 |= 0x04;
  90. }


  91. /**********************************************************************************
  92. * 函   数:tim0()
  93. * 功   能:定时器0中断
  94. * 备   注:
  95. **********************************************************************************/
  96. void tim0() interrupt 1
  97. {
  98.         static unsigned int i = 0;
  99.         
  100.         Count_200ms++;
  101.         Count_10ms++;
  102.         i++;
  103.         if(i >= 200){                                        //2S
  104.                 i = 0;
  105.                 MAX_Tim++;
  106.         }
  107. }

  108. void tim2() interrupt 12
  109. {
  110.         static unsigned int PWMA = 0;
  111.         static unsigned int PWMB = 0;
  112.         
  113.         PWMA++;
  114.         PWMB++;
  115.         
  116.         if(PWMA >= L_UPPER_LIMIT)
  117.                 PWMA = 0;
  118.         if(PWMB >= R_UPPER_LIMIT)
  119.                 PWMB = 0;
  120.         
  121.         if(PWMA <= PWMAA)
  122.                 ENA = 1;
  123.         else
  124.                 ENA = 0;
  125.         
  126.         if(PWMB <= PWMBB)
  127.                 ENB = 1;
  128.         else
  129.                 ENB = 0;
  130. }
复制代码

所有资料51hei提供下载:
2.4G无线遥控车.7z (1.56 MB, 下载次数: 87)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:411864 发表于 2020-2-17 15:34 | 显示全部楼层
我想要你摇杆和旋钮的链接
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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