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

遥控器解码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include <reg51.h>' n, a& J( K& y  N: j
#include <intrins.h>
( v* C5 P  _  V8 y- Y3 Evoid delay(unsigned char x);//x*0.14MS1 u/ ^0 g5 j/ q( }" f7 w( l
void delay1(unsigned char ms);# |0 j2 H) G7 A3 \
void send_char( char txd);# U. t' @9 e3 r! ?0 P: x
sbit IRIN = P3^2;//INT0(外部中断0输入口). F3 ~" \9 H, Q, O8 ~  K' p
typedef unsigned char uint8;
! `+ L2 ~+ c8 R% r% `$ Zunsigned char IRCOM[8];
' V/ h" S# T6 ]# y6 V. j1 h9 tunsigned char code table[16] = ) T. N2 p: d4 j- @4 B
                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,& W7 A/ }, k0 [/ w& b5 j! W! ^! y
                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F2 P7 _, `7 H# a5 p" B8 M
/*波特率:9600*/* W/ N. A$ e: y2 k
void uart_init()7 y' w8 J- Q8 Q% J. V8 {
{( p  C* H% M! }) g9 Q; x; _, F' d
        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率1 \* d7 ?; ?4 E( N0 `5 K  X
        TH1 = 0xFD;                                // 波特率9600
# [% V+ H) r, K; s8 w+ x        TL1 = 0xFD;+ n" ?6 l# g( n* l7 d% t' R( e
        ) v- ^; ]! `# ?  ^: `9 C
        SCON = 0x50;                        // 设定串行口工作方式
( M% }  K+ V0 E/ Z2 o: m        PCON &= 0xef;                        // 波特率不倍增0 F3 [, A  U% |( U& T7 k
                0 J% W$ r% ^) Q9 ~1 Z
        TR1 = 1;                                // 启动定时器1
