|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机红外通信控制继电器源程序
, A1 H1 R6 Q7 s8 }* [9 L z
: Y; w. W2 w6 [0 \3 I
% R& j" {: `; S7 n; ]/***************************************************************************
3 J. P' o/ l- } 本实验例程是用NEC红外线接收解码程序(红外线接收部分为板子配的林洋电子程序), H1 _% T, ?; l- s5 ]
程序功能:, {+ x* b$ y. S/ H ~% _
1、运行程序,按遥控器按键,在数码管上显示相应的控制码(以16进制显示);
, b2 k K" |7 \ 2、对特别的几个键,有相应的现象出现:8 D* M& M+ M; p" Q1 A4 p4 y
(1)电源键,使继电器工作或断开;
4 a6 k1 x; K( k6 b; ^ (2)静音键,使蜂鸣器响或不响;
2 j5 |* a6 ?0 l) Z) Q* | (3)快进键让LED灯向右出现一次走马灯现象;+ b9 b2 w) W8 _% S" v2 }0 V
(4)快退键让LED灯向左出现一次走马灯现象;* A& W g: V( y$ J& f6 N- ?4 I
(5)按0~9,数码管显示所按的键号;, b3 p) R/ ?' o( `; t2 I
(6)按其它键,不会改变已经按的数字键的显示,表示看电视台开关电源或静音、快进快退,都不会- r' B6 t- v! \" r- u2 x
改变台号。
# T7 Q& a7 t, B (7)其它键没想好怎么以现有板产生相应功能,所以按下后,没有特别现象,只有显示其控制码。5 w3 l, r5 e9 ^/ b$ c& M
******************************************************************************/
. t8 u7 {4 M" e#include "reg51.h"//头文件: H. z% W* ~) c3 j
$ J7 M5 L* D* Z, ?( p#define LED8 P2//红外遥控功能之一是让LED灯亮,所以要将P2口改名/ S2 [& h4 ^% Y; D' \
* D5 |4 ?; e( ~0 R
sbit hwx=P3^3; //红外接收数据引脚,也是外部中断1的I/O口
" R4 I& s* d; y+ B- Tsbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)
( f3 D3 f9 h% O% e, }% lsbit SMG_b = P1^1; //定义数码管阳级控制脚(百位)" b' p3 o( @- P( t( Q% H! i$ I
sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)) r/ u6 `3 P6 J7 i7 n, y# X
sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)5 J! L: X( m4 i& ^8 g
sbit JDQ=P1^4; //继电器
* P% W) b5 Z8 l; H$ M2 dsbit Beep = P1^5 ; //蜂鸣器- {; P6 Z& X Z B! |! \
( W0 y3 W+ T# W9 t F
code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,7 i, Z0 M+ ]0 _9 m, o) E! j7 \4 N
0x88,0x8c,0xc6,0xa1,0x86,0x8e}; //共阳数码管段值表 0-9 a-f }' B7 l4 q. z V' ]7 b! E" n
* u+ h' B c n4 Q$ uunsigned char ly_disdate[4]={0,0,0,0};
2 b# ^/ C L8 ~7 H( ?unsigned char ly_lhj[4],i;: C9 \0 D, V5 W; p
bit ly_flag=1;# b3 B, g% @" m& k R+ E
void display();
2 S7 e- R3 @: _3 I
3 w5 H1 }! \4 b n5 {: Q, Hvoid delay(void);
a$ Q" X; ~* ^# ^6 {$ c& i- W( _- E: T0 S6 |
void Delay10ms(unsigned int c)% w' l1 g$ Y; v6 S% [: q9 V2 h
{
$ U5 j5 K/ i% Q7 O unsigned char a,b;
7 o& b7 E/ g/ y4 s# n4 f3 { for(c;c>0;c--)
6 p) T' q1 h e for(b=38;b>0;b--)* W" r4 f, K4 a' a4 h
for(a=130;a>0;a--);; }5 J2 |* v0 d' c [
}# d# f9 _2 ~' {! ?8 L' b
; w1 T- \/ V; Yvoid main(void)//主函数
* U' ?0 Z p0 V8 q; v- X& ]{+ ?- A1 B+ s& Y3 y2 a2 x4 v7 i
EA=1;4 R( U# h% S: t
EX1=1;! A4 N9 {$ G3 i q2 h
IT1=1;
! I$ A c/ I& r6 N TMOD=0X10;$ K3 \& r% Z1 Z4 T
JDQ=1;
6 Z: T8 I; V! H) {2 o$ {: O8 E ly_flag=0;
- n0 u6 u1 n' V9 O while(1){ 3 U3 J+ Z7 m9 G4 O3 h
if(ly_flag){
1 D7 ~; | [1 w& C) ]/ w ly_flag=0;
0 q& P& z0 f# V/ l if ((ly_lhj[2]==0x45))
0 @- ]$ r0 |; a {1 I! D: M$ `# B
JDQ=~JDQ;
1 X2 D0 N4 v8 P& h/ O3 J% n }/ i; t" y n) j
if ((ly_lhj[2]==0x47))8 I- J+ [, j6 E, X% q9 z
{
- h4 B& H& W7 I5 ?7 H! j Beep=~Beep;7 n) `5 Y o7 j2 c/ T
}
$ U/ T0 k3 L& | if ((ly_lhj[2]==0x40))
; [. [7 b: e: j8 p, G4 L {
) x; I9 `9 ]0 b% @+ J, u0 F LED8=0xfe;
C! G+ ^- X" Z9 e& V for(i=0;i<8;i++)' Z9 f8 f6 {# m6 z h
{
+ z& C7 v6 ^7 A: R; Y: | Delay10ms(10);4 |/ }% L& X0 E. ?4 P
LED8=LED8<<1;
6 C4 L9 c: d3 }3 L, E0 J }
- Q+ r1 i c6 I1 _$ c" d LED8=0xff;4 m- u* T+ R3 X ?9 s: V1 L1 E1 D
}
) L" A5 W. {6 j+ b1 ^' J if ((ly_lhj[2]==0x43))
- F# p& u9 ]4 b0 R& V w3 c* u {
, h T1 m1 ]+ T9 J LED8=0x7f;% T- k1 i8 b6 z
for(i=0;i<8;i++)2 T$ j& t Z; ~8 J- Q( N8 `
{ 1 u# {& D+ |% m p. d0 J
Delay10ms(10);
* Y# ~; D( s/ w LED8=LED8>>1;
/ C2 I) x5 I9 s1 i }' g$ g* N5 H' O6 \
LED8=0xff;
+ y: W) [5 t) v }
" e1 k# x- v. T6 x if ((ly_lhj[2]==0x16))
- y& u, O; T2 L1 D0 A% l& d6 B {
( q( w& p! G5 Z& `9 A ly_disdate[0]=0;
$ n1 _7 \) e( P) R* g* G2 _, E }9 |& K0 A) m: u
if ((ly_lhj[2]==0x0c))
& d+ o# ~% M' E0 ]/ e" l {' o% D) E ^! c8 S( ?3 L
ly_disdate[0]=1;
* U/ h' U" h C4 p* M2 Q$ f7 d& f+ @ } / `+ U) k' Z7 T
if ((ly_lhj[2]==0x18))
) j% l5 ^! v, M# r9 O2 k {" s2 z, `4 O5 P, D& b. l. s
ly_disdate[0]=2;
0 z% s% I' R0 Q% e8 U } ! [7 i( _: [7 u Y$ T( z
if ((ly_lhj[2]==0x5e)): ^7 ~$ L* W; N$ n" }" `# i" I
{
# c5 J5 r* Q' H1 Y ly_disdate[0]=3;
6 {5 p+ x+ e* u- j/ p- p } % w- o1 l. Z4 S- L1 y/ W! U
if ((ly_lhj[2]==0x08)), |# X6 l# o: E, n6 Z" t8 b! P
{ q4 ?- m# }' z+ Y; @( R
ly_disdate[0]=4; / Q3 l- }( e$ v" W; A
} + f) V, I' B7 \4 C$ y, v
if ((ly_lhj[2]==0x1c))$ p9 R$ D& ^! Y) g$ m2 |
{
' M, L4 z1 `# L ly_disdate[0]=5;
! c% e% v0 [* [+ d% i% V }
% r( X& n# f. x( N5 |) S if ((ly_lhj[2]==0x5a))) z: d# Q6 L; R" a5 u; B
{$ ~8 a) ^7 D# Y- i/ U% V9 i
ly_disdate[0]=6; 6 ^ }, D3 I$ ~6 [ \$ F/ Z
}
9 O0 r f" Z( B" z if ((ly_lhj[2]==0x42))
- a! G* D3 j4 |% _ {* o% K0 H% w3 u; `
ly_disdate[0]=7; ) i* y2 O2 D0 q1 x p; m/ k
}
# k4 H2 b, ^9 z' H( Z2 y# [3 ]* J if ((ly_lhj[2]==0x52))* Q" r5 l3 y0 Q. _
{ c; |' \) c q# W2 ~
ly_disdate[0]=8;
, ^* s6 c7 y1 `: W- Z }
2 u: D, ?# J6 e if ((ly_lhj[2]==0x4a)) O6 o' D9 |/ m2 l
{
/ x3 T, |0 P, @: c ly_disdate[0]=9; 0 O. c3 Z4 o# u( \# n* B7 U8 O; Z
} # G3 o" M8 a# r o: d& H8 r
ly_disdate[2]=ly_lhj[2]/16;. m1 B0 q# ~) h9 a- X( r& G
ly_disdate[3]=ly_lhj[2]%16;! F8 T9 y7 s, e8 u/ U) A! n
}
/ W/ F$ |) G/ [ display();0 {' l' _8 z0 {
}
+ I# o; |, T9 j2 J$ i0 a) r: O}
, v$ L# ^$ [2 Q0 |4 l H; H: j( k5 y" y# m# Q2 f
void hongwai(void) interrupt 2* w; [0 D% ~+ C: p+ N
{
0 O3 d; l! b: _ [2 v: @) {. A unsigned char i,ia;5 g! q1 z% _9 a: W2 ~! C5 y
TL1=0;5 O9 P- q$ P8 f Y
TH1=0;
5 a5 A4 H m& L TR1=1;, o/ d; ~, q; n( I8 S! u! G
while(!hwx);
# P, A1 s6 L/ t- B' B' y TR1=0;. ?" D2 ^; _( u2 K
if(TH1<30||TH1>40)
# n& k; d8 W# c2 l& m3 W! y( N{
2 _% ]! x1 _- y9 j return;
- ^9 _! j/ H. s+ Y, u( L6 t1 N}) J4 a% _) ?+ c# O2 ^5 R; N" h: Q
TH1=0;8 l; e2 F! m! x% f6 S5 c7 |
TR1=1;
2 O( [" n& E4 D. z5 v( i1 D9 H9 J# F while(hwx) //
$ J# h/ h! D2 B8 [ {
4 A8 x5 r8 ?7 A$ A delay();
3 [8 Y5 i) z" k$ `! b1 x' `6 G% J+ L if(TH1>22)
" x) Z$ o5 H! A# y% z) N return;
5 q/ f7 {1 e( m6 N }
1 M4 V' ~- u+ y7 C7 ~ TR1=0;# P% ~" j9 r. }. s/ Y* B! W; P M
if(TH1<12)
, \' i( D- s* I' D return;/ b8 D, |7 a. j' Q
# V; ~' `# v s. Y
for(i=0;i<4;i++); c2 d: d9 |/ Y; s) U9 d
{; [% [1 e$ T ^- n
for(ia=0;ia<8;ia++)9 v, ^$ m7 U' h! ]; i: U/ J# I
{ 2 K/ x6 O/ e) k! R4 L
while(!hwx);9 p$ { a6 B" w: a
. X& K4 s/ r, i" l8 E- g# R0 t+ l TH1=0;
( m! W; w3 i2 N" Y- Z. d TR1=1;! g0 Z! C! c6 {8 ~- A
while(hwx)/ i. B- s5 y( N9 g6 m
{
- I: }1 M# i! A/ i& I; {. V delay();, O) W# @, v& L4 x
if(TH1>15)
# w0 L/ B- q# P3 y4 T/ G g return;
! H- T7 ]4 T9 a0 R& X" k }
3 ?0 F- u5 r( m( W0 ?3 _ TR1=0;4 t, b F5 t7 o/ H3 E) q
ly_lhj>>=1;$ [ S# F# b* m2 L) B, c( S
if(TH1>4)
- k6 J! ?/ ?+ d$ K" l2 G4 s8 W ly_lhj|=0x80;
) w; l0 s$ `# b }: u7 f" W6 N- C" {' o$ s8 k
}
( r4 Z" b% ^) q9 {4 }5 Z0 [# S ly_flag=1;
g& A% H9 h( [3 Z* v TF1=0;) x6 M" i, K+ P' v/ F# w
}3 H+ H( B9 E( x' r" F
6 ^- P$ K1 T a1 ovoid display()
. S7 n3 L; s3 U$ N9 R8 J2 }- I6 `8 m
0 z, Z8 N' L9 o" f{
c j1 e+ N9 ?# Y l SMG_q=0; //选择千位数码管(亮)- S. W4 O6 U" b/ B
P0=table[ly_disdate[0]]; //
; p% u% s: p0 O |0 z+ G delay(); //: ~# q4 e9 S0 u8 f
P0=0XFF; //
4 y. x. I* {1 N# U* a8 n+ j SMG_q=1; //(灭)" `+ A: Q7 A/ c, K, E% A- ^! v2 [/ Y
/ ~' f* T! V3 t SMG_s=0; //选择十位数码管# q/ R( o% w, w* _) ]4 K
P0=table[ly_disdate[2]]; //: P. q& _$ K9 {1 m
delay(); /// N C) p5 |; A
P0=0XFF; //
5 ~7 B7 V0 Y0 [# f SMG_s=1; //
" l- H( Y- Y" ?1 X
* j) u2 k! I9 @3 v: Z. t
4 ^$ i8 t6 B* E$ o# d…………限于本文篇幅 余下代码请从论坛下载附件…………
% E4 _% \* {5 r+ U6 p- R( B
3 i! V) k$ z- j7 U) M! E$ H/ t/ ]3 n2 H& W5 \- l2 c
|
|