找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1129|回复: 0
打印 上一主题 下一主题
收起左侧

基于12单片机的四驱小车pwm控制速度+蓝牙控制

[复制链接]
跳转到指定楼层
楼主
ID:606493 发表于 2020-4-2 13:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于12单片机的四驱蓝牙小车pwm控速程序,蓝牙只控制了前进后退和停止


单片机源程序如下:
  1. #include<stc12c5a60s2.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit Righ_1=P0^0;
  5. sbit Righ_2=P0^1;
  6. sbit Left_1=P0^3;
  7. sbit Left_2=P0^2;
  8. uchar Buffer[5] = {0}; //从串口接收的数据
  9. uchar Sign = '0';

  10. //sbit ENA=P1^3;                                //左电机使能
  11. //sbit ENB=P1^4;                                //右电机使能

  12. void pwm_Init()
  13. {
  14.         CCON = 0;                                        //PCA初始化
  15.         CMOD = 0x00;                        //空闲时不计数,不产生中断,时钟源为Sysclk/12,PWM频率大约为4KHz
  16.         CL = 0x00;                                //PCA低8位清零
  17.         CH = 0x00;                                //PCA高8位清零

  18.         CCAPM0 = 0x42;                        //8位PWM模式,无中断
  19.         CCAP0H = 0xc0;                        //PWM0占空比(调节此处值调节PWM占空比)
  20.         CCAP0L = 0xc0;                        //PWM0占空比(调节此处值调节PWM占空比)

  21.         CCAPM1 = 0x42;                        //8位PWM模式,无中断
  22.         CCAP1H = 0x40;                        //PWM1占空比(调节此处值调节PWM占空比)
  23.         CCAP1L = 0x40;                        //PWM1占空比(调节此处值调节PWM占空比)

  24.         CR = 1;       
  25. }

  26. void pwm_set(uchar x,uchar y)                                //占空比设置函数   引脚为P1.3和P1.4
  27. {
  28.         CCAP0H=x;                       
  29.         CCAP0L=x;                               
  30.         CCAP1H=y;
  31.         CCAP1L=y;
  32. }

  33. /* 函数功能:设置串口*/
  34. void init()                            //单片机串口初始化函数
  35. {
  36.         TMOD=0x20;                     //定时器1工作模式
  37.         SCON=0x50;                     
  38.                                        //设置串口方式1且允许串口接收。
  39.         TH1=0xfd;                      //设置初值为0xfd,波特率是9600bps     
  40.         TL1=0xfd;
  41.         EA=1;                          //打开总中断
  42.         TR1=1;                         //定时器1开始计时
  43.         ES=1;                          //打开接收中断
  44. }

  45. void Go()
  46. {
  47.         Righ_1=1;
  48.         Righ_2=0;
  49.         Left_1=1;       
  50.         Left_2=0;
  51. }

  52. void Back()
  53. {
  54.         Righ_1=0;
  55.         Righ_2=1;
  56.         Left_1=0;       
  57.         Left_2=1;
  58. }

  59. void Stop()
  60. {
  61.         Righ_1=0;
  62.         Righ_2=0;
  63.         Left_1=0;       
  64.         Left_2=0;
  65. }

  66. void main()
  67. {
  68. //        Com_Init();
  69.         pwm_Init();
  70.         init();
  71.         pwm_set(0x32,0x32);
  72.         while(1)
  73.         {
  74.                 switch(Sign)
  75.                 {
  76.                         case '1': Go(); break;
  77.                         case '0': Stop(); break;
  78.                         case '2': Back(); break;
  79.                         default:break;
  80.                 }       
  81.         }
  82. }

  83. void UART_SER()interrupt 4 //串行口中断函数
  84. {
  85.         if (RI)//判断是接收中断产生
  86.         {
  87.             RI=0;  //读标志位清零
  88.             Sign=SBUF;//读入缓冲区的值
  89.             TI=1; //TI=1时,执行下面的程序
  90.             SBUF=Sign;//将内容返回到手机端,可在手机查看发送的内容
  91.         }
  92.         if (TI)    //如果是发送标志位,写标志位清零
  93.         TI=0;
  94. }
复制代码

以上源码打包: 5.PWM(小车控速度).zip (30.27 KB, 下载次数: 10)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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