word格式文档
图4-1 Keil for 51 开发平台截图
KEIL for C51 编译平台对51单片机的器件选型设置。如图4-2所示。
图4-2 MCU选型设置
4.2 系统软件流程
系统软件流程图如图4-3所示。
专业整理
word格式文档
图4-3 系统流程图
4.3 系统软件程序
#include
//宏定义
#define uchar unsigned char //无符号八位字符型数据 #define uint unsigned int //无符号16位整形数据 #define ulong unsigned long //无符号三十二位长整型
//状态定义
uchar go=0xFA; //1111_1010 前进 uchar back=0xF5; //1111_0101 后退 uchar left=0xFE; //1111_1110 左转 uchar right=0xFB; //1111_1011 右转 //延时函数 void delay() { uint i,j;
for(i=0;i<500;i++) for(j=0;j<800;j++); }
专业整理
word格式文档
//启动软件看门狗WDTRST 防止程序跑飞增加系统的稳定性 sfr WDTRST=0xA6; //看门狗寄存器0xA6
//喂狗程序 void FeedDog() {
WDTRST=0x1e; //给寄存器装值 WDTRST=0xe1; }
//定时器初始化程序 void Initial() {
TMOD=0x01; //定时器0工作在方式1 TH0=0xf0; //高八位装值1111——0000 TL0=0xf0; //第八位装值1111_0000 TR0=1; //启动定时器 ET0=1; // 定时器中断允许 EA=1 ; //开放总中断 }
//主程序
//对传感器输入信号进行轮询并决定当前小车行驶方式
专业整理
word格式文档
void main() {
FeedDog(); //刚入主程序喂一次狗
Initial(); //定时器初始化
P1=0xFF; //端口初始化用于控制电机 P3=0xFF; //传感器状态接收
while(1) //对传感器输入信号不断地进行查询
{
if(P3 == 0x7F)//0111_1111
P1=left; //执行左转指令 else if(P3 == 0xBF)//1011_1111 P1=right; //执行右转指令
else
P1=go; //否则就向前行驶 } }
//定时器中断函数执行喂狗定时器重装初值 void timer0() interrupt 1 //使用中断 {
TH0=0xf0;
TL0=0xf0; //定时器重载初值高八位第八位
专业整理
word格式文档
FeedDog();//每过一定时间喂下狗,不然程序会自动复位
4.4 循迹处理软件流程
在白色背景中有一条黑色的线,小车就是要沿着这条黑线行走,通过判断反射式光电传感器所接收到的反射光来判断小车所应行走的方向。以三个反射式光电传感器为例进行说明循线的原理。光电传感器与黑线位置关系示意图如图4-4所示。
图4-4 光电传感器与黑线位置关系示意图
检测环节中一共有6个这样的传感的红外检测单元,实现组合式的控制方向的检测。6个光敏传感电路组合功能见表4-1。
表4-1 光敏传感器状态真值表
小 车 传 感 左X 器 号 右Y 2号 1 1 0 0 状 1号 1 0 1 0 态 正常行驶 右转 左转 脱离引导线 通过循环检测输入端口的检测值,判断目前巡线所处的位置,并且通过控制电机输出来实现左转、右转、直行运动。检测部分函数说明
while(1) //对传感器输入信号不断地进行查询
{
if(P3 == 0x7F)//0111_1111
P1=left; //执行左转指令
专业整理