单片机 > 单片机程序设计 > 详情

51单片机驱动直流电机,测试可用,可调速

发布时间:2023-08-16 发布时间:
|

单片机源程序如下:

#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; //这样开头定义的变量正好直接表示占空比的数值

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MSP430低功耗模式-while循环失效