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

遥控器解码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include <reg51.h>
+ m, L& a$ r6 k9 \2 g#include <intrins.h>
2 }/ ?' k, _( w1 N. H, zvoid delay(unsigned char x);//x*0.14MS9 L; y% H/ t4 z& N7 q0 n3 X
void delay1(unsigned char ms);/ {! v6 J2 C$ U8 i7 k6 s
void send_char( char txd);7 S9 T' A2 c+ q* z7 z
sbit IRIN = P3^2;//INT0(外部中断0输入口)
/ b; S% c% y+ C  F6 ntypedef unsigned char uint8;# K& K. Z+ c; a% m: _
unsigned char IRCOM[8];
$ v( E+ B& o  x4 O( y$ A5 @unsigned char code table[16] =
! e' w6 C* q3 s+ X                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,8 ^" @2 n; f) G/ H* L' E- f0 ^
                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F  Q, T7 _8 K& `- C$ O# K
/*波特率:9600*/# x' T. b$ y8 b( O% v. ~
void uart_init()) j  p& m) B# ^* S* P; ~$ |
{; \( \' N0 ?' m: Q7 d
        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率2 {. `, U/ `7 x6 N  j& }
        TH1 = 0xFD;                                // 波特率9600
! t7 ?) R: s# Z: ]6 |        TL1 = 0xFD;# a. Y3 }( t$ n1 I0 G
       
3 |9 z- ^( c& R        SCON = 0x50;                        // 设定串行口工作方式8 O. C. q* N! p1 U, r
        PCON &= 0xef;                        // 波特率不倍增
$ T& G) H5 K  X  c2 Q               
# X' F0 N- a% }; L; h: ^' a3 }" u) _        TR1 = 1;                                // 启动定时器1
$ F, `7 y! R) k) E" Q- Q        ! r$ N" y! `" O/ j( K) ]$ M; ~' e5 W) x
}
$ {4 v, t( b3 `1 `! Q" e& j/*UART发送一字节*/- f: j  C$ c' J+ [$ {1 t4 q# d
5 {2 h7 f$ P/ e8 X$ t& Z- ]
void send_char(unsigned char txd)( u6 _# Y1 E- T( a- z2 S; C
// 传送一个字符
6 H  d1 v7 W+ L: C/ P" A{
; C  U  p4 `- k( }0 y- M  
' P3 F+ u. a/ h* U( K        SBUF = txd;
& r4 a0 O* {" e' i( ]3 P$ t        while(!TI);                                // 等特数据传送6 Z0 c2 a0 G3 w6 n6 [1 Q) M8 p* [$ j
        TI = 0;        * r- D, q! W2 C' Q! `4 Q2 i
                                // 清除数据传送标志
  U2 J; X- E( U}* g8 z( r: W. }5 u
main()
$ ?) |% z1 y, s# v  ~{: a: x  v5 b, b4 m& D4 U* `
           * y  K1 a1 x) P0 \$ n
