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

51单片机直流电机调速源程序

发布时间:2021-04-26 发布时间:
|

单片机源程序如下:

#include  "reg52.h"

sbit IN1=P1^1;

sbit IN2=P1^2;

sbit IN3=P1^3;

sbit IN4=P1^4;

unsigned char pwm_val_right=0;

unsigned char push_val_right=0;

unsigned int time=0;

unsigned char pwm_val_left=0;

unsigned char push_val_left=0;

bit right_moto_stop=1;

sbit right_moto_pwm=P2^0;

bit left_moto_stop=1;

sbit left_moto_pwm=P2^1;


void delay(unsigned int i)

{

unsigned int k;

        for(k=0;k<7000;k++)

        for(i=0;k

}

void pwm_out_right_moto(void)

{

        if(right_moto_stop)

  {

                if(pwm_val_right<=push_val_right)

                        right_moto_pwm=1;

                else

                        right_moto_pwm=0;

                if(pwm_val_right>=100)

                        pwm_val_right=0;

        }

        else right_moto_pwm=0;

}


void pwm_out_left_moto(void)

{

        if(left_moto_stop)

  {

                if(pwm_val_left<=push_val_left)

                        left_moto_pwm=1;

                else

                        left_moto_pwm=0;

                if(pwm_val_left>=100)

                        pwm_val_left=0;

        }

        else right_moto_pwm=0;

}

void time0_init()

{

TMOD=0X01;

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

TR0=1;

ET0=1;

EA=1;

}

void forward(unsigned char i)

{               

push_val_right=i;

push_val_left=i;

        IN1=0;

        IN2=1;

        IN3=1;

        IN4=0;

}

void forward1(unsigned char l)

{               

push_val_right=l;

push_val_left=l;

        IN1=1;

        IN2=0;

        IN3=0;

        IN4=1;

}


void time0()interrupt 1

{

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

ET0=1;

TR0=1;

        time++;

        pwm_val_right++;

        pwm_out_right_moto();

        pwm_val_left++;

        pwm_out_left_moto();

}

void main()

{

        unsigned char i,k;

time0_init();

        while(1)

        {

for(i=10;i<100;i++)

                {

                forward(i);

                delay(10000);

                }

        for(k=100;k<=100;k--)

                {

                forward(k);

                delay(10000);

                }

for(i=10;i<100;i++)

                {

                forward1(i);

                delay(10000);

                }                

        for(k=100;k<=100;k--)

                {

                forward1(k);

                delay(10000);

                }                

}

}


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

热门文章 更多
Keil(MDK-ARM)系列教程(七)_菜单