|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于51单片机的红外遥控灯 原理图及程序# V, h/ A! |: W- s
: K) @& r# y1 d; [% O! T" N/ I( r3 ?( e d: F
红外遥控灯单片机原理图:
8 x8 ^7 u+ t' M, ]3 s
; g8 \' ~+ Y) i! E. f7 j# [//头函数) x# ?! |6 z1 Z0 {2 j, W" c2 Y2 o
#include <reg52.h>
6 V4 k/ c, L+ D& c ?//宏定义" ]1 p# i* h# r, v$ v, k
#define uint unsigned int
! ]! b6 j2 h" o( m& q#define uchar unsigned char
( m. h8 t7 Z+ [1 ~. j3 Q2 c& t' n+ p" m1 `2 S0 b* _8 J
. I# L, ^5 B7 o//时间计算
+ p0 R( m4 Q& ~6 ]2 _#define Imax 14000 //此处为晶振为11.0592时的取值, 5 J) R5 ? w3 w) ^* i/ }
#define Imin 8000 //如用其它频率的晶振时," z7 }9 } e4 z5 l6 V$ e
#define Inum1 1450 //要改变相应的取值。8 P. h; u+ o# N, H8 q4 a3 o
#define Inum2 700 7 X5 E7 p$ N, F( I5 h4 ]
#define Inum3 3000
3 `, h) [) ]" N5 \: \3 [+ G$ Osbit led1=P2^3;& x j- O' p1 t* I
sbit led2=P2^0;
# e- Z' E4 ]# s6 a//解码变量1 c# P1 F i c3 r2 G
unsigned char Im[4]={0x00,0x00,0x00,0x00};. j7 w! m9 I5 i; T. a+ r! f, O
" H* d9 l$ T9 x! q( E1 J
5 [7 u. h! j3 K* |6 ?" D//全局变量7 l# L: q* p$ y Q
uchar f;3 K& J. H0 H6 [; k: J2 A( B( R" v
unsigned long m,Tc;! {: Y2 F4 i& c* _
unsigned char IrOK;# A& v# W- [2 q7 N4 @4 w9 v
7 T7 l" T1 g" t0 \2 n
* _0 m3 L5 x: F, k
+ {; N8 N) A: I4 p2 ~$ ]3 p+ y6 h
1 H$ Z H# a+ L6 w2 [3 X
//主函数
# m; Z2 U# H L- X+ Pvoid main()) a4 E& r6 [6 @5 g3 Y& P( f# U
{; s6 G/ ]) D+ n6 G
P2=0xff;& U0 m& S* q8 [
* t7 C3 V4 |" L9 j; g; t; i$ g
EA=1;//开启总中断
- a/ l! b T( J: v* ~+ L , U. e, P( ?( e( K2 \* M+ f
IT1=1;//下降沿有效! q6 h; N( |! m& L K. R C1 A" H
EX1=1;//外部中断1开7 n, a5 ^# N# P6 F. M6 o3 a
' A7 X/ x; x, L+ Y, C' ] TMOD=0x01;//定时器初始化 . M" z/ f9 e3 S* I
TH0=0;//T0赋初值
+ ~1 P/ g" Y% ]3 }: e3 g2 u( ^ TL0=0;
$ D- l& t! z# i- r* W TR0=0;//t0开始计时9 X! y: U$ H- [3 s# f) Q3 P7 J: [
while(1)
2 [: e: \- L6 C* v1 ~# A0 z% `- K) d- N {
3 f4 r5 G+ S# J2 k, r8 y; \ if(IrOK==1)
( `& A- ^6 z& Y4 ~& [- ~9 R {
c1 h& T0 a& W; U& Y0 d1 t //1键
2 o3 q7 t2 S* z; Y6 Q3 Y" Q if(Im[2]==0x0c)4 l5 u/ G, p& }2 ^* n7 v' \
{
0 n% o$ f: f9 J3 q9 O P2=0x00;
& N5 S. A& j8 g5 L$ I; @$ s4 _( I3 { led1=0;- Z' E6 k& E T
}5 E" @) \7 c& D V
//2键
8 B( E: V% o, e else if(Im[2]==0x18)
2 r3 A( h3 x% W1 Y6 b- H {
; N, i0 o6 T& D4 }9 y. t //P2=0xa2;2 }4 @8 X) }/ ]; E. r
led1=1;
' n% L/ i) N' \$ _( O% A3 c }
( W- h$ Y7 g: U" z //3键
$ x2 h* u( n) Y- @" R else if(Im[2]==0x5e)
7 d; A" ?( }4 [. l& O {
: V& ]$ U# } j1 [ M0 a P2=0xb0;5 Y/ j" Q! S1 p3 B7 J: d& T
}
% i* C# O: W' \( |* J: O //4 s2 k) n9 @2 w5 x( H
else if(Im[2]==0x08)3 K/ t7 R2 s7 b- z% o
{! n& \+ W0 r" I3 W
// P2=0x08;
: M5 B) I2 F8 ~; R led2=0;
( f3 J1 Y% n' `2 e, ` }
+ N: F4 B5 @5 H) }' E: y //5' v0 u* L$ v. f& s* L2 Q- s+ Y
else if(Im[2]==0x1c)
* I+ ?0 \% e5 ]0 z$ s {
! C$ j3 P% y/ O9 t, {- Q // P2=0x91;
5 J8 v) I% V) J I led2=1;9 Q- r w0 x( I5 [3 t0 ~
}2 u$ \ V* k- a: `% y" F& f$ i
//6( i! ?: Z& z F' x
else if(Im[2]==0x5a): R. n; D8 C& b# B7 S1 d: U
{
7 u7 q5 |6 t) Y1 V; S P2=0x8c;
% j8 q. ~) y$ c6 q- E }3 j8 t [0 }! F! \! R B
//7键$ j6 o& w3 X/ E) r
else if(Im[2]==0x42)
j5 V+ l2 ^) a* R1 ` {( E, i: b& Q% Y& u- L: [0 D
P2=0xf8;
$ t( N2 U+ R- Q9 s' T: y* I }
* s' p7 V; N+ _% { //8
, I0 F4 d% d6 m1 ~" d f { else if(Im[2]==0x52)7 k$ M0 T( W! [
{
8 u7 m% b4 K6 T; `: o. g3 M P2=0x80;# B+ o6 ?; X n8 c" g
}) |9 V% b* A' ]% _9 K- h
//9
1 M( k! D5 {. `8 Y2 U# L else if(Im[2]==0x4a)
* J! S/ h8 O" Z7 ] {
4 r0 N8 x7 T7 t( J P2=0x90; A7 m# |7 D0 }. }; l
}: S8 X- P7 B! [; T; a: M
//0
) g1 m. Z7 H* J/ ~! l: ^3 I: U else if(Im[2]==0x16)8 w x/ h: V3 v9 S9 |. l4 B
{7 b% i `7 C( M$ a" n
P2=0xc0;
" @' C3 g; \# t }. `8 i) ~) g: p/ W' }3 c, ]
//关机. ~) w1 I7 `# t" B! o2 X O
else if(Im[2]==0x45)
$ @6 j% s1 V3 T+ M1 P. A {
1 ~( n* P; L4 R$ [ P2=0xff;6 Z. x; y1 ^, d9 d# X! f2 w6 O% e
}
" f4 W' _5 @; r$ C$ l$ ~) a IrOK=0;
! u7 f" G9 Z/ `9 L! l @ }
& S! \& r& q4 b# ~& d7 n8 }$ C2 K }
& H+ B: K9 _* ~% M3 k% T: F. u8 `3 A}( U0 K. x* @' F$ L. J
# C& u% ]' V8 _( c
# X/ A* c+ v1 ~, @7 y0 c1 c( L//外部中断解码程序_外部中断1) P0 c U9 ]% w1 \+ b
void intersvr1(void) interrupt 2 using 1% A2 i! d- U b# a$ M
{
I/ G9 h6 |! y7 Z! U U TR0=1;
" p" V1 X6 R1 e, f7 n Tc=TH0*256+TL0;//提取中断时间间隔时长
* @% q# Q% b# }$ u6 E1 ^$ V TH0=0;
! e$ V* i( t1 z, a9 F" r9 H TL0=0; //定时中断重新置零
" t! N2 Z4 }& x0 L if((Tc>Imin)&&(Tc<Imax))
# ` i/ L* [4 t0 d1 d {
9 H$ d7 R" g$ X) ]9 k! a( X# g m=0;' a: n* I# X3 B7 E t* m0 O7 P
f=1;
+ e! _: `- u" M# _: z return;, a* @: w) n' Q9 C! i9 j$ V
} //找到启始码
2 e8 O, P: n! n! ^" [3 U if(f==1)
' a4 S. ?, D. N$ }) B, ^ {# f2 S- {) v) \
if(Tc>Inum1&&Tc<Inum3) , x7 O; c; V4 p; b
{: a3 d8 ^4 `3 R9 H9 u- Y( F$ R
Im[m/8]=Im[m/8]>>1|0x80; m++;
4 B; Q) L7 E2 E1 a+ P. A1 g }
5 t) D+ ~9 s9 u* U j; z if(Tc>Inum2&&Tc<Inum1) 7 K/ f2 r7 a' f4 m' i
{) v! H. V) I$ E7 D9 m& E/ e
Im[m/8]=Im[m/8]>>1; m++; //取码9 U1 K; A& K( ?# F( m
}
/ ~+ t' X' ]# W( @! T9 H( {5 f if(m==32)
+ g& n" n% F2 O {
4 h. F3 v; x/ X- |# d! G m=0; % H! G( J0 j% W9 m. Q/ n+ i# @
f=0;
3 \& W6 T" C: p$ \ if(Im[2]==~Im[3]) 7 L0 m: D+ a+ P- Q9 ~2 l
{) A t, i' u/ \: ?6 }
IrOK=1;
$ m$ k* V: ^, }+ ] TR0=0; 8 t( E; i- o6 t8 G; W: ?' A
}2 f% ]: ] K% e0 U
else IrOK=0; //取码完成后判断读码是否正确
# y6 t8 p( V' q0 D9 `; S, r% [; D9 E( w |7 ]& X2 p6 U) Q
! ^# d9 a/ L8 }, }
2 V( @7 }7 Z" U' P
5 V- F0 X, s6 t6 N…………限于本文篇幅 余下代码请从论坛下载附件…………
: {9 [6 X% U3 @ \/ ?
6 q* J, ?& x; s; O
# B, ~) j; u' U |
|