|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
红外线遥控Proteus仿真电路(发射 接收程序)
1 {3 X! |# q0 I7 V# z4 s
8 B# V1 m* N$ b' V$ a
5 G' O {; Q" J2 h2 N1 V4 ^4 U
9 D6 N/ \: q% n/ F) c" u, N
3 u. Q( p5 i, M& d
7 C* i, i/ N2 m( I( a) k4 C7 Z' Y! D
红外线遥控Proteus仿真电路(发射 接收程序) |# A, O# B; o' |
红外发射编码程序2 I6 G+ O9 g1 r z! b
红外发射解码程序' d a- X0 _" p- ~
proteus的红外遥控的仿真原理图; ?9 m) _$ d1 L+ W- o
1 Y$ E. G$ h2 @0 ?
7 X5 p: U `. n& O6 ^2 x+ l& m9 S7 o. K6 D; t9 w5 E3 p) M
格力空调遥控器(YB0F2)解码 ; S- c4 n O. E
CUP:STC89C52RC 晶振:11.0569MHz
# p" O7 h! P: ]1 y2 C# n7 Y* b4 m7 r 直接由串口输出 波特率:57600
+ d9 j! s) r$ K: `8 n& K************************************ 说 明 **********************************************: z: y4 B1 U* `4 N4 u$ D
解码方式:+ Q+ I- d* L1 N
以一个9ms的低电平和4.5ms的高电平为引导码,后跟35位二进制代码 接着0.565ms低电平和20MS高电平跟32位二进制代码
* j8 C5 ^$ H' O4 E9 n, V前4个字节每个字节为8位,中间1个字节只有3位,接着为20MS高电平,跟后4个字节每个字节为8位
, ~' O( H' g: k" A' n- l 以低电平为0.565ms、高电平为0.56ms、 周期为1.125ms的组合表示"0";
( c. H, t( U5 B! ?8 F! h" k7 G 以低电平为0.565ms、高电平为1.685ms、周期为2.25ms的组合表示"1"。; $ S2 I: b# v: H: l# e" m
注意:经过红外接收头解调后单片机接收到的高低电平是和遥控器发射时是相反的一个过程; I# K. e! x& C1 x& V S
* 兼容 1T-12T单片机中断方式红外接收数据,并通过串口发送
8 ?9 T; [3 B( H8 P2 H2 z程序编辑: lbq691477940 22/07/2011. A1 S" u, `/ z# }* b$ \
/*******************************************************************************************/
8 C# ^" y3 ]7 ^+ H' R6 i; _/*******************************************************************************************/
/ D; k. r- m" c#include <reg52.h>
+ n& V" }: Y+ z: |( V" etypedef unsigned char uint8;# y) ~! O6 o/ W. E9 r
sbit Ir_Pin = P3^2;) ~2 n* E# y% v' V% Y" y3 y
uint8 Ir_Buf[9]; //用于保存解码结果4 g$ ^8 N/ o5 b( E3 z! f
/*******************************************************************************************
$ A+ H" s3 R4 P, s* 外部中断0初始化
& h2 V4 J+ y- G* N/*******************************************************************************************/
# E' }. p0 e' Evoid int1_init(void)! q' U' I' T# U, g
{
( V: `( N7 M0 h" E, cIT0 = 1; //下降沿有效7 t& |7 i" V. B' `; ^( g
EX0 = 1;
/ V1 a- j6 C8 ^8 r' ZEA = 1;
( i' F3 E+ O5 ?/ A' G& E/ b x}
: [0 N6 L2 b+ m, l/*******************************************************************************************2 H; U2 q: t9 }9 k$ C7 Z5 i
* UART初始化1 l2 N5 e* e; }
9 D, A: J2 }4 j* 波特率:9600 波特率:57600
1 M; X- J2 u, [( D5 w/*******************************************************************************************/
G7 t& `, K4 V, u. avoid uart_init(void)8 a$ G6 K G, a6 M# W) z+ P' R- k
{
0 J* s @; ]2 n5 f# M: C TMOD = 0x21; . q' t- w$ b/ \5 F: t$ F' e
/* SCON = 0x50;
" E6 `+ \/ T/ ~# {/ r TH1 = 0xFD; //9600bps @ 11.0592MHz
+ H9 q$ p! P4 ~ TL1 = 0xFD;" [9 H9 P" }1 O, M e- G6 g" T I
TR1 = 1; ' o- X) C+ c/ t* k _4 U
SCON = 0x50;
' l3 L& t2 R: w- tPCON |= 0x80;
* F+ K8 y. L! a$ b* ?8 k- l! [4 ZTH1 = 0xff; //57600bps @ 11.0592MHz;8 Z+ K$ {8 O7 `0 r5 g; K$ e0 W
TL1 = 0xff;
. D0 f; M2 G. a. qTR1 = 1;( v0 N8 a) {2 d
}
) @# S, K' B ]' _: B4 O: B4 ~3 s/****************************** 延时21ms子程序 ************************************2 c' Z* v7 ~9 A* p% L3 w
void delay21ms(void) ; S3 e0 e% p& `( L! r, p. j
{
$ L `; t$ E/ a3 T- o' V uint8 a,b;
, U3 o# k; m/ C! R% f: `0 a for(b=150;b>0;b--)
/ s! M7 p3 z9 p& n [ ? for(a=63;a>0;a--);, Q/ Z" P+ @' |2 R/ @
}6 y1 [, B+ q: f/ Q
/*******************************************************************************************/' ~! R4 n( G/ {) F5 s! d
/*******************************************************************************************- X' l: N4 ?: g/ h$ i7 S% c
* UART发送一字节
$ i6 H" z: D) ~' h0 s- O/*******************************************************************************************/
9 q9 R7 q0 q3 V# z, ?! u+ s8 r- X( d3 Ivoid UART_Send_Byte(uint8 dat)( s6 O6 U" H$ f! w# }
{) o) t, v4 v# C; X/ {* M/ _
SBUF = dat;4 k5 b& m3 S( e1 V t m
while (TI == 0);+ z0 I+ E4 ?% ~9 R# ?5 F
TI = 0;5 Q2 h$ r3 T; J+ M" R
}
6 j9 q& }! n |/ l+ t/*******************************************************************************************" ~4 p$ m. \7 c: g' P0 j
* 获取低电平时间/
3 t! G; e. Q) l/*******************************************************************************************/
6 h6 x5 [+ [6 n$ E) Runsigned int Ir_Get_Low() $ R! i0 A4 H1 e5 |2 w4 `
{. b* X& `4 t- M' z! j; F4 k( J2 r
TL0 = 0;
9 D v+ D$ J& M) C# Q6 k* yTH0 = 0;3 @# H9 F d8 r) H, g6 H
TR0 = 1;0 S& u8 {- g0 [. d: E* Q$ Q" g
while (!Ir_Pin && (TH0 & 0x80)==0);//一直计到Ir_Pin不等0与计到大于1.085*32768=35553.28us9 W' Q6 u9 u$ `# K6 c
TR0 = 0;
6 O+ W; E) D4 W' Q/ F+ |return (TH0 * 256 + TL0); //返回T1 高八位和低八位计数值
) ^2 j% f: Q/ y4 a1 o9 Z}
: ]/ a, ^2 R* ^/*******************************************************************************************
. B4 R& s$ i& q2 f* 获取高电平时间
: ^' p! ~- b0 A2 O# x( V% r- E6 i6 q. h/*******************************************************************************************/
% L; \5 g# O" u" nunsigned int Ir_Get_High()
1 k/ y; o3 a, ^2 ?- s) _# s{* [; Z! G n0 `$ ~
TL0 = 0;# r5 v0 z; R; }3 [+ x) W7 p/ ?8 a
TH0 = 0;
0 s8 N9 P- ^- _3 R# ETR0 = 1;
~( D' y- ^7 @& T/ J( [& W- ]! G2 I. ^# V! V
8 |8 y: Q. f3 F1 D+ E5 N6 d
4 k/ a' L4 b+ H% C6 _+ L$ w- M
( M* ], e, e8 F" `. u
1 H1 S8 d! v% ^ B( ]- R! K
0 b( l' h9 m3 u) `: ?; Q' q( F…………限于本文篇幅 余下代码请从论坛下载附件…………0 n' Y9 g' R6 g T
$ p: f! f; n( ^9 T' m. A
# [4 U- K$ \; g1 X2 [+ I下载:' j9 A+ y' O7 z8 v: Q
( o$ r; _& P( i$ y1 F. i S. z' `# {" y, v$ L
|
|