找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

遥控器解码

[复制链接]

6

主题

32

帖子

107

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
#include <reg51.h>( ], K( K, t6 z6 F6 f/ y4 k( l- }
#include <intrins.h>/ q. ]( I# f2 U2 I
void delay(unsigned char x);//x*0.14MS
( f' W6 w8 q; p7 ?" V( g5 ~void delay1(unsigned char ms);( ]( `8 b* F+ @$ S' p, @  K
void send_char( char txd);
/ X' [% r, H5 i3 |+ k* Hsbit IRIN = P3^2;//INT0(外部中断0输入口)) i2 q; \2 S, j# d+ D$ R
typedef unsigned char uint8;8 u+ b/ w+ `. a4 w+ a. u+ v
unsigned char IRCOM[8];
, y* Q& Y6 X  b- l  sunsigned char code table[16] = % n2 x& B% x8 w9 L# Y
                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
' I6 {" S# Z- S+ ]- b& C& \; v                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F
, S! U  G. y* ^# p/*波特率:9600*/
( [6 s5 E: W: d; x& ~( \8 Lvoid uart_init()
  i4 Y' f9 x) a1 x' G1 x9 T{
9 R1 B' x2 l: N$ P6 _- A/ F8 c% R        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率
4 w: E; u1 Z( G, N* h& ^        TH1 = 0xFD;                                // 波特率9600
+ Q* c, n3 j9 _* n' j% x; [        TL1 = 0xFD;
8 w2 ]( A0 m( O& g) u* j  r% G        . S8 v3 l* A* A! Y
        SCON = 0x50;                        // 设定串行口工作方式! J" R% k' @  P# M( P6 T
        PCON &= 0xef;                        // 波特率不倍增
' m$ d6 s9 |2 g4 D0 e                + G6 c8 i2 L! D: W4 O9 @
        TR1 = 1;                                // 启动定时器18 F2 f0 ]( j" M+ A$ a5 U
        0 X3 u9 [) O# \/ T& V1 ?  m
}
' L6 ]4 O2 i* R4 g5 \3 q/*UART发送一字节*/, G( J1 U# L* i7 K

: e1 Y1 e$ k, L5 R5 @! e0 ]) d- Uvoid send_char(unsigned char txd)0 {0 b3 K, F& A: c4 ?& W# d4 w
// 传送一个字符
% ~0 F# t5 I7 M3 A! ~{
8 D6 O8 K+ |( @' K# p$ L% k/ _  6 Q- Z! ]* I9 H7 s3 A- b5 Z
        SBUF = txd;! f' b1 w. k4 \' I4 H+ U
        while(!TI);                                // 等特数据传送/ _" R( |7 j; M% h' }, f+ n
        TI = 0;        0 u# |! o+ \* E1 W4 l& v' b
                                // 清除数据传送标志  W% A% Z1 j+ d$ d  H- R1 e
}
. J0 d: x, @" Y* e8 y4 p( o- Xmain()
' K! l/ I- c* i0 I3 Z4 n& c{8 M9 C  ?( G* x" d9 f
          
0 v. e& ~, q9 X7 o IE = 0x81;    //允许总中断中断,使能 INT0 外部中断
; U8 r7 X- V$ R: P! U: P TCON = 0x1;   //触发方式为脉冲负边沿触发$ N* y" P7 r" \4 M/ k
delay(1);* H# w- m" T8 q; e

+ h( _( {  k8 ^9 X         IRIN=1;) N* n4 ^2 q2 L0 n( }
             //BEEP=1;6 j7 b$ t7 f" [& W3 e
                 //RELAY=1;; n2 d$ \: ~7 I) T" z, \# n, g
                 for(;;)
/ i5 H" j  Z, i0 x% ?. @  e                 {
( F  ]0 K- f9 A6 V6 f4 l          uart_init();! M& z/ d- @1 w" `5 `) D
                2 }3 g* y' W: U- Q5 o, l( h- H' V
                  }
1 |3 l0 [, L3 F" c' p                                        6 ]. ~2 }+ U: {. x. |7 X* j' t. M
} //end main
/ ]6 M% a( b" a2 U  v//以下是中断服务程序* ~2 N( r8 I+ K5 S+ i0 d
void IR_IN() interrupt 0 using 0
4 O( K6 |! Z! X+ |8 i: d0 ~{
1 b( B! |/ v' F* F, u8 v unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据
4 ?0 g  G0 M. h; W* Z9 E; h7 P  EA = 0;//禁止总中断
) j0 G7 {1 t( N& yI1://标号
. n* n9 |8 F& y  for (i=0;i<4;i++)7 ?4 G6 s  T* O# y; _
   {
' V" s$ ], N+ x. C" ^    if (IRIN==0) break;3 |) A4 [+ E" c5 a6 r3 o
        if (i==3)
) ]8 i4 i  F8 T" w! Z4 R      {EA =1;return;}//如果i等于3就打开放中断
( Z) K4 x# L1 x   }" }! u% _5 E, Q: a7 [5 k1 }
  delay(20);
4 Q, r! n4 @: V/ f6 D0 k    if (IRIN==1) goto I1;  //确认IR信号出现
& t* x" C2 d; _9 C  while (!IRIN)            //等 IR 变为高电平
- @; g& ^2 P  j1 |, |7 q    {delay(1);}
! P5 B, f5 w0 `, i
% q. I, q% A2 n for (j=0;j<4;j++)
6 N+ n) N/ T- U- |& }0 U/ R, U  I {
9 M" b4 @9 H6 g( f- u5 Z5 E4 K+ P! n  for (k=0;k<8;k++)7 H6 A2 K2 I# z, V7 K+ b
  {2 O# h8 ~. v* x. l7 Y5 k+ Z
         while (IRIN)            //等 IR 变为低电平% b1 b/ R3 u* c! T, [( I* @
            {delay(1);}
7 r' ?8 w; }5 x, J+ L           while (!IRIN)          //等 IR 变为高电平
' x5 o) G- |$ [! w            {delay(1);}
5 ^6 [9 \& D1 Z. z& o" v' y) j     while (IRIN)           //计算IR高电平时长
- L! f% K* n* O      {                           //如果IRIN等于1的时候就计算delay的个数
$ P* B. ^. z; h& {# o9 |( v           delay(1);
! ~7 f# d' N8 \6 t  H% _           N++;           
# a) y. |# H1 f3 h5 G7 L7 B" {           if (N>=30) {EA=1;return;}& j$ B$ L, k  d; ~9 z% R
          }
. E$ G8 |2 t. g5 W5 J' I     IRCOM[j]=IRCOM[j] >> 1;. G/ s- A  @3 {' Q1 f" y7 G
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}
1 o" ]: G9 q, U( `8 H# I     N=0;
; T' Y  m5 o5 h4 E! H$ L- {  }//end for k: I5 N8 I/ X6 T( ~% X
}//end for j
, _5 a6 K$ f6 D4 F+ n- b   
- a7 }! a$ C# }: w. U3 g   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}
# Z3 I+ B9 Y0 S8 ~; \   IRCOM[5]=IRCOM[2] & 0x0F;
+ C$ g  ~1 m0 W) `" J, A) V   IRCOM[6]=IRCOM[2] & 0xF0;
% W0 {" X: l; |% @- ^   IRCOM[6]=IRCOM[6] >> 4;9 |2 X: D9 a( I
  // beep();
3 g( `1 I$ y  r+ Z1 V+ ~5 \   EA = 1;
/ {+ G5 D) n* l$ x4 l5 H4 p3 ^! k  M7 {4 W  G8 a5 K
          send_char(IRCOM[2]);
7 ]8 r, T8 S2 |( V. P2 b+ N1 p. Z# \% o7 C: C9 d% q6 {
}//end interrupt1 a" |: H3 a& E- }: N; i& q

