到目前为止, 总算把51单片机过了一遍, 本来暑假就要完成的任务一直拖到了现在。  51学完, 就想着先做点东西, 就从小车开始。

玩小车最重要的是什么? 电机。这个就不用多解释了。 从今天早上开始到现在 总算是知道点皮毛了。 因为有学长做过这东西, 所以做起来也有大概的方向  知道是要搞哪些东西。 现在主要是L298N电机驱动和PWM脉冲控制。

什么是L298N电机驱动? 什么是PWM脉冲?

一开始我一无所知, 实验室里面有L298N驱动 但是我只知道它是L298N驱动, 对于怎么使用却是一点也不知道。 在网上找教程, 淘宝上找资料; 挣扎了一个上午总算是知道了L298N驱动怎么使用, 相应I/O口的含义以及用途。  给一个传送门:我是L298N驱动资料地址。

那什么是PWM呢? PWM是脉冲宽度调制, 在电机方面主要是通过改变占空比来改变电机的转速, 从而实现加速、减速、转弯等基本功能。 什么是占空比? 占空比指的是一个周期内, 高电平占这个周期的比例。  占空比越高, 电压输出就越高, 电机转动的就越快。

在飞思卡尔、stm32 等芯片中有专门的模块用来控制PWM, 但是在51单片机中则没有, 所以需要用到内部的定时器来实现, 相对来说比较麻烦。 关于51单片机输出PWM波可以参考一下这篇文章:如果利用51单片机输出PWM波。 我感觉这个网站对现在我也挺好的。

代码部分:

程序一: 通过P2^0和P2^1口来控制电机的转动, 通过按键来控制电机转动的快慢。

