|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机红外通信控制继电器源程序
+ v: y3 g7 g1 f6 j9 P2 n3 h; N# ?! U1 j( K# C, S% y' [
. Z# _1 E2 t2 p: v: p7 E/***************************************************************************
/ i3 E: X2 ?) z+ T 本实验例程是用NEC红外线接收解码程序(红外线接收部分为板子配的林洋电子程序) q+ D! }2 U1 h2 H
程序功能:; D s$ K) k3 o8 h# n6 ?
1、运行程序,按遥控器按键,在数码管上显示相应的控制码(以16进制显示);9 y$ r; t: r: m' ]! _
2、对特别的几个键,有相应的现象出现:+ E* ]% m& z [+ ^0 E, R0 c
(1)电源键,使继电器工作或断开;2 F1 M7 K0 r$ ] N) @& P0 y7 d
(2)静音键,使蜂鸣器响或不响;
7 L# r9 n' ?- p c1 h! ~3 b; p (3)快进键让LED灯向右出现一次走马灯现象;1 ?8 i* m# ]1 r+ d/ y0 W) K
(4)快退键让LED灯向左出现一次走马灯现象;
. m# W- g: p* x- h( U9 }% r9 Z (5)按0~9,数码管显示所按的键号;
/ o* D7 l; S: D! ?. v% p& p% K2 r+ p (6)按其它键,不会改变已经按的数字键的显示,表示看电视台开关电源或静音、快进快退,都不会
4 A# B4 b h H K改变台号。7 B! y5 c4 P! n; K; z& Z
(7)其它键没想好怎么以现有板产生相应功能,所以按下后,没有特别现象,只有显示其控制码。* G# h3 z# c" z& X( Z) e
******************************************************************************/
, C8 a3 Z# }( }" K+ D- j# ]+ e#include "reg51.h"//头文件:
+ ~+ N+ M5 n3 b( Z% a ^3 e+ g& a. V9 k# k, Q$ r' u
#define LED8 P2//红外遥控功能之一是让LED灯亮,所以要将P2口改名
" z3 N; u0 I+ u
" Y- @2 L$ t; J: ]# b( x, rsbit hwx=P3^3; //红外接收数据引脚,也是外部中断1的I/O口" K) A4 [( i* c( _* @; p
sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)7 l5 M2 \' W/ H0 n# N g
sbit SMG_b = P1^1; //定义数码管阳级控制脚(百位); @- ^# W/ F) b4 J% r& G
sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)+ C' k7 k! X6 c4 M* v# x
sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)
8 y& N3 Y8 @; w4 V% | {7 H1 n; ]sbit JDQ=P1^4; //继电器
h9 Q4 @4 y6 rsbit Beep = P1^5 ; //蜂鸣器
& `, o2 y+ K! T7 {- u/ ], G1 o/ Y, l3 a: X
code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,* V/ ~+ n6 T0 J8 }% w
0x88,0x8c,0xc6,0xa1,0x86,0x8e}; //共阳数码管段值表 0-9 a-f
4 Q' D8 @7 J, e) F( J8 G2 c, [4 i( z9 A) |( I3 R1 M! B8 T( J1 i
unsigned char ly_disdate[4]={0,0,0,0};
+ ?. W) D! n& W2 m% \3 C7 Kunsigned char ly_lhj[4],i;4 m( {3 ^* R' ?5 S! g
bit ly_flag=1;
/ q9 S0 U; }5 l7 Y& P" m3 g! E- tvoid display();: P# ^+ I* M% O- w6 Q7 y/ a }
% L" I: r! z5 D, }" t$ G
void delay(void);# S5 }; e6 p% A, P
, R! H7 S! t8 A8 Zvoid Delay10ms(unsigned int c)
: j+ F5 T. P# B, G{/ m; H9 k0 ^: Z1 M$ r& r
unsigned char a,b;" m! W( z( J- J, G G
for(c;c>0;c--)' k# J2 b* E0 X. V; U
for(b=38;b>0;b--)
) ^* M- I* u* q for(a=130;a>0;a--);
$ {5 [# j, a4 V8 k}
9 ^8 H- ` ]/ F3 G$ {
+ V: y, p) D. a7 u" |void main(void)//主函数: t3 s u6 |" o4 ]8 Q6 a
{
% M7 a& {2 J* m3 Q% R- D/ x EA=1;
6 [/ i+ q- ], L; _2 f) _$ ^ EX1=1;
% r6 s% v# s/ i! Z3 ~2 _ IT1=1;9 a- t4 @4 l+ b& f
TMOD=0X10;* v9 c9 y, Y3 J
JDQ=1;
6 {! }+ o D# Q* ?/ A0 R6 }; C' y* o ly_flag=0;7 R# f2 n$ R# u* N0 y$ @/ ^
while(1){ + C3 }! U: B% q0 |- {
if(ly_flag){, o5 E' o! P* n& f
ly_flag=0;
% J2 P6 k0 `/ C1 Y& { if ((ly_lhj[2]==0x45))
$ d& p# p( _" Z: k; @ {# u% g1 Q5 M3 G. n+ Z* h$ n8 ?
JDQ=~JDQ;, v& z6 `* x3 s, W
}
) W, i' V' t3 X% a3 J2 J if ((ly_lhj[2]==0x47))) T2 s8 k4 v6 {; }! G, {
{5 o/ f# E' l C' C- P$ N. {% K
Beep=~Beep;) q3 L3 I5 v- S' O
}. B2 y# x, F+ V
if ((ly_lhj[2]==0x40)): c' u; Z% O7 v( C1 \3 w9 G
{. ?0 Z6 T2 m( w! }
LED8=0xfe;% T+ g# n6 Q0 w/ k6 H9 k
for(i=0;i<8;i++)( {1 M4 q1 k5 Q/ b$ C
{
- [: E5 _- A8 C" h: E. }8 X6 N& ^% u Delay10ms(10);
4 y; i8 H& s6 e LED8=LED8<<1;
& k2 m. {( _5 i c: p }% J) y+ ]7 L" I4 Z6 |
LED8=0xff;
1 T I7 S3 _/ ~ }$ |% `4 k: W* D8 H, `! O
if ((ly_lhj[2]==0x43))" q$ J/ ~' v7 k5 F1 \& b9 e2 I) B. \4 V
{- n5 I5 T( v4 k M5 X/ E
LED8=0x7f;
8 G% c" O% i, g* _ for(i=0;i<8;i++)
( ~9 f6 ~" e t) m { 7 n, `$ {" ? F, e+ E
Delay10ms(10);
7 o' h6 v; ~* C! Z LED8=LED8>>1;- ^; I+ K P8 b5 k$ z9 x" n0 D
}5 q2 ]% {7 [7 Q. g$ B; C
LED8=0xff;- t2 ?: [5 e4 Y0 i/ g: ~# U
}6 G2 l/ K' O6 C# N+ v, ^: v
if ((ly_lhj[2]==0x16))4 k* ?" P+ J; R. ~# G
{2 e" E) u {9 ~$ C9 d
ly_disdate[0]=0; 5 Q2 Y* N' J1 W2 I
}
4 g: k9 o! q" Y& M1 h5 q; J if ((ly_lhj[2]==0x0c))6 ^6 L% p8 V( ?* X
{# E0 L- h5 S: E: b2 V
ly_disdate[0]=1;
8 u) a; @3 s: T' P) | d! o }
% H u; p! c' v; w" _, D! s if ((ly_lhj[2]==0x18))1 v& w( j$ C3 i$ W' s4 Q& x9 b
{
& Y: G6 q8 n7 l2 c8 D ly_disdate[0]=2; ; O0 N: {0 B7 X" _+ P) R
}
* i r7 V" V& g if ((ly_lhj[2]==0x5e))3 D: h, V/ c- O! c1 \; D, I
{
8 G- d; `- a: H* D3 \$ i6 I% A1 ?8 f. e ly_disdate[0]=3;
; n/ c4 n% P; f( t }
: H8 B0 K( l- M if ((ly_lhj[2]==0x08))
) y% y [+ @$ L& B {
' n* R- h1 ?1 Y9 p7 ^ ly_disdate[0]=4; # W' ]5 R. m) v. _1 ]* }
}
# F/ m1 S: ?8 d- _4 e if ((ly_lhj[2]==0x1c))
+ @/ l G' |$ } u- R7 B( ?! P2 U: S {
* C2 h9 N" i/ D& V. Y3 ~& f& j ly_disdate[0]=5; : @9 ^: q$ N( R& J
} 6 Z- k5 c; B. ~* R1 L- K
if ((ly_lhj[2]==0x5a))
+ m. R% ?& l5 H+ ]% o {
5 O4 N, T1 s& o- u$ i* K' @ ly_disdate[0]=6;
. C* a8 \1 j/ M, y# I$ U }
' A0 J; e; s4 R$ d' L if ((ly_lhj[2]==0x42))
3 ?5 _* \4 @. A. D) g. D {1 o* e3 U$ A6 `5 q# k; n
ly_disdate[0]=7;
4 B& F8 X$ U: k# L4 C0 ~$ P( o }
/ R7 p9 G& Y8 C' E, T0 N O5 q if ((ly_lhj[2]==0x52))
8 B1 j! p2 a7 z1 m {
$ w# m& C3 s6 X* H8 d, U2 w ly_disdate[0]=8; ! t8 m8 M2 q/ f1 i3 Z
} ! R X5 F/ x3 U) [% l- i
if ((ly_lhj[2]==0x4a))
+ s' V; }! N; y' G+ f6 u4 ~ {
" i7 i: t4 |( d. s. v# |0 b# d( X ly_disdate[0]=9; 3 m2 f J. N5 @/ L4 v8 b0 m
} - ~' }5 t% J* D; J+ d# p6 k/ {
ly_disdate[2]=ly_lhj[2]/16;
) v( N( D+ } D* O ly_disdate[3]=ly_lhj[2]%16;
# j% V/ N: f J9 p6 d6 j! _ }! R4 s3 s+ T0 d$ S* K/ b2 J; v
display();
, W9 I, F/ V9 k5 N) Z } 1 x- y7 C d% j- U+ x
}7 B( o/ y+ x% _3 B- L
3 B3 m3 c m6 l, u5 z' S* y7 v- e4 Gvoid hongwai(void) interrupt 2
( q- B$ E1 j' x/ D( t! W7 ?{
$ ]0 o+ @: B7 w2 O2 Z1 c( @/ l unsigned char i,ia;
" b6 f6 n7 E9 @; m- T TL1=0;% G h+ J2 b( C) ?7 k. d4 s
TH1=0;. _- L! Q6 [& ^. b* m0 M
TR1=1;) z; N( L+ Q: y+ ?, I
while(!hwx);: z0 T Y1 s7 r" Z' @3 F7 k
TR1=0;
0 z9 O" p0 b3 y# T' Z if(TH1<30||TH1>40)
+ s# Y [5 |4 r# w1 S- }; d{
7 l/ f0 U0 H$ S8 Q3 [# ]7 S return;( ~* S: o T3 q# _1 u3 O; F
}
' T2 P2 T2 D H& A5 S TH1=0;. g; o, t F; V7 ?( Z# z
TR1=1;
0 V, |4 W) [( j; a2 e while(hwx) //
" _1 F n6 I/ F+ j {
/ D! [& E/ x4 z, p& d delay();: ~7 L- m- n5 _8 a
if(TH1>22)
' T" U, k/ V& \+ h% ` return;
7 ~( _" s6 w8 H/ g }
& d0 Q5 W; Q8 M/ n5 i6 m" N TR1=0;
, V0 U# Z9 K0 `9 i; q if(TH1<12) l3 T0 u3 w9 O& v' K# \2 Y
return;0 Z: ?7 ^# W% E
4 ^. ^6 ^8 B9 s2 z9 V" I for(i=0;i<4;i++)
! r, D8 d& s: K- r1 I) L+ N% C {# l" w$ F* y- Y: p' e0 h6 O
for(ia=0;ia<8;ia++)' _7 o" l3 L& W
{ ' i: N# ?, i G
while(!hwx);- w! R0 c. @ l. \' y' I' C
, b! n2 T' _, J. J `/ i
TH1=0;: f# Q, e2 h! G( L5 w
TR1=1;
- m. i, f* e9 c5 @ P9 I while(hwx)8 J4 Z" E- S( z
{( u4 o" S E, e# i" R$ ^) a5 z
delay();
. }/ A1 I% o" Z& @ if(TH1>15) ! ?: f# k$ X2 d' W
return; ! u$ C% u0 C! y1 n
}1 w1 ?# x! M( k) ^" g
TR1=0;( Y+ q& q Q7 U1 K3 g6 C% }
ly_lhj>>=1;8 h! a3 i# m: E$ i: d8 ]3 k
if(TH1>4)- a' s% d% [8 C7 l0 ^( f
ly_lhj|=0x80;
; c6 o- R! M; x4 x! O }, T4 i' f3 p# B- e! d x
}
* J9 ~, X) b4 Z- u ly_flag=1; A/ q: o6 G! K$ U$ {
TF1=0;% j) [; u! [, t1 s5 X s& s
}- A+ F- u$ } @) g4 {7 {
0 ]$ r, K: a( Zvoid display()' {2 f1 h) {6 Q
; \; | P+ u+ g9 Z$ @
{* m0 D& I# ]# w3 G1 L1 n" a
SMG_q=0; //选择千位数码管(亮)4 F7 ?) F9 E- p# j1 v
P0=table[ly_disdate[0]]; //; w! h6 F$ H$ J/ h: |
delay(); //7 h' R3 l7 Q( @0 N% X1 R$ S |
P0=0XFF; //
6 c. t- R1 U$ B. W SMG_q=1; //(灭)
5 n* M4 Z* Z* U5 e* l8 D% W7 c2 e3 A4 ]% G4 \
SMG_s=0; //选择十位数码管! h |# a$ n0 I; \1 n% a6 \& l
P0=table[ly_disdate[2]]; //% X& M% e+ `$ r2 o# ]* n* |
delay(); //
0 \- Y/ G- K* o" h/ f P0=0XFF; //
$ n* s4 }9 i4 `7 h8 r& T SMG_s=1; //
5 U) j1 h# O& R, [
$ D' M: K; H5 k" M. J* |
]+ B# h4 R1 h* R…………限于本文篇幅 余下代码请从论坛下载附件…………
/ N5 ~0 ^: B9 m. c p$ m( f2 @6 B9 O
( F1 {2 ?( n. ]/ D |
|