找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 452|回复: 1
打印 上一主题 下一主题

遥控器解码

[复制链接]

6

主题

32

帖子

107

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
#include <reg51.h>
2 G% c0 ~/ O1 `4 F#include <intrins.h>
/ k) R( Y& L% h/ {9 ?* t4 lvoid delay(unsigned char x);//x*0.14MS
+ N0 t" A. R% A. }8 [7 nvoid delay1(unsigned char ms);
8 a6 m" s7 z5 Cvoid send_char( char txd);
& i( A( h5 w4 q# ?  q. Qsbit IRIN = P3^2;//INT0(外部中断0输入口): {, M- p: |/ \6 V( w7 h$ M! L
typedef unsigned char uint8;' [% @1 {7 l# R9 U& v9 \
unsigned char IRCOM[8];0 q9 t' s5 Q5 S% K/ N  f
unsigned char code table[16] = 7 o, e" B- ~9 _1 D/ `3 d1 ^7 ~
                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
! Q( a2 @/ q  ^                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F
* N6 ]& Q1 G* N) b/*波特率:9600*/
  P2 u9 Q- B; p; e7 E, F; nvoid uart_init()/ u* F7 e* p. r) M4 Q: Y
{9 f/ ^: T/ k5 f* R- Q
        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率  \; b' m6 K0 I: e, F1 l$ T5 v
        TH1 = 0xFD;                                // 波特率96009 N+ ?- j3 `2 l& W
        TL1 = 0xFD;+ m2 m' N* q# ]6 n% _
        / j+ k5 a2 H. J6 q
        SCON = 0x50;                        // 设定串行口工作方式- t. t( C0 u! v. I. J# z$ E5 O6 D
        PCON &= 0xef;                        // 波特率不倍增5 _$ e. F2 r$ q9 y
               
. |, n+ V% O) _1 \; ]4 G( Q) t        TR1 = 1;                                // 启动定时器18 F) F% A* P# p4 Y) a* Q. }
       
