单片机避障程序源程序如下:
- /*
- * 作者:赵新
- * 功能:寻迹小车主函数
- * 日期:2015/3/10 进行PWM的修改
- * 说明:编译器会有一些警告,主要是定义的一些函数在这里没有用到,可以注释掉或者写成条件编译 2015/9/15
- */
- #include "reg51.h"
- #include "intrins.h"
- #include "Motor.h"
- #define LEFT 0 //左侧触到黑线
- #define RIGHT 1 //右侧触到黑线
- #define ALL 2 //同时触到黑线
- #define NONE 3 //正常运行没有触到黑线
- u8 i = 0;
- sbit Left = P0^4;
- sbit Right = P0^5;
- sbit PWM_LEFT = P1^0;
- sbit PWM_RIGHT = P1^1;
- u8 JudgeMode();
- //void Delay100ms();
- void main()
- {
- TMOD = 0x01;//定时器0,2工作在模式1 50ms时基
- TH0 = 0xfc;
- TL0 = 0x18;
- ET0 = 1;
- EA = 1;
- TR0 = 1;
- Go();
- while(1)
- {
- switch(JudgeMode())
- {
- case 0: {
- Turn_Left(0);
- //Delay100ms();
- }break;
- case 1: {
- Turn_Right(0);
- //Delay100ms();
- }break;
- case 2: Stop(); break;
- case 3: Go(); break;
- }
- }
- }
- u8 JudgeMode()//用于判断小车此时状态
- {
- if(Left==0&&Right==1)//左侧触到黑线,应向左转
- return LEFT;
- if(Left==1&&Right==0)//右侧触到黑线,应向右转
- return RIGHT;
- if(Left==0&Right==0)//同时触到黑线,应进一步判断是‘T’型还是‘十’型路况
- return ALL;
- if(Left==1&&Right==1)//没有触到黑线,可能正常运行,可能小车跑偏了
- return NONE;
- }
- void Time0(void) interrupt 1 //初定周期200ms,空占比50%
- {
-
- TH0 = 0xfc;
- TL0 = 0x18;
- ++i;
- if(i>=2) //>=2 1/4空占比
- {
- PWM_LEFT = 1;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
循迹避障小车.rar
(58.16 KB, 下载次数: 121)
|