找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

遥控器解码

[复制链接]

6

主题

32

帖子

107

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
#include <reg51.h>+ |0 G" w0 m3 |
#include <intrins.h>; W, r# C3 K. H) p
void delay(unsigned char x);//x*0.14MS
6 S7 d( V: W5 Dvoid delay1(unsigned char ms);
4 K3 u2 _# D: o+ T# w7 T6 {, Ovoid send_char( char txd);/ f' T: ^' M+ x4 x- @
sbit IRIN = P3^2;//INT0(外部中断0输入口)
3 w4 w9 Y4 }4 v- \$ d) ~7 W5 {typedef unsigned char uint8;( ?$ f" @, I2 o5 d- @9 R
unsigned char IRCOM[8];: X/ ?- L. A2 V* P) ~
unsigned char code table[16] = # T! O( D5 D) _1 D( X9 [
                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,+ Y7 [" p: _5 G
                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F$ m6 \4 S6 s4 {# H4 }* N) Q
/*波特率:9600*/
6 I4 U' X2 Z, E% Mvoid uart_init()
- ^9 N% x( \1 c# W) V- ~' i6 `5 u{
- B1 A. n5 x5 O5 i$ t; j, H        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率
5 S7 ~$ g( Q; o" V9 M0 Q; J1 r        TH1 = 0xFD;                                // 波特率9600
8 q0 Y: Y$ T) ]6 d. d" X/ H- d5 z        TL1 = 0xFD;4 g: T1 A; f* D* W$ B
        ) I5 {. C: o3 s3 \% `; S7 k  C
        SCON = 0x50;                        // 设定串行口工作方式" V+ k0 V7 v$ S/ @) u9 e# }% g
        PCON &= 0xef;                        // 波特率不倍增0 }6 |( s! i: i, N5 g
                0 B2 d1 E* F3 R
        TR1 = 1;                                // 启动定时器15 a! M& i) g9 e" f. k" ^' G4 n4 Q
        1 s, W- Y" `5 I3 l' I) m; l9 y
}
# M, c9 v) z6 T6 E/*UART发送一字节*/
% o. c, \) b- }6 Z) R3 J3 T
& s% P8 E$ P" M% U# B  T  P, i& nvoid send_char(unsigned char txd)
" v/ T( S4 ]7 T. L// 传送一个字符. `: ]& v7 Q; Y$ l% K
{
" {  ^9 V7 u) c  F; a, {  ! A+ I/ {* Q' M, c* p! @9 B
        SBUF = txd;, V; e1 ^2 v+ i$ M5 w
        while(!TI);                                // 等特数据传送2 C4 u& h5 U, B3 n/ t( A. `2 P
        TI = 0;        / G4 x# F2 s& \, s
                                // 清除数据传送标志
0 `( i( d  l" d% W9 a) ?' H! W4 O}* `7 d$ ^4 ~9 ^3 n6 I. W
main()
  B0 T4 d0 e9 T4 v4 b{+ Y4 C% j  [7 m: ~) h$ K
           6 Z8 J  M6 ^3 i- s1 V( I
IE = 0x81;    //允许总中断中断,使能 INT0 外部中断
! T$ c4 W. x5 p/ J* m# ~ TCON = 0x1;   //触发方式为脉冲负边沿触发6 v$ d1 r- l" N. h; L4 n8 L4 n& d
delay(1);
3 u9 u4 X( E) T9 {2 C2 v/ X
7 b6 i6 I0 h0 I: v" R- S         IRIN=1;" H4 P3 m. W9 u/ y# s9 j0 g7 U0 ]
             //BEEP=1;
6 M& _9 v/ h7 w; n0 {; ?! a: B                 //RELAY=1;
! {$ c* P$ S9 @( ?2 I+ v) S                 for(;;), Z& D& ^6 O; R$ W" M- n
                 {4 }9 b. b7 M% ?# e
          uart_init();
6 x. }. T$ |+ A3 L6 p               
# ^" C5 O# C( L! |) K8 C3 m                  }7 z1 c! f9 w% J4 q0 g; W7 R
                                        3 S8 D3 L4 E! f9 s8 L9 i8 o
} //end main
* `0 l0 E  p5 _: F7 W( j' c5 J! @//以下是中断服务程序) Q8 r8 @% _8 ~4 s6 i
void IR_IN() interrupt 0 using 0( h6 O- A1 b# q5 ?8 A
{
1 c. e9 l: g! Q unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据8 u9 ^5 q8 D8 `4 d0 O, H
  EA = 0;//禁止总中断
' c* T& f' e! sI1://标号
. j2 e" @/ z/ q- ~. k: M  for (i=0;i<4;i++): S' I6 `( [5 l) s; [; ]
   {
* p, o. D. t, k- P5 u* _* S# U0 R! [    if (IRIN==0) break;1 b! t& w0 V5 M  B
        if (i==3)
) b! u- r* L* p3 C% e      {EA =1;return;}//如果i等于3就打开放中断
+ v8 f( ?3 I& L   }
" s( @, ]1 R, f! d) a2 Q  delay(20);+ y  \) N' J) x' d% {
    if (IRIN==1) goto I1;  //确认IR信号出现/ L4 u9 W+ A+ {3 C( [
  while (!IRIN)            //等 IR 变为高电平. a) x; u* i: R5 k2 U7 \
    {delay(1);}& i" D4 k/ J2 |) `0 b; n2 U; ]

' q) L9 [: s+ _8 K" ^& g8 O! E for (j=0;j<4;j++)/ |3 E  F4 f; H; s/ G
{ 4 e* @% l/ L1 l# p* P- r$ g+ Y9 z/ L8 ~! I
  for (k=0;k<8;k++)
/ @. g' s8 c0 y( U2 W3 v  {
: K3 Z- I: e" R; e$ A          while (IRIN)            //等 IR 变为低电平) b4 ?7 x2 n0 ~* r) H
            {delay(1);}( t: x" G0 ?' L8 r, H. |% U
           while (!IRIN)          //等 IR 变为高电平
8 Q' z0 i$ O4 w) f/ \* K! R            {delay(1);}
* ^5 a- @% a% d" B     while (IRIN)           //计算IR高电平时长
. T9 }( ?2 W3 o, w* \! X. J      {                           //如果IRIN等于1的时候就计算delay的个数
9 ~7 i3 n4 s9 i3 n+ g           delay(1);
2 ]) E' s- h( N- E3 l           N++;           , N( {$ ?* ~$ K% K& F- M2 m
           if (N>=30) {EA=1;return;}
" f2 N+ ~5 Z3 W0 V3 d/ ]/ Y% j          }; l( ]* F5 ~8 f3 V, J
     IRCOM[j]=IRCOM[j] >> 1;
& N4 L3 x1 U4 V3 j2 W1 {     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}5 ]- j4 Q% J; v5 l# Q" A. i
     N=0;' G( Y. i6 V5 w' G- R
  }//end for k9 q' |, @- U3 X1 Q, [
}//end for j
3 }5 C/ L/ q  Z+ v  P; P8 l' O  P' h   ' p' B( \9 i8 c+ `( U
   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}
$ V+ i0 P- d1 F   IRCOM[5]=IRCOM[2] & 0x0F;
/ r/ y& A& M+ M8 @! d/ l   IRCOM[6]=IRCOM[2] & 0xF0;
- i3 q) O3 w! b3 }- x- Q2 U   IRCOM[6]=IRCOM[6] >> 4;
' X" S( q5 J) t+ k0 P) k  // beep();1 z! b) I; F0 [! A/ N) j4 l
   EA = 1;
5 S6 C5 j& q, Y8 Y! G4 Q6 ^3 M. J5 z  y# x
          send_char(IRCOM[2]);! R" N' [4 f2 Q! V8 p

9 T' @3 C0 N' ~0 y- i' B5 ?}//end interrupt4 i5 Y+ P7 b" S; U7 `
9 R! L7 p2 H0 v1 C0 d$ o  C: H
//下面是延时程序
" B- d7 U! W) ]$ q( B) s$ B( w5 pvoid delay(unsigned char x)//x*0.14MS,unsigned char x是参量
$ c- Z6 e, c$ y+ l( E{+ }4 T( K5 n% J$ i' U7 p- A
unsigned char i;
2 |; X# K- C  {& t+ P; `/ v         while(x--)
0 c8 A3 ?7 R5 [2 z! u3 w5 l* r8 O        {
" M% Y9 z7 v2 n2 x  s' o                for (i = 0; i<13; i++) {}
  a2 b# i( \; G: `/ \9 q        }
, v) }# Z2 D, @* M" K}
6 t/ }# y* X9 \% |, `" f2 Z! k, E5 e" ?( B# Q! ]7 ~
//下面是延时程序
6 Y: S& b) k5 i: u3 Z6 M( T# ?7 Vvoid delay1(unsigned char ms)//unsigned char ms是参量
5 `9 f9 p& n( C9 K) J- d{5 _! \0 E# p5 P( o% Q
unsigned char i;4 F# U6 T/ e1 {2 `
        while(ms--)
) t( R6 K0 d3 W3 _" C, I# b        {
# [8 N2 \8 f% R                for(i = 0; i<120; i++). S( m9 \& l" k4 J
                {3 a  }" }- l8 `& i/ F; F  N
                        _nop_();  r2 v3 K$ Y% M2 d; q/ a
                        _nop_();
' z: X) W. i9 [                        _nop_();
/ L- w- u5 d- o+ ]                        _nop_();
$ W4 c" J8 g4 H8 x# p$ [+ p: m                }# ~% E+ E, ~+ p2 H
        }) l& j8 W9 Z& k: }4 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, 2025-2-19 06:07 , Processed in 0.058611 second(s), 32 queries , Gzip On.

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

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

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