⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 danpianji.txt

📁 使用单片机控制步进电机的正反转
💻 TXT
字号:
#include "STC89C5x.H"

#define LedData P2 //数码管段码输出端
#define KeyPort P3 //键码输入端
sbit Ledsw1=P3^2;  //数码管1选通端
sbit Ledsw2=P3^3;  //数码管2选通端

sbit StepDir1=P1^0;
sbit StepClk1=P1^1;
sbit StepFH1=P1^2;

sbit StepDir2=P1^5;
sbit StepClk2=P1^6;
sbit StepFH2=P1^7;

sbit WorkLed1=P1^3;
sbit WorkLed2=P1^4;

unsigned char tmr0_r1,tmr0_r2; //脉冲频率控制变量
unsigned char speed1,speed2;  //步进电机速度档位
unsigned char led1,led2; //数码管显示的数据
unsigned char keyval,oldkeyval,key_r;
unsigned char code LedTab[10]={
	   
 0xC0,/*0*/
	    0xF9,/*1*/
	    0xA4,/*2*/
	    0xB0,/*3*/
	0x99,/*4*/                        0x92,/*5*/
	    0x82,/*6*/
	0xF8,/*7*/                        0x80,/*8*/
	    0x90,/*9*/
	};
void hardinit();
void disp(unsigned char dat1,unsigned char dat2);
void delay1ms(unsigned int time);
void key1();
void key2();
void key3();
void key4();
void main()
{
    hardinit();
    key_r=0;
    while(1)
    {		
        delay1ms(2);
        keyval=(~(KeyPort|0x0f))>>4;  
   if((keyval!=oldkeyval)&&(oldkeyval==0))
    	{
            if(key_r==10)
    		{
            	key_r=0;
if(keyval==(~(KeyPort|0x0f))>>4)
        		{
                    switch(keyval)
        			{
case 0x01:{key1();break;}  //步进电机1的转速
case 0x02:{key2();break;}  //步进电机1的方向
case 0x04:{key3();break;}  //步进电机2的转速
case 0x08:{key4();}    //步进电机2的方向
        			}
        		}
    		}
        	else
    		{
            	key_r++;
    		}
    	}
        keyval=oldkeyval;
        disp(led1,led2);
    }
}
void disp(unsigned char dat1, unsigned char dat2)
{
    LedData=LedTab[dat1];
    Ledsw1=1;
    Ledsw2=0;
    delay1ms(2);
    LedData=LedTab[dat2];
    Ledsw2=1;
    Ledsw1=0;
}
void hardinit()
{
    TMOD=0x01;
    TH0=0xff;  //定时1ms,f=11.0592Mhz
    TL0=0xa3;
    ET0=1;
    EA=1;
    TR0=1;
    StepDir1=0;
    StepFH1=0;
    StepClk1=0;
    StepDir2=0;
    StepFH2=0;
    StepClk2=0;
    speed1=0;
    speed2=0;
    led1=0;
    led2=0;
    WorkLed1=1;  //关工作指示灯1
    WorkLed2=1;  //关工作指示灯2
    tmr0_r1=0;
    tmr0_r2=0;
}
void delay1ms(unsigned int time)  //f=11.0592mhz
{
    unsigned int i;
    for(i=0;i<3*time;i++);
}
void T0_inter() interrupt 1
{
    TH0=0xff;
    TL0=0xa3;
    if(speed1!=0)
    {
        tmr0_r1++;
if(tmr0_r1==(10-speed1)*20){tmr0_r1=0;StepClk1=~StepClk1;}
    }
    else
    {
        tmr0_r1=0;
    }
    if(speed2!=0)
    {
        tmr0_r2++;
if(tmr0_r2==(10-speed2)*20){tmr0_r2=0;StepClk2=~StepClk2;}
 
    }
    else
    {
        tmr0_r2=0;
    }
}
//////////////////////按键事件处理///////////
void key1()
{
    led1++;
    if(led1==10) led1=0;
    if(led1!=0) WorkLed1=0; else WorkLed1=1;
    speed1=led1;
}
void key2()
{
    StepDir1=~StepDir1;
}

void key3()
{
    led2++;
    if(led2==10) led2=0;
    if(led2!=0) WorkLed2=0; else WorkLed2=1;
    speed2=led2;
}
void key4()
{
    StepDir2=~StepDir2;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -