|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于51单片机的红外遥控灯 原理图及程序
' E% G/ Z Q0 y: w* U7 v; b7 E' \) [3 F
7 y! R7 a2 ?" B2 d! @4 n; p& |% k6 B0 u4 Q4 L6 |7 [
红外遥控灯单片机原理图:7 A' \/ ]9 o& g3 N9 r& d
9 K2 q& D2 n: V) A- ]9 [$ b
//头函数! b3 b8 M% T" P( ] X$ K
#include <reg52.h>3 g' k) `/ I8 o, m2 c! [; y
//宏定义
" P2 u% x2 y" z4 \#define uint unsigned int
" E+ A% p& a! B; @#define uchar unsigned char
' }1 ]3 L6 F, p) v2 X+ L0 E
& o3 s E% C7 s" V6 }2 Z# s: x
2 T2 f' ` f n( ^, g. p//时间计算+ H* ^% ]3 [7 {5 q, ^' p, p, j5 E
#define Imax 14000 //此处为晶振为11.0592时的取值,
. `2 U" \+ O" L! E. H' s+ W* J# j- w#define Imin 8000 //如用其它频率的晶振时,6 x2 S8 h" x9 d; H- e; J
#define Inum1 1450 //要改变相应的取值。, x" F) k% ^4 i$ b0 f$ Y+ f( K
#define Inum2 700
, \/ e6 _! C. X8 v7 F#define Inum3 3000 2 i4 \( V G" e7 A9 W# d
sbit led1=P2^3;$ o/ {( S6 t0 t% D. K( n
sbit led2=P2^0;8 y! q* E! t6 W. ^
//解码变量
6 y' ~; G# E9 f8 R: t) uunsigned char Im[4]={0x00,0x00,0x00,0x00};/ N3 X ?/ O2 A( j R
; C- J7 `& ^1 `( s! g* x. Y% n4 `3 V+ ^6 o+ ^
//全局变量
) w$ E8 o8 s7 a! g/ buchar f; c7 v2 s! g" J
unsigned long m,Tc;0 U( ]# i. M, R$ U0 x
unsigned char IrOK;
6 o5 C$ H: C5 |; I- j& Q1 R8 T
% J6 Y7 @( o; F
# r& g8 \& V3 L7 f. Z$ E& e
* @# l, z H3 \$ ~8 G3 {$ ?
5 @9 \' J# S1 `//主函数" S% G* O+ i" r- D7 m
void main()3 ]$ T' \; r: D
{ f2 z$ H/ ?' v, S- Q, \1 \; F
P2=0xff;: Y; ~; d" z/ v, l
/ k0 h- G- d3 U EA=1;//开启总中断1 z5 d$ [' g7 v
! J" P' m7 y6 O, n, I
IT1=1;//下降沿有效
- D" y3 ^: o5 W( l- X. e+ L EX1=1;//外部中断1开
( z1 _2 b/ m8 W& Y6 v9 M $ w( Y- {/ {8 Y4 v0 x( D
TMOD=0x01;//定时器初始化
! i9 Z4 S, a y( W TH0=0;//T0赋初值2 v$ W% G* R E9 s4 L- Q2 `
TL0=0;0 S2 g9 c' q0 `$ h
TR0=0;//t0开始计时
& @$ s, }. l1 S! u while(1)
, o2 Q8 k: @$ o& x: m* S {
K! X+ p7 s2 M% ] if(IrOK==1) 9 V m8 k; N' R
{
4 M3 U. a m( ?( _ //1键+ m4 L( V4 }% n
if(Im[2]==0x0c)
5 O* {- W, O- b$ p K B) [ {4 Q1 y* {1 O4 ~% n
P2=0x00; _2 I! ]; H3 \1 P. \' ?# s% ?
led1=0;0 _/ n# K- ?5 P% Z4 t
}# [( x( p% s5 B
//2键
; B3 o9 B# F! N$ _) D1 \ else if(Im[2]==0x18)
, [: \" o9 |; { {$ o4 {6 m5 `7 e/ ~8 w/ M
//P2=0xa2;
5 @% D4 C. R4 X: X. o led1=1;
3 w" x8 A# J2 ` Z }
4 g: R* R- a5 M: r* q, U4 {9 U+ v //3键. L1 n* i3 v. g$ h0 N% j5 i
else if(Im[2]==0x5e): b4 {; t5 m+ D* n! Z! e* b- a$ \
{
A. x; D0 U# J- r/ c: N T P2=0xb0;- H8 d& X+ ]6 `7 M! Q
}
# y: Y1 o+ w! u3 K1 T) p6 e //4
, h1 f% ]4 V+ |2 | else if(Im[2]==0x08)5 k$ G k3 G r- f' K0 t. L) k* H
{
3 Q% P3 }* Z+ @$ @; |+ r // P2=0x08;) K; y$ O& A2 U; e4 Q0 R- y
led2=0;0 ]( @" h" K+ t9 k
}2 j) q0 ?/ t6 o4 w, h, }! }
//5
2 Y9 _+ i& I5 T2 o, H9 T& ]+ [ else if(Im[2]==0x1c)
) F' l3 K; l0 Q1 x* a# C {$ {0 m4 b7 H% A+ i
// P2=0x91;
6 L. {* T4 M2 r- Q: Y" O7 z led2=1;
' t/ w1 {+ W2 K1 A, @+ b }, k" p5 L1 a, k
//66 Z% |% c9 c; b+ {* Y1 b
else if(Im[2]==0x5a)
. b4 o( [+ ]$ s {1 U+ o3 B6 k2 u: F# q5 z0 w
P2=0x8c;
/ d* p. v& w" m }
4 Y8 u! x0 m; f/ \" w; M //7键) d/ l8 Z. Z0 H* `( r5 c7 @
else if(Im[2]==0x42)) r5 w& b+ y; y
{
: G3 V2 h- _' l8 U+ _0 B. z P2=0xf8;
; o6 V3 H! Y4 E! D }
. H' N% C8 r% k5 V0 b- T //8
8 w; b3 m/ k4 P9 E3 r4 O5 G else if(Im[2]==0x52)
: {) l3 q& ^9 I" J# f, B {; s0 l& N* P8 z; @5 w9 ]
P2=0x80;
: |* s" A1 u' u; h3 {) \3 I s }
* W6 x2 Z; {* S/ C //9
) n( @. X7 G) }+ C2 X' v. p5 h9 P else if(Im[2]==0x4a)
& c/ } T5 b5 f7 G/ E( i( ~5 k, ~, d {) T' M: D# c* B
P2=0x90;
3 U' M! w F" H6 M1 P }
" c; I: |+ O7 L$ H //0+ i1 m* [& |# A6 T6 U
else if(Im[2]==0x16)
2 a$ D7 x! b- U3 \) M6 m+ c; @ {2 M h, V! I9 @8 @6 ]' v
P2=0xc0;/ S- b5 D/ X' p" X
}" P0 l5 o& j" _. K3 E3 y% r
//关机
9 l5 w! E4 A+ T8 g$ \2 h else if(Im[2]==0x45)6 G# ?! y) I; t! F/ T
{
7 I3 a: P5 n7 {+ f- V/ G P2=0xff;4 {4 {; c. K- m
}" u( f& W! K( U& |
IrOK=0;
! }+ q' a8 R" M. |4 q }8 w, O( i" {0 O
}
6 }6 n u9 H* d}+ o a* i0 b8 c2 N$ U
0 Q \* w8 d, c9 p( i; @
* J' I7 P0 z8 `8 Q* o//外部中断解码程序_外部中断1
) N3 q0 Y* t( C( p9 k' Svoid intersvr1(void) interrupt 2 using 1
! O9 e2 D1 o' @2 V% Q7 F5 K, _{, H/ T8 `; l- F8 b7 H# {
TR0=1;
) x4 r- V/ a! D- k+ r1 | Tc=TH0*256+TL0;//提取中断时间间隔时长/ d" x2 }4 ]" c# P' k6 `. r5 E" q6 P8 L+ g
TH0=0;
- C1 i! b& S, q8 x+ y TL0=0; //定时中断重新置零9 s( ]- Z9 g! N: K6 z* ~0 `
if((Tc>Imin)&&(Tc<Imax))
; e0 g* `6 m( t6 H {
6 u/ a2 j" y. }8 { m=0;
2 X' H4 K& R- s( B0 U f=1;
! x2 O4 H% I& K# L return;7 i1 z T$ O; m- e( q% u3 U8 y u
} //找到启始码
" t Z9 Q! e( T if(f==1)
( z& l+ N9 i! N {& M/ Q; Q( C }- H" }0 P4 z
if(Tc>Inum1&&Tc<Inum3) 4 G$ ]+ m' u1 W4 x$ Y
{
! H9 w( W4 L; s5 O3 ] Im[m/8]=Im[m/8]>>1|0x80; m++;
/ O8 v' E g Z" ]- O. ]0 v( a }3 J1 t* W4 n% N/ p
if(Tc>Inum2&&Tc<Inum1)
! r, H/ M% q' M( T: O5 E! i {
/ V8 l) a0 n& _ Im[m/8]=Im[m/8]>>1; m++; //取码
9 w3 F1 E- n* N$ e" @ }) e0 e9 n4 L: J0 k! }" V" x
if(m==32)
, s2 m" j. V% L% h m0 V {2 \3 ]" Z& P- @7 r `
m=0; 1 t" d c3 _' [% u/ r
f=0;
* U5 l+ i h6 K6 ~; u2 b if(Im[2]==~Im[3])
7 S5 u) O3 }# a Q/ Z {- b. x- _2 c- ^% O3 d
IrOK=1;
2 P: ?! B3 E, p p TR0=0; 2 ?% `1 q" \- A' @' G
}
D1 X$ m" m+ G$ i( h# O else IrOK=0; //取码完成后判断读码是否正确
' C. ^+ ^: I: ]1 C8 n1 Z1 v4 y: l" R, v9 O+ w
/ ^' g1 d9 ^ g, S- Q0 h
+ l" f8 d Y) W( J
* V" U: s. z9 k7 b6 y$ Z$ A% l
…………限于本文篇幅 余下代码请从论坛下载附件…………! R9 C( J9 D" g
9 i3 H, n# p' r2 r1 r& Q/ y2 K0 R/ t0 J' k* w) `7 g
|
|