找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

遥控器解码

[复制链接]

6

主题

32

帖子

107

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
#include <reg51.h>( z0 Q0 \8 y1 w  Y& c8 W$ Q
#include <intrins.h>3 F2 G6 Y- U/ c$ {6 M2 |8 i5 e
void delay(unsigned char x);//x*0.14MS
# S: K' l+ M2 L( h3 ]void delay1(unsigned char ms);# c0 e# t. T3 q2 V! b9 L
void send_char( char txd);$ U5 \* z! y4 r+ M( j8 }2 ~
sbit IRIN = P3^2;//INT0(外部中断0输入口)
3 M+ T: F0 ~4 D4 vtypedef unsigned char uint8;
1 s; M) v2 N3 L# |1 i0 F* tunsigned char IRCOM[8];
1 g. U9 J* L4 G* V9 w- @) Junsigned char code table[16] =
9 y* B8 _- t& |/ B. b                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0 L7 M7 l/ _+ j% h$ W, k8 l4 r- i# m                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F
3 ]+ f1 f1 ~( l0 B" B9 W/*波特率:9600*/9 K, F/ I- p) o
void uart_init()
, ~) |9 m- `* o; A3 s$ q/ |7 ]{0 F* k3 o' p# e* H, s, |
        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率+ ]5 l+ A* Q; C* Q  E. N9 K# P, J
        TH1 = 0xFD;                                // 波特率9600
$ h6 H) Q# h& \( ~8 O* r' u, T/ k        TL1 = 0xFD;
8 }' e: `) y& p        # I7 N: Z) v! T' ]1 `. s( m
        SCON = 0x50;                        // 设定串行口工作方式4 P( |$ c% O3 K$ P8 Z
        PCON &= 0xef;                        // 波特率不倍增# b5 D4 r$ Z' h  @# `' t
                9 s# ]8 t0 A: y( c- U4 K& I
        TR1 = 1;                                // 启动定时器1
