51单片机控制步进电机的程序

初学单片机:

 

#include <reg52.h>
#include <stdio.h>

code unsigned char tab[]=
            {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char code F_Rotation[4]={0x02,0x04,0x08,0x10};
unsigned char Dis_Shiwei;//定义十位
unsigned char Dis_Gewei; //定义个位

sbit key1=P3^0;//定义按键位置
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;

int Speed=25;
int Th=0xF0;
int Tl=0x00;
//int LoopDJ=0x02;
int i=0;
//int key;

void ViewKey();
void Show();

void Delay(unsigned int cnt)
{
 while(--cnt);
}

void main()
{
   
    TMOD=0x10;
    EA=1;
    ET1=1;
    TR1=1;       //开启定时器1
    while(1)
    {
        ViewKey();
        Show();
    }
}

void Show()      //数码管模拟显示步进电机转速
{
        Dis_Shiwei=tab[Speed/10];//十位显示值处理
        Dis_Gewei=tab[Speed%10]; //个位显示处理
         P0=Dis_Shiwei;//显示十位
          P2=0xFE;
          Delay(300);//短暂延时
          P0=Dis_Gewei; //显示个位
          P2=0xFF;
          Delay(300);
}

void ViewKey()   //独立按键控制功能模块
{
        if(!key1)     //按下按键时电机加速
        {
            if(Speed<80)     
            {
                Speed++;
                if(Tl>=0xF8)
                {
                    Th=Th+0x01;
                    Tl=0x00;
                }
                else
                {
                    Tl=Tl+0x08;
                }
            }
        }
        if(!key2)     //按下按键2时进行加速
        {
            if(Speed>15)
            {
                Speed--;
                if(Tl<0x08)
                {
                    Th=Th-0x01;
                    Tl=0xFF;
                }
                else
                {
                    Tl=Tl-0x08;
                }
            }
        }
        if(!key3)  //电机停止,定时器停止定时
        {
            P1=0xFF;
            TR1=0;
            Speed=0;
        }
        if(!key4)  //电机开启,定时器开始定时
        {
            TR1=1;
            Th=0xF0;
            Tl=0x00;
            Speed=25;
        }
        Delay(3000);
}

void T1INT() interrupt 3   //中断服务程序模块
{
/*    if(P1&0x10!=0x10)
    {
        P1=LoopDJ<<1;
    }
    else
    {
        P1=LoopDJ>>3;
    }
   
    for(i=0;i<4;i++)      */
    if(i>=0&&i<=4)
     {
     P1=F_Rotation[i]; 
     i++;
     }
     else
     {
         i=0;





        P1=F_Rotation[0];
        i++;
     }
    TH1=Th;
    TL1=Tl;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值