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

遥控器解码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include <reg51.h>
$ _2 i# t( S  h! g( P( |#include <intrins.h>5 B& B9 O; i% {3 M' g' {
void delay(unsigned char x);//x*0.14MS2 _+ `9 r9 b! J/ q; X
void delay1(unsigned char ms);
3 F8 U) a8 j6 Z- I3 svoid send_char( char txd);
7 i! K' C5 P& ^sbit IRIN = P3^2;//INT0(外部中断0输入口)
' G5 F& v4 F0 o. {- Z. Gtypedef unsigned char uint8;9 B- [3 f1 C4 @; X. {7 S9 M+ S
unsigned char IRCOM[8];
; e  b( }* \  D6 ounsigned char code table[16] = . S# M. D, I1 t7 x+ l  A; S* ^5 |
                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
: c) o& M& `( R, N4 w7 p                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F
6 ~1 S7 p4 n  x/*波特率:9600*/+ D/ G6 c) f% N& P
void uart_init()
% k, s/ w7 u2 z8 R4 h5 [{
; f0 U1 b3 U7 p' |        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率0 Y2 e' L7 K5 {+ `6 M
        TH1 = 0xFD;                                // 波特率9600- a/ V0 z8 _1 t3 w; M
        TL1 = 0xFD;
) _" W/ a  f: G  L3 F- d& M4 ^       
+ w# K8 j+ v7 a. G" x  `+ O$ G        SCON = 0x50;                        // 设定串行口工作方式+ Z  t" l8 V  V9 z
        PCON &= 0xef;                        // 波特率不倍增
( X6 m' ~/ s/ N) @/ X1 `1 n               
8 J6 Q1 I" l% X, a- W6 y/ g5 C  p        TR1 = 1;                                // 启动定时器1
% }, O0 ]+ T% n, B4 H       
: W* W1 |* C- x1 ^% t$ U5 X}
0 v  }. E# B3 }5 N; A9 a/*UART发送一字节*/  Y4 A# Z4 L' ^7 L! A  [
# N( ^3 Y6 ~7 p0 K
void send_char(unsigned char txd)$ b* g0 w! e- v
// 传送一个字符
( q  G% X' U/ c4 |) |$ K{8 J; ~. U; E1 c7 ^% \- w
  : j' p) i7 V* Y7 a+ s" P2 D
        SBUF = txd;
9 W- ?2 k( i) c# {        while(!TI);                                // 等特数据传送
/ d( M- B" O; z! \        TI = 0;       
, k0 [0 ]" ~8 T6 }. F/ x6 P- m                                // 清除数据传送标志
9 x( v& A9 A0 |/ |5 l}# C, k' h7 \2 t. O& ]& h% n4 X/ D
main(); a) }0 G  x' h' l( n& A
{
5 p4 ]; D" G8 x2 h% c           * Z" S, k5 D8 J
IE = 0x81;    //允许总中断中断,使能 INT0 外部中断& o1 z6 N# t# I; ]' c$ z& ?
TCON = 0x1;   //触发方式为脉冲负边沿触发. c4 x5 ^" t: C3 g
delay(1);+ O  t& I! `/ f) ~, c2 e' ^8 z
; Q8 @. ^6 `8 L2 {6 S; M: E; U1 p
         IRIN=1;
7 n" k/ c/ P; G! H+ X4 T5 m( {4 ]8 \             //BEEP=1;4 H3 _" a8 F$ ^
                 //RELAY=1;8 B: G! w7 S9 D7 {* C
                 for(;;)6 u% \) g8 v1 e- Q
                 {' R, c* h: H. P& e: m  z
          uart_init();4 Q* ?% I) T3 p
                ) k2 c! k* e" k, V/ L' x) X( \
                  }
% @" D4 z) \8 W                                       
6 ]- z& Y8 E/ a7 ?( b7 T} //end main, `$ u. j! K* U$ X
//以下是中断服务程序* n* n  @9 z' T4 E# h
void IR_IN() interrupt 0 using 0
# L- }" A; S- Q' }" p. G) t. I{
2 g+ B0 m/ ^$ N+ }* O unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据* j7 e) @3 P# |9 W% W5 `
  EA = 0;//禁止总中断
% `$ V- v7 {6 a8 YI1://标号+ C* P* m; A* |
  for (i=0;i<4;i++)
' I2 v. W1 W2 [' ?7 \% h   {
# G: }3 w6 v) P5 _# b    if (IRIN==0) break;* I1 A* {( S; Y" t# s6 w* |* @
        if (i==3)
! j. z8 `+ T& n4 q      {EA =1;return;}//如果i等于3就打开放中断
" N7 S! J" z. w! \2 F" Z   }
/ A' ?$ M+ M" N$ c2 p4 ]; |  delay(20);: P8 \. e3 ^. M0 O
    if (IRIN==1) goto I1;  //确认IR信号出现
& q: r0 D: Y  a7 H  while (!IRIN)            //等 IR 变为高电平
8 `7 G  [  a  |0 a& A    {delay(1);}
; x+ ~6 J  l* [; x, @
4 A. s% N/ s' t: g# } for (j=0;j<4;j++)4 c! R& L$ |0 |2 o& _
{ % n9 O: H( M  l2 X  \# P
  for (k=0;k<8;k++)- p4 e* `3 ~' m' Q0 v2 o4 r
  {0 q+ [: \$ ^3 r4 }0 n
         while (IRIN)            //等 IR 变为低电平1 W* ~+ V8 R9 Q3 Z; G$ I
            {delay(1);}
3 x4 r. p5 S+ i( n, t8 x           while (!IRIN)          //等 IR 变为高电平0 l4 T+ R1 }. C9 z( j' J+ z
            {delay(1);}% q3 ^/ k0 S: n$ L5 C7 r
     while (IRIN)           //计算IR高电平时长( R6 y2 a6 X) M. v
      {                           //如果IRIN等于1的时候就计算delay的个数
0 q/ X! q2 a7 ~" `4 I( E( }5 k+ o" B           delay(1);- w4 H! V4 W( q; S0 L, M. B3 t
           N++;           
! \) k* |; t, e7 X8 ]/ v% b           if (N>=30) {EA=1;return;}) q' Q- j3 `$ ?( k; x+ y
          }
1 t3 y0 R5 p% w( S3 e, G9 I- }/ K     IRCOM[j]=IRCOM[j] >> 1;
+ t( |) Z$ d2 I; w" W2 Y; m6 |8 _     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}) G# r3 K( U7 S5 U6 r
     N=0;. h; o$ }5 f& g
  }//end for k: D, O2 @) `# s
}//end for j
5 ?& X2 Y, @. U   5 F% M/ a& S6 G
   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}
7 N: y+ T  M4 ~1 z7 {* Y' _" f   IRCOM[5]=IRCOM[2] & 0x0F;
! n+ P, \, I6 s$ E! Y; _   IRCOM[6]=IRCOM[2] & 0xF0;$ w* Y9 ?$ d  J7 }7 l
   IRCOM[6]=IRCOM[6] >> 4;8 P$ d, r* J. J; a% U1 V/ ^
  // beep();9 G. y3 N" J. ?  g" o( q
   EA = 1;5 a. h% @1 F' p( B' t" D" H

7 C5 g5 B' ?# X          send_char(IRCOM[2]);" r: w" P7 j0 `* L  q
% P6 k' x' F* X+ n0 d8 q% \0 m
}//end interrupt
( C( a( Y6 g; U; g! K, d) V0 _1 r4 j0 Q- P6 ^/ |3 i4 U/ U
//下面是延时程序
  l( S, L' F) j" i- ^! evoid delay(unsigned char x)//x*0.14MS,unsigned char x是参量% t2 U& M: `4 s6 P5 z
{
) i' }+ H2 d. A unsigned char i;5 Q4 M% C8 k6 ^7 K( Z, [' t* p
        while(x--): P( x2 Q! K$ H4 l& [
        {3 ?9 x$ S! |1 C3 i6 y+ k; ^
                for (i = 0; i<13; i++) {}
4 K& {; i: X$ P, B        }, o. B& E& g- }) Q' R
}- c7 h# ?5 J9 S  h: o

1 F2 c1 j3 I5 |, m' y' f% i//下面是延时程序
( M6 t  [& l0 W  p3 tvoid delay1(unsigned char ms)//unsigned char ms是参量' y" g: \0 b7 X5 T$ `- m$ N  y
{
) f+ W6 ], t0 ?& h# g unsigned char i;, y  W8 q7 @. v9 K3 I: [- N! t* W
        while(ms--). m3 S/ Y) r1 a3 s( k
        {
  h, O* ^* s- J% g                for(i = 0; i<120; i++)9 L1 k6 @1 c1 M1 |" N
                {
! b$ v/ n5 p9 D$ y                        _nop_();1 J- t$ W' `* f+ F# J  j% ]
                        _nop_();
  B$ v2 ^. w5 y" F: w  y                        _nop_();' |* |7 v0 G4 q
                        _nop_();9 g* x, e/ ^" `% S. v* p. Q
                }
4 U) F) {; N. L- E2 ~' `3 E        }9 a$ E$ A6 T- J: _0 x) \- ^, d8 i
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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