找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

遥控器解码

[复制链接]

6

主题

32

帖子

107

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
#include <reg51.h>/ n$ R3 c) d- `! E
#include <intrins.h>
& y! o4 ]! @' p' b' `9 ]+ @void delay(unsigned char x);//x*0.14MS
) n0 O( t( y9 J, B- C6 H* lvoid delay1(unsigned char ms);0 c- e5 }8 U* m
void send_char( char txd);& M0 [( z/ ~- f# A9 ^$ z/ E9 W8 Z
sbit IRIN = P3^2;//INT0(外部中断0输入口)
8 x+ H, k9 U2 {( Q& `1 Q/ {typedef unsigned char uint8;
# r" t0 J/ D; O# N1 lunsigned char IRCOM[8];
# W8 l9 F0 X& I' ~; O# N. \unsigned char code table[16] = # D  w; }. j. c6 V* G6 @# W
                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
  A7 C5 [+ d3 N+ h8 l4 P                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F/ F' o7 a/ H( X0 ]; Z9 F2 s1 D( t
/*波特率:9600*/  }( m& @$ ^9 H3 I( X, V
void uart_init(), x9 L3 ~% m7 _5 S- m# L  l
{$ c" x* j$ l5 I
        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率- \* N5 @  \* g9 a2 G5 D% C9 M! ~
        TH1 = 0xFD;                                // 波特率9600( `8 S) |3 U( E! g  C# I3 _' X0 X
        TL1 = 0xFD;
. l6 U$ g% g- K  l0 ~$ B: e        ( n! X( m. j" j3 u/ G
        SCON = 0x50;                        // 设定串行口工作方式
) O1 D# g6 _* h! c' i6 u! }1 ]        PCON &= 0xef;                        // 波特率不倍增
, F- g* R. C0 u* m, k               
0 Y& k' y& ^( V5 }$ x5 _  G7 o        TR1 = 1;                                // 启动定时器1  g) C$ ?+ O3 x/ c4 `2 _
       
! R6 Y& v2 o1 P}
7 j. t' m2 @8 J1 k* g" v; D! ?2 o/*UART发送一字节*/
9 J! T( V) E. ]
, p$ ]1 F& X# g* N5 hvoid send_char(unsigned char txd); c- C2 o1 X2 }
// 传送一个字符
, X0 ]# W" L& ]( y{
! d" a, T0 T/ L  
+ {2 m% _0 ?9 W- |        SBUF = txd;* X, q3 X) \& B2 a; o! s
        while(!TI);                                // 等特数据传送, n6 B7 A& C; S
        TI = 0;        # _* _1 K! G7 r# a7 T6 P8 D
                                // 清除数据传送标志( `* q  S8 G/ W  m8 F% R* \' O
}: e% J! _) v* V0 _& f8 a% M
main()
$ ^: O7 q/ x& b) |8 [, @{
% _! M2 v' K+ p7 h) H+ c          
- n' D" T) V) `: M) ]; ]2 A/ | IE = 0x81;    //允许总中断中断,使能 INT0 外部中断  @3 j9 p  \. N0 J% v5 Q( I2 {
TCON = 0x1;   //触发方式为脉冲负边沿触发: y; ?+ M  Z8 M4 D3 Q8 h
delay(1);
. k( E  w) t- K  w4 i: F% K3 N
9 K0 }9 r# \8 x/ p7 H: h0 A; n3 |         IRIN=1;  G, x! M, T5 f: P' K7 |
             //BEEP=1;% r7 K. p; U9 E& n) J% I
                 //RELAY=1;
* R3 U, c0 J- ^' L, m/ |                 for(;;)
0 y. D; l3 ~; V2 u                 {0 V9 T! t. |- L* n
          uart_init();
: F7 D) b8 w$ h4 l) W( S! ^7 q; `                9 o( v. X: Q( J* y8 O1 j
                  }+ ~+ U7 ~2 I6 f3 b# s6 I& [' Y
                                       
) c. ^& ^' l# s6 [" p/ [} //end main
. T( q- ?% |/ c6 I( U+ T//以下是中断服务程序* g8 b( q2 @7 g% W2 i$ \
void IR_IN() interrupt 0 using 0
9 l: q$ z0 z- |& L{
1 H. ^1 B  m& Y1 p7 @ unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据7 T  h$ X6 P) a9 b$ w) K
  EA = 0;//禁止总中断
# S" h# a& a1 k4 s/ o$ bI1://标号2 w* v0 Q# ^2 h7 v% [7 h: t6 [
  for (i=0;i<4;i++), \- P1 _8 d8 P4 u* k
   {
! `0 s' S# D+ k) R; t% D    if (IRIN==0) break;
3 t* p1 s' V' [  m1 r        if (i==3)
! z3 r. }0 X8 {6 Y/ b7 H, L& u      {EA =1;return;}//如果i等于3就打开放中断
6 X0 M$ V2 o8 `; {/ z3 V( @9 m# N! K   }) F2 E8 n- |. V; o$ t4 i
  delay(20);
3 m. M% y8 f0 p    if (IRIN==1) goto I1;  //确认IR信号出现+ |- Y& f0 |& k( s) a
  while (!IRIN)            //等 IR 变为高电平% M; T; I+ S. j
    {delay(1);}" a/ u* W  i/ V! `0 K

% d; `2 m6 M1 M  h) O for (j=0;j<4;j++). M8 S$ H1 w- i) g4 D) \
{ $ S1 e4 E3 h: x
  for (k=0;k<8;k++)% u6 l. h9 K) K+ ^# l( `
  {' a( [6 Z- d7 U' }* o
         while (IRIN)            //等 IR 变为低电平( w  m# S) b5 G$ ]( I" w" n" v
            {delay(1);}
& t0 v2 N0 m9 R" x% B           while (!IRIN)          //等 IR 变为高电平$ z9 [; ?+ Y1 p8 M7 E% Q
            {delay(1);}7 x; G* Z1 T+ E! V9 ^2 g
     while (IRIN)           //计算IR高电平时长
+ N( g# w$ v# I0 s: a9 ~      {                           //如果IRIN等于1的时候就计算delay的个数5 X$ k8 a6 k# M+ h! h3 H4 A; [/ {
           delay(1);  \, U/ B3 i0 n: z8 ~1 z2 K& G) p' d
           N++;           . }$ Z- v. w" q: ~2 {3 G3 Z  R
           if (N>=30) {EA=1;return;}2 `/ H5 `' A# B1 [+ G1 ?3 {
          }
