找回密码
 注册
查看: 357|回复: 2
打印 上一主题 下一主题

MSP430F5529lp避障小车

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-9-28 13:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
这是我用MSP430F5529lp写的避障小车程序,用了两个红外避障,跑起来感觉还行,里面用到了库函数,5529的库函数也分享出来了。% ]1 S! o$ A: V" Z
单片机源程序如下:" y8 h' D( R) A1 v& y: p, R: k# R. \
#include <msp430.h>: ?4 k9 U8 v' g2 j  k# w. N- _3 ]: J1 c
#include<msp430f5529.h>
* M$ L8 ^- d+ b& k8 Z: F& \# z#include <USER/driverlib.h>+ {8 R' a* y* `+ e: o
#include "USER/gpio.h"
. M4 V5 l! a& P" o* ~; j0 C2 m3 j#define CPU_F ((double)8000000)   //外部高频晶振8MHZ
! C( @  [! q9 U# w' s9 O1 W  u#define delay_us(x) __delay_cycles((long)x)6 p5 h0 J0 t, X0 K
#define delay_ms(x) __delay_cycles((long)(x*1000.0))+ t$ s2 k. U; d, l. W$ Q) D
0 ]: Y) m" M1 F: C: `  T0 ?# p
/**
3 Y2 A0 @: a+ L) }' a* main.c$ [7 I& F# p& X! p9 A1 I0 T
*/1 v2 R* m4 m3 V# X4 x; X7 J( _& h
void stop(void)//停车; u' V: w, v; ~* S" Y; I- X4 _
{* p0 x# \1 V+ W
    TA0CCR1=800;4 e3 s5 H! O* D; k' e1 _5 F2 Q3 a
    TA0CCR2=800;) r8 S7 P8 b$ }% j9 U: F+ G, c
    TA0CCR3=800;
3 n! E( P$ u& g  `7 c    TA0CCR4=800;
+ M8 \2 B2 Y! G/ @    }# O8 z9 s) j0 ^2 Z6 L2 Y
void go(void)//前进
2 c7 V9 q2 w! s) T1 K* O' h{2 D$ a- {. Q% J$ d, ~0 z
    TA0CCR1=800;) w: ~* x& E2 f# o  \
    TA0CCR2=600;& w$ P7 W: x3 S; k! t
    TA0CCR3=800;! d3 B- \: q. D% [4 G. P! O
    TA0CCR4=600;) a: z4 n# C9 ^3 O' P, k
    }- |6 K$ M5 w- P3 Z9 Y
void tui(void)//后退- b5 y/ A4 c  h5 j
{
$ T# f) _" W3 w, T; z+ R    TA0CCR1=600;
3 ^& k/ N2 a3 L9 }/ z- J6 v( T    TA0CCR2=800;
) ?& l4 F  W2 f) @) C    TA0CCR3=600;: I0 ^- N( D/ f% w, y1 W
    TA0CCR4=800;& S# m" L- n4 @3 v: v- e% j
    }
7 y6 m% x+ W& f1 avoid zuo(void)//左转" b( i1 Y2 i8 b; Q
{
; i" K* g6 w. q* v    TA0CCR1=800;
! _% \( D3 H; Y9 C- a' h    TA0CCR2=700;, m1 V. k: Z) O% P
    TA0CCR3=800;
; ^4 y8 _1 k. u  m$ z! a    TA0CCR4=600;
' t+ W6 ~" |" C2 C! u. Y% y: X    }
6 r- v1 \1 K( z2 `$ a% a) Y$ lvoid you(void)//右转, G# L- I4 K' ]! U2 d
{% _% ~5 w# B) I* c) D: Y
    TA0CCR1=800;5 \7 k. h/ v3 j
    TA0CCR2=600;
, L3 H; [5 h" {* R1 M    TA0CCR3=800;2 y* U: C) F$ ]/ M: |1 Y
    TA0CCR4=700;2 R* V* T# L+ ^0 C# e" a$ x
    }
* f5 `# G7 N0 F2 b9 i$ P9 {! _void zuo1(void)//大幅度左转8 c$ D# W- I" _- U1 r
{
) O  }/ f' X# y* R6 Y4 s$ P3 t$ @    TA0CCR1=800;
( c) L7 B, y) g2 L5 V7 k    TA0CCR2=800;
6 U* u: C, k8 x8 a. M1 I" ?6 X+ F    TA0CCR3=800;
% z  q. S. m# p) G0 a+ e    TA0CCR4=550;2 h- T" y+ ?) T$ v) x: U  {
    }1 E6 u+ |$ D6 E  Z( {& k
void you1(void)//大幅度右转- C% I0 [6 r) ]5 P' @
{  a4 s$ n6 w# X+ s8 b1 j4 D( r# C% a
    TA0CCR1=800;
# h* @) z( m# `6 n4 d    TA0CCR2=550;$ u; S5 H; o, |" W/ {+ J" |" i
    TA0CCR3=800;: ]; x- _3 |* F
    TA0CCR4=800;0 I+ r4 r* |! a( Q% R" U+ m
    }# ], h0 `5 y% p

