找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

遥控器解码

[复制链接]

6

主题

32

帖子

107

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
#include <reg51.h>
8 W8 Z3 l& o& Q3 k+ Q' i3 Z3 x# \#include <intrins.h>
& v& b9 I, K/ J" m6 ~5 a9 e4 |void delay(unsigned char x);//x*0.14MS
3 J( t, S8 K+ F- h$ E: ~void delay1(unsigned char ms);1 i% z" B: Z9 d
void send_char( char txd);
  Z% H& s9 f3 J* C8 w  Fsbit IRIN = P3^2;//INT0(外部中断0输入口)7 j6 g3 E* _, \. w: |4 M
typedef unsigned char uint8;/ ?0 C8 X' I) d0 [
unsigned char IRCOM[8];
9 S' i$ ?" a7 R9 \9 X7 vunsigned char code table[16] = ( v; y# o2 q1 Q: Q/ D5 v5 q
                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
4 v5 h% h) i! o- p) U$ Z                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F
2 Z. @. ?/ b0 v7 ?1 v/*波特率:9600*/
* \: {$ I  ^5 v; Fvoid uart_init(); y6 N7 T4 x+ E) H+ L
{
$ i/ L7 s8 d- n% W/ t& [% {, k* s6 p, C        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率
4 l! }5 Q7 L) k6 q# S        TH1 = 0xFD;                                // 波特率9600
0 u8 K+ S- L' N. S        TL1 = 0xFD;( Q/ z# X0 y+ U1 Q8 \, P2 b  n
        4 t' F8 i: T. [. h3 R
        SCON = 0x50;                        // 设定串行口工作方式- t3 H# t9 m( i2 a3 G* p4 [
        PCON &= 0xef;                        // 波特率不倍增
. X9 T* R6 y7 G6 N; d9 Y8 f' @                ! r" t4 V+ U7 `+ D
        TR1 = 1;                                // 启动定时器1
0 Y; i7 p0 G# `, K9 e9 d- H        7 P) X) F4 i; t7 G# K1 y' h
}- K6 z' N  }' {; t7 H9 g1 a9 c( F
/*UART发送一字节*/' n/ I8 r, G$ T0 c5 _% ?2 k" [) s
9 O' P' k# Z* l5 |; \9 I
void send_char(unsigned char txd)
0 j" @: l5 D  D+ G// 传送一个字符( x% T9 A) A" j6 ~/ t( y
{
5 X% m# d- B8 |; r* Z  5 }4 X6 S% l* o/ s% Q' j4 a
        SBUF = txd;
, n6 Q7 s7 J0 e6 A7 A        while(!TI);                                // 等特数据传送) Z  i& t' w: a1 w0 f( y
        TI = 0;       
$ o6 @* d- ]8 c  x  X* Z% l' K) Q                                // 清除数据传送标志/ u% i. n& F4 Y9 ~9 m% g! y
}: c: ]5 N7 G0 m& M, p/ k2 m$ y
main()3 o% X: _5 f4 y9 z
{. `; q; ^; z  `2 m8 X
          
, @! @  N8 x* d  i1 w7 ]3 C# ?" N' X IE = 0x81;    //允许总中断中断,使能 INT0 外部中断
  \6 B" g4 x& C6 ^: c& W TCON = 0x1;   //触发方式为脉冲负边沿触发5 e: T, ~0 g/ b+ b" \
delay(1);
1 d" e% o6 Y" K: G2 ?- P
8 V; r/ F% f5 Q; `: Z         IRIN=1;4 z; U- N8 }+ f
             //BEEP=1;
: A1 [% C* @8 h4 L# m                 //RELAY=1;
4 Q! z  a. D6 ]* o6 E                 for(;;)$ V: {! }) S  R! ^
                 {
6 @' |+ `2 ]2 X* w( b2 b5 i1 U4 V          uart_init();, @" X: [$ y, Z
                9 u/ M1 \$ U# U6 C8 y( o2 h" o$ @
                  }& ~% y6 @  r) C
                                        5 [- D+ \" K8 I* p) k
} //end main
* `" G7 m& i( T+ m//以下是中断服务程序
3 [1 x1 \, d# o7 |* avoid IR_IN() interrupt 0 using 0
3 l8 }. c- k1 Z1 [{+ N  Y5 w6 n+ t
unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据
- G, c, h7 i6 l4 ~$ X7 G/ h  EA = 0;//禁止总中断
0 B6 }3 y6 J( n+ f& TI1://标号
, S+ e. {5 R- Q( G  for (i=0;i<4;i++)% _* W7 ]; ^% T" q; w$ j! F: l
   {) X& }* H! x) C8 e
    if (IRIN==0) break;$ O* V2 \4 Z2 q) T
        if (i==3)
. C$ h# r3 x6 ?5 ^$ T, ^      {EA =1;return;}//如果i等于3就打开放中断# D6 D+ c( q2 T/ {( o1 D1 ?" f- \, S
   }
& i. m0 ~  i- |; s0 v  delay(20);
* R8 z8 e0 ^+ o+ J% I0 V8 l    if (IRIN==1) goto I1;  //确认IR信号出现3 K9 Q$ E' O+ O- [
  while (!IRIN)            //等 IR 变为高电平1 a' ]2 P6 |$ h( }0 ~: G
    {delay(1);}. M) }7 O1 I8 x8 Z& J
) z1 q. z- w8 ?
for (j=0;j<4;j++)! f5 s8 x3 |8 w7 u5 a9 C- ?6 V
{
( d- j% Z* e9 K; ^  for (k=0;k<8;k++)
+ g7 h3 O+ G' y7 l7 Y  {6 q6 o- V8 @8 Q, c
         while (IRIN)            //等 IR 变为低电平
9 N$ `1 w5 S& E6 K            {delay(1);}
: b9 z+ s2 u: {# V6 t$ U/ m3 _7 G           while (!IRIN)          //等 IR 变为高电平; f. }1 H9 r! U% ?" H3 r6 V+ s
            {delay(1);}
# n( o) n; g+ e" H     while (IRIN)           //计算IR高电平时长! o/ Y. s- i+ x6 k6 I. e
      {                           //如果IRIN等于1的时候就计算delay的个数. O6 F/ H, W& U5 u! W0 U
           delay(1);; A% r' r! M1 ~' R3 Y0 k- {6 `
           N++;           
% t, M; I2 T( j           if (N>=30) {EA=1;return;}
5 _- e* k! ]8 p' l. g          }
% h$ _/ @$ [, {+ `* D     IRCOM[j]=IRCOM[j] >> 1;& w  b2 \9 F# J6 @& C% W
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}
# T& W  f$ {/ @. B6 Z/ ~2 K2 f     N=0;
7 Z0 o, Q! ]' M  }//end for k
3 M% j3 K4 d( U  F& O8 {3 [6 C/ G }//end for j5 T* H! v0 G% l
   8 C8 M* [% ?. y' ]# q+ C2 ~
   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}
( S8 t' Q( R2 c0 T, K8 k   IRCOM[5]=IRCOM[2] & 0x0F;, a* z( p# m2 P( `8 L! ^4 F, A
   IRCOM[6]=IRCOM[2] & 0xF0;0 j0 W7 i! |" Z# x4 p6 n
   IRCOM[6]=IRCOM[6] >> 4;% D# I9 j5 G; }! h0 I/ D
  // beep();+ r$ v4 \/ t' d0 @, c+ F
   EA = 1;
$ ^6 m) g4 x4 B6 z4 z2 P/ C, }5 ?
          send_char(IRCOM[2]);
4 A6 n" d6 P2 Z; ?
2 C* B5 B, Q8 @: C! J6 ~}//end interrupt
. d" x. h' X; U0 O% Y, @
' L% Q: J5 ?3 v1 r//下面是延时程序' k! A# M3 I: u' p3 }' h
void delay(unsigned char x)//x*0.14MS,unsigned char x是参量7 j& m4 L1 W5 L8 x' ~1 R* U
{
! t" Y+ }2 {- E& [8 c) N unsigned char i;
. C/ [8 Q2 D8 |/ o5 K1 R& ?         while(x--)& A: N: o8 t+ J
        {5 W4 Q8 x: M7 E2 Y9 Z* N
                for (i = 0; i<13; i++) {}! h1 I4 G9 ], m6 U
        }+ \! l+ E, o0 ~) U# c9 c
}/ v/ o: T- ]6 `+ ^2 R

& N! p/ N: d+ Y# U7 \//下面是延时程序- V: |' |" r" b6 t# E  U
void delay1(unsigned char ms)//unsigned char ms是参量% w  t0 {+ ]8 ~2 p
{
& r  l6 k' q; }4 U4 ^! ]$ A5 l unsigned char i;! Z9 s0 `8 |; }2 b- u! L
        while(ms--)
7 h8 E7 L' q2 b( U1 ?3 G; ]        {) L/ g: I( P" c6 f8 `  V% S+ Z* m0 Q2 V
                for(i = 0; i<120; i++)% q; C1 p% V; r4 i& V
                {
9 x  t, [6 J& B$ b' O: I8 D                        _nop_();3 w/ n5 ?0 O! E: v6 V4 H
                        _nop_();2 I& a" T' [: }% B! o3 p
                        _nop_();0 }. ^4 O! c/ v
                        _nop_();# }- ~2 z  L) u( C/ x+ M4 W+ M+ }! r6 @
                }1 O$ k! J5 c' s8 [
        }/ R& Y* E; M# o0 U4 P
}
分享到:  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, 2025-2-19 06:49 , Processed in 0.065161 second(s), 31 queries , Gzip On.

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

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

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