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

遥控器解码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include <reg51.h>
. p$ k1 x8 T! }; \4 C- p#include <intrins.h>
+ b0 L' b3 E. Avoid delay(unsigned char x);//x*0.14MS
7 m8 l% r( I2 R' e7 l! Kvoid delay1(unsigned char ms);
, T. F9 A  n3 U7 E- mvoid send_char( char txd);
4 t; Z- B2 c, p5 r& D+ asbit IRIN = P3^2;//INT0(外部中断0输入口)& N/ Y- x9 {# @5 f) P* j& d2 ~
typedef unsigned char uint8;7 t! z' q% W) O8 y7 e
unsigned char IRCOM[8];
$ A+ B% d. u, }0 Q7 J( @. g* B+ Tunsigned char code table[16] =
: T. H( `9 J9 N                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
4 Z. t& U  D' R* X8 x" y# E* X                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F$ E+ y7 j9 q  G+ k# n0 f: ~5 _
/*波特率:9600*/' e# j! R4 ]2 h5 r! W' A+ P
void uart_init()
5 X" @0 ~% ]* F4 P{
6 M) A; s2 |+ Z6 i  ~( e' J7 Z        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率3 H1 \/ d, l9 C, l6 F" y
        TH1 = 0xFD;                                // 波特率9600! T: {- E8 B: S4 q( u$ k! H) H7 S
        TL1 = 0xFD;
% W, ^9 }- h7 Z/ r* n0 s: o        1 P' g  {$ h7 k3 X: M2 _
        SCON = 0x50;                        // 设定串行口工作方式/ V5 B4 }# |) u3 t
        PCON &= 0xef;                        // 波特率不倍增
  ^. D0 X4 v2 D               
, u9 I5 L7 H* T+ S7 y' j! O        TR1 = 1;                                // 启动定时器1
0 `, C+ c6 n- t* M3 d$ h        0 T+ b$ D' i) ~- z& S  ^( a
}
: C$ t+ @9 b* P7 C! `" N/*UART发送一字节*/
: T8 ~) a0 g! @+ c' {6 Y- j; v8 _# ?" e" U; R+ W
void send_char(unsigned char txd)0 R5 J7 a- M9 a8 v, t
// 传送一个字符. C' `4 ?2 R+ [  x8 I
{
, C1 A* P" G* N- a" ]3 j  
5 y' z; q4 `8 S& b6 l* Q        SBUF = txd;6 ?# _0 e5 {+ @) t3 c9 b- {
        while(!TI);                                // 等特数据传送: K3 v9 a4 q: w& \4 \% u
        TI = 0;       
# w& Y2 c5 C+ |                                // 清除数据传送标志
2 p: \( p, Y- v# v. I}
1 |# H  @7 [  Qmain()- H9 F+ V: A$ P3 R8 A
{; K/ L) f1 ^9 ~# P% W( H
          
- t$ j8 w; p. C0 z% t/ U IE = 0x81;    //允许总中断中断,使能 INT0 外部中断
6 N: u# l3 d4 K" w3 Q1 a+ S: B7 e TCON = 0x1;   //触发方式为脉冲负边沿触发1 @% I) n& P- }* S$ q5 j
delay(1);# D# V, x' d8 E+ n( t9 T% \* T
8 m$ ]8 a( z9 @1 i$ }9 P6 C! z, I, ]
         IRIN=1;
& M3 i/ I8 k8 U3 Y# K2 N             //BEEP=1;- k& n9 s! U9 e* I! u
                 //RELAY=1;
: \' c* r' b. Z3 d. m) Q& X                 for(;;)2 L! `$ k6 Y. N- m( |2 X. ?& Y
                 {
8 q( ]& S; N- k8 M          uart_init();+ q. |9 N7 O7 N9 k3 H4 D% O
                ; S" j% ?1 Y( G: o
                  }
: M& M4 p" d9 h: K  e                                        + O, x$ g6 D1 E" `3 l/ s
} //end main
% l$ c, |, @  J7 y//以下是中断服务程序# x2 I  j4 Q  J) Y  B
void IR_IN() interrupt 0 using 0
- d" B( W. U. C$ N) a# ?{
$ k. o1 w6 b. K6 X+ k9 c7 X' M( B" D3 ^ unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据
1 k- C" n8 N. z1 X( L  EA = 0;//禁止总中断
% N0 \& L7 _) W+ A9 pI1://标号
$ c( K" Z0 ]8 ?1 }( S  for (i=0;i<4;i++)
' ^- G9 ]/ d9 }# W' e/ F   {
6 _' s9 }  m" Q3 m8 e# [, t    if (IRIN==0) break;3 r( X; S+ M7 c& f( W
        if (i==3)
$ ^/ ?9 ^5 o4 r6 T      {EA =1;return;}//如果i等于3就打开放中断
; a5 q5 ^! h. \  t( b   }
$ }( X: V/ x5 D9 F# ^  ]  delay(20);
' \; d  p3 p! R; L6 F( Y    if (IRIN==1) goto I1;  //确认IR信号出现
* m& w" x' S# C$ h3 B2 Y" O  while (!IRIN)            //等 IR 变为高电平
& C9 n- R) P6 Z    {delay(1);}: K9 {- ?/ f/ K+ D
) p1 e( ?/ a: t% G
for (j=0;j<4;j++)* q1 D4 _, Q% o" y/ O
{
) G6 x9 m! h. Z% n  for (k=0;k<8;k++)( C, _/ \: M+ l
  {+ F5 y5 \3 J4 P
         while (IRIN)            //等 IR 变为低电平
, e) d* m& V* I$ H- U( n            {delay(1);}0 ]1 f2 }! V& y- u
           while (!IRIN)          //等 IR 变为高电平
" |) M3 [' @. J: q" O0 W7 h- ]# }            {delay(1);}
  ~! l3 X) A# z" K' |, [' x     while (IRIN)           //计算IR高电平时长2 E' b, X: T. f3 Y5 G
      {                           //如果IRIN等于1的时候就计算delay的个数* Z) I' m( n5 f% W& l- P
           delay(1);, ~+ b, e& E* k" W2 h( H
           N++;           
! h( D* L* a2 f: X           if (N>=30) {EA=1;return;}
1 R) w; w: Q1 X' h' J5 c          }
" N" a5 ^( x1 @4 ]. {- {- z     IRCOM[j]=IRCOM[j] >> 1;* s4 n* G: J4 q' M% _" W
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  l" O! E) T) F3 F2 r! A( T; W
     N=0;' T" [% v, H' Z: J" z* O
  }//end for k
/ i4 k& Q7 ~% w }//end for j6 D7 I: P- U% G6 o$ ~! A. X
   $ r+ S5 A) [# X; g6 W" j
   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}, X2 r3 Q+ |7 u
   IRCOM[5]=IRCOM[2] & 0x0F;4 s0 `  R$ l$ s- N
   IRCOM[6]=IRCOM[2] & 0xF0;
; ]  M  \6 m4 G6 c0 z! x+ v   IRCOM[6]=IRCOM[6] >> 4;
- E1 C/ [. `# m* q  T( S# ~8 ?  // beep();
+ p8 ~* g: n( I4 I) g+ q   EA = 1;$ h7 W1 l* }1 y5 C
. X, n1 A+ I& c* m# `6 r5 \" b) l
          send_char(IRCOM[2]);3 d0 {* L; s  t6 c
% x! F# d/ L2 b/ S3 m7 v0 d( s" [" [
}//end interrupt- i2 A1 l% {7 g8 |
0 J3 M; |3 @7 s/ x/ l, o+ F% ~- i
//下面是延时程序9 u/ @, c$ j$ Z* M; n
void delay(unsigned char x)//x*0.14MS,unsigned char x是参量! A& V6 s% B; `1 O  j
{8 m' _) M% J+ T2 R- E/ ^; I
unsigned char i;
4 A7 O5 a$ @- O, O/ g  v, q         while(x--): E; |, ^* E# [! t* {5 G
        {% {+ h& _; L. ]3 ?0 [
                for (i = 0; i<13; i++) {}
1 `( U( ^! t$ W        }2 n6 j% g' H: G4 a8 i; K8 l( {. R
}8 A7 [9 S9 H/ I
9 Z4 `- [) g0 S$ i* }
//下面是延时程序9 i6 g! f% a+ ]8 p5 {
void delay1(unsigned char ms)//unsigned char ms是参量1 {2 ^( w/ X* _: {8 R* O6 p' o
{5 f1 q5 y3 v) O$ Z* p% Q0 G
unsigned char i;
5 r) W' K$ \) d  U2 o% ?         while(ms--)3 B8 {- y+ W& n1 K7 }
        {
! ]' g- e' k1 u                for(i = 0; i<120; i++)# w  L2 ?# C+ W4 O0 I
                {9 _0 J/ n- n6 G9 w  @& D
                        _nop_();
4 A$ `/ H' K8 o                        _nop_();
( f5 i6 l  j. I                        _nop_();7 L% H0 X! i& \$ P: d5 i5 J: [
                        _nop_();+ Q( K% P: G- f0 w( B
                }
3 D0 L% z% X. c0 D4 g8 w' S        }& K0 N' @) J8 \8 n" a/ d
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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