找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

遥控器解码

[复制链接]

6

主题

32

帖子

107

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
#include <reg51.h>
& c5 A$ m& u$ P" q#include <intrins.h>2 c' _  l: @# d
void delay(unsigned char x);//x*0.14MS+ h$ a3 c' W2 R& H% z+ A! c6 ^7 B
void delay1(unsigned char ms);
, h5 y. X; J4 V, a7 G6 t/ ]# Z/ a$ Nvoid send_char( char txd);
$ Y8 I: |8 ]3 ^# T; I# ^sbit IRIN = P3^2;//INT0(外部中断0输入口)9 ~0 E9 Y: g9 Q2 V5 C
typedef unsigned char uint8;
" ~  u2 a- x! \* h' V/ H8 q9 dunsigned char IRCOM[8];
# w. s  N) Z# munsigned char code table[16] =
. Y3 M% k( \4 Z/ ]  Y& _) u                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,6 Q; Z3 j6 J6 P+ K# |1 N/ w
                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F
  S/ T2 s. f9 t  c- t" S7 }7 v/*波特率:9600*/' D% l- S- t6 H0 E% ?' ]; g
void uart_init()( a( _7 k5 k- W7 M
{
* {" M, k7 U) E; l) V: g        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率& k; S" O+ B, J
        TH1 = 0xFD;                                // 波特率9600, W) q0 }& _, c$ O3 @( p( |3 M) s
        TL1 = 0xFD;
3 V3 D7 N% a$ i9 o* e- y0 T       
* x( {. r% w9 C# g        SCON = 0x50;                        // 设定串行口工作方式
. L0 s& e0 e2 a6 W  g# D8 E        PCON &= 0xef;                        // 波特率不倍增
$ {+ ]+ H; A& H( e% A2 q! |               
9 t7 K0 E: x# S  M- Z        TR1 = 1;                                // 启动定时器1
2 m* s. z) H- G  B" y' a# N1 ]        $ V9 U8 r5 Y6 B. F/ W
}
  q, a( W7 {, O+ m# q$ n/*UART发送一字节*/
! g3 A% [. l( V! e6 P
% E1 J9 }, t& J6 U' ivoid send_char(unsigned char txd)( z3 m9 y/ ^1 X6 j. q
// 传送一个字符
. H( P+ V% m, t( f1 S{' i" |: ]* s. w. e2 x
  4 \  I1 A7 O0 f) ]- _( K
        SBUF = txd;
) L; t5 i* e8 i        while(!TI);                                // 等特数据传送' P0 a2 a5 @# Q& h
        TI = 0;       
6 S+ e1 ?) O: c/ q" N3 Q5 U                                // 清除数据传送标志: i) `; V5 t% p0 ?; n' a# k
}
! F9 L  _8 |5 U$ M1 o/ Y) a8 U8 e1 Kmain()  A+ I. ^! H& V: u1 ~4 [. t$ q
{
) i% M* m6 {% k8 j' A           ' b- {0 q% B; }' i: d! [; n
IE = 0x81;    //允许总中断中断,使能 INT0 外部中断
# w! ?( y% Z) m4 u1 K TCON = 0x1;   //触发方式为脉冲负边沿触发: y7 t" n* X% p
delay(1);1 m) e3 V$ M- c' H# s* j2 T

$ ~3 @3 Y- |! {1 ~- p* F, }2 Q         IRIN=1;
' G7 }  [' o/ x             //BEEP=1;
; {: J$ j/ w6 W5 O5 v. V" f                 //RELAY=1;3 U! L) M2 ^* r) w8 I9 ~9 R, a
                 for(;;)# X, R! V' `. V% b6 M2 [
                 {
: v  N, }7 t$ w' q* ~# h          uart_init();
3 d7 B( S2 s# G$ G: O                4 _' [1 ?) p$ J' E  n6 _
                  }
* O# i6 d* ^8 k4 X& n% V& K. `                                        7 w0 r% k, p7 n5 t) p
} //end main4 ?# h* q) }) `$ V
//以下是中断服务程序
# I' q" d$ V9 o8 P# S7 i/ Qvoid IR_IN() interrupt 0 using 0" v% _$ U/ o, q- P
{2 S$ X  g0 T5 R3 A1 _0 ~* F
unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据2 z5 y0 h# K. w% M2 u  P/ Z
  EA = 0;//禁止总中断% x: b6 b. s* w# ^& @/ d
I1://标号
: `; l) q  E( e* @- P. I  for (i=0;i<4;i++)7 s, H( S" ?) W
   {
# A8 `% {5 u' O6 @2 T    if (IRIN==0) break;
3 M# F- a6 L4 x: p0 e        if (i==3)# \1 @# Y* K' ]7 `: x+ z
      {EA =1;return;}//如果i等于3就打开放中断
( @1 f, r+ O, Y, {/ K/ F   }
" n5 T+ i8 ^# o7 n) O  delay(20);
' }. @( o, v) N# U3 a    if (IRIN==1) goto I1;  //确认IR信号出现* s4 Z5 |( T3 k( N
  while (!IRIN)            //等 IR 变为高电平4 C* e2 {( I* r; J8 n5 l9 E
    {delay(1);}
$ M$ Y2 q, h4 i8 e5 V& N+ s8 l- \% G# v5 ?3 H  f. ]
for (j=0;j<4;j++)
( Z& @4 z/ V6 t6 ^- i% s0 I/ w {
1 _' S5 Y; N$ m  for (k=0;k<8;k++)/ c! a8 F+ A9 [6 R
  {* `  ]: f% Q& F1 Q6 Q9 u: n
         while (IRIN)            //等 IR 变为低电平* R$ s; X* Q1 f
            {delay(1);}8 x: H0 w) n, W2 |/ \* M
           while (!IRIN)          //等 IR 变为高电平& I: L! X; p" d  W
            {delay(1);}2 E3 K; q# _4 F$ ?8 Q: ?. v' y0 }5 M+ q
     while (IRIN)           //计算IR高电平时长% w/ a1 r- j9 p: C
      {                           //如果IRIN等于1的时候就计算delay的个数. ]) ?! Y+ u' L
           delay(1);  O6 @  {) ~( D2 J- k, P
           N++;           
5 Z7 F7 f' R% ^# \8 ]           if (N>=30) {EA=1;return;}
2 S& I) C: F; l  L* o          }
9 [% I0 s4 `# x9 ]" c% M     IRCOM[j]=IRCOM[j] >> 1;
2 h$ b5 M$ q6 L2 @     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}
2 \' w6 m6 I& A# X1 t/ d) A9 ^     N=0;
) g0 w2 C/ T$ U3 a% N, o  }//end for k
! \' G# |% P; _+ q; i3 x }//end for j- I, u+ j" u6 s$ q
   
1 ?: F8 L. s% I7 `8 j' P" E   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}2 e7 W' ^( x* P$ V
   IRCOM[5]=IRCOM[2] & 0x0F;
% B2 i8 }6 g( S! y; H: `! u   IRCOM[6]=IRCOM[2] & 0xF0;6 `0 G) R9 [: `6 `
   IRCOM[6]=IRCOM[6] >> 4;' n8 x% X; M! h; `+ k3 M
  // beep();
7 s+ P0 d$ I( U, F: {  z6 j   EA = 1;
+ J% R. \+ ?1 m- N/ v9 y" o' G, [0 @- U) ^
          send_char(IRCOM[2]);
1 h& X( H2 I' t! h! Z3 p  \- g9 P: G8 A  m
}//end interrupt
7 Y1 o2 Q& P. D; x. {
; g, O# w  e( E! Y, `//下面是延时程序
$ b3 }" _- r+ s! |4 ivoid delay(unsigned char x)//x*0.14MS,unsigned char x是参量
$ I$ D, V7 h' c7 J6 e{
( f. N2 X4 R) I4 ^ unsigned char i;
, f3 m* U4 s% P0 v' n% _; K, K2 m& f         while(x--)* N& W9 J& L7 Y1 L( A; F, ?
        {& a7 K" j2 P% @5 c* K0 E6 u  v
                for (i = 0; i<13; i++) {}2 c. z+ P6 ~' q( {( f
        }2 z. U5 o# ]6 w2 `) E5 b
}
" ^& f. O* O# F. d/ M% ~
7 a' ?$ u! Y. k8 S3 j! l//下面是延时程序6 Q0 ]* L  n4 s' B) O% u/ i" d, r
void delay1(unsigned char ms)//unsigned char ms是参量
* k9 J* H5 D2 O$ N+ T. d{
# j) H) o1 }2 a4 U6 q+ H unsigned char i;
, {1 P. d, O! P' }( b6 v         while(ms--)
: `0 a$ P4 M  P        {
( F* V( j* U$ i: b+ a. `                for(i = 0; i<120; i++)
2 s: ~( O2 y; R5 H+ N' q" Q6 [                {6 c* d% p. ^5 x8 J9 a
                        _nop_();3 ]5 a$ h' A. Q: [: I  t
                        _nop_();
( F3 U7 O. f# |0 D$ ~% _                        _nop_();
/ v6 O: o5 g, x8 D                        _nop_();
7 b7 O, ?/ A8 \                }4 b5 S9 \( X% _% ^& J
        }+ N7 ^" R! h3 S2 t- q6 k4 `
}
分享到:  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 13:10 , Processed in 0.055798 second(s), 32 queries , Gzip On.

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

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

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