单片机大作业-简易红外遥控小车设计_第1页
单片机大作业-简易红外遥控小车设计_第2页
单片机大作业-简易红外遥控小车设计_第3页
单片机大作业-简易红外遥控小车设计_第4页
单片机大作业-简易红外遥控小车设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

安阳工学院

《单片机基础》课程大作业

《简易红外遥控小车设计》

院系:计算机科学与信息工程学院

专业班级:

姓名:

学号:

成绩(教师填写)

20年月日

一、课题名称:

《简易红外遥控小车设计》

二、方法步骤:

1.总体设计

主要设计思想:

本设计利用通用红外遥控器控制小车后轮两个电机的动作来

实现小车走、停、转弯等功能。并通过软件控制小车方向和PWM调速

小车的转速。具体思想如下:通过外部中断1接收红外信息,并通过

软件解码,根据接收信息的不同通过PWM和控制函数做出响应,并且

在二极管上面反映出来,所以说二极管充当车灯和档位指示灯的作

用,且每次接收信号,蜂鸣器鸣叫用来显示有信号的传入。

主要设计任务:

红外遥控小车的设计主要分两大步,第一是硬件实现的设计,

第二是单片机软件实现的设计。

(1)其中硬件又分几块:51单片机最小系统板,小型直流电机

(3〜9V)驱动电路模块,红外接收模块(已集成在最小系统板),蜂

鸣器和二极管显示模块,车体。

(2)软件比较简单,但也分了几块:外部中断红外接收解码模

块,PWM电机调速模块,主程序。

2.设计任务与要求

⑴主要完成的性能指标

本小车设计完成后能够实现如下功能:前进、后退、左前传(以

做轮胎为轴转弯)、右前转、左圆转(以车体为轴进行转弯)、右

圆转、左倒转、右倒转、紧急暂停、123级加减速。

(2)器件选择

本设计主要用到以下材料:51单片机一个、通用遥控器一

个、红外接收头一个、5号电池7节、车体(双电机+万向轮)一套、

蜂鸣器一个、杜邦线若干、二极管9个、L9110s电机驱动芯片2个、其

他电阻电容若干

(3)单片机选择

本设计用到宏晶公司的STC——125A32Ad单片机

(4)说明总体框图(可选)

(5)画出总线路图(硬件)

UI8051+"0'

P101

PIOwc

39P0

PllPOO

38Pi

P12P01

37P0

P13P02

36P0

P14PO3

FIF~535P0

P15PN

P16^734P0

P16P05

33P0

P17P06

RST932P0

RESET_P07

31

RXDP30EA-^P

RT1T30

IXDP31ALEP

P3212n929

INIDP32°Q28P2

P3313SPE27

--INR.T33

PS414p2627P2

TOP34

P3515p2526Pl

T1/P35

P为16p2425Pl

-7座P36

P3717p2324P2

C成37

X:1Sp2223P2

X>

XI19p2122P2

XIp

工o21P2

f——(W

*cn

2PF22PF

51单片机最小系统如右:

红外电路图如下:

3红外(HS0038)

CON2

L9110s电机驱动电路如下:

vcc

正转信号

直流电机

反转信号

L9110s电气特性如下:

符号参数范围

最小典型最大IAIBOAOB

VCC电源电压2.5612VHLHL

Idd静态电流—02uALHLH

lin操作电流200350500uALLLL

IC持续输出电流750800850mAHHLL

IMax电流峰值—15002000mA

实现后的实物图如下:

(6)流程图及程序清单

〃***************简易红外小车完全调试程序

〃***************版本V02

〃***************2。12年5月13日10,49:26

〃***************修改优化时间2012年5月14日0:02:21

〃***************再次修改时间2012年5月18日20:49:28

〃***************Madeby

#include<reg52.h>

#include,'intrins.h,,

#defineuintunsignedint

#defineucharunsignedchar

sbitMH=PlA0;//电机1接口

sbitM12=PlAl;

sbitM21=P1A2;//电机2接口

sbitM22=P1A3;

sbitLED0=P0A0;//左前灯

sbitLEDl=P0Al;〃档1灯

sbitLED2=P0A2;//档2灯

sbitLED3=P0八3;//档3灯

sbitLED4=P0A4;〃紧急灯

sbitLED5=P0A5;〃右前灯

sbitLED6=P0A6;〃左后灯

sbitLED7=P0A7;〃右后灯

sbitF=PU4;〃蜂鸣器接口

ucharTEMPl=O;〃全局变量,用于存放红外返回值-用于PWM占空比的控制

ucharTEMP2=10;//用于方向的控制

sbitIntO=P3A3;//红外接收采用外部中断1

uchardatabus[7];〃用于红外接收存放数据

〃延时函数

voiddelayl(uintxms)//delay0.1ms

uinti,j;

for(i=xms;i>0;i—)

for(j=13;j>0;j-);

)

〃********************接受解码函数

ucharRec()

uchartemp=0;〃函数内部临时变量,用于返回函数值

uinti=0;//用于存放数据的临时变量

uintj=0;

uintm=0;//局部计数临时变量

uintn=0;//局部计数临时变量

uintk=0;//局部计数临时变量

EX1=O;//关外部中断1,以防再次外部1中断的介入

while(!IntO)//用于计时前9Ms低电平的引导码

delayl(l);

m++;//计数引导码的长度

)

if(m<=60)//50,可变,大概数,m应该在90左右,如果引导

码时间太小(如<50),就表示

〃此次接收有误,返回0

return0;//

while(IntO)〃用于计时4.5ms高电平的引导码

