|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机红外通信控制继电器源程序
2 y+ s' P4 R. q6 S' U- Q. d6 K; B" C% J2 y
2 P8 r6 [& s0 x; b6 \- W/***************************************************************************2 O, o/ N1 ^' s" r1 V
本实验例程是用NEC红外线接收解码程序(红外线接收部分为板子配的林洋电子程序): w: T/ s; z. F/ I
程序功能:
: B( m' ^( @/ B! f" D3 Y4 q 1、运行程序,按遥控器按键,在数码管上显示相应的控制码(以16进制显示);1 P5 g9 M7 O0 E$ Z$ C
2、对特别的几个键,有相应的现象出现:- {$ C- x1 T9 `
(1)电源键,使继电器工作或断开;9 o& a0 h' }4 I/ S
(2)静音键,使蜂鸣器响或不响;& b7 p* u+ h5 p+ t' g. m
(3)快进键让LED灯向右出现一次走马灯现象;( y3 b$ J r" e
(4)快退键让LED灯向左出现一次走马灯现象;5 e8 ~ b# K* }# X. k/ H9 h) E
(5)按0~9,数码管显示所按的键号;3 y- x5 d: B$ f H2 Q
(6)按其它键,不会改变已经按的数字键的显示,表示看电视台开关电源或静音、快进快退,都不会) j' S1 U& M: i8 ~
改变台号。
" q6 s3 O( B% K' g' P/ l! l (7)其它键没想好怎么以现有板产生相应功能,所以按下后,没有特别现象,只有显示其控制码。
$ o: w) ~* Y3 N2 F6 X) W******************************************************************************/
$ u( L( K+ U# n9 {#include "reg51.h"//头文件:
5 |9 x; ^- V, Z7 j, J- h
4 X: r' c7 R0 E) B6 f& Y#define LED8 P2//红外遥控功能之一是让LED灯亮,所以要将P2口改名, n" f3 V R J7 m! ?. Y6 E9 k. K
2 B/ e( ]4 N) M) b2 j! g
sbit hwx=P3^3; //红外接收数据引脚,也是外部中断1的I/O口
4 n( n v8 P9 F0 zsbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)
" r7 d2 T% ~: isbit SMG_b = P1^1; //定义数码管阳级控制脚(百位). ^2 B! f" D- b& D
sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)
4 C$ e: A* G5 K6 `- A) [& S2 asbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)
) \5 N2 l4 s" \sbit JDQ=P1^4; //继电器
: b0 ]: U/ s. h$ q* Jsbit Beep = P1^5 ; //蜂鸣器0 N# ?3 G ?3 l7 J) [5 k% O+ u
8 |" a ]2 G0 l! o' P' I0 ?
code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
: g* Z. u0 [, }! u9 Y6 e 0x88,0x8c,0xc6,0xa1,0x86,0x8e}; //共阳数码管段值表 0-9 a-f
$ e7 Y! \- N3 ]+ Y9 A
* w1 w0 l4 {' s& `$ m6 T: kunsigned char ly_disdate[4]={0,0,0,0};
5 @' \8 n- s! munsigned char ly_lhj[4],i;! ]3 W8 d. T2 f( d9 C( x0 o
bit ly_flag=1;! T# C' X% ~4 c# W
void display();
\( T" m ?$ [# W2 C1 j w6 ?: D# p
& G! J# U: u! v' Rvoid delay(void);
" M1 P( _5 `) c" X3 b' k& X6 d- W4 ^* L# s6 S* f3 L+ {
void Delay10ms(unsigned int c)
: L) G" T. A9 k9 P G: {{
/ U" { F9 O' [7 F: C' U- \ unsigned char a,b;
9 m6 g% d: F7 ?3 k8 \5 B9 I for(c;c>0;c--)
) ^6 z* n3 T1 J! @ for(b=38;b>0;b--)
: `4 D( ?+ g: `6 a& a4 I for(a=130;a>0;a--);
4 b& {# f% F+ X# a}
9 q6 y$ ^4 |3 G* H: O
; U: \. s+ D+ g: i) q- kvoid main(void)//主函数
: H3 F; y% y" E/ x% K{
3 }: f' K' a, W' E1 E1 v( ` EA=1;
7 d# g7 W1 B+ w5 Y4 D! @ EX1=1;
3 J. Q- q8 N/ ?; w' E i( U0 Q0 Z IT1=1;% R7 Q7 C# w" p! I( @' e7 M! f
TMOD=0X10;
9 d$ K) e" R2 d4 x) @4 ~ JDQ=1;
4 T5 e. x; Z4 B) J+ D ly_flag=0;
`# L/ R4 k9 U while(1){ 1 @+ e9 O3 y0 l. M0 Y/ W
if(ly_flag){
" q9 r+ c4 T) R t$ H4 w ly_flag=0;
) m& x8 q" v5 X2 b% B/ q8 M7 A if ((ly_lhj[2]==0x45))+ L' i# Y! [( J) K, d9 G7 x0 C
{! l! s$ I# D' V c
JDQ=~JDQ;
% {! t7 S$ h( N: \0 q" n }
: C9 k0 i! D0 r2 }7 m) i: k! ~ if ((ly_lhj[2]==0x47))
* Y& @5 @' \' D" s! W8 h& n' D {% V' V% E- ^6 s% P2 }- S
Beep=~Beep;
5 G* ]& D) K" }0 }( G$ y& f }
1 Q9 m3 n$ _. R" R! h S if ((ly_lhj[2]==0x40))
8 h( z. s1 u, Q: B/ a1 t* [ {
" m' u: c, F. y' { LED8=0xfe;
4 ^3 a$ |& V3 M! q: i: e9 W# X for(i=0;i<8;i++) O9 }! K! w, _3 l( i, }( F6 C
{ - K% S8 [( _. d/ }1 p7 y
Delay10ms(10);
5 Q# L5 O; w4 _8 e LED8=LED8<<1;
& c8 I( [, q. a( ~* D* |' h% B8 l }6 b; D! \+ X4 I; @
LED8=0xff;" t, T9 ~9 U q' Z g3 S
}
7 v0 H" w" l1 l+ L; C2 @+ t# y if ((ly_lhj[2]==0x43))! K6 D6 G K- t% Z& O: _
{% G M+ E, t- E' |2 n- h
LED8=0x7f;
& L3 j9 u+ O6 W& T4 X8 v for(i=0;i<8;i++)
8 w! Y$ ~* S+ R0 [ {
( b) M! \4 Z8 }* C& D5 p Delay10ms(10);6 x4 }. O* l, ?2 U8 @
LED8=LED8>>1;
# U3 A! i* d- [! a& r& N }
2 A' p0 O# c( ^( q LED8=0xff;$ a* n& a! Q7 a( B5 ~8 l0 Q4 {
}# A2 q" R5 Y; M& }9 h4 p) t
if ((ly_lhj[2]==0x16))9 p9 \& u8 w% @. p7 k' ~
{6 H" w1 H$ R0 X
ly_disdate[0]=0; 3 G5 s: \' `' F, |" Y- e( x% l
}
5 M( [9 L6 L7 ?* o- ^1 ]6 z if ((ly_lhj[2]==0x0c)); \ a A1 e- Y
{
; m' E( {' B7 d- M' U6 u ly_disdate[0]=1; - |7 s- q* e1 Z. X" P4 Q
} . G/ t- k8 Y3 H" I; q- j) [0 G) q
if ((ly_lhj[2]==0x18))9 T" I3 q( N9 e( g% I" m
{
: R3 C% L q; H) a' H! c6 l: _ ly_disdate[0]=2;
( Y) j! X% @# _& R/ }# L& D } / D. M/ f( d8 k3 F# q C- m2 n
if ((ly_lhj[2]==0x5e))# h4 y& c- s, _
{
1 V8 N1 y' Z; b3 S* R4 x2 M/ Z ly_disdate[0]=3; 3 j# Q4 M* ?, O
}
- o- d. h( T- L+ g/ ^7 O) C if ((ly_lhj[2]==0x08))
0 ^4 I" J/ ^9 l) U) T { E) d- A7 F9 y- w! n0 p) Y0 Y4 l
ly_disdate[0]=4;
# t* N" s" G0 |2 k! @ ~/ P }
: q [4 Q- z* H! P$ y if ((ly_lhj[2]==0x1c))6 A- j( Q( b+ h
{
7 U( q& u$ s; r6 |8 T' l Z. z ly_disdate[0]=5; : S! Z! v! j) [2 s
}
% S% M' w, l# I/ Y" l; v1 n; f2 M2 g if ((ly_lhj[2]==0x5a))5 e9 Y V; s- ]
{
" Q! K; U: P1 s' O% _( s6 C+ l ly_disdate[0]=6;
( p; U- i# h/ K1 r$ |: f }
# Z* {% |. H0 f9 ]2 g5 U {. N. o6 \/ e if ((ly_lhj[2]==0x42))! e4 k4 J7 c; Y3 [. Q8 ?
{ L& K8 u' R) r) r( {
ly_disdate[0]=7; " V; W2 B; k6 X0 U" v- y! [
}
9 o2 b& n% D4 A if ((ly_lhj[2]==0x52))
5 O9 ]7 U& Q9 _; t) z. z- ]" ~# ^ {
( y$ j5 a2 B$ ~" e* } ly_disdate[0]=8; 9 y5 F$ X$ G* W
} / ]* S- W& E( ]+ @/ H
if ((ly_lhj[2]==0x4a))# L" v) l. V! e" ^" @1 W; w; _& \
{
; k1 G5 x+ j% k; F/ K! A! F/ _4 s ly_disdate[0]=9; 5 D- X( a6 z, l: K5 K: D L8 ]
} * O/ ^0 r" J8 F/ g3 `3 F
ly_disdate[2]=ly_lhj[2]/16;5 l0 ]& g" ?$ Y$ e9 @" B# e
ly_disdate[3]=ly_lhj[2]%16;# [& o) ]2 h$ }6 r9 ?
}
0 q4 B1 Y( h% m0 y% a display();/ R( _0 ~7 W" A6 V$ i4 [- l, O5 g. z
}
+ G/ ]4 T! N; G `, P! N, u}% {8 B! _' m; z
+ i$ A+ W) _' Z" ~. _
void hongwai(void) interrupt 2
q( t: J/ s3 Q{* i* b+ V* _& h* e1 J- F
unsigned char i,ia;
, d4 L- A9 D$ P, d! M# ~ TL1=0;
* v/ p9 c; }" f5 p o7 j9 T TH1=0;: m k, D$ x% R
TR1=1;
5 K: v1 I( q1 a# u( }5 O* ` while(!hwx);
+ ]# D, u6 ~ c5 Z. _$ q TR1=0;
7 S8 [: O3 |" T' V3 G* r4 Z if(TH1<30||TH1>40)
. |! r* w$ R9 \8 Y5 t4 n1 [{' \# h/ x+ \" ?9 S3 A0 G
return;- x* A9 t: g/ Y/ b: U0 B
}
& y4 F" C$ N- @& K/ B TH1=0;
( ]7 I! `/ s) y$ H' O2 `2 {6 D! a TR1=1;
- V7 n8 |5 p* `0 _9 o6 ~; }4 [7 j while(hwx) //" d/ n( n" i; u% H! y( w2 ?
{/ o% e% f6 b4 }: l, q+ s
delay();
% O( K) ]" g3 w9 t7 N6 c/ }: `; d if(TH1>22)( Y, H. p% T8 c0 g' Z) Q
return;
$ W3 {1 M: f# u7 z; ?6 Y0 U( C }' N) U d0 a- F4 W: l* z# [0 q4 q
TR1=0;
: m% H) i- G2 D if(TH1<12)
, y, n3 |# O4 w. D6 \4 Y6 S% z* r return;
( L6 O" p2 V, _0 x T! {& Y
4 u5 q7 \9 K7 o4 a+ J, y0 ]$ `! V; n for(i=0;i<4;i++)
% {5 M2 r' g. }; E! k! w. P- [4 p {6 w2 p& W3 V/ w1 A
for(ia=0;ia<8;ia++)4 u; } v0 k' W
{
; v4 i* O1 v! `. B+ B B while(!hwx);
- l' i' C$ ^- r) c3 W( Y( h( D- v! u1 L: V1 `2 p
TH1=0;/ Y3 \- H2 E `1 }" D7 @" s
TR1=1;# r$ D% I% E* P( z( [
while(hwx)
$ J* `# W. V/ h2 r1 O+ G0 L. t* G {3 [3 Z: g2 z4 Y# F4 s& U, s
delay();& m9 L- y& T. x6 A6 P
if(TH1>15) 9 z f0 g! G ]
return;
8 A7 V! }+ r0 A* o }
- Y1 u2 [: A0 r, b0 v" S- m& L, m: V TR1=0;1 ?& N6 C1 e0 V/ Y% \2 _5 D& \
ly_lhj>>=1;3 Y! v' q2 ^3 q* N( H3 s& C" W* m. b
if(TH1>4) }( a+ }) E# Z* O
ly_lhj|=0x80;
5 Q4 w4 y& P4 D Y+ X }( b, P4 y5 H/ q6 C
}
% u4 i- g; }) o& t: s ly_flag=1;
4 O( t0 P5 C v) { TF1=0;- y# t3 u! m8 ~
}0 b% N8 X% c8 Z" t
4 ^: t, |( D' X4 |5 ovoid display()8 }8 j/ |; C. `7 R
1 ?+ M$ v" \7 _8 Q& k{ ^7 C7 D# s3 r% _
SMG_q=0; //选择千位数码管(亮)
( v i6 d8 b7 m* b/ l) m3 F+ b; B1 Y P0=table[ly_disdate[0]]; //
* t+ `' A9 O8 }" t delay(); //
4 a8 I3 V% [. p& ? c P0=0XFF; //
+ i* L% A1 z- S- P SMG_q=1; //(灭)9 ?. C( C+ A+ d$ H, n6 p5 y
0 G# a% r& Q8 b
SMG_s=0; //选择十位数码管
0 z* v) D6 W ]6 Q4 q P0=table[ly_disdate[2]]; //7 a8 c, M( R* S/ P: R( _
delay(); //
( L1 H1 u$ x8 Z P0=0XFF; //% A5 b0 q7 D4 O2 ~8 e8 K
SMG_s=1; //
5 A) f: T# r$ I4 p2 b7 j
K! f7 J& R0 w8 |
4 O9 @' U* J, |5 F3 b, c4 f& X% H8 I…………限于本文篇幅 余下代码请从论坛下载附件…………
+ E. R5 ^# N, o8 d$ R
% j1 d# r) O5 F5 a$ E A. Q$ [
+ K. M2 b. k0 y |
|