IE = 0x81;    //允许总中断中断,使能 INT0 外部中断* v- ^- f( Y  t+ n
TCON = 0x1;   //触发方式为脉冲负边沿触发
1 P- D' u/ v9 Q+ e( w5 n( Y delay(1);
! Z) O0 M1 h( m- \. V# j& R/ i# A! N
( ~2 G* o9 i8 b; r  c: R7 t         IRIN=1;
1 ~4 D4 r! \& ?1 q1 w1 b, ]8 K             //BEEP=1;
4 H: j- d& n! U& j/ _4 j                 //RELAY=1;
% O; e4 Q( K2 B8 L6 x6 U                 for(;;)
9 s. v/ L% l/ h7 P9 }4 e, ?+ \* Y6 K, B                 {
) b/ N, E4 Z7 v* u+ T          uart_init();
* U& _2 i! C+ G$ q5 \) I               
" M6 c  ^5 I. t0 f0 g1 o                  }
8 k; P3 O# z* G0 W' L( y                                       
7 t6 c% ?, T" a0 P} //end main
2 g/ B2 \0 k( B9 }7 T6 b8 w//以下是中断服务程序
* ?/ W( B8 y* [void IR_IN() interrupt 0 using 0+ l* }5 i9 }0 v+ n' ]! p6 a5 L
{9 s1 A: ?4 }) o% n
unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据
3 {  p, `8 _# t2 m  EA = 0;//禁止总中断& ^6 @/ X* F1 ]% Y
I1://标号+ c& a* u* _% ~0 Q) d' x( S& o( @
  for (i=0;i<4;i++), M/ w+ V' l! h2 l8 J
   {
4 {- v; z+ F8 S3 w3 z8 a    if (IRIN==0) break;
; |6 k. z* }/ j4 e- g$ g* V        if (i==3)) r  ?2 T& E& N. N8 l
      {EA =1;return;}//如果i等于3就打开放中断
4 k5 s; N2 Y( \, B( N   }
$ R( S6 T/ ^2 {9 O) T1 w$ p2 c  delay(20);; b- i( s: J2 k1 U/ t
    if (IRIN==1) goto I1;  //确认IR信号出现
4 v: n& k' f: B1 y& `. R  while (!IRIN)            //等 IR 变为高电平
5 o  O1 W& m" x# m4 G# A# t9 W1 w4 f    {delay(1);}
# w0 B) R' p6 p  C# `
! j- J% u' _2 m; k) I, } for (j=0;j<4;j++)
+ s: K+ R2 V8 P { 8 y- N( }8 v9 D; D; x5 R4 @! s( T
  for (k=0;k<8;k++)
# ^( Q$ ]" k9 ]% f  e' z: ]  {  |0 a: D$ y- L
         while (IRIN)            //等 IR 变为低电平: b6 Y. s- Q  n: k
            {delay(1);}
. w- E8 B+ X1 \4 `/ t           while (!IRIN)          //等 IR 变为高电平* Y* S4 Y: b1 s) W: T
            {delay(1);}
, @3 d5 g( p% l4 [7 u; }$ C     while (IRIN)           //计算IR高电平时长; H0 J! I8 J& }5 e
      {                           //如果IRIN等于1的时候就计算delay的个数
- W4 w4 i: B+ j$ U3 Y           delay(1);; k2 t: I6 B1 Q. u' H& O5 \
           N++;           
/ y& l, |+ v. T! n1 h           if (N>=30) {EA=1;return;}
' |' q4 E6 H1 d! I" x* O& S          }8 D* l7 N3 M4 Q" ?# b1 S
     IRCOM[j]=IRCOM[j] >> 1;' K5 J2 J5 Q4 u% |+ o  S/ G7 r  F
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}
  X8 c3 S5 A  C     N=0;
7 n' I: x% W. Y8 f3 @  }//end for k, x* }, z; }% \  C' t" d4 u
}//end for j
3 Z( @2 c0 ]  R9 S% \0 f6 D9 p% J   
0 {' N. X7 z! \7 T. u+ ~5 ], C   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}  }" ?( u6 P. N" E/ ]
   IRCOM[5]=IRCOM[2] & 0x0F;
/ ?) F" y* f7 x7 @, O   IRCOM[6]=IRCOM[2] & 0xF0;- F, b, b% m6 a
   IRCOM[6]=IRCOM[6] >> 4;
" y8 o  j7 H+ h4 {0 n% [2 G, J, {  // beep();
/ [! A* g: c* u9 D  v0 u% j   EA = 1;/ ]: V& k8 {4 @

( w) z$ v1 ]# K) b, r- S          send_char(IRCOM[2]);
" ?& C6 v1 b/ j  {) X7 H" L  u& b! e( w" U) h' c
}//end interrupt
* X. Y4 y; h1 X3 ?% j2 o" S6 ~4 I2 H" S' l1 T5 I
//下面是延时程序
* n- }. }" {! s% tvoid delay(unsigned char x)//x*0.14MS,unsigned char x是参量
6 q6 z7 [0 x9 P2 F{
  x0 ?* n9 L! `* N; q+ Z unsigned char i;
2 t" E- ~3 z, A         while(x--): P9 U( H6 O- k2 e& k
        {
  X" {# w6 R: Y) I9 ^                for (i = 0; i<13; i++) {}
$ r1 O6 P6 d7 u1 C* K0 j8 p        }# y$ ?" S: \9 D! q+ _5 \; e
}4 {: ^: R$ Q2 w
& j  w' O* W' ]2 i
//下面是延时程序
  n& z- ^3 J9 k( t2 \void delay1(unsigned char ms)//unsigned char ms是参量: R7 e/ j6 Y% N/ s6 O1 `; q
{
1 q1 a0 }. }: l0 N5 T unsigned char i;
- a5 {" c6 x& s4 ?         while(ms--)
; |. B& l' Y/ X. G4 C6 u        {
& I. ^! L; E) w9 N/ U                for(i = 0; i<120; i++). @$ X/ m+ T4 ?' L/ K
                {* k- P& g, k5 Y. W5 v
                        _nop_();* t( X' x6 a- X1 k/ R
                        _nop_();/ G5 e8 i# V5 u" U! o' V$ e' D( R" ]
                        _nop_();
- Q" h6 K) p' z6 X$ f0 L9 |4 ^                        _nop_();% t2 o$ y: i- K% c
                }+ ^2 u9 \) l! T9 Z
        }
0 M1 p( f) b4 o9 Q0 M}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 14:15 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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