单片机大作业-简易红外遥控小车设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
安阳工学院
《单片机基础》课程大作业
《简易红外遥控小车设计》
院系:计算机科学和信息工程学院
专业班级:
姓名:
学号:
成绩(教师填写)___________
20 年月日
一、课题名称:
《简易红外遥控小车设计》
二、方法步骤:
1.总体设计
主要设计思想:
本设计利用通用红外遥控器控制小车后轮两个电机的动作来实现小车走、停、转弯等功能。并通过软件控制小车方向和PWM调速小车的转速。具体思想如下:通过外部中断1接收红外信息,并通过软件解码,根据接收信息的不同通过PWM和控制函数做出响应,并且在二极管上面反映出来,所以说二极管充当车灯和档位指示灯的作用,且每次接收信号,蜂鸣器鸣叫用来显示有信号的传入。
主要设计任务:
红外遥控小车的设计主要分两大步,第一是硬件实现的设计,
第二是单片机软件实现的设计。
(1)其中硬件又分几块:51单片机最小系统板,小型直流电机(3~9V)驱动电路模块,红外接收模块(已集成在最小系统板),蜂鸣器和二极管显示模块,车体。
(2)软件比较简单,但也分了几块:外部中断红外接收解码模块,PWM电机调速模块,主程序。
2.设计任务和要求
(1)主要完成的性能指标
本小车设计完成后能够实现如下功能:前进、后退、左前传(以做轮胎为轴转弯)、右前转、左圆转(以车体为轴进行转弯)、右圆转、左倒转、右倒转、紧急暂停、123级加减速。
(2)器件选择
本设计主要用到以下材料:51单片机一个、通用遥控器一个、红外接收头一个、5号电池7节、车体(双电机+万向轮)一套、蜂鸣器一个、杜邦线若干、二极管9个、L9110S电机驱动芯片2个、其他电阻电容若干
(3)单片机选择
本设计用到宏晶公司的STC——125A32Ad单片机
(4)说明总体框图(可选)
(5)画出总线路图(硬件)
51单片机最小系统如右:红外电路图如下:
L9110S电机驱动电路如下:
L9110S电气特性如下:
完成后的驱动:
实现后的实物图如下:
(6)流程图及程序清单
//******************************************************************** ***********
//***************简易红外小车完全调试程序
//***************版本V0.2
//***************2012年5月13日10:49:26
//***************修改优化时间2012年5月14日0:02:21
//***************再次修改时间2012年5月18日20:49:28
//***************Made by **************
#include
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
sbit M11=P1^0; // 电机1接口
sbit M12=P1^1;
sbit M21=P1^2; // 电机2接口
sbit M22=P1^3;
sbit LED0=P0^0; // 左前灯
sbit LED1=P0^1; // 档1灯
sbit LED2=P0^2; // 档2灯
sbit LED3=P0^3; // 档3灯
sbit LED4=P0^4; //紧急灯
sbit LED5=P0^5; //右前灯
sbit LED6=P0^6; //左后灯
sbit LED7=P0^7; //右后灯
sbit F=P1^4;//蜂鸣器接口
uchar TEMP1=0;//全局变量,用于存放红外返回值-用于PWM占空比的控制uchar TEMP2=10; // 用于方向的控制
sbit Int0 = P3^3; // 红外接收采用外部中断1
uchar databus[7];//用于红外接收存放数据
//************************************************************
//延时函数
void delay1(uint xms)//delay 0.1ms
{
uint i,j;
for(i=xms;i>0;i--)
for(j=13;j>0;j--);
}
//************************************************************
//********************接受解码函数
uchar Rec()
{
uchar temp=0; //函数内部临时变量,用于返回函数值
uint i=0; // 用于存放数据的临时变量
uint j=0;
uint m=0; // 局部计数临时变量
uint n=0; // 局部计数临时变量
uint k=0; // 局部计数临时变量
EX1=0; // 关外部中断1 ,以防再次外部1中断的介入while(!Int0) //用于计时前9Ms低电平的引导码
{
delay1(1);