# include <reg52.h>typedef unsigned int u16;
typedef unsigned char u8;sbit PWM1 = P2^0;
sbit PWM2 = P2^1;
sbit key_add = P3^2;
sbit key_less = P3^3;u16 count = 50, time;void init0()
{TMOD = 0x01;  // 方式一TH0 = (65536 - 10)/256;      // 赋初值TL0 = (65536 - 10)%256;TR0 = 1;       // 开启定时器0EA = 1;        // 开启总中断ET0 = 1;       // 定时器0允许中断
}
void delayms(u16 z)   // 延迟函数
{u16 i, j;for (i = z; i > 0; i--)for (j = 110; j > 0; j--);
}
void speed_add()     // 加速函数
{if (key_add == 0){delayms(2);if (key_add == 0){count += 5;  // 通过改变占空比来进行加速}while (!key_add);}
}
void speed_less()   //减速函数
{if (key_less == 0){delayms(2);if (key_less == 0){count -= 5;}while (!key_less);}
}
int main (void)
{init0();while (1){speed_add();speed_less();    }return 0;
}
void T0_inter() interrupt 1
{TR0 = 0;TH0 = (65536 - 10)/256;TL0 = (65536 - 10)%256;TR0 = 1;PWM1 = 0;time ++ ;if (time < count)    // 因为总数是100, 所以可以直接看出占空比是多少。{PWM2 = 1;}else{PWM2 = 0;}if (time >= 100){time = 0;}
}

程序二:

#include<reg52.h>#define uint unsigned int
#define uchar unsigned charuchar time,count=50,flag=1;//低电平的占空比sbit PWM1=P2^0;//PWM 通道 1
sbit PWM2=P2^1;//PWM 通道 2
sbit key_turn=P3^3; //电机换向void delayxms(uint z);
void Motor_turn(void);
void timer0_init(void);void main(void)
{timer0_init();while(1){Motor_turn();}
} void delayxms(uint z)//延时xms程序
{uint x,y;for(y=z;x>0;x--)for(y=110;y>0;y--);
}/***电机正反向控制****/
void Motor_turn(void)
{if(key_turn==0){delayxms(2);//此处时间不能太长,否者会的中断产生冲突if(key_turn==0){flag=~flag;}while(!key_turn);}
}/***********定时器0初始化***********/
void timer0_init(void)
{TMOD=0x01; //定时器0工作于方式1TH0=(65536-10)/256;       // 赋初值TL0=(65536-10)%256;TR0=1;                    // 开启定时器ET0=1;                     // 允许定时器0中断EA=1;                   // 开启总中断
}/**************定时0中断处理******************/
void timer0_int(void) interrupt 1
{TR0=0;//设置定时器初值期间,关闭定时器TH0=(65536-10)/256;TL0=(65536-10)%256;TR0=1;if(flag==1)//电机正转{PWM1=0;time++;if(time<count)   //占空比{PWM2=1;}else{PWM2=0;}if(time>=100){time=0;}}else //电机反转{PWM2=0;time++;if(time<count){PWM1=1;}else{PWM1=0;}if(time>=100){time=0;}}
}

基于51单片机和L298N的小车制作(一)相关推荐

  1. 基于51单片机的无线遥控小车

    基于51单片机的无线遥控小车 材料:STC89C51(1个).nrf2401(2个).L298N(2个).小车底盘.18650(4个).按键若干.蜂鸣器 功能:前进.后退.左转.右转.鸣笛. 程序请移 ...

  2. 51单片机小车的立项书_毕业论文:基于51单片机智能避障小车的设计报告(范文1)...

    <毕业论文:基于51单片机智能避障小车的设计报告.doc>由会员分享,可免费在线阅读全文,更多与<毕业论文:基于51单片机智能避障小车的设计报告>相关文档资源请在帮帮文库(ww ...

  3. 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]

    /***************************************************************/ /*[基于51单片机的无线遥控小车设计] 作者王*茹 */ /*** ...

  4. 基于51单片机的电动智能小车(完整论文)

    基于51单片机的电动智能小车(完整论文): 摘 要 80C51单片机是一款八位单片机,他的易用性和多功能性受到了广大使用者的好评.这里介绍的是如何用80C51单片机来实现长春工业大学的毕业设计,该设计 ...

  5. 基于51单片机的L298N直流电机调速系统Proteus仿真程序

    基于51单片机的L298N直流电机调速系统Proteus仿真程序 本此设计选择STC89C52单片机作为主控芯片,选取带有光电编码器的直流电机作为被控对象,利用单片机的T0定时器产生PWM信号并送到直 ...

  6. 基于51单片机的简易减法器设计制作

    基于C51单片机的简易减法器设计制作 51单片机可实现很多功能,今天笔者介绍一种使用C51编写程序,通过4*4矩阵键盘和8位共阴数码管实现的简易减法器.矩阵键盘以及数码管的原理图如下: (1)4*4矩 ...

  7. 基于51单片机的简易mp3的制作

    基于51单片机的简易mp3制作原理 1.  项目要求 基于AT89C51系列单片机的音乐播放器,采用AT89C51作为主控芯片,采用12864LCD作为液晶显示屏,通过按键实现播放器对应按键功能. 2 ...

  8. 基于51单片机LCD1602电子时钟实物制作

    之前写了51单片机的LCD1602的程序,现在画了电路图,焊接了电路板,做出了基于51单片机LCD1602电子时钟的实物. 注意事项: 焊接过程中,注意提前布局电路. 对应好端口(避免接线错误),我由 ...

  9. c语言智能小车项目的感想,基于51单片机的遥控智能小车实作心得

    两年前学习51单片机时,买了51hei单片机开发板.现在正在学习基于STM32嵌入式系统的FAT32,UGUI和UCOSII操作系统.几乎很少去看51单片机开发板了.某天,宝贝突然说要我给她买一个遥控 ...

最新文章

  1. IDEA打包出现Unable to find main class
  2. GetSafeHdc( )
  3. Linux IPC实践(6) --System V消息队列(3)
  4. MyEclipse web项目导入Eclipse,详细说明
  5. selenium自动化测试_49自动化测试中最常见的Selenium异常
  6. (29)System Verilog进程间同步(旗语semaphore)
  7. WASM 成为 HTML、CSS 与 JS 之后的第 4 门 Web 语言
  8. Linux服务器的eth,linux做服务器安装两块网卡问题????
  9. 语言题库安装包312mb_大学为什么要考取计算机二级,以后很需要,附二级Msoffice题库...
  10. 内存可见性,指令重排序,JIT。。。。。。从一个知乎问题谈起
  11. 大数据思维与数据驱动
  12. 电脑蓝牙音箱,有效解决笔记本电脑连接不了蓝牙音箱的办法
  13. Pubg九月十六日服务器维护,9月16日绝地求生更新时间公告 绝地求生9月16日更新维护...
  14. 玄秘塔碑-唐代柳公权创作书法作品
  15. 建武28a对讲机最大距离_健伍TH-26A,TG-28A,TH-28A和TK208对讲机检修实例说明
  16. 钉钉走出国门,火遍全球离不开它的支持
  17. 有一个一维数组,内放10个学生成绩,写一个函数当主函数调用此函数后嫩求出平均分、最高分和最低分
  18. 打造全栈安全防护体系,华为云等保合规解决方案帮企业30天过等保
  19. 【国际化】vue2+uniapp实现国际化
  20. 十分钟学习nfs服务器

热门文章

  1. uniapp和小程序面试题一
  2. OpenGL自制游戏引擎-HelloTriangle
  3. c语言编程cos近似,C语言7.利用级数展开式计算求cos(x) 的近似值(精度为10-6)
  4. 增益自动切换电压放大电路设计
  5. FutureCompletableFuture
  6. DHCP服务器全局模式
  7. [数据通信与网络]eNSP实验三、四
  8. 计算机教学现状的论文,计算机专业教学现状分析与对策-计算机病毒论文-计算机论文(14页)-原创力文档...
  9. connect函数的第五个参数特点
  10. 浏览器尺寸判断(兼容标准及低版本ie浏览器)