|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 TaylorA 于 2020-8-26 17:40 编辑
4 C7 R5 @% t' O; q
( `; E! r# v) x0 |3 [/****************主函数****************/
0 E" |8 P& C" v1 ~( h; B6 h% r" \void main(void)7 | z$ d4 g: P. a$ I
{
. u# n+ B2 s' Z. |7 _: q& v uint i;2 Y m. O: L9 E% l6 G
" h" i( z- r, a7 r" b% L* k /*下面六行程序关闭所有的IO口*/
1 {; [6 c2 h1 p- w P1DIR = 0XFF; P1OUT = 0XFF;+ @$ }$ J; }% u, }9 b- [' a. d
P2DIR = 0XFF; P2OUT = 0XFF;0 F c) j" H" ~2 g' Z! s
P3DIR = 0XFF; P3OUT = 0XFF;; l3 D: ]$ L0 ~0 ^
P4DIR = 0XFF; P4OUT = 0XFF;6 P6 m: h& Y* p6 j2 m
P5DIR = 0XFF; P5OUT = 0XFF;+ I) k. D( H- l2 a
P6DIR = 0XFF; P6OUT = 0XFF;: ^! L( W- Y( h' F
5 X/ X) b7 F9 T1 _9 s# b) I$ u WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
2 O8 E4 Y5 P+ H$ F0 @7 b$ F* v" D. V, V P6DIR |= BIT2; P6OUT &= ~BIT2; //打开电平转换
1 |9 K, d* k: {% d P2DIR |= BIT3; P2OUT &= ~BIT3; //电平转换方向3.3V--->5V
1 N( T$ L% \8 N5 F P5DIR = 0xff;$ a9 S% \) _7 S5 B# w4 t
P5OUT = 0xff;: _9 u7 J" \( q( {! n+ X
0 |& s. \+ t' y1 Y$ Z6 z: L6 l
' w# z! s2 F s, ^+ V) D' z /*------选择系统主时钟为8MHz-------*/1 z3 [9 w+ u- u% X2 I; H0 u& b# p
BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器$ B) f- Z3 k }% K1 C6 B
do, h# {3 O8 N+ g9 w- }' ^
{7 M2 \- L S" h1 |, s' V
IFG1 &= ~OFIFG; //清除晶振失败标志
! ^7 k( k6 p* V for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振
( [" d4 n( o7 {1 U& a }8 v7 ?+ a+ i& A2 A' F4 c
while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?
/ T& {/ M) N7 C5 J2 W BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振
. l/ K, w6 i& ]+ N /*------选择系统主时钟为8MHz-------*/
) n- g( T+ z. @, c2 v
! b- V5 W# t! ^3 _, u- k P3DIR |= 0X07;. w8 L4 G' Q' A! H
P4DIR |= 0XFF;
" |$ T7 T4 l8 N0 L' M8 u LCD_init();
8 w+ {* A$ t/ M5 f. S1 S( S
0 E& ~/ J, S3 _ set_pos(0,6);
# V2 ]3 H$ x! o* _* ^ LCD_write_data('W');9 A. q! ^' L) ?
LCD_write_data('T');
1 X, A3 [. i+ ?4 l- ~! r* Z, Y LCD_write_data('F'); 8 c! m' w8 W; u( g4 t( t
& I3 v* J) F: H$ J) c) u P2DIR |= BIT0; //设置P2.0为输出
/ S/ ~; [/ E% e2 x7 \3 s$ Z
# s, q7 N7 I x9 Y, { P1SEL |= BIT2; //设置P1.2端口为功能模块使用2 R& {+ S+ q7 p" s
P1DIR &=~ BIT2; # Y' {! f. J' P+ E
P1IFG = 0;
( ~& h2 ], s# ^0 m* |' ~) L/ N
5 r8 A. d1 d$ B+ ` TACTL = TASSEL1+TACLR+TAIE+MC1; //定时器A时钟信号选择SMCLK,同时设置定时器A计数模式为连续增计模式
$ n8 P3 v( A( D# k ^0 E4 o% r CCTL1 = MC0+SCS+CAP+CCIE; //输入上升沿捕获,CCI0A为捕获信号源
9 L( f' `& C; I$ k( P& e! G1 g' u& ?1 L# w C: Z$ M9 r& D1 j8 _- P
8 a6 k% B: p. z# _9 e start = 1; 9 s% j% q& s7 z1 P
disp_m = 1;
" i+ n% b5 [7 ]* |$ f end = 1;
8 f- p8 Q2 S4 K2 A oveRFlow = 0;7 S( R; V$ T9 q- Y- D5 y1 P8 R6 ~
show_falg = 0;5 a5 t2 ~: p, B$ X
0 T _/ T- d/ [2 c- S' `( A; V+ y# E+ ~/ Z. X U9 @+ s
_EINT();! [+ t e; |7 _+ t0 U5 t
1 j+ O8 L, ~+ I9 M( [- \( {
while(1)* s: X$ `$ ]7 {/ A
{% A2 s0 w; b$ K* n) M
9 C3 A9 Q% \6 h' \! L. ~
P2OUT |= BIT0; ( P7 r/ V% h8 s' w# {6 A
delay(160); //给Trig一个启动脉冲
# e3 b0 p2 G- l. T P2OUT &=~ BIT0;' c p" A7 f' b
8 \- u, j0 b( `, U) h while(show_falg); //等待 Echo的 下降沿( D; D2 R: p- B
: U( F/ g9 ^' O
show(); //更新显示& I$ u/ S0 \" O" U- [4 E6 D5 Z
5 a7 W: E4 g! u8 p, a' ?4 I& D
, g2 r. r6 I) `8 j/ p @
7 p# m& p; ?$ V0 H2 g
}
6 J0 ]5 _' M3 ^* `' a# G4 d}
/ o4 V' |, ` s: H1 Z
7 w6 V; B4 {$ {; F( l#pragma vector=tiMERA1_VECTOR //定时器A中断处理9 Y" X& I& Q. Y
8 \5 N V, L. d, s$ H3 H0 C- L, j__interrupt void timer_a(void)
% k( p8 n8 v* O4 u) ?+ \! m* [$ l8 _6 d; _/ s5 g# n- q
{
& E; ], Q& W0 y( r' h
5 I1 `4 S B$ J2 R3 C* d; I& S. v switch(TAIV) //向量查询+ ~! L8 e4 U6 G$ i6 c; T
1 ~+ p: L6 {3 A3 |) ]. r
{ case 2: //捕获中断
2 Z' \1 \# E1 I& _ if(CCTL1&CM0) //上升沿# f3 [0 `) y7 K3 x+ M/ L$ K: ^
{
' ? @. k9 l+ _+ W+ T6 C0 t# a8 g Q CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发
! ~8 }8 j/ Y+ [* c* c start=TAR; //记录初始时间. a$ i$ N8 w9 M. p* D& A
overflow=0; //溢出计数变量复位5 ?( [4 ^" @3 |7 N4 z+ R
( U1 l1 g4 `8 U, G }
; A% p; k9 t" e, W! X else if (CCTL1&CM1) //下降沿. W' C' ~3 ]0 H4 f
{
- y1 v d8 e) M0 y3 H% _/ v CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发2 J1 n1 m: ]/ K' L; `) C
end=TAR; //用start,end,overflow计算脉冲宽度
0 U, e' p# r2 Q; P show_falg = 1; //打开显示计算处理程序
7 X5 c( Z$ S4 @8 V }6 k) W, \: q) Y: e
break;& o' u* S8 m- {% x7 T2 a& K8 y9 J& q
# }% L7 S. L) A case 10: //定时器溢出中断
# K- ^# t! L: k' g overflow++;
: p) J& e8 b0 B% L, s' O0 p break; //溢出计数加1 V0 ^6 F" C, l
' R# {1 {6 w; a5 x$ S2 h" Z b( s" L7 q
default:break;& y" C7 I/ `- x
}
$ o' I; K+ R! n' o0 ~, d
7 [' `0 Z+ ]9 `0 A0 \6 P2 B( n7 U}
$ \+ ~" _6 b1 U! c1 d3 X6 Z+ o, Q4 D# b# S3 ]
|
|