找回密码
 注册
关于网站域名变更的通知
查看: 926|回复: 1
打印 上一主题 下一主题

遥控器解码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include <reg51.h>6 [$ i( ^8 [3 t4 R
#include <intrins.h>  |) U; F# _& k+ I- Y
void delay(unsigned char x);//x*0.14MS
  W0 J: G1 c! a- j* T  Ivoid delay1(unsigned char ms);
! D5 ]5 p. q% e& x, T% E  ~( |3 Wvoid send_char( char txd);
4 i' [4 N2 F& t% u1 j6 g/ Tsbit IRIN = P3^2;//INT0(外部中断0输入口)5 x0 K, r& T, M, Y5 K4 O! X
typedef unsigned char uint8;
* v' S3 Q. J1 a/ ?6 ~. Punsigned char IRCOM[8];1 A, g& f0 d1 T/ ]2 A1 J$ }$ _
unsigned char code table[16] =
3 o; L# K4 X: v: R% Y$ P  z9 n7 V# F                    {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,  H5 J9 R: U8 i+ i7 |
                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//16进制的0--F* A: R! e) n! h. t, h& D
/*波特率:9600*/
/ j. G9 N- ^* z$ q! k9 dvoid uart_init()1 J1 V# `$ r4 g  ]
{
* F4 @/ A. T7 G( D1 W9 t+ r' _6 n        TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率
8 p; X5 l+ M9 Y. Q( F( N" {        TH1 = 0xFD;                                // 波特率9600: i$ u0 ~* H! w' E) R
        TL1 = 0xFD;
. J2 B4 f, j/ j8 }+ q! |        9 o/ s" k. z$ f5 T* b$ h
        SCON = 0x50;                        // 设定串行口工作方式- M- l) r2 d8 w* x6 @% l
        PCON &= 0xef;                        // 波特率不倍增* l: Y' _% D! n( s- U) b. h8 r& l/ a
               
. W9 z$ J: L( Z& T: S  _6 y1 w        TR1 = 1;                                // 启动定时器1: @# X8 D: p# R* W. m! ~( F& I
        ; |" ~) V8 f8 h
}, ]6 d" K  }7 o$ G* I3 r5 z
/*UART发送一字节*/
& a! ]0 Z' D9 P' B$ u0 c$ Q
: I% M1 C. G; Gvoid send_char(unsigned char txd)) M* g: I5 l) w+ K5 @- Z" N  `3 q
// 传送一个字符8 W: t2 i9 \2 @( t8 F8 S
{) h, ?) J# j3 Y& n$ V
  
1 R4 {  ~* b0 h        SBUF = txd;* B: r$ W# }% l! }7 V! J
        while(!TI);                                // 等特数据传送
* A, b5 N' X) s5 f) @7 j        TI = 0;       
  f' x% i+ }2 L6 L# a                                // 清除数据传送标志8 O3 A( n0 r" u' m" P5 U
}
. n7 B7 ?+ M+ Gmain()
% f: t0 T, `; L{4 A) O" ^* X: l0 |2 }, J9 ]0 v3 Q
           8 _# u8 @! _, E: @1 g
IE = 0x81;    //允许总中断中断,使能 INT0 外部中断; A/ e1 P$ d+ h% i; }5 D, x
TCON = 0x1;   //触发方式为脉冲负边沿触发
: z" g) w! ^/ E delay(1);
0 ~9 z( N% _0 b2 ]4 B+ M
0 o6 R& Y) e9 V8 N. n0 v, c         IRIN=1;. H5 _# l* q9 n7 k  ~
             //BEEP=1;1 J( [, g& |$ V1 ~6 Z9 q# m
                 //RELAY=1;2 }: T& J  ?& g$ ~6 L
                 for(;;)
, x# i# }' b; w! s                 {4 U- W# N9 @  c9 l9 l
          uart_init();5 Y# W4 Q2 C9 C* b- M
               
% A4 _# W! T6 W8 }6 e/ L                  }
( f# [, T) R; y' C. z4 W% Y                                       
, C9 }5 F, l8 Q} //end main3 Z/ C9 G% @5 c9 B8 x- ]
//以下是中断服务程序
$ \2 B. y2 }' e. x$ ]void IR_IN() interrupt 0 using 07 c1 u# @! b3 h2 S
{3 I. k; M9 A6 s) ]9 V
unsigned char i,j,k,N=0;//无符号数据单字节整型数或字符型数据
8 g( n8 V" E: O# @  EA = 0;//禁止总中断/ ?" T# {, [# i
I1://标号, a/ T% w# t4 H, W8 X* n
  for (i=0;i<4;i++): x+ e) N) m$ j% N; r
   {0 f6 \! O0 C2 Z) X' K' C
    if (IRIN==0) break;
7 p! t- W' l1 N! n8 ]  U4 b        if (i==3): \5 R- ^2 J  u0 r
      {EA =1;return;}//如果i等于3就打开放中断
7 l7 c4 L2 G- W% b% m5 J   }9 B6 h/ M% o$ K0 G
  delay(20);
' J' Y* g* G* _2 w7 _/ l( e% f    if (IRIN==1) goto I1;  //确认IR信号出现+ M+ Y& o$ z6 s
  while (!IRIN)            //等 IR 变为高电平
4 e" X4 w  s6 {8 r+ Y    {delay(1);}
+ U  P2 X3 X0 |2 _; x
2 {3 K" J8 m& W2 l& {$ Q1 k" l) ~2 i! L, y for (j=0;j<4;j++)" g8 O" Y+ ?: B% Z% p
{ 9 F+ K! w7 s; ^, h2 P6 ?
  for (k=0;k<8;k++)
& i5 ]& Q6 i- G- ?# j! w3 P  {
6 l/ f( [( I: W          while (IRIN)            //等 IR 变为低电平
- y$ T2 R7 T. n& g5 p0 |            {delay(1);}
) M5 F% p; p3 g' }. T( V           while (!IRIN)          //等 IR 变为高电平0 \8 _  H( d9 b1 Q; N
            {delay(1);}
0 ~3 N# H, I8 p% k- [/ A( B     while (IRIN)           //计算IR高电平时长, J  x: `1 c' J$ N2 x
      {                           //如果IRIN等于1的时候就计算delay的个数. [) c% ^, `% H
           delay(1);# X* ]+ R9 z1 }! i
           N++;           . L8 B( D$ Z, M8 e$ X) O. N
           if (N>=30) {EA=1;return;}2 j0 m) P, Z. K, x3 ^6 Q4 t7 |" x! K1 S
          }5 D7 X, t* h6 z* T
     IRCOM[j]=IRCOM[j] >> 1;0 c% d7 j5 ]2 @3 `
     if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}+ N! C, B+ V5 n/ E
     N=0;1 x9 W' ~0 j& b% _) v
  }//end for k
$ C5 ^9 v$ |  S8 U* p& O+ i }//end for j
) ]8 A8 _5 }" e9 A$ c! K   9 `* r% j. _- u! M. R' U7 n
   if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}
3 S8 ^- |& i  r   IRCOM[5]=IRCOM[2] & 0x0F;
1 _" P5 M$ B! P8 C$ A! j1 S! W9 X   IRCOM[6]=IRCOM[2] & 0xF0;
% S5 n9 g& Y& |; C; P   IRCOM[6]=IRCOM[6] >> 4;9 P$ G0 O% U( }; V8 U% _0 S1 f
  // beep();5 s/ w% `& n6 t; Q
   EA = 1;7 s9 g, s4 j- u" H2 h: u" a

8 ?& R: V* P+ {  }! r* u' l          send_char(IRCOM[2]);
! p' Y+ x9 Q5 b6 o% k
7 S, Y2 m6 ]% _}//end interrupt
+ T' W3 j2 d8 t+ X2 ~" I! H( v# p$ t- ]) Q6 o& A
//下面是延时程序7 x5 R1 c; E4 p0 g% p) d; ]3 p' C
void delay(unsigned char x)//x*0.14MS,unsigned char x是参量0 H6 ?! t+ |+ s1 E# k
{
  v$ K; ]; L6 H4 y6 q( u+ N' [ unsigned char i;3 I" y! H* |, V( d5 L' S
        while(x--)
2 n/ c/ B6 I$ a8 X7 E3 @0 i5 C( H        {/ i, P, e( m$ u& S* I7 t
                for (i = 0; i<13; i++) {}: L* u9 `3 Z" T! R
        }
4 z: f+ `4 T$ g$ S! E$ C$ n}
4 z) s( v0 W2 ^0 U! _( b( [. D9 p' v& u) w* m
//下面是延时程序
- q+ }5 E3 G- _: Y/ p) j, S7 ivoid delay1(unsigned char ms)//unsigned char ms是参量
1 i$ p& `! q. I/ n{9 a, d. T: G: j
unsigned char i;
) d. ~( ]! T4 j+ @" d         while(ms--)0 B7 g. Q6 i$ I$ `- L: V) s2 [
        {
# g4 S+ o" X( m# N                for(i = 0; i<120; i++)0 h4 _5 e$ X% e
                {
7 o/ y1 z8 L; L2 o5 j                        _nop_();% @* k8 a% W# l  F& M
                        _nop_();3 o7 O7 m2 w8 Z3 R8 ?) U! d1 |' {
                        _nop_();7 U2 y6 u. L2 p$ l- }# l
                        _nop_();* H7 a) ~; o! q( C" M) V2 M
                }
, W4 E5 K8 J3 w! x) g( I        }
; H$ x) ?: n+ H4 A8 G3 a}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-29 05:21 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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