当前位置:首页 > 51单片机控制智能小车解析 - 图文
单片机项目实验报告
四、软件设计
开始 N 是否有键按下? Y 检测按下哪个键? S1按下 运行三角形 S2按下 运行圆形 S3按下 运行矩形 S4按下 运行以上3个轨迹 总体流程图 4.1、小车直行设计:
若要求小车直走,这需要给4个电机正转命令。根据L298N芯片手册
EN A(B) H H H L 这里将P1=0xfa。
IN1(IN3) H L 同IN2(IN4) X IN2(IN4) L H 同IN2(IN4) X 电机运行情况 正转 反转 快速停止 停止 4.2、小车转弯设计:
若要求小车转弯,需要给一侧电机正转,一侧电机反转或者不旋转。这样将P1=0xf8
或者P1=0xf9.
第 9 页 共 15 页
单片机项目实验报告
4.3、小车调速设计:
若要求车调速,只需用PWM来控制L298N的ENA和ENB就可以对小车进行调速。这里我
使用定时器T0的工作模式2自动重装。并赋初值 TH0=0xf6;TL0=0xf6; 产生高频脉冲。
C语言源代码实现: #include
#define uchar unsigned char #define uint unsigned int
void trigon(uint ,uint ,uint ,uint ,uint ,uint); void round(uint ,uint);
void rectangle(uint, uint, uint, uint, uint ,uint, uint, uint); void delay(uint k); void PWMA(uchar n); void PWMB(uchar n); uchar keys();
sbit P3_2=P3^2; sbit P3_3=P3^3;
void main() {
uchar key; TMOD=0x12; EA=1;
T
U 第 10 页 共 15 页
单片机项目实验报告
ET0=1; ET1=1; TH0=0xf6; TL0=0xf6;
TH1=(65536-50000)/256; TL1=(65536-50000)%6; TR0=1; TR1=1; P2=0XFF; while(1) {
jump=0; key=keys();
// c稳定运行 d转向 e稳定运行 f转向 g稳定运行 h转向
if(key==0xfe)// c d e f g h
trigon(30,5,30,10,30,16);
if(key==0xfd)
round(13,70);
// c稳定运行 d转向 e稳定运行 f转向 g稳定运行 h转向 i稳
定运行 j转向
if(key==0xfb)// c d e f g h i j
rectangle(30,4,30,4,30,4,30,16);
if(key==0xf8) {
trigon(30,5,30,10,30,16); jump=0; delay(1000); round(13,70); jump=0; delay(1000);
第 11 页 共 15 页
单片机项目实验报告
}
}
}
rectangle(30,4,30,4,30,4,30,16);
void timer0() interrupt 1 { }
void timer1() interrupt 3 { }
void trigon(uint c,uint d,uint e,uint f,uint g,uint h) {
uint aa,bb,cc,dd,ee; aa=c+d; bb=aa+e; cc=bb+f; dd=cc+g; ee=dd+h; delay(3000); num1=0; num0=0;
while(!jump&& key!=0) {
第 12 页 共 15 页
num0++;
num1++;
TH1=(65536-50000)/256; TL1=(65536-50000)%6;
共分享92篇相关文档