找回密码
 注册
关于网站域名变更的通知
查看: 782|回复: 3
打印 上一主题 下一主题

红外遥控循迹超声波避障跟随光电码盘计数测速五个中断智能小车

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
红外遥控循迹超声波避障跟随光电码盘计数测速五个中断智能小车
, j0 P# V: J- ?* p- T# N) a) @' ?9 e( W: j0 F4 {9 h0 `
% d( s, a. o$ [' V* e
通过红外遥控,控制小车的方向,通过循迹前进,通过超声波跟随。通过光电码盘计数测速,把52单片机的五个中断用上了。。。
# e! _2 L5 P$ t+ A; I$ pryz学习2 U& ]  ?0 k. z8 p% O' K

* J3 o2 p$ L3 X3 ?% R; ]4 Z单片机源码:# X: m- T* K! x6 |' s4 G3 d; H8 C
#include <intrins.h>
. g  W6 j9 y# X. C* s& N: E#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器0 \- E3 M- e" [* D! s, M8 \4 j
#include "lcd.h"        " ?/ S, s' ^2 K
#define uchar unsigned char
8 m$ m# ]; f) w! w, l#define uint  unsigned int
8 l+ s/ x9 V) \% ]" g- Esfr T2MOD= 0xC9;. T, \( N, l9 w/ |
typedef unsigned int u16;          //对数据类型进行声明定义
; C1 d: C4 w$ \- g; n! {( otypedef unsigned char u8;
( @& C1 b$ M; l- j8 y; xunsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
& V6 ~9 q$ Y/ ]1 E1 g% |                                                   //p0,25,26,27  lcd1602
5 [( x& ~+ X0 ~sbit P10=P1^0; //寻迹模块左0 u/ O- N! V; L0 d: z
sbit P11=P1^1; //寻迹模块中
0 a3 M7 f8 }+ h- U6 _( hsbit P12=P1^2; //寻迹模块右
+ V8 x- o. t' C/ i/ }sbit key1=P1^3;                  //无线端口4 G1 o$ B* A% K6 ?/ w$ @
sbit key2=P1^4;- F! X6 R3 l, r, G; o
sbit key3=P1^5;
" o0 T" g; J7 R/ Y  Jsbit key4=P1^6;
7 m; O! ^! U0 [; |* q% f# O4 zsbit RX = P2^1;                  //超声波端口/ R9 ]9 s- {2 Q( n' k
sbit TX = P2^0;* F2 j2 i: e* A2 `4 o7 Y
sbit IRIN=P3^2;                  //红外端口3 P" R8 T" R7 u, e* s
                                                //p35测速端口  [% [* H9 A$ v4 k2 Y+ i$ k$ i

$ c: J/ M! Y" `9 V6 ksbit SER=P2^3;                          //8                   电机驱动端口7 K, u4 L. b8 e4 |/ Z  r. M
sbit SCK=P2^2;                   //4         en=0才工作
  S; [) o. t, C0 c; z1 Q4 n/ Csbit RCK=P2^4;           //12* |2 T, H$ t8 p" Y  c* P! l" a% x
//sbit PWM2A=P2^3;  //未使用  低电平有效   12
# X- ~% O! P, d/ d4 p8 n//sbit PWM2B=P2^0;  //未使用  低电平有效         3
1 F" A; h) \( [8 w% a  v) B, Q* s- [
unsigned int  time1=0,kop,mm=0,s20=0,s21=0; 1 L- F) I9 L$ Y3 h7 t) @
bit      flag =0,flag1=0,flag3=0;//flag 超声波超时标志,flag1,循迹标志,超声波控制就不循迹。      
0 I1 A" l+ C  R$ @( u1 J# b  Uu8 IrValue[6];, A3 y- z5 b* {( A1 ^4 S
u8 Time;. O0 T' [, j! u9 V# V

7 S" W: A$ ?  s1 ]
9 E( X" |3 g+ Y4 n2 s6 ]//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、H的显示码  }; j$ C5 c, y9 _/ r8 H* N. ~
char num[16]="CODE:   DIR:    ";                //第一行显示的数据) |; b0 x4 p) p  c8 }8 x: P* H
char num1[16]="IR: .   / .    ";        //第二行显示的数据; f4 L6 J% t" [# ~$ b  z: g* j
/*******************************************************************************5 ~- I- Y. Y, D  B" G) ~
* 函 数 名         : delay& {* S1 Y2 v" b' g
* 函数功能                   : 延时函数,i=1时,大约延时10us2 u9 v. O# z5 l* I4 ^1 w
*******************************************************************************/
$ y: `% |) r  o! jvoid delay(u16 i)7 z% v# T7 o+ N( ~8 H7 r
{( S6 `& p/ {' a6 V; ^, X: Y
        while(i--);        7 o; F2 c4 i) ]/ Y& O' Z
}
9 Y; B, M# F* zvoid delayms(u16 i)//i=1时,时间为1ms
; q; U3 A: z3 q) s{        int q;# G9 I( `  R( {
     for(q=0;q<i;q++)/ z; {4 ~& C. [) s$ z6 E1 i4 M  `/ Q6 E
     {' ~. G- ~; B. s% S7 I
          delay(100);; {4 d6 `; T& }& W$ Q* c
         }        9 ^8 A3 m6 b4 H
}, g; W/ |2 v$ ]4 W  j

) C$ M4 D9 y; Q( |* o% i9 U8 w" o
void delays(u16 i) //i=1时,时间为1s- z# |* `* u0 {5 D( _
{         int q;& {: e, u- l" o" k% u- S/ t
     for(q=0;q<i;q++)0 o( C- \! e: d
     {
! D8 w! V4 E' J3 f         delayms(1000);: |9 ~- q+ L6 E/ N2 n. S
     }
6 D  t4 P( n1 d3 N% O}3 }5 t( w; W4 F" K* Q1 M

5 x1 [. u3 P$ h. q" l( \% e3 @4 H" N% Z" L
6 z* }# ~% v3 O  x. S
1 E& q/ p0 e) w6 r8 ~
9 ~0 ]+ d2 M  P7 l8 Z% u7 z1 `: V* y/ w
/*******************************************************************************
. H/ M  k; D. C" ]. }- @* 函数名         igDisplay()" N7 S( |: p) z0 U: C( M
* 函数功能                 :数码管显示函数! v  V& Y3 n8 v
* 输入           : 无
! h$ S! `3 |9 s' b) j* 输出                  : 无
4 c/ W2 S$ P( O, m*******************************************************************************/
* S) i% b  M( }" Y+ V9 ^
9 ~+ d/ q' R2 o9 uvoid HC595SendData(unsigned char SendVal)//发一字节
# ?& K& ?0 ^) g{  & Y+ Q  E  K, F9 ]8 T
  unsigned char i;/ P# {3 J6 u3 o8 |; l0 e
for(;i<8;i++)% a/ ]  a( h* q
   {3 F! ?) G0 k( g% k
           SER = SendVal>>7;         . m2 s. o2 `2 W8 [( p, k8 k) C
       SendVal= SendVal<<1;      ' N/ z2 V0 h- J& t9 ?

6 G( D0 P: g! H# f% r- O7 }% c- S3 M          SCK = 1;          . w: N, F6 V6 f* w
        _nop_();1 z: J3 C5 H( J0 {: B4 v
        _nop_();! w, G* ~9 j& u% x9 a
/ D9 J* S1 |% _5 Z; j4 N
        SCK = 0;   5 J6 o7 V+ \# K2 d; `
                 RCK=1; 3 r" V+ P, v& I' W) z* c- l- e
        _nop_();+ P5 i# [( s; W6 b
  _nop_();
' f4 l( l& C0 l        RCK=0;% X2 N4 F, A- B# E) G4 Y
   }
7 n5 s! G% s6 b2 f   }         
( y' c3 o4 C! V# S$ R. K( i- |$ R1 \- |9 d" e
6 U, u0 l, }, v9 L5 G2 x
( P8 s5 t( G8 T' g( M

& |9 N8 u$ I& s/*******************************************************************************5 \2 L' n+ }) d
* 函数名         : IrInit()8 C! V6 o, c$ f+ O
* 函数功能                   : 初始化红外线接收
/ i6 q' v0 U. W# }6 j" g4 {" z& y* 输入           : 无1 ^3 H$ C4 @3 w% `3 i# z& F
* 输出                  : 无
. U+ `; ?/ r1 i*******************************************************************************/
2 x; f+ l  o7 r9 U# n; u5 U/ A& Y" {% v5 k
void IrInit()
2 L% D8 H! p( v4 d& l) F4 a{
; P8 L1 z2 v) N/ P        IT0=1;//下降沿触发
8 p6 ?& ?: `) E) c6 ^        EX0=1;//打开中断0允许
& v, w* g5 n5 X! ?        EA=1;        //打开总中断
: V3 E) {  N) X3 |+ S7 O* V) U' F( Z/ n
        IRIN=1;//初始化端口/ E2 b% o6 k8 E0 ^& T
}
: X5 R1 X0 k' E8 r7 mvoid Chaoshengbo()
! S, C; D( x7 T5 T6 x* O{ TMOD |=0x01;                   //设T0为方式1,GATE=1;
7 [9 j7 N8 b& f; h7 M9 c* X         TH0=0;
2 R  z' D8 i5 [; w- {         TL0=0;          ! ^7 D) m- `% h; v, ?; w
         ET0=1;             //允许T0中断& e# P  b' {+ l% a* \& u2 y
         EA=1;                           //开启总中断        
/ E" M% F" T7 Z: h         }
; Y( s6 |7 c4 r& {  ^% l5 ]* Y2 jvoid cesu()                                           //测速初始化* J4 K! }- e) C0 |& V7 T
{$ z# w  J. a) i; ?  s9 K0 ]+ L' p! j; Z
TH1=0x00;
4 Q  @3 U' s4 D$ C- k) p& ^, A. ]TL1=0x00;
% S8 v  p3 |! o' g# T- X- iET1=1;' b1 V* o1 p. b! i1 N) _1 T
//ET2=1;) L& |+ G7 q" R4 m
TMOD |= 0x50;// 打开定时器和计数器T1,因此矩形脉冲输入端接P3.5
$ s5 f. v  D: {) t  ]0 I& H7 k" C5 |, {( v8 W! y7 N
RCAP2H=0x3C;
$ |. ?1 l, ^: ?+ kRCAP2L=0xb0;; F# w# w  _5 `% x
( p: T: e$ F% A$ _: T
T2CON=0;
) P3 k* x+ b4 t2 |: W- kT2MOD=0;              
% n- }; x# b. E4 T! Z+ iIE=0XA0;  ! l6 u( ~/ ~4 w7 a( |
TR1 = 1;
- B8 [+ S2 W. WTR2 = 1;
( s9 k/ R( Y0 Q7 d3 w' m$ e}         6 t  u$ T) y; Q
                         + g. t9 q# b; k
char scan()
4 u. R4 O" @" U  v; N, M& r3 l7 P{        int key;# u( K& w2 |. }4 Q; B" N+ Q
        if(key1==1)
3 N% v4 u3 p: x! g6 N* K  ^% \/ K        { delayms(10);6 K* r+ y% L; q5 V1 e! j+ A3 Q* V3 D
                if(key1==1){key=1;HC595SendData(0x66);num[12]= 'q';}
1 ^: F% u, r$ {" t+ L( x# U        }
/ {5 Y$ z" S9 o# Z# S9 m5 [$ U. D        if(key2==1)
7 |0 c' [/ C# B0 k, ]) a. V# F        { delayms(10);7 H4 `5 P5 g/ f6 g+ t& P0 M- r4 W
                if(key2==1){key=2;HC595SendData(0x99);num[12]= 'h';}
4 Y% A7 E# I) r8 U2 H1 o3 A* ~4 P        }
$ P* Z( S+ ~# p( K! l; B        if(key3==1)$ e' |7 D* L; i3 d9 V5 J' v2 _
        { delayms(10);
& m$ _) b! T6 p6 [                if(key3==1){key=3;HC595SendData(0x78);num[12]= 'z';}
# W( G- {" {( G* `+ h        }
. W/ ]" }6 I- f+ e        if(key4==1)
- ~+ J5 x8 w, Z, b' i/ o        { delayms(10);4 f/ T' L( b  u, \3 z( n2 B6 G
                if(key4==1){key=4;HC595SendData(0x87);num[12]= 'y';}
7 }8 ^/ u3 Q; d4 b* ^6 c        }
6 I  U' E7 _8 S. Y: d0 ?3 D        return key;) U1 f* i7 y. Q2 b- x' n1 }( L( D
}
; Y: G4 s9 H5 o3 Z7 E; @char Judge()
8 P! Q+ V9 l7 p- N5 u$ s{. `) {9 _" D8 j3 Z0 e
        char num=-1;( c0 B9 {6 b! D* i0 {0 E
      $ h$ O7 l) H# O/ \/ n0 ]
                switch(IrValue[2])& A8 i9 K' b& x9 x7 W
                {5 B! \/ y; w0 e$ N  N% w
                                                case 0x47:num=19;break;
5 h, [3 s) F# V) _$ u1 G- @                        case 0x46:num=18;break;; O9 y( \, N. V; n1 c$ W, s
                                                case 0x45:num=17;break;$ v- ?  r6 t) k
                                                case 0x43:num=16;break;
8 }& m! {3 o7 \5 X* R# S" d( Z: o+ y                                                case 0x40:num=15;break;& x/ ^" d6 T. }; m' Z( X
                        case 0x44:num=14;break;- v  y  Z1 O2 Z9 \, }/ J' c3 a
                        case 0x07:num=13;break;
6 Y' L1 l. ]; P. I  {2 r% ?) l                        case 0x15:num=12;break;- k+ v4 C1 H, H( m) i1 P. Z" X
                        case 0x09:num=11;break;( k' N' X  _/ @7 y7 h- n" M
                                                case 0x19:num=20;break;/ p! ^  G. l' @
                        case 0x0D:num=10;break;
- W, D& [& Z2 ]( K; v( \                        case 0x16:num=0;break;! O! U! K7 f6 M% E% I+ M
                        case 0x0C:num=1;break;
9 o" p# ~+ ?; ~/ A1 N                        case 0x18:num=2;break;
( N3 C6 C; I# X/ E5 T2 p- M- ^                        case 0x5E:num=3;break;% |8 s" T  M% J2 B
                        case 0x08:num=4;break;
/ v; ]4 ]# Q& [+ g                        case 0x1C:num=5;break;
. h/ A9 m& ]( z. [: \# Z- |. U7 }                        case 0x5A:num=6;break;
: {% K" q+ W' V. Z3 n, c9 A                        case 0x42:num=7;break;
4 A( ^- A; w: Y, P: |! ?; ]- W                        case 0x52:num=8;break;
3 A% |1 n+ u$ p! E8 u% O0 F* N0 U                        case 0x4A:num=9;break;
3 D3 m8 J$ \9 o; S7 \' v4 U                        default :num=16;break;  //
+ @" ]! F* D' @" u; y& q0 [) \                        }- U  @) B6 U( u7 Y/ u8 }0 T
                # h' p0 H3 X% Y0 R3 k
                return num;
  \" X3 D' I$ T/ j7 _$ C' h, N        7 M' d9 A# @3 Q( I! ]6 `- k
}
' H) V4 J) M. Q$ j/ }& v9 e; S$ ~int Conut()
3 U$ L$ E9 K8 C' q! Q        {  unsigned long S=0;
1 W6 c0 d9 l5 L( {5 g$ O) d, D7 i2 G7 t         
8 k1 w& A: V2 ], I/ d% z1 ]& o           while(!RX);                //当RX为零时等待
3 o* }3 }" f$ i- J7 ?; V' O4 u/ j           TR0=1;                            //开启计数
' G: m: Q4 Y6 K* ^+ Q$ l           while(RX);                        //当RX为1计数并等待7 A  y0 k7 N' N
           TR0=0;                                //关闭计数
; J4 F4 q" R7 q1 l- E         5 t3 ]+ A9 _/ m/ L
         time1=TH0*256+TL0;# F6 b% Q* w5 C2 D
         TH0=0;
# a8 [( U5 o% g" T/ g0 i! z" i: H1 E/ B' Q         TL0=0;
8 o$ H6 X+ n$ E3 V        
+ B6 o' ?: o1 F9 u. O, q0 Z& v4 J        S=(time1*1.7)/100;     //算出来是CM
; R9 C5 `: e5 v' E1 E7 p0 S        
- F# M+ t( D2 @. g, [          return S;
/ ~& R, [6 r- E0 Z        }
' n! w( |4 P3 J0 {: P! U+ x

9 r, x+ e8 Q& N# V
7 O% q+ Q# ~3 f% L# k7 Y0 @7 L: B
下载:
( P( Q" X8 m4 v; {/ _% G
游客,如果您要查看本帖隐藏内容请回复

2 g; b! y3 P9 u

该用户从未签到

4#
发表于 2020-8-4 05:39 | 只看该作者
谢谢分享

“来自电巢APP”

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-31 04:26 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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