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

遥控器解码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-8-19 21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
#include <reg51.h>  O4 ]4 k% A& T7 |
#include <intrins.h>3 p8 f$ j2 K% M, [' {1 [0 q+ L
void delay(unsigned char x);//x*0.14MS
8 E, e/ y' |  h+ w% @void delay1(unsigned char ms);
- C. x2 f& U' h0 vvoid send_char( char txd);  L& e; v2 m& a
sbit IRIN = P3^2;//INT0(外部中断0输入口)1 _) o5 u, Q; u$ k- }6 q) R
typedef unsigned char uint8;4 u+ |; v8 A1 I: H; x; ]
unsigned char IRCOM[8];
; H6 H& c# c" g0 c8 M+ iunsigned char code table[16] =
5 M- P6 D3 z" v0 U                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,7 B3 z: d# k1 T; d' t% r
                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F: z9 i8 Y1 U1 j  r) ?+ T
/*波特率:9600*/+ o  X! G5 ]0 @9 v5 w
void uart_init()" o% X& E7 [- a( n/ l! O+ c5 @
{6 s, T, f+ v9 P2 ]+ N4 G+ n
        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率( i6 C9 R, q& w, V4 @
        TH1 = 0xFD;                                // 波特率9600
1 ~: }" F- S* O        TL1 = 0xFD;
( @6 V* r, \% G9 ]* |/ U. q        , e- u2 ~+ L, V/ ^( t
        SCON = 0x50;                        // 设定串行口工作方式% w  Y- G" h% |7 E, P7 ~  K+ C
        PCON &= 0xef;                        // 波特率不倍增
4 W9 F$ B, E" @2 X$ p                : A7 x5 D& V9 j! b
        TR1 = 1;                                // 启动定时器1
# g8 |; a' W7 m       
" x5 F, Q  m- z2 q) C% l}/ O- [5 R0 n; m9 M# p# }  g
/*UART发送一字节*/
* Q' M$ i+ S4 J) [* Z
7 B$ \  i+ ~+ y7 K0 B1 {$ Z- [% Dvoid send_char(unsigned char txd)3 G4 R# y; T3 s( v$ o. n2 T
// 传送一个字符
7 n$ P$ ]" E6 B9 y# }! a, A{, i- ~/ _7 B& [( W' F
  
4 ]2 _0 ]) n5 c' l. h        SBUF = txd;
/ ^# u4 N. i8 d: J7 y! \0 ~        while(!TI);                                // 等特数据传送
5 x% q; y$ f: C9 q4 [        TI = 0;        * P; ^7 \* s: A8 C& @( q) \4 ~
                                // 清除数据传送标志
$ K4 w# p- r) r2 d% I+ o}
. J! R  [) E2 F  S  Lmain()$ i. r% k+ H# A$ Q
{
7 q4 }* g( q1 w          
9 P" H) B% w$ @. E  X IE = 0x81;    //允许总中断中断,使能 INT0 外部中断
2 O  f* f3 v/ j" d8 p! I TCON = 0x1;   //触发方式为脉冲负边沿触发
0 x) h! e" b7 x5 [& t7 V# n delay(1);
9 z* x" b" q+ H* \: ~ # l/ g5 V; H8 I. f) r
         IRIN=1;
( Z( M' ~% _5 r5 T             //BEEP=1;6 t2 I' J2 f  }  t* P& c
                 //RELAY=1;
7 p2 l6 M0 d2 @# O: [# Z5 S" a! x                 for(;;)1 E. r5 Z7 b% v. U4 }
                 {
1 L* ~" w/ |- o# i6 _: D) N          uart_init();. A2 \$ v$ W  G/ e2 f0 ]
                % K8 h2 |9 C9 G
                  }6 Q; R8 w) M4 \, b" n: E2 \
                                        9 Q7 X* g5 A& Q3 b3 N$ s
} //end main
- @. o  @" O5 Y1 a2 f+ j$ L//以下是中断服务程序
$ P* W/ q. O1 Z% k) x* Q" I+ v* G) Kvoid IR_IN() interrupt 0 using 0
. Y% V- ~7 g+ \' m1 ]{
% w+ a; o0 B* N( t unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据) q5 c1 J- K( q1 q
  EA = 0;//禁止总中断
4 h5 x+ C+ @. W+ M4 FI1://标号4 _6 @+ |$ I6 [6 S
  for (i=0;i<4;i++)
) f5 H1 g/ x- r, B   {7 r+ z2 z8 R: Z7 n( a2 E
    if (IRIN==0) break;( ^8 _8 Q8 Z7 t4 I$ q% A7 I
        if (i==3); {, G7 H3 w7 K$ ~
      {EA =1;return;}//如果i等于3就打开放中断& i2 {" N4 }% Q4 G: K
   }$ g: F5 _+ V+ j7 ~
  delay(20);
8 B# |1 s' \9 W, C- n% y; Q    if (IRIN==1) goto I1;  //确认IR信号出现% l9 I9 ^: t* o- X  E2 U
  while (!IRIN)            //等 IR 变为高电平6 w1 [7 ]! B; f* J. s
    {delay(1);}" Q+ a* D) a4 S. }1 v9 C

6 h) q  \  o0 I2 ^5 [& S& W3 s; r+ B for (j=0;j<4;j++)* u6 ]& t/ v4 L) u
{ # @6 x/ N4 z1 A0 V; }2 Z( m
  for (k=0;k<8;k++). G. l$ M+ Z: R
  {
1 }8 J6 d3 @! G* B5 v4 }& C* f- h+ I5 L          while (IRIN)            //等 IR 变为低电平( |+ v' J0 A0 O* P" ?& Q
            {delay(1);}+ x) n( l# K% G7 v  D
           while (!IRIN)          //等 IR 变为高电平
0 N7 ^  ?% v2 ]( o- ^7 d8 u* o            {delay(1);}6 W$ B2 C! M2 u) G" Y
     while (IRIN)           //计算IR高电平时长. q% c( f+ g6 o( n  \: a' I; O. `, ~
      {                           //如果IRIN等于1的时候就计算delay的个数) Z- Z+ X) o! [( K- q. u
           delay(1);& G8 H+ _' C* s% W( G
           N++;           $ ~3 O0 h; t! `; A. R5 v( p
           if (N>=30) {EA=1;return;}' a# x& b& O2 d0 `7 K9 P- l
          }9 I/ G" a4 y6 ~
     IRCOM[j]=IRCOM[j] >> 1;0 Y2 V. s+ t& P* ?) g- j1 C5 Y
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}
* d/ X* Z3 A4 C% j3 ^     N=0;, P  ^7 w. B8 S( N4 R
  }//end for k( F) b" }" ^9 I& `) k2 S
}//end for j7 M/ |" n6 C% `, G' F+ y! ~
   # c' j* Q3 p! h1 o* }# N9 Q5 f
   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}
