找回密码
 立即注册

QQ登录

只需一步,快速开始

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

msp430f5529单片机五路红外循迹小车程序

[复制链接]
跳转到指定楼层
楼主
ID:1087811 发表于 2023-7-20 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "driverlib.h"
  2. #include "msp430f5529.h"

  3. #define  p1_2   TA0CCR1   //占空比计数,用于控制占空比

  4. #define  p1_5   TA0CCR4

  5. void initpwm()
  6.     {
  7.          P1DIR |=BIT2+BIT5; //配置P1.2,5口为输出口

  8.          P1SEL |=BIT2+BIT5; //开启1.2,5口的io复用输出pwm

  9.          unsigned const PWM=100;//设置PWM周期参数100
  10.          TA0CCR0 =PWM;   //设置PWM周期
  11.          TA0CTL=TASSEL__SMCLK+MC_1;

  12.          TA0CCTL1 = OUTMOD_7;

  13.          TA0CCTL4 = OUTMOD_7;
  14.     }

  15. void turn_left()
  16. {
  17.     P1DIR |=BIT4;
  18.     P1DIR |=BIT3;
  19.     P2DIR |=BIT6;
  20.     P2DIR |=BIT7;
  21.     P1OUT |=BIT3;
  22.            P1OUT&=~BIT4;
  23.            P2OUT &=~BIT6;
  24.            P2OUT|=BIT7;
  25.           p1_2=75;   //1.4,1.3,1.2左轮
  26.           p1_5=75;
  27. }

  28. void turn_right()
  29. {
  30.     P1DIR |=BIT4;
  31.     P1DIR |=BIT3;
  32.     P2DIR |=BIT6;
  33.         P2DIR |=BIT7;
  34.            P1OUT &=~BIT3;
  35.            P1OUT|=BIT4;
  36.            P2OUT |=BIT6;
  37.            P2OUT&=~BIT7;
  38.           p1_2=75;   //占空比为75/100,1.4,1.3,1.2左轮
  39.           p1_5=75;//原本是0
  40. }

  41. void go_straight()
  42. {
  43.     P1DIR |=BIT4;
  44.     P1DIR |=BIT3;
  45.     P2DIR |=BIT6;
  46.         P2DIR |=BIT7;
  47.            P1OUT &=~BIT3;
  48.            P1OUT|=BIT4;
  49.            P2OUT &=~BIT6;
  50.            P2OUT|=BIT7;
  51.           p1_2=60;   //占空比为60/100
  52.           p1_5=60;
  53. }

  54. void stop()
  55. {
  56.     P1DIR |=BIT4;
  57.         P1DIR |=BIT3;
  58.         P2DIR |=BIT6;
  59.         P2DIR |=BIT7;
  60.         P1OUT &=~BIT3;
  61.         P1OUT&=~BIT4;
  62.         P2OUT &=~BIT6;
  63.         P2OUT&=~BIT7;
  64.         p1_2=0;   //占空比为0/100
  65.         p1_5=0;
  66. }

  67. void xunji()
  68. {
  69.     if(((P2IN & BIT0) && (P2IN & BIT2) && (P2IN & BIT3) && (P2IN & BIT4) && (P2IN & BIT5)) == 1)//全1 全亮
  70.                 {go_straight();}
  71.     else if( (((P2IN & BIT0) && (P2IN & BIT2) && (P2IN & BIT4) && (P2IN & BIT5))== 1) && ((P2IN & BIT3)==0))//第3个灭(中间那个)
  72.     {go_straight();}

  73.     else if(((P2IN & BIT0) || (P2IN & BIT2) || (P2IN & BIT3) || (P2IN & BIT4) || (P2IN & BIT5))==0)//全0 全不亮
  74.         {stop();}

  75.         else if( (((P2IN & BIT4) && (P2IN & BIT5) && (P2IN & BIT3))== 1) && ((P2IN & BIT0)==0))//第一个灭
  76.                {turn_left();}

  77.         else if( (((P2IN & BIT0) && (P2IN & BIT3) && (P2IN & BIT4) && (P2IN & BIT5))== 1) && ((P2IN & BIT2)==0))//第二个灭/
  78.         {turn_left();}

  79.         else if( (((P2IN & BIT0) && (P2IN & BIT2) && (P2IN & BIT3))== 1) && ((P2IN & BIT4)==0))//4灭

  80.                 {turn_right();}

  81.         else if( (((P2IN & BIT0) && (P2IN & BIT2) && (P2IN & BIT3) && (P2IN & BIT4))== 1) && ((P2IN & BIT5)==0))//5灭

  82.         {turn_right();}

  83.         else stop();

  84. }
  85. int main(void)
  86. {

  87.     WDTCTL = WDTPW +WDTHOLD;// stop watchdog timer
  88.     initpwm();
  89.         P2DIR &=~(BIT0+BIT2+BIT3+BIT4+BIT5);
  90.             //红外输入
  91.         P2REN |=(BIT0+BIT2+BIT3+BIT4+BIT5);
  92.            //设置上拉电阻
  93.         P2OUT &=~(BIT0+BIT2+BIT3+BIT4+BIT5);
  94.            //设置初始值为高电平

  95. while(1)
  96. {
  97.    xunji();
  98. }

  99. }

复制代码

原理图:无
仿真:无
代码(仅供参考): Users.7z (239.6 KB, 下载次数: 5)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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