资源描述
实例制作基于C51的无线遥控玩具汽车
———————————————————————————————— 作者:
———————————————————————————————— 日期:
15
个人收集整理 勿做商业用途
从事无线遥控玩具开发工作多年,开发了很多种类的无线遥控玩具产品.总结了很多工作经验。用的绝大部分IC是TX2C(遥控)和RX2C(接收),其功能分别是:前进,后退,左转,右转.笔者利用工作的空闲时间用AT89C2051单片机编出了跟TX2C和RX2C一样的编解码程序,并成功进行了实际制作.编解码与TX2C和RX2C兼容。现将制作原理图和源程序公开给读者参考学习与制作,相信对初学者有极大的帮助,这也是笔者的心愿!其原理图如下:图2为接收部分,图3为发射部分。源程序和仿真文件见附件.
读者如果想仿制的话,建议RF接收和RF发射部使用市面上成品的315MHz模块,应用起来很方便,这样可以免去调试高频部分。
下面图1是遥控前进部分编码波形:
从编码图1中看出有四个周期一样的同步脉冲,各个功能是按数据脉冲个数的不同实现功能不同的。这样编码有很强的搞干扰能力,也可以应用到其它领域遥控上面去,可以做成遥控飞机,也可以做成遥控船……这要看读者的需要应用了。
具体功能相应编码以下:
前进:同步脉冲+10个数据脉冲
后退:同步脉冲+40个数据脉冲
左转:同步脉冲+64个数据脉冲
右转:同步脉冲+58个数据脉冲
前进+左转:同步脉冲+34个数据脉冲
前进+右转:同步脉冲+28个数据脉冲
后退+左转:同步脉冲+46个数据脉冲
后退+右转:同步脉冲+52个数据脉冲
按键松开时发送2帧停止位:同步脉冲+4个数据脉冲。
接收部分收到的是反相的信号,读者在制作时要注意。
图二(点击放大)
图三
;五功能遥控车发射程序。
;MCU:2051
;OSC:12M
;DATE:08.05。18
;功能:
;前进(F)
;后退(B),
;左转(L),
;右转(R)。
;加速(T)。
;作者:徐增钟
;===================================================================================
KEY EQU P3
DATAOUT BIT P1.0 ;数据输出口.
LED BIT P1。1 ;发射指示灯。
KEYBUF EQU 70H ;键号存放单元。
KEYMASK BIT 01H
KEYFLAG BIT 05H
ORG 0000H
AJMP START
ORG 000BH
AJMP INTTCC
ORG 0030H
;===================================================================================
CLEAR_RAM:
MOV R0,#30H ;从30H单元开始.
MOV R3,#127 ;清除127个单元
NEXT: MOV @R0,#00 ;清除
INC R1 ;
DJNZ R3,NEXT ;127个单元清完?;
RET
;==================================================================================
;程序初始化;
BEGIN:
MOV SP,#50H ;
MOV P1,#00H ;
MOV P3,#0FFH ;
MOV TMOD,#01H
MOV TH0,#0B1H
MOV TL0,#0E0H
SETB TR0
SETB EA
SETB ET0
CLR KEYFLAG
SETB KEYMASK
RET
;===================================================================================
START:
CALL CLEAR_RAM ;清除RAM
CALL BEGIN ;程序初始化;
LOOP:
CALL KEYON ;调用KEYSCAN
AJMP LOOP
NOP
NOP
NOP
AJMP START
;===================================================================================
INTTCC:
MOV TH0,#0B1H
MOV TL0,#0E0H
SETB KEYFLAG
RETI
;===================================================================================
KEYON:
MOV A,KEY
CJNE A,#0FFH,KEYSEND
JB KEYMASK,ET
SETB KEYMASK
CLR LED
MOV R5,#2
X2: MOV R3,#4
CALL SEND
DJNZ R5,X2
SETB DATAOUT
CALL DY5MS
MOV P1,#00
ET:
RET
;====================================================================================
KEYSEND:
SETB LED
CLR KEYMASK
CJNE A,#0DFH,K1
MOV R3,#10 ;发送10个脉冲。
AJMP SEND
RET
K1: CJNE A,#0EFH,K2
MOV R3,#40 ;发送40个脉冲.
AJMP SEND
RET
K2: CJNE A,#0F7H,K3
MOV R3,#64 ;发送64个脉冲。
AJMP SEND
RET
K3: CJNE A,#0FBH,K4
MOV R3,#58 ;发送58个脉冲.
AJMP SEND
RET
K4: CJNE A,#0D7H,K5
MOV R3,#34 ;发送34个脉冲。
AJMP SEND
RET
K5: CJNE A,#0DBH,K6
MOV R3,#28 ;发送28个脉冲。
AJMP SEND
RET
K6: CJNE A,#0E7H,K7
MOV R3,#46 ;发送46个脉冲。
AJMP SEND
RET
K7: CJNE A,#0EBH,K8
MOV R3,#52 ;发送52个脉冲。
AJMP SEND
K8: CJNE A,#0FFH,KEXIT
KEXIT:
RET
;===================================================================================
DOUT:
SETB DATAOUT
CALL DYMS5
CLR DATAOUT
CALL DYMS5
DJNZ R3,DOUT
MOV P2,#00
RET
SEND:
MOV R1,#04
N1: SETB DATAOUT
MOV R4,#255
D1: NOP
NOP
NOP
NOP
DJNZ R4,D1
CLR DATAOUT
CALL DYMS5
DJNZ R1,N1
AJMP DOUT
NOP
NOP
AJMP START
;===================================================================================
DYMS5:
MOV R6,#250
D2:
DJNZ R6,D2
RET
;==================================================================================文档为个人收集整理,来源于网络个人收集整理,勿做商业用途
DY5MS:
MOV R5,#4
D3: MOV R3,#248
DJNZ R3,$
DJNZ R5,D3
RET
;==================================================================================
END
以下是接收部分程序
;遥控车接收程序.
;MCU:AT89C2051
;OSC:12M
;DATE:08。05。18
;接收相应功能:前进,后退,左转,右转。
;E—MAIL:chinameifen@21cn。com
;作者:徐增钟
;=================================================================
IN EQU P3。2 ;RECEIVE
RXMA BIT 05H
;=================================================================
ORG 0000H
AJMP START
ORG 0003H
AJMP INRX
ORG 0030H
;================================================================
CLEAR_RAM:
MOV R1,#30H
MOV R3,#127
NEXT: MOV @R1,#00
INC R1
DJNZ R3,NEXT
RET
;================================================================
START:
MOV SP,#50H
MOV P3,#0FFH ;
MOV P2,#0FFH ;
MOV P1,#00 ;
SETB EA
SETB EX0
CLR RXMA本文为互联网收集,请勿用作商业用途文档为个人收集整理,来源于网络
LOOP:
CALL NORX
AJMP LOOP
;====================================================================
INRX:
CLR EX0
MOV R4,#4 ;同步脉冲。
MOV TMOD,#01H
NX1: MOV TH0,#00 ;计数初值为00.
MOV TL0,#00 ;
SETB TR0
INC1: JNB IN,INC1 ;低电平在此等
CLR TR0
MOV A,TH0
CJNE A,#05H,EXIT
HERE1: JB IN,HERE1 ;等待0.5MS高电平结束。
DJNZ R4,NX1
JNB IN,$
CLR A
RD1: INC A
RD2: JB IN,RD2
MOV R1,#05
RD3: JB IN,RD1
LCALL DYMS5
DJNZ R1,RD3
DEC A
DEC A
DEC A
DEC A
JZ STOP
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
JZ K1
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
JZ FR
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
JZ FL
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
JZ K2
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
JZ BL
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
JZ BR
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
JZ K3
DEC A
DEC A
DEC A
DEC A
DEC A
DEC A
JZ K4
NOP
NOP本文为互联网收集,请勿用作商业用途个人收集整理,勿做商业用途
EXIT: SETB EX0
RETI
STOP: MOV P1,#00
AJMP EXIT
K1:
MOV P1,#00010000B ;F
AJMP EXIT
K2:
MOV P1,#00100000B ;B
AJMP EXIT
K3:
MOV P1,#01000000B ;L
AJMP EXIT
K4:
MOV P1,#10000000B ;R
AJMP EXIT
FR: MOV P1,#10010000B ;F+R
AJMP EXIT
FL:
MOV P1,#01010000B ;F+L
AJMP EXIT
BR:
MOV P1,#10100000B ;B+R
AJMP EXIT
BL:
MOV P1,#01100000B ;B+L
AJMP EXIT
;==============================================================
NORX:
NET:
MOV R1,#200
RX: JNB IN,NET
CALL DY1MS
DJNZ R1,RX
MOV P1,#00
NOSI:
RET
;==============================================================
DYMS5:
MOV R5,#135
DJNZ R5,$
RET
;==============================================================
DY1MS:
MOV R6,#138
D2:
DJNZ R6,D2
RET
;==============================================================
END
展开阅读全文