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

遥控器解码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include <reg51.h>
# X/ B0 `+ N7 N#include <intrins.h>
4 E: d% p9 _& V' z1 n# \; l  m/ {void delay(unsigned char x);//x*0.14MS8 H# R. c& w2 ]' |! Y& v! J# c% B5 f
void delay1(unsigned char ms);4 C/ k8 d$ K/ ]$ N- |: j
void send_char( char txd);1 C; n9 w% T5 W/ h# t
sbit IRIN = P3^2;//INT0(外部中断0输入口)
$ Q0 }1 K# m9 c  L- P8 T+ ltypedef unsigned char uint8;
0 k5 D# G# c* c3 S4 E: _unsigned char IRCOM[8];% g( V& j! Q+ h: H
unsigned char code table[16] = 7 ^' |0 U4 G3 n& J5 e1 o- Z
                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,! Q* c% F+ h+ I8 M& v
                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F
5 @" U. X9 t/ H8 n: t, E/*波特率:9600*/
1 A4 |5 D, @# d6 }+ p" X7 y8 I1 Evoid uart_init()
2 c' D  ^" n; g+ C{' h7 G) B" i$ Y5 K: Q& ~
        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率
8 _. B) r' H3 b- v9 X        TH1 = 0xFD;                                // 波特率9600
5 F4 s: t6 S. B        TL1 = 0xFD;/ M6 T  @, E$ z3 n1 g1 w
        1 z9 Q8 B' [; J* d% E) _7 D
        SCON = 0x50;                        // 设定串行口工作方式7 l' f0 X( q2 ?+ l, _! m+ c
        PCON &= 0xef;                        // 波特率不倍增+ s: h: D3 L7 Y, G+ w7 G8 D
               
" V6 l- ]( @/ Q& m" G/ O  }        TR1 = 1;                                // 启动定时器1# z3 `# u7 l2 K* l5 K) \5 [
        5 `: ~" X. w! ]. k9 c6 D
}. [8 a4 x+ z- G* _7 H* w  K% K
/*UART发送一字节*/
! b, m4 ?6 n, p* w/ Q) X1 P7 P# z) {! m5 g$ l
void send_char(unsigned char txd)6 b1 T+ p4 P' S3 M& i( D7 R0 ]6 ]
// 传送一个字符
6 p4 ^9 p8 F* i' \9 `3 h/ Q{
, t; ]: E9 A/ a5 G  
" k! e& p& x4 g! W+ ?8 O3 z        SBUF = txd;5 G+ v7 [& a& @5 J3 n; e: f) c
        while(!TI);                                // 等特数据传送- v8 R* @8 _0 |- R
        TI = 0;       
% Q8 N+ E1 e. i- F2 N: h# Z                                // 清除数据传送标志
1 p& x* x- |4 U, l4 y7 P. D) c}% U6 U+ U9 B0 `3 h, l$ z5 x
main()3 ]& z8 f7 x/ q0 S0 M5 Q! l  W
{
5 q. t# d( u  y( E           8 z1 h; S; D8 R$ ^" @+ g. o8 ^
IE = 0x81;    //允许总中断中断,使能 INT0 外部中断
- d  ~7 j0 N) u6 ?" L" m TCON = 0x1;   //触发方式为脉冲负边沿触发
- s/ d/ f# n+ b delay(1);* M: D& A- |+ P; z3 ]

6 A, k, {& k: ^8 ^( C         IRIN=1;
1 m) |6 i8 G/ T9 t2 J' S* I             //BEEP=1;& p& n4 Y/ `& T
                 //RELAY=1;( @/ e  o& y6 B0 m
                 for(;;)" F1 C4 @& ~) u2 L: b
                 {
8 A) T. i3 q" n, ~+ G          uart_init();3 j" A  l  r) U$ S
               
