微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机四驱无线遥控小车制作详解

51单片机四驱无线遥控小车制作详解

时间:06-24 来源:互联网 点击:

片和电机连接好后,就是要把线固定好,留出要与单片机连接的8跟控制线。也要注意给无线模块留一个小空间。
无线模块解说:

我们工作室一直使用的是433无线串口模块,具体型号和价格我会附在清单表里,现在我说下它的性能、这种无线模块最大的好处就是有较强的抗干扰性,2个模块直接可以设置ID,只有在一个ID号下的个模块才可以通信,而且可以实现一对多通信;而且这种模块是无需编程的,直接把数据发送到串口即可,模块会自动调制解调,就目前使用的情况而言,还没发现它有调制解调错误的时候,可以说,在数据传输上,这个模块误码率还是极低的,不过需要注意的是,模块2次接收(发送)之间的间隔要大于200ms,这是非常重要的一个参数,如果想做高速数据传输的朋友请慎重选用!(本段文字来源于淘宝睿迪无线模块手册,本人也已经上传,也请读者尊重该店的著作权)。

模块的接线还是蛮简单的,电源2根线,数据线2根:TX(接单片机RX)、RX(接单片机TX),关于无线模块的设置方案,请参考淘宝睿迪无线XL02-232AP1型号的资料手册。模块在通电的一瞬间红灯绿灯同时会闪一下,然后熄灭,此时进入待机状态,模块发送数据时,红灯亮;接收数据时,绿灯亮。

组装好之后的图:

我用是12v蓄电池,接到驱动模块后,模块的5V输出又可以直接给无线模块和最小系统部分供电。虽然看起来比较笨重,但是12V的电源,与一般的小车在速度和耐力上,都有了本质的提高!

遥控部分:

hex代码,仿真提供16进制文件
源代码:

;接收程序

ORG 0 ;程序起始地址

SJMP STAR ;跳转到主程序

ORG 30H ;串口中断地址

sjmp loop ;跳转到中断服务程序

STAR:

MOV SP,#5FH ;设置堆栈

MOV SCON,#50H ;串行数据格式(详情请参考51手册)

MOV TMOD,#20H ;定时器工作方式(请参考51手册)

MOV PCON,#0 ;波特率不倍速(请参考51手册)

MOV TH1,#0fdH ;设置波特率在9600

MOV TL1,#0fdH ;设置波特率在9600

SETB EA ;开起中断

clr ET1 ;关闭定时1中断

SETB ES ;开起串口中断

SETB TR1 ;启动定时器1

mov a,#0 ;

mov p1,a ;设置初始值,即开机p1输出00h小车不动作

main:

mov p1,a ;把a值给p1端口

sjmp main ;无限循环main程序

LOOP:

jnb ri,$ ;判断接收位是否接收完

clr ri ;接收完后清空接收位

mov a,sbuf ;发送的数据给a

reti ;返回后,a的值就会给p1

END

;发送程序

ORG 0 ;程序起始地址

SJMP START ;跳转到主程序

ORG 30H ;串口中断地址

START:

MOV SP,#5FH ;设置堆栈

MOV TMOD,#20H ;定时器工作方式(请参考51手册)

MOV PCON,#0 ;波特率不倍速(请参考51手册)

MOV SCON,#50H ;串行数据格式(详情请参考51手册)

MOV TH1,#0fdH ;设置波特率在9600

MOV TL1,#0fdH

setb EA ;开起中断

clr ET1 ;关闭定时1中断

setb ES ;开起串口中断

SETB TR1 ;启动定时器1

main:

lcall kcs ;调用按键扫描程序

jnz key ;有键按下则跳转到key程序段

sjmp main ;无限循环main程序

kcs:

mov p1,#0ffh ;p1给初值

mov a,p1 ;p1的数值给a

cpl a ;取反a

anl a,#0ffh ;与运算

ret

key:

lcall delay ;软件延时程序,按键去抖

jb acc.0,send1

jb acc.1,send2

jb acc.2,send3

jb acc.3,send4

jb acc.4,send5

ret

DELAY:

MOV R5,#20

D1:MOV R6,#10

D2:MOV R7,#100

DJNZ R7,$

DJNZ R6,D2

DJNZ R5,D1

ret

send1:

mov r1,#10101010b ;前进指令

sjmp send

send2:

mov r1,#01010101b ;后退指令

sjmp send

send3:

mov r1,#01011010b ;左转指令

sjmp send

send4:

mov r1,#10100101b ;右转指令

sjmp send

send5:

mov r1,#00h ;停止指令

sjmp send

send:

MOV SBUF,r1 ;指令给sbuf

JNB TI,$ ;判断是否发送完

reti ;中断返回

END

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top