这也是上学期的实训,程序不难,难就难在调试,要命哦,轮子的转速差不一样,没办法直行,我调试的时候觉得它简直就是智障小车,它是一辆智障小破车啊,程序+仿真+原理图 我都放在里面了,PCB太丑就算了吧,大家要是做这个项目可供参考呀~~啊啊啊啊,虽然很喜欢这个专业,一个女孩子搞起来遇到问题真的真的很想放弃,让我弱弱的吐槽一波~~~~
制作出来的实物图如下:
电路原理图如下:
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <stc15.h>
- #include "include.h"
- #include "motor.h"
- #include "hj_xj3.h"
- #include "LCD1602.h"
- #define INIT_SPEED 15
- extern uchar numL,numR;
- void init_time();
- void main()
- {
- uchar status_flag=0;//车身状态标志位
- uchar stop_flag=0;//停车标志位
- numL=numR=INIT_SPEED;//初始速度
- ENA=ENB=1;
- IN1=IN3=0;IN2=IN4=0;
- init_time();
- LCD_initial();
- while(1)
- {
- if(stop_flag==1) stop_flag=reset();
- status_flag=Track();
- switch(status_flag)
- {
- case 0: //正常
- LCD_Display("MID");
- line_go(INIT_SPEED);
- delay_ms(100);
- break;
- case 1: //右偏
- LCD_Display("LEFT");
- left_turn(10);//参数为转速差
- delay_ms(100);
- break;
- case 2: //左偏
- LCD_Display("RIGHT");
- right_turn(10); //参数为转速差
- delay_ms(100);
- break;
- case 3: //全白
- LCD_Display("REFECT");
- delay_ms(50);
- break;
- case 5: //停车
- LCD_Display("STOP");
- stop_flag=stop();
- delay_ms(100);
- break;
- default:
- break;
- }
- };
- }
- //***********************
- void init_time()
- {
- TMOD=0X01;
- TH0=(65536-500)/256;
- TL0=(65536-500)%256;
- EA=1;
- ET0=1;
- TR0=1;
- }
- void time0() interrupt 1 using 1
- {
- static uchar num;
- num++;
- if(num==numR) ENA=~ENA;
- if(num==numL) ENB=~ENB;
- if(num==100){ENA=~ENA;ENB=~ENB;num=0;}
- TH0=(65536-500)/256;
- TL0=(65536-500)%256;
- }
复制代码
所有资料51hei提供下载:
智能小车.zip
(1.25 MB, 下载次数: 116)
|