|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机用的是11.0592M晶振,无线接收板供电独立输出端经NPN管倒向输出给单片机。适当改一下可以适合2262的解码。有不合理的地方希望大家帮忙改一下!: A* f( v. m8 {, O
: W: R) M( ]% u) q+ d9 C# e/ X
# i! k% e) ]8 l* h5 } ! J) |5 X, b+ u$ O
L( s5 Q( x; i4 V0 ~- `2 u 6 J4 v' j! M; [0 Z4 F
8 P& N3 r/ N/ ]9 V
' x1 g2 U4 j: S5 l- x
% r" A' ] C B/ p" o W
; I: V1 ?5 B! n! r s- v' S+ B#include<reg52.h>
: L h; S, X8 V#include<intrins.h>
7 X' J b/ D+ B3 q: `$ Q#define uchar unsigned char
u* l2 \4 c4 y9 Q# k2 ?; B) w#define uint unsigned int( {9 @% D2 n, M
uchar a,c,ma1,ma2,ma3,duan1,duan2,duan3,ma;
* P# C& T! W) V3 v! G+ {uint d,b,e;& b5 b% Q( I& V* g3 z! l: g0 E
sbit sr=P2^1; //信号输入端口,接收板输出的高电平信号经NPN三极管倒向后从此脚输入,因此变成低电平有效9 H. T! h" F) D4 A# I z
sbit di=P2^3;//是外接蜂鸣器的端口: H( u# ?& E, I" d) @
void delay(uint y)7 W4 |7 J) \' c$ A
{uint v,x;5 b' ^, h* o7 F9 j( f
for(v=0;v<y;v++){
& x7 E% c; D+ d& hfor(x=0;x<10;x++), L9 H7 B. C' B7 G8 u, W* ?4 K4 m9 y
;}}///////////////////////////////////////////////////////////////2 o% d; q _& l& E) E9 k
void jiema(void)//振荡电阻560K一个码的周期是2.44ms,同步码高电平0.61ms低电平18.91ms
5 m" D# S# t5 c& i! j. C$ T{ // : O' ]/ J. m7 y* H' ?3 T" d
up: while(sr==1); //等待低电平的到来
/ F- W. M2 }8 b c d=0;a=0;. B4 g5 j" ~1 x* }5 \' c
if(sr==0){while(d<105){ //第二次同步码检测0 M+ o% D" \. U9 K5 \# o' c, \
if(sr==0) d=0;
; ?; T; W8 [$ x, d& N0 S# F8 M2 } d++;delay(1);if(d>135) goto up;}//同步码符合条件就执行下面解码程序) [4 e! V5 U# u3 T
for(a=0;a<24;a++)//一共24个码就解24次
4 O3 g/ h9 i1 Y; C( N& X$ z { b=0; while(sr==1);
4 F" r* z, Z( s: w2 R; r while(sr==0){b++;_nop_();_nop_();_nop_();_nop_();_nop_();, J) q0 U4 O, O6 C2 }; W
_nop_();_nop_();_nop_();_nop_();_nop_();; c1 S# M0 F+ _% V! R
_nop_();_nop_();_nop_();_nop_();_nop_();# T1 T) L( {) a6 a: @2 ?
_nop_();_nop_();_nop_();_nop_();_nop_();} //码宽检测
& Z' \1 D' g5 ] if(b>12&&b<35){ ma=0;b=0;}// 符合规定脉宽的是低电平# ~$ U% m+ n* D% I
else if(b>40&&b<70){ma=1;b=0;} //符合规定脉宽的是高电平
7 E# |/ W, p$ J |/ _- L else goto up;//不符合高低电平的脉宽就重新寻找同步码
; j$ h2 |* M" t" N9 E& K if(a<8){duan1=(duan1<<1)|ma;continue;} //高8位存放在duan1;
& T* H' b& D4 K7 \ if((a>7)&&(a<16)){duan2=(duan2<<1)|ma;continue;}//中8位放在duan2% R4 ?' z( k7 z
if(a>15){duan3=(duan3<<1)|ma;continue;}// 低8位放在duan3,这样便于24c02存储器的存储 K( J/ P4 Q9 u: b
} } } ///////////////////////////////////////////////////////// ( J3 }2 M, u* {! W
void main(); n7 z2 p5 n' k, ^% _! U" y
{ while(1)
2 r! L0 e5 c1 _: O { 9 r5 F5 X. N; a1 g( k5 D$ |
to: if(!sr)( p, s6 D+ b! K* c F0 G
{while(!sr);c=0; // 等待高电平的到来
3 \% p# k7 Q( N L. l2 X if(sr==1||e<105){if(sr==0) e=0; // 第一次同步码检测,检测高电平的脉冲宽度
' C/ S% O4 m: {" x0 i$ m# R# V e++;delay(1);if(e>135) goto to;} //不是规定脉宽就返回
9 B- K( Z# X8 d) iit:duan1=0;duan2=0;duan3=0;
! [- K& P) F. w/ c$ D jiema();; a" m0 B" v+ y7 w7 h
ma1=duan1;ma2=duan2;ma3=duan3;% j3 \& c) j" S% ^; U
duan1=0;duan2=0;duan3=0;' i. P: ]/ `3 a
jiema();
# l& B Y) |7 \- vif((ma1==duan1)&&(ma2==duan2)&&(ma3==duan3))
. E( Y9 A i& Z- }/ j0 |4 f{c=ma3%16;di=0;delay(1000);di=1;}//如果两次码相同就解出低四位的数据码,蜂鸣器发声一次
; i3 w% C, ]+ U Q) j w: e* Lelse goto it;
\/ P0 ?" q( f8 }6 ^" z4 I/ Dif(c==1) P1=0x55;//P1口外接发光二级管显示受数据码控制
: k% A! {, _/ O/ R- T9 fif(c==2) P1=0xaa;5 H, {) w' r0 n4 e1 b# Q2 G: x1 ?
if(c==4) P1=0xf0;
k8 J$ L$ Q E5 b4 O" S+ D) qif(c==8) P1=0x0f;
5 s& c, T3 f' I- S8 s, Y4 y} }} |
 手机扫码浏览
|