+ Y1 Q* `- W& m                  }
/ @1 j  L3 Q% ?- n0 u$ M+ \                                        3 v9 z9 s4 q( {$ C6 e
} //end main
3 A- }1 D) U/ ?# d9 c) ]; g//以下是中断服务程序6 U6 H$ W, ~- x& m, C% @1 z' B
void IR_IN() interrupt 0 using 0
/ n% ~* l. ^) @0 G( \) ^: [: p{7 \1 q' h; o, S% k0 K6 d) V
unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据0 \+ |# y' M+ ?& |0 \2 x
  EA = 0;//禁止总中断3 r$ S1 s/ ^  d5 M4 t, O0 g
I1://标号
( \4 R0 o! F% J+ H' m5 e( f! ^+ ]  for (i=0;i<4;i++)
5 s1 e7 @# ]4 m' V9 D: ~! q# e' r   {8 H' Q& V2 W; d! E# O
    if (IRIN==0) break;
/ V$ B- I4 [" [        if (i==3)
. |- D  H8 [5 o! T6 F( u      {EA =1;return;}//如果i等于3就打开放中断
& w. Z8 E! c. J9 k% z   }
1 [  F, n1 Q4 J2 W; }6 F7 q" d, ^$ e  delay(20);
6 H* d0 l( {% C* p5 N; o. v3 o, f    if (IRIN==1) goto I1;  //确认IR信号出现
5 E% w  c6 P! L3 `1 T' W. s2 [  while (!IRIN)            //等 IR 变为高电平
8 ^; _% A8 R. `0 O    {delay(1);}5 B' e# C) ?  V- O5 J4 z

- i3 J$ T  S' O' J0 h) b for (j=0;j<4;j++)
3 o, ?, x  S" m& T { 8 E1 B3 u. I  A9 \9 F& c( p1 K5 ~
  for (k=0;k<8;k++)
9 r, \- @9 h% @2 `% Q  {3 ]5 J( m* Q9 U7 @4 E9 c; `( T
         while (IRIN)            //等 IR 变为低电平
  {& [2 C) _8 Q1 w! N2 j            {delay(1);}: l0 x) f: l0 S0 {+ V% g+ w# L3 H
           while (!IRIN)          //等 IR 变为高电平5 v% ?$ T+ o  V9 D( e/ G
            {delay(1);}9 f$ P! D+ G% _0 D: ~  H+ }
     while (IRIN)           //计算IR高电平时长
# h6 u% h& y7 F$ t6 p" q      {                           //如果IRIN等于1的时候就计算delay的个数
0 J1 r* a( |4 U1 A! K           delay(1);
: l: T. E. E! W: {$ f2 r           N++;           
# ~% k& t6 y5 [7 h           if (N>=30) {EA=1;return;}  X3 C/ \, Q/ |" ]0 n- a
          }# H' D* [5 E  \2 n2 a- B8 E
     IRCOM[j]=IRCOM[j] >> 1;* y0 F( ]5 P$ T& ]! Z
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}
; f4 }0 i2 j1 K( Y7 ~     N=0;4 _" @( f, Z1 `0 @
  }//end for k
: X1 f, B. i! N$ W$ x& Z4 V }//end for j
/ J( \/ V4 L. ^- G% }8 o   
" X0 x2 T! E( `" G   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}
0 _  E. B( H! l& x. `/ v, J   IRCOM[5]=IRCOM[2] & 0x0F;! u; p  K0 \3 h
   IRCOM[6]=IRCOM[2] & 0xF0;
) l( t& G( P6 O# q1 Y6 `7 j% A   IRCOM[6]=IRCOM[6] >> 4;, d6 S& Z4 n- H% L: I& J
  // beep();8 ^! c" E: g5 J5 V5 b
   EA = 1;  P3 H! M9 B  L# L
. x' f. K/ B3 s& ~
          send_char(IRCOM[2]);3 C4 c( ~' \$ M9 P" u4 T' D. [

7 H+ k: |) ^: D) [! t8 m}//end interrupt8 L- V9 }/ O( c3 o8 b' x: E

: n: ^0 P/ C+ ]" M( r//下面是延时程序
* I1 m5 a  \4 `. t) [$ i5 Tvoid delay(unsigned char x)//x*0.14MS,unsigned char x是参量
, ^! ?7 v4 K+ C, }8 Q/ j{
% G/ G% a# k$ G9 E7 H- z8 n  L- i unsigned char i;
' o) R& K5 d* x3 ~+ E         while(x--)
* K9 V0 t8 ]5 k# W        {
( D; ]' B% z7 p8 C' M# N0 A                for (i = 0; i<13; i++) {}
) X: E0 w0 O' J6 L$ V! T        }" ]! O7 P2 G. k+ e( A
}
1 ?* _5 {+ I8 J9 Y! s, L8 r6 b; C. k
//下面是延时程序
- y) ~. i4 t1 l3 x, R5 l1 {void delay1(unsigned char ms)//unsigned char ms是参量
9 n/ U7 `- ?3 _9 d- p9 _{
4 H9 J7 N& @( L9 O unsigned char i;' P: F5 o4 i/ h4 _' Y) t) Y) q/ z8 \
        while(ms--)0 k9 s& l" m: G' c8 \$ N
        {
- R" w! {. i( u; q                for(i = 0; i<120; i++)
* v% w- j: {5 Z8 e! e6 N4 R                {
5 [, W$ l) K( S: ]+ n                        _nop_();! e& c( I/ w! j
                        _nop_();! p2 I5 B& g" l  }: ^* o1 n5 e: x* }" z
                        _nop_();' O" n+ m% B3 x# M
                        _nop_();
0 C$ b( r  b3 U" }( Q0 H" S                }8 z: O. b- {/ P. H& l
        }. H: [$ |; |2 K
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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