|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机用的是11.0592M晶振,无线接收板供电独立输出端经NPN管倒向输出给单片机。适当改一下可以适合2262的解码。有不合理的地方希望大家帮忙改一下!
0 ^+ Q( T) B$ Z* L D6 W0 [
( |& T [* F3 K 1 Z: b% ]$ f$ B1 M0 B5 N# N7 A
/ p. ~: {. A, ?) S$ [; Y
2 y$ y) b s' T d; P 0 `+ h' D2 N0 j( f- B: V! S8 M
4 v W F) c5 t) p, R) | . X6 h+ a( o. V5 [! s6 A* D" B
0 X: H3 f8 x9 x5 u0 `5 h; v% X$ K
5 q0 m3 E/ M4 S
#include<reg52.h>6 F: L( y4 _' _- F+ @
#include<intrins.h>
, ^ q2 S, K$ @1 O' U9 Z7 T#define uchar unsigned char' F* I) r6 x& i
#define uint unsigned int
1 p0 `# m5 ?) }uchar a,c,ma1,ma2,ma3,duan1,duan2,duan3,ma;+ Q- H* y6 ], Q0 a, K) v; m" f
uint d,b,e;' _) g2 a; i' |
sbit sr=P2^1; //信号输入端口,接收板输出的高电平信号经NPN三极管倒向后从此脚输入,因此变成低电平有效
* i3 _% q* O8 O, ysbit di=P2^3;//是外接蜂鸣器的端口
% f/ q/ b2 N& m0 D, r1 gvoid delay(uint y)5 W$ E" z- c" W4 A# O8 `
{uint v,x;
N" U! e8 N& @* {/ Y: C" [for(v=0;v<y;v++){! E4 u1 S/ Y3 g& l3 k) L$ V
for(x=0;x<10;x++)
. A1 M$ C2 G; f3 w6 C; l;}}///////////////////////////////////////////////////////////////
8 `* I8 A- Y; j( M$ n+ yvoid jiema(void)//振荡电阻560K一个码的周期是2.44ms,同步码高电平0.61ms低电平18.91ms
/ `! `) @6 z7 h |4 r* s( Z; Z{ //
" }, r7 Y* _6 c9 }/ I up: while(sr==1); //等待低电平的到来% \3 P. A7 b3 k8 X- s: J
d=0;a=0;
! V7 N( y1 f+ |' y if(sr==0){while(d<105){ //第二次同步码检测# ]9 M" e; p! Z* N0 B0 `# z3 B
if(sr==0) d=0; 5 ]% W/ h- b" [2 p& }. O
d++;delay(1);if(d>135) goto up;}//同步码符合条件就执行下面解码程序" @8 j% c' `5 g' m3 c* `0 e7 ]
for(a=0;a<24;a++)//一共24个码就解24次
# y4 S, R1 d, r3 F1 m { b=0; while(sr==1); - c; n+ C" w, d8 @# c
while(sr==0){b++;_nop_();_nop_();_nop_();_nop_();_nop_();# o3 c% P$ G1 \0 ]8 z
_nop_();_nop_();_nop_();_nop_();_nop_();6 [8 t2 I- _! c3 u9 Z$ ]( y- n+ Y
_nop_();_nop_();_nop_();_nop_();_nop_();/ x/ r; \- Z. ~- _5 H/ h
_nop_();_nop_();_nop_();_nop_();_nop_();} //码宽检测- @2 k7 r: c' t9 u5 t6 ^
if(b>12&&b<35){ ma=0;b=0;}// 符合规定脉宽的是低电平
) R; N$ s- [- ]1 ?4 [+ P D8 M; } else if(b>40&&b<70){ma=1;b=0;} //符合规定脉宽的是高电平0 `0 a+ r& H: v- _
else goto up;//不符合高低电平的脉宽就重新寻找同步码2 K( M) X8 y$ c( J
if(a<8){duan1=(duan1<<1)|ma;continue;} //高8位存放在duan1;5 y" G/ z" C {8 C7 o, o
if((a>7)&&(a<16)){duan2=(duan2<<1)|ma;continue;}//中8位放在duan2
" h% F* Z6 M; n+ g; A if(a>15){duan3=(duan3<<1)|ma;continue;}// 低8位放在duan3,这样便于24c02存储器的存储
$ b7 F L5 Y4 T Y7 |7 N" z } } } /////////////////////////////////////////////////////////
0 Z+ Y8 O* w4 s% {void main() R% J& o: n/ k) w2 e$ v# k
{ while(1)
; n8 ~ H0 |* U: A0 Q {
" F: J3 B' H, r) m+ c& X) ito: if(!sr)
" F. p) s r S {while(!sr);c=0; // 等待高电平的到来 y$ B8 s% ?9 @$ ?" u8 z% D' o0 X
if(sr==1||e<105){if(sr==0) e=0; // 第一次同步码检测,检测高电平的脉冲宽度1 ^9 p0 W/ F+ U) ~2 J! K
e++;delay(1);if(e>135) goto to;} //不是规定脉宽就返回
) A D+ }2 y& Y; hit:duan1=0;duan2=0;duan3=0;
7 F& G) d j5 W4 y: i* a3 T& l jiema();% \: T3 s9 H. t; M5 t
ma1=duan1;ma2=duan2;ma3=duan3;
& t( L5 `) w6 J duan1=0;duan2=0;duan3=0;+ t; X* n L C5 o
jiema();
' q$ t T6 f' L/ H: G qif((ma1==duan1)&&(ma2==duan2)&&(ma3==duan3))
4 l$ D# K% A0 b; n$ y+ Y{c=ma3%16;di=0;delay(1000);di=1;}//如果两次码相同就解出低四位的数据码,蜂鸣器发声一次
& \! b- t0 U1 ?" N9 I3 Delse goto it;( l' x& o$ _$ Q
if(c==1) P1=0x55;//P1口外接发光二级管显示受数据码控制5 N# V4 {5 A9 a. }6 ^( L; a8 P
if(c==2) P1=0xaa;) {2 [; n# ^1 m% z$ U" R
if(c==4) P1=0xf0;% e6 k8 Z: w0 y8 @
if(c==8) P1=0x0f;
7 h$ f. D( f: [9 |} }} |
 手机扫码浏览
|