3 Z3 w: n$ @. Y: cvoid bizhang(void)
- i5 G  O; x% ]; V( C. f# g{' M5 R0 U6 p; m
    GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1);3 B- N. p" Y/ j6 h
    GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2);
/ l- P7 [, N6 l, V! J    if(GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1)&&GPIO_INPUT_PIN_HIGH==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//都没有检测到障碍
+ x9 E- r# K/ }2 L* @    {
4 R% w$ n# H( N        go();
* e! t2 u( A6 X, t% _5 O) V    }8 x9 E% K# k. D4 o
    else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN1) && GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue (GPIO_PORT_P4, GPIO_PIN2))//同时检测到障碍2 S) ^( H& ]+ z. P" W" Z3 w
        {
7 O7 T+ v- i9 n0 k6 C- g            stop();
8 i0 V) V- N6 f            delay_ms(1000);
% L3 Y, c- L) j% l3 H# D0 x- X            tui();4 k3 v0 Y1 \. p6 m
            delay_ms(2000);. s7 K) E( I- w  V/ k) J
            you();
' b$ v% O+ |4 Z* E( M1 d- v2 a            delay_ms(1200);
" Z* `. I8 S0 ^% G            go();
! t" g2 s9 x, c! i
0 J1 p9 L* b. a$ E! Q! g( J        }
( W  w- l2 B/ q    else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN1))//P4.1检测到障碍(左检测到障碍)" @1 c0 P) y! L+ u* ~
   {
) F/ I- ^8 A0 ?* E& \! b' |       zuo1();
3 J/ E% I' H/ l7 ?; o        delay_ms(800);
' }8 o' f# ]& M) Q        go();2 a$ L9 B) S$ h, a
    }6 }$ {* H: b, j
    else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P4, GPIO_PIN2))//P4.2检测到障碍(右检测到障碍)+ k0 ]+ {6 u  L3 k7 E3 m
    {3 h2 b  i8 I' U# N/ x  ^. F/ L
         you1();, N+ X: V  R0 v  X
        delay_ms(800);
/ M* F# f. K1 T) f        go();) }7 f! n5 v' h( w
    }' S! S: n5 g& m6 |  [- Z7 G" [) b
    else stop();0 R! m- K1 ]: g5 l/ n3 v
; K! O4 L- `6 F( `, w. o( U& N
}% O5 }5 e: F9 z
/ O1 D" e, k8 v4 p/ K( C/ \
int main(void)
- U2 X( c* ]. Z& |# y$ O{& t6 y2 {- n( y3 |
     bizhang();
- q  |# W, p" s1 M    WDTCTL = WDTPW + WDTHOLD;   // 关闭看门狗
( t1 `$ L6 w8 }" K    P1SEL|=(BIT2+BIT3+BIT4+BIT5);
5 ?! m6 ~. U3 r( |% T    P1DIR|=(BIT2+BIT3+BIT4+BIT5);
1 Z& {; l& N+ G) `4 J; \' Q    P1OUT&=~(BIT2+BIT3+BIT4+BIT5);
! m7 n& {- x1 H- M4 R) f6 @- z# i  R4 l+ ~
    GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN1);0 ~( ~- H- x3 \* B2 p
    GPIO_setAsInputPin (GPIO_PORT_P4, GPIO_PIN2);
2 L3 Z  }6 D# @6 v9 `% B
7 b( x3 O$ q( C( @* B# V    TA0CCR0=1000;
* v* E: n3 n8 L8 y& c) {1 n( V    TA0CCTL1=OUTMOD_7;3 @+ r' a) J  z* m0 q+ J" [2 Z
    TA0CCTL2=OUTMOD_7;
7 b5 {" G( V% G% C    TA0CCTL3=OUTMOD_7;% ?8 P" C" D. }* S' \1 Y
    TA0CCTL4=OUTMOD_7;
" a* x9 _7 x3 g$ d& Q, l, [2 V, Q
  c% v  W: j% Y! z$ Y    TA0CTL=TASSEL_2+MC_1;' X9 v  o' k% H7 W/ D2 T
6 k5 J  w( z7 ?
    while(1)% a! C8 N) ^9 b% ^  ~
    {6 |7 C5 Q' j) i5 A
        bizhang();' W- H; \+ K- Q! m! U) {5 z9 t
    }
. M) f0 J, {! T9 H- p4 ~  b- ?+ N2 |
}
  q7 K1 r7 n+ Y# g8 `2 j$ _0 }

* Q" o" y  ?: m3 I5 ?8 K% q5 @

该用户从未签到

2#
发表于 2021-9-28 14:26 | 只看该作者
路径是怎么设置的, G7 I: w3 K  {! q

该用户从未签到

3#
发表于 2021-9-28 16:47 | 只看该作者
学习了  感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-5-26 03:17 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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