! H( {; \3 N- D- h        $ ~4 G, N# B& F
}% ?: b8 r4 N) D$ {- ^5 M
/*UART发送一字节*/# J; ^6 D* k3 d+ q- @5 Z
! c. s9 W' Y# T/ T- l$ j4 t& X, Q
void send_char(unsigned char txd)
1 x* Z9 T7 m9 [. s0 H// 传送一个字符2 \; I; U; o2 Z
{! h" a6 z# b+ x4 w5 U7 J5 l
  
. s7 J  q4 V" g& Y' o4 g4 D        SBUF = txd;
9 O+ `& Z% N; j1 w- H. U2 A        while(!TI);                                // 等特数据传送
8 C- U8 _, K2 I# a        TI = 0;        * {) v. C' ~# E, [9 k
                                // 清除数据传送标志
/ r4 c+ r9 @. U5 X. C5 ]( C6 s}) i6 B0 I1 ^8 \2 {" r7 W( [+ _
main()' Y. s0 ~0 j8 m; \, c. e
{1 e, x, Z* c* z3 G
           2 p2 X% o; C& c1 z
IE = 0x81;    //允许总中断中断,使能 INT0 外部中断
. h: b  _0 O) J$ W TCON = 0x1;   //触发方式为脉冲负边沿触发1 S! J2 k' e+ S" B# Y% K
delay(1);
# o+ e: p1 i4 t  y : v/ F* [' M* n+ W' L: A! Z4 j1 p
         IRIN=1;6 |$ o" l9 G2 F7 s1 F; j& u4 @/ g
             //BEEP=1;
! g5 ~& c/ _' u8 x) b! e. u8 t                 //RELAY=1;
4 R  ]) Q- _2 p8 c                 for(;;)
& z4 ]( o4 f+ b2 D4 z                 {
( s% I- j( G& @+ t8 h          uart_init();& B( N  a$ i; v* {6 Z7 I+ f+ W, h
                ( b+ j2 D4 Z3 ?
                  }- {0 i8 I$ O5 F" i/ u' R1 t* p4 L. T
                                       
* t! g2 V% j1 I  P9 W* g: v) O9 ^} //end main
8 q" c: Y& ~  J//以下是中断服务程序8 E6 W3 J9 y4 a4 g1 b& n5 n) q
void IR_IN() interrupt 0 using 03 A) t/ a- L8 W& x; d8 c" u. n
{+ ]! h8 Q  w; E8 L* d- V
unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据
3 E+ @. m7 z! F0 Z  EA = 0;//禁止总中断8 u% k& @! v: l, H( h
I1://标号/ q" n1 `5 P$ C- g, R7 y& }/ m
  for (i=0;i<4;i++)* i& T3 K4 J! V, K4 a
   {
' Z( D% y9 m) p0 G9 G7 s    if (IRIN==0) break;
& G6 E' F( \7 }( V% e# C# l        if (i==3)
( \. R* t# v8 j2 u      {EA =1;return;}//如果i等于3就打开放中断
9 `: N2 m2 W9 W   }
- N, u2 f' z' w' s  delay(20);! Z" ]  O" q! i' @
    if (IRIN==1) goto I1;  //确认IR信号出现
4 W/ Y# t& f6 Q% F) i# Q* o  while (!IRIN)            //等 IR 变为高电平6 I  F0 j7 B8 m8 K/ p
    {delay(1);}+ Z$ r/ I8 `& C$ V
) q8 X+ R; w" n6 V$ c; n
for (j=0;j<4;j++)
, [, ]$ z5 _- p1 \7 \ { 6 M, n$ M" Z# _, W
  for (k=0;k<8;k++)
# g+ i" K8 N: l/ F* B* `4 i  {6 m  y, k3 s) E* s. H- w5 \# F0 ^
         while (IRIN)            //等 IR 变为低电平% n: Z; L0 o: g: X
            {delay(1);}
* U& w, r& M$ P2 c% y$ b# |* t           while (!IRIN)          //等 IR 变为高电平
9 ]; p+ O+ w5 @            {delay(1);}/ l8 o' k# x. l5 s8 r
     while (IRIN)           //计算IR高电平时长& d. _4 K* L/ j, b+ D( X. a1 C
      {                           //如果IRIN等于1的时候就计算delay的个数2 z4 Z8 W& U3 Y; n
           delay(1);0 e' v8 A( a1 r7 |8 t
           N++;           
0 f8 `% H0 R5 E* \3 g. t% _5 W$ {           if (N>=30) {EA=1;return;}. H/ i: ?* _5 i2 o. j! r
          }- C$ S  C5 q0 a6 t
     IRCOM[j]=IRCOM[j] >> 1;
/ V/ i. V9 `# D2 T5 R/ a     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}% _4 n& M4 I, \$ \
     N=0;
8 i+ i$ k4 J0 f4 I  }//end for k
; ]% B  b: z8 c/ F }//end for j, t, _8 K7 F  J- h7 q$ m0 S! Q
   
$ B+ B1 `& T& t) w# C( w$ d   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}! k8 e5 F' {8 M/ P% t* F( M
   IRCOM[5]=IRCOM[2] & 0x0F;
, i1 p9 S* Q$ V( d6 A   IRCOM[6]=IRCOM[2] & 0xF0;
' v: \& _7 K$ S3 O( X4 G, r   IRCOM[6]=IRCOM[6] >> 4;
7 d0 u5 s0 y- k3 L8 ~( O( ^% z  // beep();  N" ^( d9 z3 C2 k
   EA = 1;
% K' A5 D& p- ~0 }% v$ _8 i( @) z
$ b4 t* R  K! h4 i! |          send_char(IRCOM[2]);
* `$ I. g3 V+ t4 |1 U$ ?7 p3 f% Q
) |1 p! w2 y  Y3 }  Z) }; K; B}//end interrupt
0 t5 Q( T9 d$ j+ ^5 f4 b3 p5 C; h0 b' }  `
//下面是延时程序7 r; i- s$ n" n. B
void delay(unsigned char x)//x*0.14MS,unsigned char x是参量4 N9 e: B- `3 c8 A
{
5 _' T: X5 ^9 @2 L1 `4 J$ p unsigned char i;9 e' d/ @. B1 l* z. i
        while(x--)
! c  R( I1 g; z( p$ U: N4 w        {: r$ d+ E* K# \6 z0 w( S- {
                for (i = 0; i<13; i++) {}( s0 }; z3 N5 I  y
        }
6 b1 ?$ {2 w4 B) F% S; A}/ c  g' O! J2 R6 G: T3 g
. y- D/ c* ]: ]5 p- j
//下面是延时程序
9 k" E5 I* f0 E* `2 D; q: |void delay1(unsigned char ms)//unsigned char ms是参量9 q4 I# Z. C7 i+ M
{
  ]7 ~6 t# @/ _8 N. m unsigned char i;: `, r! [9 q/ p  v$ C. f$ ]
        while(ms--), B5 x* y1 d" d4 L, J
        {
0 b' m3 I2 l' i) X% E                for(i = 0; i<120; i++)
5 |9 A" p5 G& K! J9 N                {
  }& P8 u" |4 I' G, n' j                        _nop_();, y5 ^! B& q2 f
                        _nop_();
+ h/ C0 e, B; e+ [& O% i                        _nop_();1 W; Y( I( _: d6 X8 V! t: f
                        _nop_();; i2 M+ T- E9 n& L  C$ Q8 a- F1 I
                }, u) f* W1 h+ m* `
        }' ~' [5 ~. P! ?( k7 a0 J# y, I
}
分享到:  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:26 , Processed in 0.054655 second(s), 31 queries , Gzip On.

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

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

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