|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机红外通信控制继电器源程序
4 \* {& m+ |& Q( R! X
+ v& ]/ X) m1 \( I
6 Y W T" P" o, b# _/ W* o3 l4 j/*************************************************************************** H5 A: N; E7 [; d* \& ^0 K
本实验例程是用NEC红外线接收解码程序(红外线接收部分为板子配的林洋电子程序)
/ i: _5 s+ @) q0 w 程序功能:3 k" k& ~* S6 D, m( f0 z7 j Z
1、运行程序,按遥控器按键,在数码管上显示相应的控制码(以16进制显示);
( C0 l: r+ V7 ` 2、对特别的几个键,有相应的现象出现:
: C& D; g: ]+ D, } (1)电源键,使继电器工作或断开;
! Q% v/ q$ f. y V+ H (2)静音键,使蜂鸣器响或不响;
* g" n& ?3 u* o+ |" d (3)快进键让LED灯向右出现一次走马灯现象;3 l1 u* V) }) A; v) a/ C0 Z
(4)快退键让LED灯向左出现一次走马灯现象;' p- s' P1 n4 p6 W- b
(5)按0~9,数码管显示所按的键号;$ t+ O& V( R4 \5 h/ B
(6)按其它键,不会改变已经按的数字键的显示,表示看电视台开关电源或静音、快进快退,都不会1 [* p3 u8 ^; s9 R2 I
改变台号。7 x! h u. q0 l
(7)其它键没想好怎么以现有板产生相应功能,所以按下后,没有特别现象,只有显示其控制码。
# O$ l! s, Q8 c1 ?( @; W0 ~******************************************************************************/
/ h+ u3 n8 R0 C7 V6 W4 D% @, R#include "reg51.h"//头文件:
$ T2 z4 y* Q k- Y# K I, |7 U) |. }4 e7 v" e# d7 {
#define LED8 P2//红外遥控功能之一是让LED灯亮,所以要将P2口改名6 d% y: B6 c T- ^5 [ u H5 i
3 I/ o* n1 B& x( osbit hwx=P3^3; //红外接收数据引脚,也是外部中断1的I/O口' @9 U4 v& [" ^ h2 z: I
sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)8 M3 j2 n6 l7 p2 L v# k
sbit SMG_b = P1^1; //定义数码管阳级控制脚(百位)- s& b# W8 v5 _! r
sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位); Z, h5 Y* f. Q2 _( U
sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)
W3 i( s0 o) B% E5 a, `/ hsbit JDQ=P1^4; //继电器/ n' K( X, u' r; u( R
sbit Beep = P1^5 ; //蜂鸣器
# T$ z0 k, I6 V. n4 J0 ]5 X3 }) ]1 c U& l
code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
- f$ F- c7 r7 t1 C) R+ [! i# u0 w 0x88,0x8c,0xc6,0xa1,0x86,0x8e}; //共阳数码管段值表 0-9 a-f1 {+ Z# |# w3 _3 y' f4 S
, t" l2 T% }$ ^6 ^% }0 m& `2 H, b2 [
unsigned char ly_disdate[4]={0,0,0,0};" @& {+ }4 r2 T) A3 }( p8 J! v
unsigned char ly_lhj[4],i;! w1 e% u" _9 R7 r2 J N
bit ly_flag=1;( T2 ^6 n% l; u: S) ]+ e
void display();
; v5 a, x* X9 K0 b" b. \; Z4 {: Y7 i' W. a. B. n. E O t7 f
void delay(void);
8 b9 t! x x' ]; R0 N
/ V9 {+ y" L Gvoid Delay10ms(unsigned int c)' U6 [: D$ r7 l4 R& M* _$ \+ B
{5 L' L, m* P+ ] h4 W6 ~
unsigned char a,b;
+ y) ]$ j2 J7 }& s for(c;c>0;c--)
) I5 M/ U6 O, _: [& ]! O4 e for(b=38;b>0;b--)" f/ x8 ^- ]9 U$ ]
for(a=130;a>0;a--);! i+ v4 v6 z/ Z& N8 c. q
}& h F2 F5 N9 X Y0 j7 p. \
. d7 d% z" r8 l3 q1 e
void main(void)//主函数
- @- |* ~ K- q8 C{- G$ k3 c* x' S2 S
EA=1;9 G! G2 {/ n6 D: i" O
EX1=1;6 }! O! r( C7 M8 O6 e
IT1=1;
; @ ?" I s" v! v- a TMOD=0X10;
3 }% G* ^& {3 H5 W! p$ ]2 { JDQ=1;
; Z) H, @0 V6 F* d5 K7 W+ V ly_flag=0;
6 R! W& {5 b/ {1 V' ~1 w while(1){ i) l- x3 w. V0 l& h, n
if(ly_flag){
J C2 l5 T$ x ly_flag=0;
o7 E0 ~7 D. H( l" ~) Z5 I if ((ly_lhj[2]==0x45)); p: j$ Z( O1 g' g: S$ B( q
{
- N6 t& F3 q' i/ J# l( ]# J9 v JDQ=~JDQ;$ P. F' _" v* Q8 q k/ t
}7 d+ d) _: ?1 J2 S4 m* Y9 A0 v3 s
if ((ly_lhj[2]==0x47))
8 x. A5 A1 Y1 S: ~ {5 L3 q& r) n( l+ K
Beep=~Beep;& [5 U7 C/ j$ g: c. O. _
}) ?. t/ O9 l7 e/ ^* E
if ((ly_lhj[2]==0x40))
! I$ V' z+ P( `5 Q3 J* w$ W {9 f9 d; M9 M) N1 a
LED8=0xfe;: [& j0 B4 i* A; m- L
for(i=0;i<8;i++)
, z7 s2 ^7 W$ P- S. ] {
( T' j, ~0 q9 U, f( @# p Delay10ms(10);0 c. @+ y Z3 p' O6 J* M
LED8=LED8<<1;! F" J7 ~0 [+ _4 B0 B9 o+ L
}& G/ D! [* z* \9 z8 \1 V* S5 z3 B9 b
LED8=0xff;
6 _! ]5 ^1 N, o% a+ e! B }
1 N. Q$ ^4 P, ^ M2 w if ((ly_lhj[2]==0x43))
6 R6 w7 |" z- v {; H+ d5 B# L& m6 I1 s/ `
LED8=0x7f;
/ `6 w: y& ~% ^6 \2 s for(i=0;i<8;i++). n9 S9 a* B0 c5 _5 P% y! ~% Z
{
/ b8 l' x7 ~8 |9 v7 M) V Delay10ms(10);
. X* t' A: o9 Z/ o3 O( ` LED8=LED8>>1;1 p' r, G: g: { f& c
}1 M# X. o z9 h! d, n) I& e
LED8=0xff;; Q" c9 f- b, M& x6 I8 t) \2 a; o) m
}
, e' k% M8 ?" I2 T- Z$ S if ((ly_lhj[2]==0x16))4 a+ \: Q( q& I ]+ m
{! P |9 i3 w( l6 Q& H# [& G' U
ly_disdate[0]=0;
2 `+ g4 X' B) w* ^. } }" ]6 X" ^+ S+ r. |8 l5 Z8 ?0 k" y
if ((ly_lhj[2]==0x0c))' r3 w1 v1 ^# W. t, W, h
{& f# x+ k& q, ?0 \4 V/ `
ly_disdate[0]=1; + f' e# P& i! a" w9 ]
}
6 g2 u% S6 Y6 q2 P, }$ i if ((ly_lhj[2]==0x18))+ L/ n7 F- x# b/ C
{
5 E9 q: |1 A9 v ly_disdate[0]=2; + u7 l$ P5 m0 q6 @1 [1 _
} 0 }, ]* L! o* b: S2 e s
if ((ly_lhj[2]==0x5e)). \* s- l& t" ?5 t2 @# Q: x9 m
{
! i3 S9 |9 G/ D2 A# `2 R ly_disdate[0]=3; \! d) @ T5 ^3 i7 `
}
( S& Q. u; t: s1 O$ [ if ((ly_lhj[2]==0x08))* k& a" a9 Z: ]; G# g
{
, y2 O% e! G* X5 v8 Z4 C ly_disdate[0]=4;
1 b+ O: n }$ z, F+ ]/ \ }
: L/ z1 Y9 A, F) _# r% }4 s @. c if ((ly_lhj[2]==0x1c))" ^/ X& P$ i" P M0 a% `4 ~
{
$ o* Y/ Q! K" C7 o1 g4 b: [4 z ly_disdate[0]=5;
" o- K) r1 G% a+ M" }: e1 M }
( |/ } T& E3 U) B if ((ly_lhj[2]==0x5a)) J+ k3 o5 z3 c5 V' S
{
) z, y* h) H0 A8 D! J* ~) I1 S ly_disdate[0]=6;
+ {$ E ~: d( r4 {0 S% C7 k }
5 b3 _& s0 K/ u+ P% [' n. X: L if ((ly_lhj[2]==0x42))$ L' ?' p f% [, @: d) F
{$ e+ t. m' v9 O, |: F5 L5 }, n
ly_disdate[0]=7;
% Q' m# g4 n, W3 s; F% V! t8 z }
( U/ G- p/ M2 R4 {. y& D1 y if ((ly_lhj[2]==0x52))
( F$ T6 P& r& v; m2 H {* d d4 A! r J" |0 V
ly_disdate[0]=8;
' U0 |" h7 X9 n+ R4 L5 x p } / V: r, ~. X( l, Q* ^5 D( H( E
if ((ly_lhj[2]==0x4a))
0 Z* [8 i& {: f8 |8 E: P7 x' Z {, G3 U) U: p9 Q6 U# S: a2 ~% n
ly_disdate[0]=9; 9 [+ `; Z9 Z" a2 P ?
}
- z, Q- C( O' d- T( O. W3 V/ ~' I ly_disdate[2]=ly_lhj[2]/16;
& Q1 I/ V/ s7 x& k7 u4 {# E1 \% l ly_disdate[3]=ly_lhj[2]%16;/ s, p* {4 j b8 S8 f
}& v* Y: s6 k* f: ]1 l e
display();
8 o4 c1 r, [7 @( E% _ }
$ C, b4 I9 {3 s. S}: g* T7 r5 K. @6 @# ~* x
W, l; R- t8 H1 W7 y
void hongwai(void) interrupt 2+ K, u: @* G7 M
{) b& @4 W: M/ s: A, p
unsigned char i,ia;: |) @& f6 N! _) T7 V. I
TL1=0;, H, h6 |: T& ?5 K) F8 ~
TH1=0;
( O3 P$ S$ U" Z+ ], `1 R+ Q! W TR1=1;
/ v0 g C) u/ j# H while(!hwx);1 k, x5 ?6 h* V- k6 S/ B+ L
TR1=0;$ i8 J) Z8 o" D1 I; t. ?" I, F( U; K
if(TH1<30||TH1>40)
# b F' v- }6 J{
: M, {" d8 H" K8 l- Q: Q return;
. y+ a8 C+ {. _* J}% F% S6 f0 s; D
TH1=0;
4 ^3 R! k0 m1 ~# n/ u( F$ ?6 e TR1=1;- E& Z8 @& D' e" h- L2 A/ _/ P
while(hwx) //
9 h5 k/ V1 W" d4 l) _ {
8 N' n, ~5 t% O" r delay();' x. u6 ?% S, \/ t5 E
if(TH1>22)
# _9 t% x) G. }, V D, K return; 3 q9 j; O" U7 y9 }- J" `
}: Q3 @, v8 y5 s! l+ I9 C4 A( w# G
TR1=0;
1 o; Q& ]. e7 d+ T" J. X: R$ k! G if(TH1<12)
. J$ k0 y/ o+ S# q4 o# n return;- y6 B' q5 `' F! ^5 r1 I3 p8 u
" A, G1 d" y+ O; g1 W for(i=0;i<4;i++)
7 W# R+ x B4 v( z {
% u* B. ]1 u; E for(ia=0;ia<8;ia++)+ Z h+ P3 j* l9 o
{ + M( X+ U6 }, ^% v/ g4 o
while(!hwx);; G& M7 h6 C1 B7 L
2 W2 P& ^* S9 {* E8 U3 N
TH1=0;$ o! g: G/ p$ ~& g9 `/ d9 b. V! j
TR1=1;- I4 `- U: P/ [3 [3 t
while(hwx)
" H5 R9 T/ G8 o7 R$ O/ z- p {
+ b' @0 S* S ]' \. t4 a delay();
# }! L4 C4 J# T* ] if(TH1>15) $ ^! n, W; r2 c
return;
0 V5 {% r9 B( k2 |, ]' Y }
0 l/ U3 t0 c5 E TR1=0;
* O$ y! A6 }/ p2 r' d) J ly_lhj>>=1;: Y K0 b$ ^8 V9 M4 j2 a* |2 {
if(TH1>4)
, T2 T* E5 W! p1 f, C5 V ly_lhj|=0x80;
# M& P. s- |: S% k/ x- L: w }
% U# K- o9 F* G$ q }1 f* l W6 i% ?* G* k- E
ly_flag=1;$ V. C1 Y! Y7 `. O' Y- C+ {( n* ]; A" Q
TF1=0;
& J7 P' A8 ^2 R* }1 e}. V+ C. m$ p5 C& k+ F! _7 l8 h
% e- a! {2 b; ~" j3 Evoid display()
0 A+ h/ A. q5 ]& f% |1 p) u5 ]) v% r6 X, V3 i% Q$ ^0 _2 E
{3 W& |. R. D3 m' \' E
SMG_q=0; //选择千位数码管(亮)
, E; x9 h, ^0 j: l; k* G# D! @ P0=table[ly_disdate[0]]; //
1 z8 A( U8 ?0 v: c% J delay(); //- q$ w0 s- n9 i+ L% J2 E5 y ?
P0=0XFF; //% m# F$ F! r2 D5 J
SMG_q=1; //(灭)
$ n1 A1 k1 w F" L$ S- m
% j3 |7 X# ?% I- k SMG_s=0; //选择十位数码管* W% l+ h6 M" u
P0=table[ly_disdate[2]]; //
) S" Y# H* i5 I, y- V7 M delay(); //
& ]( a9 _, K6 M P0=0XFF; //" |; O8 B# \% k4 G8 p
SMG_s=1; //
" X+ ^; k B' T- m j8 n' [6 s+ G* ?, U
0 H- Y; m/ A2 h6 n9 Q. H& ]…………限于本文篇幅 余下代码请从论坛下载附件…………% e7 K/ a0 h2 v
& P8 C# ^# K9 m6 p" K9 d
7 K; L( f$ {+ j; O6 h |
|