7 {. E  h3 [$ f- G" _7 O  d        - c! N* f, @3 J+ q7 D- y, G
}
* V9 W8 @' I% }/*UART发送一字节*/
) A& s  ]1 O: a! ]4 e" ]
6 }# a: }1 W( z( s( fvoid send_char(unsigned char txd)* |% K9 L+ [: k+ b% ~& B. \) K3 v
// 传送一个字符5 s/ q1 B: c# U5 z' ^) X
{. ^  Z4 I! @1 S$ L0 O
  
" K) y4 D& U. r. n+ V) i        SBUF = txd;
2 w" t! V, ~  n% K1 S        while(!TI);                                // 等特数据传送& `$ M$ H$ c4 I
        TI = 0;        3 X7 `4 }) I- t. W( e  o. u8 o+ S
                                // 清除数据传送标志
/ J( B( F5 b: e7 i8 g}- ~" ?7 p6 n4 |: Z5 ]8 u+ f2 i
main()% B  M  V* E* o) r) @
{  V4 k% y) a% U( l0 a, y4 {
          
2 T, x3 H( o  ~9 [: h IE = 0x81;    //允许总中断中断,使能 INT0 外部中断* @+ x2 X* o0 U2 X; O
TCON = 0x1;   //触发方式为脉冲负边沿触发% N0 K. F) C' Z5 V1 `% h' P
delay(1);2 I( y6 q7 E( U2 M8 \

$ y( t/ H% g3 E% |! s+ [" w/ I( x         IRIN=1;
. m8 n& n  @0 C             //BEEP=1;$ \) I- K! l! |* l6 U
                 //RELAY=1;
, B  ]/ L& \; z, |% Q5 S                 for(;;)9 U1 f! h4 P% f$ I
                 {* M) p$ R0 K- f9 h3 f, M* j
          uart_init();
" I! h2 j6 g/ K               
# e0 C+ Q  u! A                  }
8 }* M6 H5 r+ M                                        + P+ U6 G( E; }/ p% N
} //end main. Z4 h% J3 R! Q. }) q3 g4 I& b
//以下是中断服务程序, |6 [, J# I  A, \1 ~% b5 z
void IR_IN() interrupt 0 using 0
8 o! M9 Y6 Q0 [# {" u4 i{
" w# V; m- j- R( v unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据
  w+ e5 Z. [  P# ~/ s; |  EA = 0;//禁止总中断# r# r( f& c2 n) {& T1 r  H* x7 Z- c- P
I1://标号( T" y6 O, X8 F1 a
  for (i=0;i<4;i++)
) V2 W5 A- F: p   {% D/ b. \  l9 X6 z: ~6 k
    if (IRIN==0) break;
. L  C* n6 R0 W2 A8 j        if (i==3)
% h0 T6 ?" q& x8 j3 W6 `/ V      {EA =1;return;}//如果i等于3就打开放中断; T# @# Q, G. y  j5 C8 Z+ {2 b1 N
   }
. R* {" z  g) Y# k) U; P6 Y  delay(20);
' ~' V9 m* F- s4 h; n4 x: m+ M3 u    if (IRIN==1) goto I1;  //确认IR信号出现9 m# e7 r- r3 h& {( D, f9 w
  while (!IRIN)            //等 IR 变为高电平. V7 ]$ s/ E) w+ e  Q
    {delay(1);}
) a! H$ r) ?: i) }* |0 y0 D. ]( g( g$ J: p; v# ~+ k1 [
for (j=0;j<4;j++)
0 e3 r' e! g3 Q/ Q% w { % k* F1 H8 y- p. k& ~, K: G% f3 m2 D
  for (k=0;k<8;k++)6 _' G. Y/ ~- B( \
  {
" Y1 n0 S2 P6 A9 I) S/ \' E  D% u2 j          while (IRIN)            //等 IR 变为低电平/ d" Z% w( X& q0 y
            {delay(1);}' |1 l7 W0 {7 Y& J6 H+ X
           while (!IRIN)          //等 IR 变为高电平
% N5 Z! T0 z4 R+ l) {1 U            {delay(1);}9 P/ J& W- z. \0 R
     while (IRIN)           //计算IR高电平时长, |( Q( o) ?0 K) ~
      {                           //如果IRIN等于1的时候就计算delay的个数9 _  w8 O$ y9 V- E
           delay(1);
. w/ {* g/ x6 C. `! x3 ^           N++;           $ s$ c2 U9 }  Q1 k: \. P( Z
           if (N>=30) {EA=1;return;}( z4 ~2 j+ q! X' Y9 H6 Y
          }
% s' W5 @' u9 v% l5 x' n     IRCOM[j]=IRCOM[j] >> 1;
( k  {5 H$ d! [7 h     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}
* {: C, ^, ^6 ^5 x6 I( q9 C     N=0;$ p3 g5 U2 e( w2 J' B. x
  }//end for k
* V% ~; `3 Z. P; R7 u }//end for j6 x5 m( B' N3 N  M0 @7 ?# ]
   
' R# y( \5 S. d: c- k* L5 I( p0 Q   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}( l$ f4 Q1 L3 ]% y& L
   IRCOM[5]=IRCOM[2] & 0x0F;
3 _  R9 C: K1 a* K, t   IRCOM[6]=IRCOM[2] & 0xF0;0 H# h/ X; J! a
   IRCOM[6]=IRCOM[6] >> 4;
+ V- N7 |2 M6 s; h( q2 l" x  // beep();; Y) q! |8 u' [$ b9 U$ P
   EA = 1;
+ ?9 @& r6 G1 l( F) r8 d
9 H) d4 h$ {3 B2 W/ F) |& G          send_char(IRCOM[2]);% l2 \9 T( v9 Z; ?+ w

# n# F. x( b% q! B, a$ C+ t0 j}//end interrupt
0 N- p8 O$ d' x3 i$ E- c6 ?5 @
//下面是延时程序3 j* k$ p, V9 Q) m
void delay(unsigned char x)//x*0.14MS,unsigned char x是参量& D5 i/ x- _# n3 H  |: k
{: S( Q3 O- u" c# L# `' |
unsigned char i;
6 y; X- T% ]0 d, m         while(x--)
7 K3 Q. q* ~4 A0 N2 m5 k) z$ T9 E        {4 J' ^3 v) C8 y# e
                for (i = 0; i<13; i++) {}, |& l1 e% G8 Y
        }# z3 y+ Z6 e. f' B
}' N& i, `7 N. f) ^7 ?

+ F9 s" Q  _! B5 D2 w% d( [//下面是延时程序$ ^+ B3 i8 q" V0 i9 n
void delay1(unsigned char ms)//unsigned char ms是参量6 t. I) U  U% M+ T/ U) Z
{$ E2 j1 B5 [2 d5 q9 Z! s' b
unsigned char i;0 U; H+ x( S- X* |0 k' A  E
        while(ms--)
: o! t* R2 h; [        {- p1 d) V- F( _
                for(i = 0; i<120; i++)6 Z( k/ I4 L( Q- q
                {
' W; @% I& W9 W/ c3 I5 M0 J( E                        _nop_();
/ L0 T0 G+ X# C3 R                        _nop_();! j" n4 s$ P; m3 u! q
                        _nop_();4 V1 o8 @# m# v4 a8 q- ?/ a
                        _nop_();' t0 l. P( f6 [2 D* f
                }- d% [+ |7 e0 G3 O; h( s/ C
        }8 [* x8 I! w  T; K8 A. Q% r" P8 {
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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