电动智能小车毕业设计论文(编辑修改稿)内容摘要:

钟引脚 sbit sen1ld = P3^4。 // 74165 锁存引脚 17 // 循迹传感器输出 sbit sen2dat = P3^2。 // 74165 数据引脚 sbit sen2clk = P3^3。 // 74165 时钟引脚 sbit sen2ld = P3^5。 // 74165 锁存引脚 // 左侧电机 sbit IN1 = P1^2。 sbit IN2 = P1^3。 sbit PWM0 = P1^6。 // 右侧电机 sbit IN3 = P1^4。 sbit IN4 = P1^5。 sbit PWM1 = P1^7。 // 声光提示 sbit beep = P1^7。 // 声音提示 sbit led = P1^6。 // 发光提示 /*********************变量定义 **********************/ bit OutFlag=0。 bit h0,h1,h2,h3,h4,h5。 // 障碍物检测标志位 uchar hped,xped。 uchar MeaTime=0。 uchar MeaMs=0。 uchar disbuffer[2]。 uint time1=20200,time2=20200。 //8254 计数器 0、计数器 1初值 uchar code DispTAB[] = {0123456789ABCDEF }。 //显示代码 uchar code Tab1[] = {Position:}。 uchar code Tab2[] = {Time:}。 uchar code Tab3[] = {AB}。 uchar code Tab4[] = {BC}。 /*********************函数声明 **********************/ uchar Sen1In(void)。 // 避障传感器信号 uchar Sen2In(void)。 // 循迹传感器信号 void initPWM(void)。 // 初始化 PWM占空比 void Delay1ms(uint i)。 // 延时程序 void Leftself(void)。 // 原地左转 void Rightself(void)。 // 原地右转 18 void Left(void)。 // 左转 void Right(void)。 // 右转 void Forward(void)。 // 前进 void Brake(void)。 // 停车 void Track(void)。 // 循迹程序 void Avoidance(void)。 // 避障程序 void init_T0(void)。 // 初始化 T0 void init_T1(void)。 // 初始化 T1 void initdisp(void)。 进入系统主程序后,首先对定时器 T0, T1进行初始化设置,然后初始化 LCD1602并显示初始信息,启动智能车前进,在循环程序中将调用传感器检测程序调整小车运行状态。 void main(void) { init_T0()。 init_T1()。 Inlt_LCD1602()。 initdisp()。 Forward()。 Delay1ms(5000)。 while (1) { Avoidance()。 Delay1ms(200)。 } } 智能车运动控制程序主要实现控制小车原地右转,左转,右转,前进,停止等动作。 该部分程序由以下程序构成,如表 115 所示。 19 表 115 智能车运动控制程序及功能表 序号 函数名 功能 序号 函数名 功能 1 Leftself() 原地左转程序 4 Right() 右转程序 2 Rightself() 原地右转程序 5 Forward() 前进程序 3 Left() 左转程序 6 Brake() 停止程序 下面对这几个程序加以详细介绍。 ( 1) Leftself():原地左转程序 通过调用 Leftself()程序控制智能车实现原地左转,该过程中智能车的左右两侧电动机会实现同转速反向运动。 void Leftself(void) { IN1 = 1。 IN2 = 0。 IN3 = 0。 IN4 = 1。 } ( 2) Rightself():原地右转程序 通过调用 Rightself()程序控制智能车实现原地右转,本过程中智能车的左右两侧电动机也会实现同转速反向运动。 void Rightself(void) { IN1 = 0。 IN2 = 1。 IN3 = 1。 IN4 = 0。 } ( 3) Left():左转程序 通过调用 Left()程序控制智能车实现左转,本过程中智能车的右侧电动机转动,而左侧电动机停转。 void Left(void) { IN1 = 0。 IN2 = 0。 IN3 = 1。 20 IN4 = 0。 } ( 4) Right():右转程序 通过调用 Right()程序控制智能车实现右转,本过程中智能车的左侧电动机转动,而右侧电动机停转。 void Left(void) { IN1 = 0。 IN2 = 0。 IN3 = 1。 IN4 = 0。 } ( 5) Forward():前进程序 通过调用 Forward()程序控制智能车前进,两侧电动机以同速度运行。 void Forward(void) { IN1 = 1。 IN2 = 0。 IN3 = 1。 IN4 = 0。 } ( 5) Brake():停止程序 通过调用 Brake()程序控制智能车停止,两侧电动机停止运行。 void Brake(void) { IN1 = 1。 IN2 = 1。 IN3 = 1。 IN4 = 1。 } 智能车传感器检测程序主要实现避障传感器的检测,循迹传感器的检测,避障调整程序,循迹调整程序等动作。 该部分程序由以下程序构成,如表 116所示 21 表 116 传感器检测子程序及功能 序号 函数名 功能 序号 函数名 功能 1 Sen1In(): 避障传感器检测程序 3 Track(): 循迹调整程序 2 Sen2In(): 循迹传感器检测程序 4 Avoidance(): 避障调整程序 下面对这几个程序加以详细介绍。 ( 1) Sen1In():避障传感器检测程序 通过 74LS165 将 6 个避障传感器的状态转为串行输出信号送入 51单片机,再由单片机程序屏蔽没用到的前两位,返回检测状态值。 uchar Sen1In(void) { uchar i,temp。 //载入数据 sen1ld=0。 _nop_()。 _nop_()。 sen1ld=1。 //移出数据 for(i=0。 i8。 i++) { temp=1。 sen1clk=0。 if(sen1dat)temp=temp|0x01。 sen1clk=1。 } sen2clk=0。 temp=tempamp。 0x3f。 return(temp)。 } ( 2) Sen2In():循迹传感器检测程序 通过 74LS165 将 8 个避障传感器的状态转为串行输出信号送入 51单片机,该函数返回检测状态值。 uchar Sen2In(void) { uchar i,temp。 22 //载入数据 sen2ld=0。 _nop_()。 _nop_()。 sen2ld=1。 //移出数据 for(i=0。 i8。 i++) { temp=1。 sen2clk=0。 if(sen2dat)temp=temp|0x01。 sen2clk=1。 } sen2clk=0。 return(temp)。 } ( 3) Track():循迹调整程序 读取循迹传感器状态,然后根据该状态判断车体相对于黑线循迹线的位置,判断并调整智能车,使得车体中线沿着轨迹线前进。 void Track(void) { xped=Sen2In()。 switch (~xped) { case 0x80: Leftself()。 for(。 0x18!=~Sen2In()。 )。 Forward()。 break。 case 0xc0: Right()。 for(。 xped==Sen2In()。 )。 Forward()。 break。 case 0x60: 23 Right()。 for(。 xped==Sen2In()。 )。 Forward()。 break。 case 0x40: Right()。 for(。 xped==Sen2In()。 )。 Forward()。 break。 case 0x30: Right()。 for(。 xped==Sen2In()。 )。 Forward()。 break。 case 0x20: Right()。 for(。 xped==Sen2In()。 )。 Forward()。 break。 case 0x18: Forward()。 break。 case 0x0c: Left()。 for(。 xped==Sen2In()。 )。 Forward()。 break。 case 0x08: Left()。 for(。 xped==Sen2In()。 )。 Forward()。 break。 case 0x06: Left()。 for(。 xped==Sen2In()。 )。 24 Forward()。 break。 case 0x04: Left()。 for(。 xped==Sen2In()。 )。 Forward()。 break。 case 0x02: Left()。 for(。 xped==Sen2In()。 )。 Forward()。 break。 case 0x03: Left()。 for(。 xped==Sen2In()。 )。 Forward()。 break。 case 0x01: Rightself()。 for(。 0x18!=~Sen2In()。 )。 Forward()。 break。 case 0x00: Delay1ms(100)。 if(Sen2In()==0xff) { Brake()。 } break。 } } ( 3) Avoidance():循迹调整程序 读取避障传感器状态,然后根据该状态判断车体在迷宫内的位置,判断并调整智能车,使得车体在迷宫内前进。 25 void Avoidance(void) { hped = Sen1In()。 h0 = hpedamp。 0x01。 h1 = hpedamp。 0x02。 h2 = hpedamp。 0x04。 // 右侧标志位 测不到物体时 , 向右转 90 度 h3 = hpedamp。 0x08。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。