& q3 [! @) C% U2 B  s+ u   IRCOM[5]=IRCOM[2] & 0x0F;
0 b  @$ N; V" [. h. M0 A   IRCOM[6]=IRCOM[2] & 0xF0;
3 M7 Y( U2 q2 y2 U   IRCOM[6]=IRCOM[6] >> 4;
; B8 A+ [- r& e  c  // beep();
& ^# k0 }  U6 ]+ M3 j& u" m   EA = 1;* ~+ J) Q: b% F+ A  ~

  |1 S4 N2 D. I4 Z6 W          send_char(IRCOM[2]);: ?: M9 A- a) h5 D( e3 @
( e* i7 X" H+ p6 T/ M* b5 _7 ]  h: u
}//end interrupt
. a5 `5 i5 Q. r- J- e0 U9 Z7 A* U3 q! B, s
//下面是延时程序
( f3 F1 }% l, B7 B) R, ^void delay(unsigned char x)//x*0.14MS,unsigned char x是参量
3 C( h' t% V; X' [7 u; `{4 C4 B! M! A8 ], _) ]
unsigned char i;% `  r& J+ x* M) N9 s
        while(x--): V: {: o5 E4 _% q
        {* ]& d1 e5 c7 L: a4 m: a1 [
                for (i = 0; i<13; i++) {}/ a3 e- |9 Z; L. G
        }; u3 r3 \, Y* \6 p
}
; A6 P% U6 r1 U" j$ ^* N" s4 l7 ~8 j: ?, W: D& j
//下面是延时程序3 @" V. ]: Q6 ]6 g2 S" [- l1 R
void delay1(unsigned char ms)//unsigned char ms是参量5 r+ P: X4 U( }3 J2 G. ^2 R* r
{
: d( t7 l/ P  D4 a/ N! S unsigned char i;
$ J) e# g: V: z2 a: H; i8 [         while(ms--)4 r$ G1 v) r& i, m
        {" s4 q8 f& f* u5 m* v
                for(i = 0; i<120; i++)1 d0 U) X5 \4 ^0 J9 Q
                {2 P; A5 x, A/ _$ {' c9 }9 r
                        _nop_();
% f9 \4 ?1 i' ?6 W1 C0 a( [                        _nop_();, e+ B5 b# X( f  x* F9 F2 u
                        _nop_();
$ T6 ?; ?, Z' }7 Z* P9 R& Z                        _nop_();4 S. c0 {; {$ j+ l2 h% r3 F
                }
6 ^/ ]7 q  V! {6 b6 d        }. }4 c8 J9 J3 ?2 R
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-21 12:23 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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