|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机红外通信控制继电器源程序. w q; F: B' d* ~. h d7 m
* o: q' _+ E' X$ q
( q2 I4 K g, z: `& r
/***************************************************************************" p! Q9 {3 @! D2 G' j1 Q# q
本实验例程是用NEC红外线接收解码程序(红外线接收部分为板子配的林洋电子程序)2 F* A9 l8 }8 `4 P1 o* }
程序功能:/ H/ ?9 x/ W: h9 Y6 x
1、运行程序,按遥控器按键,在数码管上显示相应的控制码(以16进制显示); D$ ]( J; n7 z: i( g
2、对特别的几个键,有相应的现象出现:
# [- @& s1 r* O, K (1)电源键,使继电器工作或断开;/ I9 B1 s/ K; x- p2 B$ F+ X8 o: E
(2)静音键,使蜂鸣器响或不响;5 g, ? z5 P$ L5 n
(3)快进键让LED灯向右出现一次走马灯现象;
! P+ j4 o$ x- S$ ?1 [. ^- o (4)快退键让LED灯向左出现一次走马灯现象;
/ C; O; m, F, J# \4 w W0 Z (5)按0~9,数码管显示所按的键号;9 c# n) ]( O4 K% ]
(6)按其它键,不会改变已经按的数字键的显示,表示看电视台开关电源或静音、快进快退,都不会 F5 T8 E. c9 c1 x! ~6 j
改变台号。7 u0 p4 a; p& T/ }
(7)其它键没想好怎么以现有板产生相应功能,所以按下后,没有特别现象,只有显示其控制码。
) g* x4 A* H" n$ P1 u, w b******************************************************************************/
. k! b9 r/ k! Z' _#include "reg51.h"//头文件:
1 ? B {6 n5 Q2 }& [+ }1 f3 K0 r+ N& R6 u1 H% U
#define LED8 P2//红外遥控功能之一是让LED灯亮,所以要将P2口改名, x* x6 z5 C( g
! ?; a% y! B T R
sbit hwx=P3^3; //红外接收数据引脚,也是外部中断1的I/O口% q+ A2 ~; q, W/ G8 z$ u. T
sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)
+ }/ w8 c5 L P2 {sbit SMG_b = P1^1; //定义数码管阳级控制脚(百位)- ] v* ^& E3 C' i% T1 B3 K
sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)$ Z, n/ S& m3 l
sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)) \ q3 u! y/ X4 v- F( r
sbit JDQ=P1^4; //继电器5 B/ `# B5 n, s$ P+ k; g
sbit Beep = P1^5 ; //蜂鸣器
# ?. H2 s x, }( W U8 I$ r, D- W8 N$ {1 c) x+ f8 f
code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,3 L- Z1 `7 Y) O: A3 i6 C" |- c- W
0x88,0x8c,0xc6,0xa1,0x86,0x8e}; //共阳数码管段值表 0-9 a-f
5 r) i: E L7 G" p8 t5 Z4 ^5 A" F' F( [* L
unsigned char ly_disdate[4]={0,0,0,0};; b! ~# ^1 e" G8 B
unsigned char ly_lhj[4],i;$ n& h- v2 e$ B, s7 |
bit ly_flag=1;
; j+ |6 b* O& s# e* q5 F# ~' ?void display();
/ ~5 W, Q: o/ f0 \& e& n
6 A% Y+ z0 N1 e' a* q* r# Zvoid delay(void);
$ h+ O5 e& \; \+ P6 f# G
3 G6 [4 Q1 g8 ~7 b f1 a+ }2 ]6 ivoid Delay10ms(unsigned int c)
$ P; q. [5 f0 o3 |: ]{
3 B% b: z N5 [2 P1 i unsigned char a,b;
5 u0 X2 t) M5 s* c for(c;c>0;c--); g: k& v1 x1 O" ]8 S9 z" R
for(b=38;b>0;b--)
8 l, x3 ]: e# q; e0 _: C4 Y for(a=130;a>0;a--);, h1 l+ g7 g1 z3 e7 M j7 Y, X
}
' a( V ?3 _1 T$ G. I
, N# P3 G% i1 ?/ R. Y$ Q4 svoid main(void)//主函数! B* w9 o/ S. n+ y
{. c6 ^7 W- I5 y4 I
EA=1;0 o0 A0 Y, s6 F8 _ W. a2 `/ T1 c
EX1=1;
6 E9 N: X: b7 }! S- M IT1=1;
' p: e8 C0 k9 l( R D1 `7 b6 S TMOD=0X10;
+ ~, t+ w' z" @0 R' C$ T JDQ=1;
- G' Z8 w7 G' c7 r ly_flag=0;
3 n: N$ O! E2 n% z while(1){ 6 Q3 Y' q0 F2 j; d# n2 X' d
if(ly_flag){( O1 D0 Q1 b0 X5 k0 [4 A |
ly_flag=0;
" P" [* o) ~* H" x, Z8 I if ((ly_lhj[2]==0x45))
* \& O# N1 ~7 C: G {, w% Y, @( O1 e7 k3 R
JDQ=~JDQ;
( g3 |1 v* ]& D6 c+ e }- e* U% d8 Q* Z/ d
if ((ly_lhj[2]==0x47))- o7 r5 a3 d+ k+ K. E; F2 c
{
. [4 O( ^; u# T& H2 B, }. k Beep=~Beep;
$ b% U2 I, r9 p d9 ~- G4 j) K/ U }
. B* h6 @9 p; y, |: l% M, ? if ((ly_lhj[2]==0x40))
/ O( {; j5 M+ b. N+ E( e {+ |$ n# m7 ~2 o* R1 C
LED8=0xfe;, ^2 {0 H5 b# W3 e5 [* k3 z
for(i=0;i<8;i++)9 h, F1 K9 u; b' a
{ * J5 M5 Y/ W9 O0 x$ @9 K
Delay10ms(10);
V0 T3 t' A- e% [ LED8=LED8<<1;
1 J+ g3 N$ z! i }! `1 a9 h+ ]5 R5 M2 G
LED8=0xff;
U& _# v l% ]. S }
7 P& ? j, K# Q. X if ((ly_lhj[2]==0x43))
# E6 N& _4 S1 ^' N+ {) A {
! D4 W# L7 b, r) } LED8=0x7f;9 x8 }. ?' E8 c8 N
for(i=0;i<8;i++)2 ? u+ y' _1 ?' h9 ~
{ , H5 W) M) `/ A- G4 h. n" R
Delay10ms(10);
9 P2 E8 f. \7 `$ Q8 d: O. J LED8=LED8>>1;3 T, x( {0 H4 y/ y. `' m
}* K7 O- S8 I @
LED8=0xff;# Y) l! \2 T6 F$ l
}0 X7 }/ C# i4 T7 P* {7 x
if ((ly_lhj[2]==0x16))
: t0 @( @: ]$ h3 ~& D! n {
' `! f- m3 j9 T m' S ly_disdate[0]=0; # c- D' t* t- f: h" n8 t
}
) a& V) {1 r% O% W6 ]$ Y" l if ((ly_lhj[2]==0x0c))
" }2 P$ k0 ^0 N& f7 S n8 b {1 w2 t4 L% ^0 f" O
ly_disdate[0]=1;
7 ^# g; n9 y4 X" N }
5 g) s$ ~( x1 R" ~9 _ if ((ly_lhj[2]==0x18))
! {: P8 U. ?, [. I4 F3 c1 m {. A: v! m. }/ c+ _1 e; j* h7 _
ly_disdate[0]=2;
. b8 r, e# @, a) |0 W }
6 O9 K" a! [& s+ L, Y& r if ((ly_lhj[2]==0x5e))
& g; W0 x" M/ P. o% ^% P {8 S# v' B# N$ J
ly_disdate[0]=3; ; A7 S0 v2 F0 N! E3 \- i
}
3 ~; y+ a/ f( @2 w5 z$ o) w' { if ((ly_lhj[2]==0x08))
# V- y9 }/ [- C: A! b# c6 A {
T" @: I. l/ I& M6 f) v ly_disdate[0]=4;
9 F" o4 ~, g7 g# {% u }
. B; C( Y2 `6 T- N4 g: ^, e; ~ if ((ly_lhj[2]==0x1c))
7 M# R4 V$ d; R g, f {
( q' d7 f. n8 m* x# d; W ly_disdate[0]=5;
. K7 u( {$ M( w- C9 Y }
6 U b# I; f; ^ if ((ly_lhj[2]==0x5a)); S% Y0 p9 p* J+ T# s0 w1 V+ Y( A3 S
{
0 z! R7 q# W9 g% V ly_disdate[0]=6;
2 k# o7 ^. ]6 Z" o+ j2 `* t } 1 _- m: @& ?1 I) Q
if ((ly_lhj[2]==0x42))
' _! a* p- K1 X, r* w {
4 g# \4 L3 F# ^ ly_disdate[0]=7; 8 Q7 a9 V% z/ k, @3 r9 ?2 W, o/ Z
}
' _& t9 q. g7 \7 ^ if ((ly_lhj[2]==0x52))
8 E( k! H, T, t5 r1 c' X% I {
4 j/ V8 ]8 C$ L/ a6 J4 u4 h- d$ i ly_disdate[0]=8;
/ r4 k, a7 A: {8 a" {! Y% f' @ } ) x" K, M/ j1 s
if ((ly_lhj[2]==0x4a))
/ ]% Y7 k9 D- }; { {$ A( o3 Z' P) `8 H& t
ly_disdate[0]=9; 2 A: |+ h* C+ I: p7 R5 F0 Z
} % v [( M G& z5 T. D% c+ w
ly_disdate[2]=ly_lhj[2]/16;* l3 b0 Y7 @* h7 P) L/ S+ Q
ly_disdate[3]=ly_lhj[2]%16;
: W- b9 h* K3 }/ R* }9 T* [0 S# V( ] }& {7 X8 }0 J: ]! Y7 U' X
display();( |5 f; @% I6 L
} 1 X( @4 z( `4 {8 B; Z
}( G4 M4 i- g/ g9 q9 }( ~1 t
7 w# D7 { O/ v8 T& N5 o# K' l
void hongwai(void) interrupt 2
1 @% D* m: N1 d# ^& B% g{
7 A1 Q1 W L( }" t unsigned char i,ia;) l/ e( `4 p" P. {/ V, R/ V; u
TL1=0;
V* ~, U/ c7 k3 _ TH1=0;$ J& G4 ^2 i4 X- W+ i( J% Z5 f, ?1 a" t
TR1=1;* }" B4 A: x/ ^5 A, K
while(!hwx);0 G+ A- D$ Y3 R
TR1=0;
( f3 ~9 `. m( _' D1 ^ F: ] if(TH1<30||TH1>40)
! B, r8 O' T! @9 K' G{
+ B# R4 P" ~* {2 B return;6 q5 h5 h! }4 S
}
# q) m5 @3 _5 ^* L5 M" z TH1=0;
% D q) N+ ~/ B" ?) | TR1=1;
O+ E, L ^: `# E/ y& k' M: k5 x! | while(hwx) //
7 k8 v0 z( y4 O) E4 [$ ` {
1 D* a5 N: W2 v delay();
+ S# ]8 E$ @$ Y! q if(TH1>22)+ U( Z$ Q- v& A8 N- {8 t
return;
6 u+ A6 O+ T# C2 r5 k2 {! s5 K }
4 F" n5 J9 m) L* e TR1=0;2 Z8 M; ^+ J4 I+ {$ n! E. x
if(TH1<12)
/ m4 |+ R" r3 y) e) G6 i return;2 \, Z6 B! l' L& t, Z2 o3 l
9 a9 X, c; q0 L( ]+ w
for(i=0;i<4;i++), u8 z, b: A4 i% S' w
{2 K( t6 a1 |2 L# S X
for(ia=0;ia<8;ia++)
. d0 |# p" Q' }. d' m {
: F5 Y* n+ f# U; P8 i while(!hwx);
1 e2 m& U" p& w' L j
) I( W( c0 i; C TH1=0;
) S% ?! b' k8 J+ { TR1=1;
" f# m9 ^! E- p! p0 e. o while(hwx)$ ~. V4 ^0 t; c" O/ y
{5 P0 o; o/ }: h
delay();
6 z# H6 ]5 c% A if(TH1>15)
! h6 z g% y/ S4 Q0 G& C return; 0 J8 n6 e- z- r2 h
}
$ N% K! d, x3 e# \3 ^ TR1=0;# C9 u! _3 J4 A3 |8 q8 R- u2 W
ly_lhj>>=1;
4 M. p8 |- a- ^! o; J- e. ? if(TH1>4)
# o8 F% S9 I4 l9 j# e9 o& w ly_lhj|=0x80;
! ~' u% V* @; g1 c! \0 V, m, k }, I! y6 O5 j0 c9 z
}( j! [) N' b4 @, S2 B
ly_flag=1;' I) ?0 R) `9 i2 g$ N9 z, f. [
TF1=0;6 B3 S, U1 q) a6 {
}
7 \, q% P/ a0 O J5 {# G& g# i. X8 r: u( o
void display()
# [ G* a6 B1 j$ m5 s* f0 ?9 W: K% ]
; X. m: a5 C8 F1 W( m, o. P- p/ T5 B{) Z- c5 C' R' C. Q9 S2 }
SMG_q=0; //选择千位数码管(亮)
3 y& G4 a) l. b2 ^ P0=table[ly_disdate[0]]; //3 S1 f+ U9 Y1 T! u/ u- k
delay(); //
( x$ H. p* i& Y" [) ] @) w4 }$ Y P0=0XFF; //
2 l* `) |$ x$ \# t; h SMG_q=1; //(灭)- E3 S: P# d( }9 q
- C7 b" f( K0 I2 ]' X. z, _0 F
SMG_s=0; //选择十位数码管6 {1 b: W0 M" o, T0 f+ i
P0=table[ly_disdate[2]]; //
9 i: L6 u2 w! N, Y+ X' ~ delay(); //6 H$ _' F5 d7 m# g
P0=0XFF; //" z1 C7 Q" r, M! \: w. H* A
SMG_s=1; //2 _- D; E% R8 m* ~) A4 B
2 Y) H" W* f$ v1 O
( k7 r7 E' d" ?' |6 ~0 w. ]
…………限于本文篇幅 余下代码请从论坛下载附件…………: j( j! d$ A3 b6 g; ^6 J8 [
, A2 V9 P3 [$ D/ }9 n5 j+ g# [0 ^
( V/ e" M0 i! }3 `- N4 j; a+ c |
|