找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

遥控器解码

[复制链接]

6

主题

32

帖子

107

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
#include <reg51.h>8 m% K, e& E( U) @
#include <intrins.h>+ H  Z. i& L; U: |" o# K3 \  ^4 J
void delay(unsigned char x);//x*0.14MS
/ |! \# D+ j- ?1 N3 \void delay1(unsigned char ms);
# @: I7 k0 x! R; q* v4 j& y( uvoid send_char( char txd);
+ A- w- [9 F$ T7 F" t4 Z4 U6 D5 Ysbit IRIN = P3^2;//INT0(外部中断0输入口)
) m1 s# P1 ~& ~, s0 Y! \typedef unsigned char uint8;
8 B/ T1 [% I$ e- I# b0 Wunsigned char IRCOM[8];
+ n! v7 S, H* gunsigned char code table[16] = & }0 K0 c. \( @9 k* I+ y
                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
8 r/ ~: ^$ U, m5 k8 C6 I6 F* Z% V                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F/ g" x( |0 M0 f6 K. D0 d' `
/*波特率:9600*/
7 ^1 R, z8 Y2 [# N* |void uart_init()6 T5 Y  _) e. R# k9 D
{
1 F6 u' D# d1 M. z0 \. Z        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率
: ?6 I6 Q. k5 i6 T        TH1 = 0xFD;                                // 波特率96002 E& B# a( o5 I! L
        TL1 = 0xFD;" {! Z0 Y/ ]! C; U8 j9 ^
        , k' r! Z  L0 \% W9 y0 T
        SCON = 0x50;                        // 设定串行口工作方式" m+ A# u% l. ^/ @8 h% W) h6 v
        PCON &= 0xef;                        // 波特率不倍增
: {# f/ W' S* H$ k& I% [' t5 g                  I# U7 [4 Y  r" a. J$ i' _
        TR1 = 1;                                // 启动定时器1
* _# U- [6 g7 z; J  n' j5 |* U8 R       
, b/ B+ R) {3 U  J: w3 d}
/ @! a6 |6 n/ r/*UART发送一字节*/
- |# v+ |' k" Q/ U6 ~( J  l8 m2 Y0 N, e8 Y3 n$ m! n
void send_char(unsigned char txd)
# Y; f- v3 ]% L// 传送一个字符3 Z* G1 N( P1 S% G7 S
{
7 {# ~2 s# U! k$ G  
% B: Q' v# X3 }$ x+ a& d        SBUF = txd;8 w+ a7 l6 q/ q1 A
        while(!TI);                                // 等特数据传送$ [" e: C! V' e5 x- {# V3 D' m
        TI = 0;        ! ?; s4 _8 O% F) u" V
                                // 清除数据传送标志, k0 s1 m  Y7 H' O( L
}! s6 M# n+ q% ]. I$ Z4 Y2 X3 w
main()9 W3 f: m! `; D8 k" a& A, Q3 O4 C. d
{( O$ q( Z* d: d
           * J: T, \8 K7 s* y: F: C  @: L! v
IE = 0x81;    //允许总中断中断,使能 INT0 外部中断9 ~7 @( d' \& ^
TCON = 0x1;   //触发方式为脉冲负边沿触发
4 j: ]' l9 W* P0 j1 \2 `/ `7 ^( K# b delay(1);$ A# p% x% |3 `7 N
+ q8 N" i3 K5 W& g5 O  `
         IRIN=1;
8 H  C+ J- M& U' t             //BEEP=1;4 n2 b/ z: P5 D1 ?# Z: r! Z
                 //RELAY=1;" }3 S1 w9 Y+ F! b
                 for(;;)( E& h( Z# H4 y: Y
                 {; w2 Y" @8 l: |2 i* a
          uart_init();
0 [7 p4 T' f" D# J$ D                ; d% m6 s$ }& U( N9 z0 p' s
                  }& n0 j6 ^3 ^2 r. h# A
                                        $ K1 J- w  d7 k+ N) Y9 d
} //end main7 O/ h9 J+ m6 F3 B" H4 v, q
//以下是中断服务程序
+ S% Y+ \* a6 {* J& R9 Evoid IR_IN() interrupt 0 using 0
, ^; [6 s% ?' Z$ ]* o{
8 K2 N0 Q. T( i, s  s% F; z unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据
2 W& G. D! K: ?' j4 P$ l  EA = 0;//禁止总中断: p3 N( @* a$ Z- t% R! V4 N
I1://标号6 Z$ }  h+ i+ \* F$ l
  for (i=0;i<4;i++)
/ C0 P+ ]4 J* a& i' }   {4 x2 o0 x# D. Z( k9 P# A
    if (IRIN==0) break;
- \! k7 x; Q0 j& h; x5 I4 ]8 Z* j9 |2 {        if (i==3)1 k# h- S- {0 @
      {EA =1;return;}//如果i等于3就打开放中断
( x% Q2 s( J# q, Q; F, P4 K' e   }; L6 y( I( W4 T5 H, n" ^7 {
  delay(20);' d+ h3 v- u# M& `  }7 K; f
    if (IRIN==1) goto I1;  //确认IR信号出现
# L1 {  l- r8 U- o  while (!IRIN)            //等 IR 变为高电平
' a) q0 k" B) d    {delay(1);}. Y3 ]* H( C! Q5 V

. j; M5 _/ v9 X/ _, c for (j=0;j<4;j++)% [1 J! F) P7 I
{ , g! s: c5 `! ~  t& _
  for (k=0;k<8;k++)& ?' p) Q1 l! v& z
  {
" w0 P0 L% n# S2 V          while (IRIN)            //等 IR 变为低电平4 R8 L1 ?9 p. P8 r. E8 {
            {delay(1);}4 q! d* n  ~+ P. w
           while (!IRIN)          //等 IR 变为高电平1 I, L2 b  e/ c: e" m8 H! o* C
            {delay(1);}
$ a9 T+ w7 y" c5 l5 M2 ], w( a: {     while (IRIN)           //计算IR高电平时长. M( h$ c, [% a) c8 d6 t
      {                           //如果IRIN等于1的时候就计算delay的个数/ k# g+ z9 h; P; @# J, P9 D# T
           delay(1);
* ^. S$ F  n, c) @           N++;           * r5 f( y8 a+ f1 f0 c1 V; }! ~6 ]
           if (N>=30) {EA=1;return;}! q$ D7 _* g& w9 i  ?& ~9 |
          }
% D% K7 M* y+ c     IRCOM[j]=IRCOM[j] >> 1;$ J7 G! F! c- L/ k
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}5 H; W% z+ N, w+ R
     N=0;' Z7 _8 v( d4 X$ |. A9 u2 m
  }//end for k& K* G! s9 p( U* h: ~3 ~
}//end for j6 R8 H/ g/ E6 [
   
3 n: A- X& W8 e, L: \   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}
/ c( t' I# i' Z   IRCOM[5]=IRCOM[2] & 0x0F;
; {( a5 u& P& d4 ?1 b. l9 _0 L   IRCOM[6]=IRCOM[2] & 0xF0;
' [/ [( G) U  k* ^, [  Y   IRCOM[6]=IRCOM[6] >> 4;
6 \8 V5 Z  q- z: z0 f: e  // beep();$ V2 u" Q7 R+ L) D
   EA = 1;5 b$ _6 `, P, J  I) C

" J7 r! W+ U' c1 s* ?          send_char(IRCOM[2]);
. d3 ^0 T- J) A" V' m; V% x6 a+ F! l: N8 ^
}//end interrupt9 C+ Z3 r1 m' r

9 ^* j: W. Z4 V, r$ `//下面是延时程序0 c% Z: m) a/ X, p
void delay(unsigned char x)//x*0.14MS,unsigned char x是参量
3 R2 c+ ?3 _% \* l7 I) n{
% Q. w, L6 a. G* J5 m1 k+ F$ V unsigned char i;
5 ?% \5 \# m8 p3 d: S         while(x--)
( Y7 G. g; I6 d% R$ \! E( M        {
! Y7 Y' q0 b" X) c  l7 E& q                for (i = 0; i<13; i++) {}
7 r$ ^4 L/ ^8 H* ~; o        }  V9 m5 \4 g: ?& u- {; W
}/ L' o. u- c) M- ]. ^) J8 T
* ]3 [" n7 `7 V- d( y0 @
//下面是延时程序
7 @% D4 R6 h& m* Y) e: g2 M' ^void delay1(unsigned char ms)//unsigned char ms是参量
/ b4 _  x" w! `# c& Z' V{
, Y1 W- f5 E2 m6 j4 u! L unsigned char i;
, B3 q$ I1 |( @; e$ s7 [         while(ms--)
7 O) W0 b8 a+ w1 t        {2 [5 q7 G, r9 g" c
                for(i = 0; i<120; i++)& ?3 ]9 W3 i9 y4 D
                {
" v: @0 W0 x# e: l# x                        _nop_();7 Z' ~& }* A3 B* o* x$ B
                        _nop_();
" C" |& o# \3 _- Z                        _nop_();
. ?2 [& Y  ^& U, b! ^4 W                        _nop_();
" {0 c3 g$ c+ m; [; ]                }
* N7 N' C& y0 G6 d5 l/ t        }- a3 S2 P: _, V; h2 B
}
分享到:  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-2 04:54 , Processed in 0.054451 second(s), 31 queries , Gzip On.

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

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

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