基于STC89C51单片机智能小车控制Word文件下载.docx
- 文档编号:19385954
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:28
- 大小:390.21KB
基于STC89C51单片机智能小车控制Word文件下载.docx
《基于STC89C51单片机智能小车控制Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于STC89C51单片机智能小车控制Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。
•单片机C语言的及其设计。
1.4硬件设计
1.4.1电路原理图
(1)数码管显示电路原理图如图1-2所示。
图1-2数码管显示电路原理图
(2)智能小车车轮驱动电路原理图如图1-3所示。
L293D采用16引脚DIP封装,其内部集成了双极型H-桥电路,所有的开量都做成n型。
这种双极型脉冲调宽方式具有很多优点,如电流连续;
电机可四角限运行;
电机停止时有微振电流,起到“动力润滑”作用,消除正反向时的静摩擦死区:
低速平稳性好等。
L293D通过内部逻辑生成使能信号。
H-桥电路的输入量可以用来设置马达转动方向,使能信号可以用于脉宽调整(PWM)。
图1-3智能小车车轮驱动电路原理图
(3)LED指示灯原理图如图1-4所示。
图1-4LED指示灯原理图
(4)红外传感器寻线的原理图如图1-5所示。
图1-5红外传感器寻线的原理图
(5)红外传感避障原理图如图1-6所示。
图1-6红外避障原理图
综上所述,可以设计出STC89C51单片机控制智能小车的最小系统原理图如图1-7所示。
图1-7STC89C51单片机控制智能小车的最小系统原理图
1.4.2原件清单
基于STC89C51单片机智能小车控制系统的原件清单如表1-1所示。
表1-1基于STC89C51单片机智能小车控制系统的原件清单
原件名称
型号
数量
用途
单片机
电容
电解电容
电源VCC
直流电机
三极管
集成块
STC89C51
100uF
30pF
10uF/10V
+5v/1A
L293D
1个
4个
2个
若干
控制核心
晶振电路
复位电路
提供电源
车轮驱动
脉宽调整
晶振
电阻
发光二极管
数码管
蜂鸣器
电位器
11.0592MHZ
1KΩ
0.7V
共阴极
300Ω
直流电机驱动
指示灯
显示数字
数码管限流
1.4.3L293D驱动单片机的原理简介
如图2-6L293D采用16引脚DIP封装,其内部集成了双极型H-桥电路,所有的开量都做成n型。
另外,L293D将2个H-桥电路集成到1片芯片上,这就意味着用1片芯片可以同时控制2个电机。
每1个电机需要3个控制信号EN12、IN1、IN2,其中EN12是使能信号,IN1、IN2为电机转动方向控制信号,IN1、IN2分别为1,0时,电机正转,反之,电机反转。
选用一路PWM连接EN12引脚,通过调整PWM的占空比可以调整电机的转速。
选择一路I/O口,经反向器74HC14分别接IN1和IN2引脚,控制电机的正反转
1.4.4STC89C51单片机管脚图及其功能
(1)STC89C51管脚图如图1-8所示。
图1-8STC89C51管脚图
(2)STC89C51的管脚图功能
如图2-7为STC89C51的引脚功能图,其各个引脚功能概述如下:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
1.5软件设计
1.5.1程序流程图
智能小车控制流程图如图1-9所示。
1.5.2L293D驱动器管脚赋值表
L293D驱动器小车电机转动的管脚图赋值表如表1-2所示。
表1-2L293D驱动器小车电机转动的管脚图赋值表
状态
引脚
停止(K4)
左转(K0)
右转(K1)
前进(K2)
后退(K3)
Out1(P2.0)
1
Out2(P2.1)
Out3(P2.2)
Out4(P2.3)
1.5.3程序清单
相关软件程序清单如下:
(1)智能小车自动寻线软件清单如下:
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitK1=P1^0;
sbitK2=P1^1;
sbitK3=P1^2;
sbitK4=P1^3;
sbitK5=P1^4;
sbitKIN1=P1^5;
sbitKIN2=P1^6;
sbitout1=P2^0;
sbitout2=P2^1;
sbitout3=P2^2;
sbitout4=P2^3;
voiddelay(uintt)//延时程序1
{
ucharj;
while(t--)
{for(j=5;
j>
0;
j--);
}
}
//左转
voidcomeleft()
{uchari;
out1=0;
out2=0;
out3=1;
out4=0;
for(i=0;
i<
10;
i++)
{
out1=!
out1;
delay
(1);
}
//左微转
voidsleft()
5;
//右微转
voidsright()
{uchari;
out1=1;
out3=0;
out3=!
out3;
//右转
voidcomeright()
delay(10);
//前进加速;
voidcomeon()
{out2=0;
out4=0;
out3=1;
//避障原路返回
voidshunback()
{
if((!
KIN1)|(!
KIN2))
{
out1=0;
out2=1;
delay(4000);
comeon();
out2=0;
delay(1000);
delay(2000);
while(K1&
&
K2&
K3&
K4&
K5){comeright();
};
else{;
//循迹
voidscanline()
P1=0XFF;
if(K5==0){comeleft();
elseif(!
K1){comeright();
K4){sleft();
comeon();
K2){sright();
K3){comeon();
else{P2=P2;
voidmain(void)
P2=0XFF;
while
(1)
shunback();
scanline();
}
(2)智能小车避障(悬崖)软件程序清单如下:
/*voidstop()
out2=0;
out3=0;
delay(10);
i++
//后退
voidcomeback()
out4=1;
delay(10000);
voidbxy()
if(!
(K5&
K4))
comeback();
delay(5000);
comeon();
(K1&
2))
out2=1;
K3)
else{comeon();
bxy();
(3)遥控控制小车程序清单如下:
sbitSET1=P2^4;
sbitSET2=P2^5;
sbitSET3=P2^6;
unsignedlongxdatarec_code;
unsignedlongxdatatime_us;
unsignedcharxdatarec_cnt;
unsignedcharxdatakbuf;
ucharsdata;
bitrec_b;
bitkey_save;
bitkeyp;
ucharcodeseg7code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voiddelay(uchart)//延时程序1
{for(j=50;
voidInit()
TMOD=0x09;
//T/C1采用16位定时器/计数器
ET1=1;
//定时器1开中断
TH0=0x00;
TL0=0x00;
ET0=0;
TR0=1;
//定时计数器启动计数
EX0=1;
//外部中断0关中断
EX1=0;
//外中断1关中断
EA=1;
//CPU开中断
voidstop()
delay(200);
out3=1
//避开障碍物
voidshunout()
if(sdata==157){comeon();
rec_code=0;
sdata=0;
elseif(sdata==87){comeback();
elseif(sdata==253){stop();
elseif(sdata==61){comeright();
elseif(sdata==221){comeleft();
voidinter_x0()interrupt0
TR0=0;
time_us=(unsignedlong)(TH0<
<
8)+TL0;
TH0=0;
TL0=0;
if(time_us>
3800&
time_us<
4500)
rec_cnt=0;
rec_code=0;
elseif(time_us>
300&
700)
rec_cnt++;
rec_code=rec_code<
1;
//rec_code=rec_code&
0x00000000;
1300&
1750)
rec_code=rec_code|0x00000001;
//IO_buzz=0;
1800&
2200)
rec_code=rec_code;
rec_cnt++;
//
if(rec_cnt>
1)
key_save=1;
if(rec_cnt==32)
rec_b=1;
key_save=0;
voidGetKeyValue()
if(rec_b)
unsignedcharda;
rec_b=0;
kbuf=(rec_code&
0x0000ff00)>
>
8;
da=rec_code&
0x000000ff;
if(kbuf==~da)
sdata=da;
voidmain()
P3=0XFF;
P0=0XFF;
Init();
while
(1)
GetKeyValue();
shunout();
(4)数码管显示软件程序如下:
sbitSET4=P2^7;
ucharcodeseg7code[]={0x3f,0x06,0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STC89C51 单片机 智能 小车 控制