(

delayl(l);

n++;〃计时高电平

if(n<=30)〃20大概值,应该在45左右,如果太小或太大,

都有问题

return0;

〃当上面的两步都完成时,表示9ms低电平,4.5ms高电平的引导码验证

完毕

〃可进行下步接收数据工作。后面有32位高低电平组成的编码分为:系统

码1,系统码2,数据码和数据反码

〃其中前16位,为用户识别码(系统码1和2)用于区别不同的电器,因为

使用的通用遥控器和接收器所以

〃不用关心前16位。

Mll=M12=M21=M22=0;〃进入中断,停止电机,防止电机颤抖

for(i=0;i<4;i++)//4组接收

for(j=0;j<8;j++)//每组8个高低信号

(

〃数据0由0.56ms低+0.56ms高组成即1:1

〃数据1由0.56ms低+1.655ms高组成1:3

while(!IntO)〃过滤数据的低位0.56ms低电平

(

delay1(1);

}

while(IntO)//进入高电平计时

(

delayl(l);

k++;//k计时每次的高电平

)

databus[i]=databus[i]»1;//数据接收数组首先默认接收

为0信号,即databus[i]第7位移入0

if(k>=10)//而后,判断刚才接收到的数据是否

为1,因为1的高点平持续1.655ms

〃低电平持续0.56ms,所以只要k大于10,

就能确定为1

(

databus[i]=databus[i]10x80;//若为1,把第8位

置1

}

k=0;〃把k的值重新置零

);

if(databus[2]!=~databus[3])//2和3组数据为反码关系。所以判断

它们是否相反,来确定接收数据

〃是否正确

return0;

temp=databus[2];//返回赋值

returntemp;//

)

〃**********红外接受中断服务函数,+接受编码TEMPI,TEMP2

voidintO()interrupt2

{

uchartemp;//临时存放红外接收函数返回值

uinti=0;//计数临时变量

LED4=1;〃(因紧急灯是闪烁的每次中断时结果不一样,为保证效

果)先灭紧急指示灯

temp=Rec();//红外函数返回赋值

switch(temp)//对返回的数据进行编码,方便后面的操作

{

caseOxOd:

(

TEMP1=O;//TEMPI,编码用作,PWM参数,全局变量,

LED1=LED2=LED3=1;〃对应的指示灯状态

break;

)

case0x0c:

(

TEMP1=1;

LED1=0;

LED2=LED3=1;

break;

)

case0x18:

(

TEMP1=2;

LED1=LED3=1;〃2档

LED2=0;

break;

)

case0x5e:

(

TEMP1=3;〃TEMP1用于控制PWM占空比

LED3=0;

LED1=LED2=1;

break;

)

case0x40:

TEMP2=0;〃紧急状态(暂停)。TEMP2用于控制电机,暂停,前进,

左右转,

break;

)

case0x46:

(

TEMP2=1;〃前进

LED0=LED5=0;〃指示灯设置

LED6=LED7=1;

break;

)

case0x44:

(

TEMP2=2;〃左前转

LED0=0;

LED5=1;

LED6=LED7=1;

break;

)

case0x43:

(

TEMP2=3;〃右前转

LED5=0;

LED0=l;

LED6=LED7=1;

break;

)

case0x15:

(

TEMP2=4;//倒车状态

LED6=LED7=0;〃67为倒车指示灯

LED0=LED5=l;

break;

)

case0x07:

(

TEMP2=5;〃左后转

LED6=0;

LED7=LED0=LED5=1;

break;

)

case0x09:

TEMP2=6;〃右后转

LED7=0;

LED6=LED0=LED5=1;

break;

)

case0x45:

(

TEMP2=7;〃左园转

LED0=LED7=0;

LED5=LED6=1;

break;

)

case0x47:

{

TEMP2=8;〃右园转

LED5=LED6=0;

LED0=LED7=l;

break;

)

)

〃每次接受红外,蜂鸣器蜂鸣一次

F=l;

delayl(300);

F=0;

EA=1;//开总中断

EX1=1;//开外1中断

rri=i;//下降沿触发

)

〃**********电机驱动函数

voidPWM_RUN()

(

uintm=0;//临时计数变量

ucharn=0;//

uinti=0;//

m=TEMPl*100;〃111有0,1,2,3状态,PWM每小时间片为3*100,所以m*100

n=TEMP2;//TEMPI用于控制转速,TEMP2用于控制前后左右

〃对n(TEMP2)进行解码,设置不同的电机工作方式

〃注:暂定M*1=LM*2=0正传,M*l=0,M*2=l倒转,M*l=M*2=0,停止

if(n==0)//紧急状态,

Mll=M12=M21=M22=0;

LED4=~LED4;〃设置紧急灯动作

delayl(lOOO);

)

if(n==l)//ml和m2都前转,前进

Mll=l;

M12=0;

M21=l;

M22=0;

)

if(n==2)//ml停止,m2前转,实现左前转弯

(

Mll=0;

M12=0;

M21=l;

M22=0;

)

if(n==3)//ml前转,m2停止,实现右前转

(

Mll=l;

M12=0;

M21=0;

M22=0;

)

if(n==4)//mlm2倒转,实现倒车

(

Mll=0;

M12=l;

M21=0;

M22=l;

)

if(n==5)//ml停止,m2倒转,实现左后转

(

Mll=0;

M12=0;

M21=0;

M22=l;

)

if(n==6)//ml倒转,m2停止,实现右后转

(

Mll=0;

M12=l;

M21=0;

M22=0;

}

if(n==7)//ml倒传,m2前转,实现左方向,原地打转

(

Mll=0;

M12=l;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论