|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机红外通信控制继电器源程序4 |. o5 [8 d& b% o z
0 n W) } e* ^; Y% \4 d! k6 \, O) l7 Y2 L
/***************************************************************************; Z) b, e: W$ F5 k1 d; c
本实验例程是用NEC红外线接收解码程序(红外线接收部分为板子配的林洋电子程序); t; K) w' Q, R+ {. @
程序功能:
) m% v( Z% H" n t/ a) g- I2 o 1、运行程序,按遥控器按键,在数码管上显示相应的控制码(以16进制显示);
5 e3 [' Y+ M7 W5 O0 R* [( U 2、对特别的几个键,有相应的现象出现:1 h/ H) [3 D& _8 k% @- t
(1)电源键,使继电器工作或断开;/ U% S/ m& }! d' J* q. n6 ?+ F, ^
(2)静音键,使蜂鸣器响或不响;
) E1 f9 ]# O3 l c1 `' G3 Z- \ (3)快进键让LED灯向右出现一次走马灯现象;
* N0 N3 v& z/ a) U! k5 h (4)快退键让LED灯向左出现一次走马灯现象;
3 c$ X( H# o9 G( u' i- N (5)按0~9,数码管显示所按的键号;
$ M8 t0 g% i. ]1 `( g# |2 b (6)按其它键,不会改变已经按的数字键的显示,表示看电视台开关电源或静音、快进快退,都不会
1 z6 ?+ D9 Z# e4 ^ a5 u6 u改变台号。
) Q9 s$ e9 _# {& j/ Z' f4 B: o (7)其它键没想好怎么以现有板产生相应功能,所以按下后,没有特别现象,只有显示其控制码。# R) u3 q& k {
******************************************************************************/
3 b; H: T# G* N2 x& O v#include "reg51.h"//头文件:
- ?% l9 Z* F1 S" ?6 |: I. A0 T! W) S4 C7 M* |! }
#define LED8 P2//红外遥控功能之一是让LED灯亮,所以要将P2口改名
* E6 E1 O* f& p$ L V
' l! l. w7 E2 ]5 r _sbit hwx=P3^3; //红外接收数据引脚,也是外部中断1的I/O口0 c' D* N1 ~' Q( {5 l
sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位): c0 c2 C( J3 X4 S, X E, f
sbit SMG_b = P1^1; //定义数码管阳级控制脚(百位), k& r* U( s7 q
sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)- m) a3 S' `8 W! h" i
sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)
) ~" N' |- z' I- M4 d; dsbit JDQ=P1^4; //继电器; E) p3 G3 I b+ M
sbit Beep = P1^5 ; //蜂鸣器* A! X! p( E* W' i/ K- U
+ N2 j4 ^6 U. h7 }4 K
code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,9 I( N) _& T4 C5 R7 F
0x88,0x8c,0xc6,0xa1,0x86,0x8e}; //共阳数码管段值表 0-9 a-f. _; I# x: w3 C6 i. ^" h: O: } l
, u: i/ Y7 d! b4 F- f& l. H$ d
unsigned char ly_disdate[4]={0,0,0,0};7 i7 j) F5 @ S: W, o
unsigned char ly_lhj[4],i;
/ j1 f( L0 R8 y; dbit ly_flag=1;
8 l) ?* r. H8 z, X; J: pvoid display();; \5 o1 U+ B4 n' m1 p
. u- S1 X$ J# G4 l+ U6 x6 J: Hvoid delay(void);# E& ?8 |( D3 R% Y# Z& A' J
3 t* d2 J. F# I! b$ ~1 B
void Delay10ms(unsigned int c)8 D" `! \- u3 ^" M" b, `
{
, H' j. b/ M2 W( |0 E8 x unsigned char a,b;3 a. e7 y; J q7 \
for(c;c>0;c--)* u, F& ~0 O4 h7 S7 V
for(b=38;b>0;b--)
% q2 o, U2 Z$ ~2 P6 q3 g! t for(a=130;a>0;a--);3 i4 f+ N7 z1 v; Z# O3 E
}
, v9 J# D" F/ Z# K' f
2 B1 {4 o% c- Vvoid main(void)//主函数
% S6 @. C! ^1 t8 T+ R, A{+ ]' y+ M, x& n2 ~
EA=1;
0 H5 _4 @8 Y! O! L; U- I5 q5 K% U EX1=1;4 m$ ]2 H- o ?5 n
IT1=1;8 P8 ~4 G# [1 O0 R
TMOD=0X10;
& v# m; y5 ?( a3 Z; w+ ]) C& i- E JDQ=1;
' H* u$ f0 u F. G F+ ] ly_flag=0;
& v' e6 Y8 C- l8 X while(1){ - t/ l! e: W$ C& B
if(ly_flag){
7 S3 n9 e* b% s' y ly_flag=0;
4 d1 P; e* W$ ?' l* p if ((ly_lhj[2]==0x45))
, e/ C2 E" R* D: Y5 i" I {
' N4 n6 V4 C' I# D6 U- D JDQ=~JDQ;
x$ ?& Q) W: Y4 C7 E7 p+ ~ }
: U6 P' u% t0 d+ v# K, q; {) h* | if ((ly_lhj[2]==0x47))4 E/ B. l8 ?% i* j! q4 _3 Y
{" J$ m4 Z; \9 ?5 I
Beep=~Beep;
b# x: d1 K! f/ k: S V }
3 g, c2 `2 v$ f- I4 L: m. I/ O if ((ly_lhj[2]==0x40))/ ]" P& ^+ V% W1 k. d: a
{
+ o' |" h# q3 r- x3 u LED8=0xfe;* s% w* s/ s2 a8 J- e
for(i=0;i<8;i++)) t; M- T" i) u. T! P- z
{
- v* d/ j k+ @/ N( [; [ Delay10ms(10);
+ K3 w+ O6 }$ u P; k! }" Y LED8=LED8<<1;
9 r0 v. o5 x) K }$ v3 B3 l* ?8 \: Y& `; }
LED8=0xff;
) o. a2 z& M; j: u9 L+ Y/ F3 o }
: e; K: y5 t) V3 l' C if ((ly_lhj[2]==0x43))1 G* r8 m1 q0 T. [; H7 g, y
{
) `/ X0 }+ K/ T' n LED8=0x7f;
% t5 P+ p+ G0 [3 V for(i=0;i<8;i++)
" l+ `! [% A- w& Q { ) W6 s6 B: J. H0 H; Z
Delay10ms(10);3 G+ v) v3 y# y
LED8=LED8>>1;
, B `, Z& P1 X }4 {. p# U+ D! K) \0 E
LED8=0xff;7 x5 K3 B7 O) v" g3 v% ~0 L) _1 @
}
F, c9 r$ m5 m7 f5 D if ((ly_lhj[2]==0x16))2 r2 H7 O0 N/ b7 J* \* Y
{- U, b+ V/ U9 ]( K- w
ly_disdate[0]=0; $ h; V/ C/ K$ h' x
}# o# a0 e- w! s8 R6 i
if ((ly_lhj[2]==0x0c))
. I+ W9 h0 e0 W+ s, t {0 [' J3 V/ L+ `4 R1 l/ m4 ]" j3 e
ly_disdate[0]=1;
( m; V7 d% R6 k, ~% R# y; K }
. B! M( l! L& x T if ((ly_lhj[2]==0x18))
6 l' b4 l3 S' \5 E n {% z" Q# K1 A) A- Q" k. }0 m
ly_disdate[0]=2; + ]1 ^5 N1 `6 P- N' u
}
+ r! U8 c* n/ x& e3 G7 o if ((ly_lhj[2]==0x5e))
% f7 Z# I$ j8 P& H' Y {" K* d* `1 F' Q8 S9 L) \; O4 S
ly_disdate[0]=3; ; B, G# H5 a: R
} 3 o: \, J& |9 W& L' g( `
if ((ly_lhj[2]==0x08))1 r% D) E' y$ H# _. b" J
{% A$ G: a& N$ o Y3 }
ly_disdate[0]=4;
7 U6 l9 o$ _5 T) n. J } + x) z1 x$ U: @0 ~; \
if ((ly_lhj[2]==0x1c))
4 P: Q- |# J$ d$ B: P5 J {
6 S# o, @7 g7 Y; ^ g8 p# f% C ly_disdate[0]=5;
7 L1 q* \+ w9 U% A) ` }
7 i3 m' v* u- k- `' @( T if ((ly_lhj[2]==0x5a))8 V- {" P! T2 W# l
{$ j) w4 s8 P3 o' s
ly_disdate[0]=6;
; }7 t [7 {( r% N- ~1 Z9 } } ; Z3 R3 t6 [% f2 k% C
if ((ly_lhj[2]==0x42))
/ {+ f" K0 w2 t6 b! B) } {
' d0 c w; f2 ^+ y+ l. q- j% l" c ly_disdate[0]=7;
, Q! t+ B j( G9 a) Y" U* N } ) _; q6 w$ z( I8 I- x" x n1 q
if ((ly_lhj[2]==0x52))
" r) o- c: F3 K) [9 ^7 f {
4 [+ i" R! d% \& d4 J ly_disdate[0]=8; ) |) ^6 M; u' T
}
$ R$ y9 R3 T Q7 i% X- s" ?( v# X. b6 G if ((ly_lhj[2]==0x4a))
: J) x; e. ~1 C: w) x) Y8 F0 H {
6 `6 {6 T; T6 ~6 v# d ly_disdate[0]=9; + f; w6 h P# n
}
$ }, L' D$ B& }3 J ly_disdate[2]=ly_lhj[2]/16;& L2 R. \6 V% d
ly_disdate[3]=ly_lhj[2]%16;. D3 h9 M( D+ o+ |. a1 T
}8 e3 X8 p5 q P; o7 Y
display();
! u, R0 e0 O9 P( c }
" `5 r6 X+ z; k6 [& x) ]}; F( G: N# v9 f
) z4 T h# {& p, V, k+ o* y
void hongwai(void) interrupt 27 x# w0 G) d! Q5 G8 Q
{
1 f0 o2 m6 Y7 J `& m6 Y. F unsigned char i,ia;
+ w% l4 }/ t+ J# L+ b+ s {2 @: t TL1=0;
3 Z; q. v/ M% C/ u( { TH1=0;
( R4 Q2 s: H) j, j TR1=1;
2 K5 U8 M/ a$ ^0 F" Q5 y d while(!hwx);, m' F+ E2 ~2 N$ Y* x, N
TR1=0;
# @+ Z! g* P% ?; _ if(TH1<30||TH1>40)6 l6 b0 z& S6 F7 s* I! j! R
{6 y3 g0 B6 z0 A- y m4 w" a
return;
& G5 H3 R! A9 M R5 N3 j' g}. _) g" X* f u k, \
TH1=0;& R5 U+ [0 K$ ^5 m
TR1=1;
U( y1 Q* ^- [& m5 H while(hwx) //" M1 Y' m0 ^$ O+ |) o$ k N; c
{
% k1 `- r* T, f6 Y1 d+ A$ b delay();
L! V' }; h5 ?1 z6 f' N if(TH1>22)
2 w3 p% o0 w. B return;
, A2 j5 Q; }. U% ]% d- O* { }
# n1 y' X w3 L; n TR1=0;4 ]# d4 q, ^1 B3 x$ P$ g/ ~
if(TH1<12)9 l* s% [% ?( z" f# D) ]
return;
+ {7 }" M, V/ y# F4 E+ }4 V- E+ X# r8 m$ g+ o( g4 z' A
for(i=0;i<4;i++)8 ?" T- |$ ]8 r2 Q, h
{) l5 q: F- X2 p- Q
for(ia=0;ia<8;ia++)( l! ?7 {" j( s: M8 F6 X
{
a9 V' Q( J& h- m while(!hwx);$ }: I6 l& G. H5 a# U
~, T) | ^. g& t. M
TH1=0;) w5 w% k0 S( h" m
TR1=1;! Y6 u" Q: u" G
while(hwx)% O, L# ?" E9 R1 |
{( i7 M# `& s" K
delay();
t$ K) @0 K3 l/ v( _ if(TH1>15) 0 ~% _0 q$ u- U% X
return; % I8 ~* o+ W# q$ M& i
}
; D$ b- Q4 c6 x( {1 e4 ` TR1=0;
0 U8 a1 d# ~8 q8 r% h# W0 ^ ly_lhj>>=1;
m9 U" ?( M; b0 S7 S' L, d' A: ^ if(TH1>4)0 t. v4 i/ C% a- i) M! r/ A& p, ?
ly_lhj|=0x80;; G* l+ d$ o! o+ A& [+ \# ?
}5 [0 r, v1 W; w# p, }
}
: H o/ i" r0 w: T4 V+ t ly_flag=1;6 s5 p) }7 v) d% U' S6 y
TF1=0;
$ F; I9 _- }8 E+ L}
# V/ R0 g+ ^3 r6 U9 M
. M( M9 H9 R; k" b# p3 Uvoid display(): l9 |2 B- s! e5 N) S/ C
- d' ~/ p8 _7 n# L7 G O4 X
{
" s/ a3 [' @% }1 ] SMG_q=0; //选择千位数码管(亮)
' M8 d4 |' P0 z U0 R& k) Y6 k P0=table[ly_disdate[0]]; //
1 d1 R( S! Q- O6 r" Z: t! G delay(); //
; P6 y- ]! o) ^+ `9 G7 [ P0=0XFF; //
' n, F; ~9 K. Y' p, \" D SMG_q=1; //(灭)
4 D$ U. [3 a U+ z s: S, F- R$ C& T0 E3 U
SMG_s=0; //选择十位数码管+ y) e! d+ G. D* {, N
P0=table[ly_disdate[2]]; //2 k0 e$ P' f7 f$ _& [
delay(); /// q) t7 k F$ e- v2 K0 d
P0=0XFF; //
1 h9 w! O* e% f( ]6 T! y SMG_s=1; //
# g! ^5 q; @% d4 X" [2 z# X/ a
/ h2 k" |; ^+ A+ t D6 S7 h+ j1 x1 [* b) }- i3 T
…………限于本文篇幅 余下代码请从论坛下载附件…………
- ]# m/ P1 K& B7 C9 \" Y' U6 A
' e- U0 r% j4 r! @
2 M( K: V0 K3 J. t |
|