单片机源程序如下:

#include                //包含51单片机相关的头文件

#define uchar unsigned char

#define uint unsigned int


/*==================

对各个输出端口的定义

占空比的端口定义

====================*/

sbit IN4=P1^3;                          //定义左轮前进  

sbit IN3=P1^2;                          //定义左轮后退  

sbit IN1=P1^0;                          //定义右轮前进  

sbit IN2=P1^1;                                                        //定义右轮后退

sbit ENA=P1^6;                                                     //定义右轮使能

sbit ENB=P1^7;                                                    //定义左轮使能

uint Duty_left;                                                        //定义左轮占空比

uint Duty_right;                                                //定义右轮占空比

uint i;                                                                    //中断中控制占空比变量


/*===========

ms级延时函数

=============*/

void delay(uint n)  

{

    int x,y;

        for(x=n;x>0;x--)

        for(y=115;y>0;y--);

}

/*=======

停止函数

=========*/

void tingzhi()

{

   Duty_left=0;                        //左轮占空比

   Duty_right=0;                //右轮占空比

   IN1=0;                                   

   IN2=0;                                   

   IN3=0;                                 

   IN4=0;


}


/*=======

前进函数

=========*/

void qianjin()

{  

   Duty_left=100;                         //左轮占空比

   IN4=0;

   IN3=1;

   delay(3000);

   ENB=0;

   delay(3000);

   ENB=1;

}





/*============

pwm初始化函数

==============*/

void pwm_init()               

{

    TMOD |= 0x01;        //设置定时器工作方式0x01

    TH0=(65536-1)/256; //取约150HZ,12M晶振,每次定时66us,分100次,

        TL0=(65536-1)%256;        //这样开头定义的变量正好直接表示占空比的数值

        EA=1;                          //打开总中断

        ET0=1;                          //开启定时器0中断

        TR0=1;                          //启动定时器0

}

main()

{       

   pwm_init();

   while(1)

   {

                qianjin();

   }

}

/*========

中断函数

==========*/

void T0_timer() interrupt 1

{

           i++;                 

        if(i<=Duty_right)

          ENA=1;

        else

          ENA=0;

        if(i<=Duty_left)

          ENB=1;

        else

          ENB=0;

          if(i==100)

          {

                  i = 0;

          }

    TH0=(65536-1)/256; //取约150HZ,12M晶振,每次定时66us,分100次,

        TL0=(65536-1)%256;        //这样开头定义的变量正好直接表示占空比的数值       

}


关键字:51单片机  驱动直流电机  可调速 引用地址:51单片机驱动直流电机,测试可用,可调速

上一篇:分享一个STC89C52的头文件
下一篇:51单片机蓝牙点灯程序

推荐阅读

例子:1void UART_Send_Message(u8 *Data,u8 lenth){ while(lenth--) { USART_SendData(USART2, *Data); while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); Data++; }} void main(){ u8 Sendbuf[128]; Sendbuf[0]=0xA0; Sendbuf[1]=0xA0; Sendbuf[2]=0xA0; ...
现在的汽车越来越像一个带有轮子的电脑,操作系统至关重要。这一趋势吸引全球各大科技公司入局,纷纷推出各类车载操作系统,抢占汽车市场。但就在外界都将目光放在谷歌、苹果、华为、BAT等知名企业身上时,往往会忽视另一个玩家——美国电商巨头亚马逊。事实上,亚马逊自2011年起就开始涉足出行领域,先后投资了Uber、Aurora、Rivian等10家共享出行、自动...
  引言  射频识别(RFID)技术近年来在国内外得到了迅速发展。对于需要电池供电的便携式系统,功耗也越来越受到人们的重视。本文将具体阐述基于 MSP430 F2012和CC1100低功耗设计理念的双向有源标签的软硬件实现方法。  低功耗设计  低功耗概述  功耗基本定义为能量消耗的速率,可分为瞬态功耗和平均功耗两类。两者意义不同,有不同的应用背景和...
日前,Vishay Intertechnology, Inc. 推出通过AEC-Q200认证的新系列厚膜片式电阻---RCV-AT e3,工作电压达3 kV,外形尺寸为2010和2512。Vishay Draloric RCV-AT e3系列器件工作电压高,可用来替代多颗标准电阻串联。因此,设计师可节省电动(EV)和混合动力(HEV)汽车逆变器、车载充电器和DC/DC转换器电路板空间,同时减少元件数量,降低加工成本。R...

史海拾趣

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved