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

遥控器解码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include <reg51.h>' U) `& @+ b0 e2 G; F5 A
#include <intrins.h>
* n; G) h, i! |1 E9 j# `# dvoid delay(unsigned char x);//x*0.14MS% ?7 i$ L# |; M  Z: u* w
void delay1(unsigned char ms);$ u; Q, X! E9 }* ^0 l
void send_char( char txd);8 M0 h- E# ?' A  u- b* s" P
sbit IRIN = P3^2;//INT0(外部中断0输入口)
- m5 t; e# G: Ttypedef unsigned char uint8;
6 F" M) y1 C$ \& m; C) d+ t8 d! Vunsigned char IRCOM[8];
, M+ Y% f: j5 J3 J  E- s2 ounsigned char code table[16] =
. t8 W2 W9 h8 o# l                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
9 c% E) X. M- q4 F1 M7 y- C                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F2 g6 F6 p6 u- Z/ e5 K( C& U
/*波特率:9600*/% d% u6 t3 A& y. F9 M8 p8 L
void uart_init()% B2 t8 E9 H( k
{0 x4 ?4 H1 M3 \- A
        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率/ F, {& c/ y& }+ P- M2 ^( q
        TH1 = 0xFD;                                // 波特率9600
+ v) P& G- e4 l5 ^; v4 F% K        TL1 = 0xFD;
1 n1 r4 Q  x' J& O1 G       
4 G7 H- ~2 W6 x% ~2 e0 c! L3 W        SCON = 0x50;                        // 设定串行口工作方式0 v' T& d; O1 G
        PCON &= 0xef;                        // 波特率不倍增& {6 d& w) X1 Y5 _, r
                # _5 l7 t6 ]* ], M- ~8 s, f
        TR1 = 1;                                // 启动定时器1
5 w  o. g( |! a, v& W* H        3 A* R- B, b2 c. {! B' @
}* ?* B4 @  s3 d, y
/*UART发送一字节*/
/ N/ R# T% i" h, U! X/ P+ X, h, y2 p1 _; M! w7 H
void send_char(unsigned char txd)
9 j- x; `( H! }: e// 传送一个字符; y9 }' K9 o: {
{
4 z" W8 V. A$ ]% Z7 f( g  * H& C# j$ G  i+ p" q5 E
        SBUF = txd;
8 I' m* S! R3 w0 t9 d        while(!TI);                                // 等特数据传送9 y. D$ X/ }' L' ]2 t2 F9 _! ~' Z
        TI = 0;       
$ F! x' z+ D( ]2 Z, Q0 f# Y                                // 清除数据传送标志
  u6 Q* S! M8 c- L2 Y7 ^}" [& l/ R" C. v/ `7 K
main()
4 c* z. J6 k# U% {{' A9 M" c. ~; ?5 g% r' ]
           ( k  z% }+ ~0 c9 N/ X
IE = 0x81;    //允许总中断中断,使能 INT0 外部中断
0 C3 x- F; h) @3 T# w4 g7 e) ~ TCON = 0x1;   //触发方式为脉冲负边沿触发
* a" ]  H# M  ^ delay(1);
/ S# R- p$ d% ^6 D3 l+ v+ Q ) L' |0 x. P7 V, ?9 T# t
         IRIN=1;
* u; [9 C- g! i, e* ]/ K             //BEEP=1;
" s+ U0 Y1 g/ `+ U# z                 //RELAY=1;* ^3 q) Y& B* |9 Z! u4 d
                 for(;;)
( I+ `6 x6 r. h8 y5 Y6 P                 {
  P! k) i$ u- T# s          uart_init();5 h- |( y' i' m0 A5 u, |& ]* m4 ?. y
               
2 v: s$ E' i1 [. X1 z: ]3 `                  }% M4 u! h, K5 i! `% V+ P
                                        : u( h% E3 L  a, D
} //end main
% W2 Q- |* r1 b# y: ?0 u//以下是中断服务程序9 v" {) Y+ |" j1 V& H
void IR_IN() interrupt 0 using 0
6 B. d: \% e1 A8 u# h  n$ `" ]{
, B' Z1 V" l. h9 i6 d5 O unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据
' H: a' }# s7 D* J& t$ X0 i4 Y  EA = 0;//禁止总中断7 a: G, \& u$ q: e9 q
I1://标号8 j2 B1 L5 k) J$ j! l
  for (i=0;i<4;i++)1 Q& A' Y& `& L9 D0 F0 N- q* z
   {
1 G; j5 ^2 N: _5 K  c3 ^0 u# [8 l# r    if (IRIN==0) break;
/ W* W" H  v0 p, K" O5 Z8 L: j        if (i==3)7 y& b, @! ], Z- h* w" t# N
      {EA =1;return;}//如果i等于3就打开放中断9 u& _# d; L" [2 e; |
   }9 z( o( V' F* U% ~6 y
  delay(20);
- n9 D0 ]) e6 M1 g    if (IRIN==1) goto I1;  //确认IR信号出现8 u, z, t+ F, o
  while (!IRIN)            //等 IR 变为高电平
+ ?& h0 I1 ^# m$ Q. a8 T6 \4 o    {delay(1);}5 K" J& w( X% O3 O6 g% n  }

: l, f& h) v# E9 G8 Q, l1 p for (j=0;j<4;j++)$ J1 L2 v; S' U( B. {
{ 4 m; c+ q9 T- ~" S( _# f1 o% _
  for (k=0;k<8;k++)
/ B7 a9 F& e, C* Q' k) ?/ E# T  {. `( a' {. ]0 l& N
         while (IRIN)            //等 IR 变为低电平
* P5 s) x6 f3 \1 w4 C2 m# m            {delay(1);}
/ F- U+ L3 d' Y* o8 b           while (!IRIN)          //等 IR 变为高电平! F! P% j% {8 R( B5 ]
            {delay(1);}0 H/ v8 v; v( t8 i" I+ }1 G
     while (IRIN)           //计算IR高电平时长
9 b( T1 D; a& W/ A      {                           //如果IRIN等于1的时候就计算delay的个数' H# x" T0 k! a: q
           delay(1);
) |: a3 m. j5 |           N++;           ! o* F8 @2 Z8 @# z* V
           if (N>=30) {EA=1;return;}
- n! x) A$ ]! F( c6 M4 Y: B          }
, Q0 [1 F7 f0 L3 p5 j/ m% f     IRCOM[j]=IRCOM[j] >> 1;
5 y- l6 ~/ R2 i/ t+ s" k# B     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}- h- Z9 ?0 {" N( Q: D
     N=0;
* d# z5 C( H# B9 g: h( a  }//end for k% T9 X9 _6 B) k; N6 l; f+ i4 _
}//end for j( y: m" U8 a, i* m
   9 J8 N# n& i/ U; @" e- }8 N
   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}
  t3 ^$ ^" O  k" t. H* m   IRCOM[5]=IRCOM[2] & 0x0F;! \5 u1 w) F( m7 b/ F0 Y! H
   IRCOM[6]=IRCOM[2] & 0xF0;
/ |' K0 o2 ?' m. P! Q, o  D   IRCOM[6]=IRCOM[6] >> 4;$ V2 O, H1 U4 U% W3 Y6 S3 D- R
  // beep();
8 n" N; R; ~' [4 B6 v: Q   EA = 1;' ?6 x% C6 h6 K- ]$ o
, C* a, |1 A7 D) g* c
          send_char(IRCOM[2]);0 h0 Y( V6 j  x, w' Z' K- \* m
+ q$ [# Q& C3 D/ G1 G
}//end interrupt0 M# a. x: Z3 }4 B$ A

! ?' d+ e0 P- C* t8 }//下面是延时程序
; G4 w5 `; v0 x* r: Z( g1 z4 ?void delay(unsigned char x)//x*0.14MS,unsigned char x是参量" |0 d0 f- {' R* P( ]
{
& Z+ `8 I+ n" H( j: Q unsigned char i;! U+ k# l2 M9 J
        while(x--)
* ~; Z( p3 O4 X3 v: R* X& @7 N% z        {
9 K- A4 Q9 P+ P2 F1 h                for (i = 0; i<13; i++) {}
+ K( ]# ^0 z# x' r6 k        }/ f; B/ N& m9 P6 A% ]* _
}, b& y3 h: r9 f7 v. A
1 S; q, y# n5 |# z' y- }& c
//下面是延时程序' }6 |4 n3 Y. [( A: c, M. E
void delay1(unsigned char ms)//unsigned char ms是参量
6 h: @  g6 o/ Y- l{
0 L' c4 U3 M' ?& G! H unsigned char i;8 y' c" F0 p4 X7 I2 S) R5 N
        while(ms--)
+ j' z4 g" [" r1 F, I' l$ h        {' @5 I0 B% F! t  @; n
                for(i = 0; i<120; i++)5 m, r2 o1 {! X' X
                {3 ]' \0 J9 X* [7 f  G9 e+ J; i
                        _nop_();! _- m0 t6 ?/ O$ f( S
                        _nop_();: h- m% w! E8 z0 V
                        _nop_();
! g% o6 U+ b7 i% p, A) [                        _nop_();; g/ j! ~. f. I2 I( ]. {% J
                }
- c4 E) v' k, h/ I8 ?% A7 K        }
/ I# m  X. ~/ `, f, S}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-11 06:00 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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