找回密码
 立即注册

QQ登录

只需一步,快速开始

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

寻迹小车程序 采用stc12单片机的PCA模块输出PWM,舵机控制转向

[复制链接]
ID:219529 发表于 2017-7-31 13:40 | 显示全部楼层 |阅读模式
采用stc12c5a60s2的PCA模块输出PWM,舵机控制转向

单片机源程序如下:
  1. #include<stc12c5a.h>

  2. //ENA=P1^3;
  3. //ENB=P1^4;
  4. sbit dj=P1^0;              // 陀机

  5. sbit in1=P2^0;                          //电机转向控制端
  6. sbit in2=P2^1;                          //
  7. sbit in3=P2^2;                          //
  8. sbit in4=P2^3;                          //

  9. sbit HW1=P1^1;                  //红外传感器信号接收端
  10. sbit HW2=P1^2;                  //
  11. sbit HW3=P1^5;                  //
  12. sbit HW4=P1^6;                  //
  13. sbit HW5=P1^7;                  //


  14. unsigned int zkb;          //陀机 占空比
  15.                                                  
  16. void Timer1(unsigned long int us)//给定时器赋初值
  17. {       
  18.         unsigned long int valu;
  19.         valu=us*12;                                //工作在1T,对机器周期计数12次,才是1us
  20.         valu=valu;
  21.         valu=0xffff-valu;                //          
  22.     TH1=valu>>8;          
  23.     TL1=(valu<<8)>>8;
  24.     TR1  = 1;          //T0开始工作
  25. }


  26. void main()
  27. {         
  28.      //PCA模块初始化
  29.      CMOD=0x04;        //时钟源为定时器0
  30.          CCON=0;         //PCA控制寄存器,CF、CR、CCF1(PCA模块中断标志,匹配或捕获时置位)、CCF0
  31.          CL=0;        //当CL>CCAP0L时,输出为高电平
  32.          CH=0;        //没有用到
  33.          CCAPM0=0x42;        //8位PWM,无中断
  34.          CCAPM1=0x42;   //PCA比较/捕获寄存器。8位PWM,无中断
  35.          CR=1;
  36.          CCAP0H=CCAP0L=256-45;        //设置占空比(电机)
  37.          CCAP1H=CCAP1L=256-45;

  38.      //定时器初始化
  39.          AUXR|=0xc0; //辅助寄存器,这里让定时器为1T模式
  40.          TMOD=0x12;
  41.          TH0=256-47;
  42.      TL0=256-47;
  43.          TR0=1;
  44.          P1M1=0;                         //
  45.          P1M0=0XFF;                         //
  46.          EA=1;                                           //开总中断
  47.          ET1 = 1;
  48.                                         
  49.          Timer1(36); //开启定时器,进入中断函数

  50.         while(1)
  51.         {
  52.                  if((HW1==0)&&(1==HW2)&&(1==HW3)&&(1==HW4)&&(1==HW5))
  53.                  {
  54.                       zkb=1250;
  55.                           in1=0;
  56.               in2=1;
  57.                   in3=1;
  58.                   in4=0;
  59.                           CCAP0H=CCAP0L=256-110;        //设置占空比(电机)
  60.                   CCAP1H=CCAP1L=256-150;
  61.                           while(HW3&&HW4&&HW5);                 
  62.                  }
  63.                   else if((1==HW1)&&(0==HW2)&&(1==HW3)&&(1==HW4)&&(1==HW5))
  64.                  {
  65.                        zkb=1400;
  66.                           in1=1;
  67.               in2=0;
  68.                   in3=1;
  69.                   in4=0;
  70.                           CCAP0H=CCAP0L=256-80;        //设置占空比(电机)
  71.                   CCAP1H=CCAP1L=256-110;
  72.                           while(HW1&&HW3&&HW4&&HW5);
  73.                  }
  74.                   else if((1==HW1)&&(1==HW2)&&(1==HW3)&&(0==HW4)&&(1==HW5))
  75.                  {
  76.                           in1=1;
  77.               in2=0;
  78.                   in3=1;
  79.                   in4=0;
  80.                       zkb=1600;
  81.                           CCAP0H=CCAP0L=256-80;        //设置占空比(电机)
  82.                   CCAP1H=CCAP1L=256-110;
  83.                           while(HW5&&HW3&&HW2&&HW1);
  84.                  }
  85.                  else if((1==HW1)&&(1==HW2)&&(1==HW3)&&(1==HW4)&&(0==HW5))
  86.                  {
  87.                       in1=1;
  88.               in2=0;
  89.                   in3=0;
  90.                   in4=1;
  91.                       zkb=1750;
  92.                           CCAP0H=CCAP0L=256-150;        //设置占空比(电机)
  93.                   CCAP1H=CCAP1L=256-110;
  94.                           while(HW3&&HW2&&HW1);
  95.                  }                 
  96.                  else
  97.                  {       
  98.                            zkb=1500;
  99.                           in1=1;
  100.               in2=0;
  101.                   in3=1;
  102.                   in4=0;
  103.                           CCAP0H=CCAP0L=256-100;        //设置占空比(电机)
  104.                   CCAP1H=CCAP1L=256-100;
  105.                  }
  106.         }

  107. }

  108. /*************************************
  109.   t0 中断 中断

  110. *************************************/
  111. void T1zd() interrupt 3  //产生中断后,又给定时器0赋初值,准备下一次中断
  112. {
  113.                 static unsigned char num=1;        //静态全局变量,初始化操作只会被执行一次
  114.                 switch(num)          
  115.                 {
  116.                     case 1:
  117.                         {
  118.                                 dj=1;
  119.                                 Timer1(zkb);  //pwm_valu微秒后再次产生中断
  120.                         }  break;
  121.                     case 2:
  122.                         {
  123.                                  dj=0;             //pwm1变低
  124.                                 Timer1(2500-zkb);//       
  125.                         }  break;
  126.                     case 3:
  127.                         {
  128.                                 Timer1(2500);//
  129.                         }  break;
  130.                      case 4:
  131.                         {
  132.                                 Timer1(2500);//       
  133.                         }  break;
  134.                     case 5:
  135.                         {
  136.                                 Timer1(2500);//       
  137.                         }  break;
  138.                     case 6:
  139.                         {
  140. ……………………

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

所有资料51hei提供下载:
STC12.rar (25.23 KB, 下载次数: 57)

评分

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

查看全部评分

回复

使用道具 举报

ID:228376 发表于 2017-8-19 15:16 | 显示全部楼层
有接线图吗?谢谢分享,
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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