+ I+ S" o# ]' L. d/ u: m}8 F+ B' G0 B1 Z7 ~8 v
/*UART发送一字节*/
0 ]$ {9 [2 R- i! ^- c; U
. u) v$ C2 o% c; vvoid send_char(unsigned char txd)
1 f  b; O' w0 C+ a' J0 O9 e// 传送一个字符0 M/ p' L7 T9 S7 N
{6 q  {% b' b6 x9 T" u
  
) b- S- d" c) v0 k% U, k        SBUF = txd;  k  K, i4 S4 R- i2 J/ F
        while(!TI);                                // 等特数据传送! n1 m% f8 |, V4 p" x: l1 a& T5 e
        TI = 0;       
7 o% @$ b( O6 ?/ |" V4 x                                // 清除数据传送标志! r4 i2 N2 P9 j1 q
}7 p8 _" P2 z( W: |
main(). J- j0 t7 B+ y8 _
{
4 y8 `  E! X% Y0 M# Y           : ~3 z* I  O* G/ ~
IE = 0x81;    //允许总中断中断,使能 INT0 外部中断
6 E2 @6 S  ]8 _# L  ` TCON = 0x1;   //触发方式为脉冲负边沿触发
' ~7 t' B' `$ e. v& ~ delay(1);7 _7 D, W' x" G* g
. T, y2 I6 \( J; T+ w8 q# ]
         IRIN=1;
2 t- A% G4 T, c             //BEEP=1;  `  Z2 V7 v- e, A
                 //RELAY=1;
% k5 Z" }# V! s  M  k1 e1 ^* u                 for(;;)/ @& J! o! ~+ w' l) R
                 {
% G1 u. p1 c" T4 G9 B! A$ k3 @1 ?          uart_init();# i5 [) l! K2 ]# ~8 {
                  V6 I4 H' e" V5 l9 I8 i
                  }
5 |7 w1 E# i0 L& |: ]/ `                                       
/ }6 s  W. V) I! d# o* s( y} //end main3 ?; x2 s9 J1 \" h
//以下是中断服务程序: ]4 G' G. L2 ^. m# E
void IR_IN() interrupt 0 using 0
2 H. e: S6 `5 z. w$ I  J{
( F, _/ D; Y- m6 y# q3 O7 J! S unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据
1 R: N. \, V( C  L6 J  EA = 0;//禁止总中断5 t' G) X# j7 @
I1://标号) A+ r- ?9 @& ~5 }7 r7 @: S8 _3 i' @
  for (i=0;i<4;i++)
9 p. q% B$ V9 q) z" F% ]   {
/ D- D. H: z7 b5 K1 t* x    if (IRIN==0) break;2 p, l4 M# j+ J+ Y1 ^# X
        if (i==3)" o5 r* G  }3 }  P" c
      {EA =1;return;}//如果i等于3就打开放中断8 S  t7 t8 Q: A* q
   }9 a' a. i& d' p" F9 d, G1 _
  delay(20);3 P) I7 }- Y/ I1 g6 x8 `
    if (IRIN==1) goto I1;  //确认IR信号出现0 m' \5 b8 b/ u
  while (!IRIN)            //等 IR 变为高电平
# ]( }/ g, Z; g8 I% L    {delay(1);}
) H0 }5 O) g7 ?( V/ w0 Y+ \# q$ q! x, g8 i4 d/ y6 H
for (j=0;j<4;j++)- y# }7 L4 C# \6 k4 Y
{ " V2 G, ?( E$ i4 a* u1 z
  for (k=0;k<8;k++)
0 }! m6 T6 t/ e4 f% @  {
( P1 w5 c7 C! G1 D1 g3 k4 t          while (IRIN)            //等 IR 变为低电平
2 G5 d# M6 A( l; S" o: t+ I            {delay(1);}
+ E2 s' s3 w2 g, I" F" k           while (!IRIN)          //等 IR 变为高电平: f' Q. U. _* O) Q4 U/ f) o
            {delay(1);}3 a) @$ T4 @2 n! {
     while (IRIN)           //计算IR高电平时长6 K) z3 ~% X" I- x1 J
      {                           //如果IRIN等于1的时候就计算delay的个数
, Z+ X8 |4 C) s           delay(1);6 }6 v; s5 t4 m3 W8 ]( b( j! G
           N++;           9 |# U0 J! ]+ \/ m# P' [! s$ Q+ ~1 Z
           if (N>=30) {EA=1;return;}1 u7 I. U0 `7 b( C2 M' }! O
          }4 J& B5 f9 i! A( Z) |* n( k! ~) o' ]8 s
     IRCOM[j]=IRCOM[j] >> 1;4 c% d% D' V! ]0 A! ^: B
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}2 r' Z5 `; F  h/ G0 ?' n
     N=0;
3 G# k: j! W$ W( e; i9 m3 d" N  }//end for k
; {% j' B- [$ f6 T, Z }//end for j8 C8 ~5 p8 N  p
   4 X# p6 T+ h/ Y; L2 B: ^
   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}: h1 z1 [3 P# F- p
   IRCOM[5]=IRCOM[2] & 0x0F;% A  m/ W" W/ p
   IRCOM[6]=IRCOM[2] & 0xF0;5 p% ?9 m; @) I, z! I
   IRCOM[6]=IRCOM[6] >> 4;
3 D/ A# w2 F0 _  // beep();- W0 q) b, X0 S! \0 t) c* ~" N( d
   EA = 1;
# w. V% K/ P4 |: J7 F& _' h
  W% z( e, }! D5 R          send_char(IRCOM[2]);+ H4 \4 j4 @: a' L
2 u1 x& B. v1 j
}//end interrupt& _6 _/ P$ ?5 L" k% O6 E! [8 M1 H4 H
: Q2 S: a: ?9 I( H: j& a$ @
//下面是延时程序6 }! ]" D7 B8 I
void delay(unsigned char x)//x*0.14MS,unsigned char x是参量* F4 N4 C9 e2 q) n
{
; `2 \; D( w8 Y* D) T unsigned char i;! n. d' o; y, R' t
        while(x--)
0 f1 d) h0 ^) I        {+ A' R, x9 c/ O6 E
                for (i = 0; i<13; i++) {}% ?5 n( R2 v0 A# ]0 Z0 i4 u2 Q
        }  w2 k: i8 ]- _0 m+ @4 w% {! u- j$ h5 e& N
}
4 X# P; Z$ g# m. M( W! D$ v! L. c/ _/ a. ], @
//下面是延时程序8 Z7 k, ]! Y/ w/ ]% h3 ]# Y
void delay1(unsigned char ms)//unsigned char ms是参量
. b& N* j$ H: K  d7 ?2 r2 n{
0 Z+ O; P6 _: k6 Z unsigned char i;2 J5 }0 I  ]( K) x, D9 t0 l. o/ h
        while(ms--)6 `) b/ [( x* _, l, }
        {! @" Q2 U8 i* r! }
                for(i = 0; i<120; i++)! ]- @) b( O+ f! X
                {
& V8 \4 M; F6 n                        _nop_();- K' o# ?( e% `0 c8 _- Y
                        _nop_();4 {, z9 i& f" L
                        _nop_();
9 l- Z0 ?" g& p9 N2 |2 P" a7 F                        _nop_();
$ W/ d/ u$ G+ i- _( {3 l$ T                }
: k" u3 H# J2 K/ P# n9 Q        }
, ~0 z6 S# d* v% z: S% ]}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

16

主题

528

帖子

2401

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2401
2#
发表于 2014-7-18 13:56 | 只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-2 04:39 , Processed in 0.056853 second(s), 32 queries , Gzip On.

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

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

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