3 B0 S" l" u8 ], o- C     IRCOM[j]=IRCOM[j] >> 1;
4 F' c: O1 M3 C  \  E     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}
$ o& i/ M( g- {     N=0;  [* x) n" }3 t; g& n
  }//end for k5 J7 D9 ~" v2 z4 o& ^% Y9 c$ U
}//end for j
1 m* Q3 Y  r# S' {/ V( e) F   : l5 G5 b4 e5 ^: T
   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}" n6 M  c' }" [
   IRCOM[5]=IRCOM[2] & 0x0F;
9 d0 L$ I7 _* w9 C  o   IRCOM[6]=IRCOM[2] & 0xF0;# z: {, a1 m+ W8 v7 s$ @
   IRCOM[6]=IRCOM[6] >> 4;9 G9 h$ T2 f$ h0 s! N2 ~
  // beep();  a: ~+ l& A" a" s, U
   EA = 1;) m; X! r' S/ v: a- o# q  Q
) q6 v1 t) ^5 A2 U
          send_char(IRCOM[2]);9 z& z  R9 T1 L0 A

* B6 s7 Z6 f  ^$ ~}//end interrupt3 ~9 w0 n: X3 @- \- i
  o) u/ Z1 v! o: B; n; A1 R0 P
//下面是延时程序
, i+ ]' _8 p  J. gvoid delay(unsigned char x)//x*0.14MS,unsigned char x是参量* \9 F9 {: I7 R  Q
{$ h/ V- r9 z' u5 z3 B% v  \
unsigned char i;
/ ?0 b$ T7 s# B, t5 ~5 A1 U         while(x--)
: g0 c  Q- \( S0 e9 P4 n2 Z8 V        {
7 c5 r) f3 x( t, q5 p* Y+ G                for (i = 0; i<13; i++) {}
& J  O% A3 y& _6 j0 m/ k+ m8 I        }  b5 W, N5 _* Y
}
3 Q$ q7 w! ^; p% J& O( e5 K1 V# [6 |- l! V& M
//下面是延时程序/ E3 k$ g. T4 Q
void delay1(unsigned char ms)//unsigned char ms是参量
* v  F3 x6 B3 g$ a{
; Z4 }% r$ k9 d3 F9 c  D unsigned char i;
9 H8 {  ?6 y$ A/ e; A         while(ms--)
* V3 G+ N( k5 r9 y1 G" }2 w* J7 y( Z        {9 {% ^+ @9 B7 p
                for(i = 0; i<120; i++); e" e! T7 t; ?& f6 d& x! ~& m- w
                {
+ m7 X$ S- C4 r* N8 s                        _nop_();+ Y  K- t5 R7 b
                        _nop_();
* a/ K7 _# a6 \$ {, U- ]                        _nop_();
1 x, S" L  g1 a7 b# v  W                        _nop_();, J2 R1 G  G0 P. ]
                }( W  G, f$ d4 }, s  W
        }
( o" A4 T, k+ ~+ L) i0 [}
分享到:  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, 2024-11-23 04:10 , Processed in 0.055306 second(s), 32 queries , Gzip On.

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

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

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