6 F/ o4 Y, {- H' ], }. F% J//下面是延时程序
8 y2 D: w0 H9 [void delay(unsigned char x)//x*0.14MS,unsigned char x是参量4 s# p+ r: y2 p9 p9 T* @
{! L; d" b  U8 R2 `
unsigned char i;
( {( D' p5 f2 x2 ?4 `8 y         while(x--)
9 A' r' f" \+ ], L        {& w/ J& W+ D7 X8 o
                for (i = 0; i<13; i++) {}: L! K; Q: a1 H
        }
: T6 i& p  B$ T}8 I4 m) A8 J# E, [

$ Z  _. j3 X8 Y+ i- ~//下面是延时程序1 F3 `9 C7 G% L9 F
void delay1(unsigned char ms)//unsigned char ms是参量
6 B3 l* r; }1 a  T- P2 j7 N{
0 s, p  f! Q" G unsigned char i;! _' O5 i  Y+ W7 t7 t( i
        while(ms--)8 p8 D( d  o+ C+ V1 s# X
        {& w' z7 ~9 R+ A/ t
                for(i = 0; i<120; i++)! \* D7 \1 Z) c$ X
                {$ i# S2 p- ^+ Y6 c: o" M  H
                        _nop_();4 e. h3 a* u  d, n* H3 E
                        _nop_();4 L- n3 x3 I% |: Z$ B' A
                        _nop_();
4 b$ }% Z* l: e( }. V1 X1 f* p  L# R                        _nop_();
! |. K8 f! I  k, |- f                }9 ^* Y; j2 U3 |/ F1 Q
        }
4 O2 F& v9 w7 k1 E. O$ V) `}
分享到:  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-27 00:17 , Processed in 0.055832 second(s), 31 queries , Gzip On.

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

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

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