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

📄 main.c

📁 这是我做的一个步进电机测试程序,程序实现了单4步,双4步,8步步进电机驱动,并可改变旋转方向,改变每步时长,是比较完善的步进电机驱动.
💻 C
字号:

//步进电机驱动测试程序,用于测试步进电机每相最短时间和最长时间,单位毫秒
//硬件环境:Atmel 89C2051 晶振频率 7.3728MHz
//硬件系统描述:   步进电机采用TOSHIBA 的 ULN2803A驱动,
//                步进电机 1  -- 电源
//                         2  -- 1相 -- ULN2803 14脚 -- 5脚    -- 2051 19脚 P1.7
//                         3  -- 2相 -- ULN2803 13脚 -- 6脚    -- 2051 18脚 P1.6
//                         4  -- 3相 -- ULN2803 12脚 -- 7脚    -- 2051 17脚 P1.5
//                         5  -- 4相 -- ULN2803 11脚 -- 8脚    -- 2051 16脚 P1.4
//                按键:   2051 6脚 P3.2 INT0 --  增加步长 UP_KEY
//                         2051 7脚 P3.3 INT1 --  减小步长 DOWN_KEY
//                         2051 9脚 P3.5      --  改变电机旋转方向 DIR_KEY

//设计描述: 定时器0产生驱动电机的脉冲,宽度可以通过2个按键以SETP_LEN为步长改变,电机旋转方向可按DIR_KEY来切换.

#define STEP_LEN    50         //步进电机驱动脉冲改变步长

#define uchar unsigned char //定义一下方便使用
#define uint  unsigned int
#define ulong unsigned long
#include <reg52.h>     //包括一个52标准内核的头文件

sbit Phase1 = P1^7;       //步进电机1相
sbit Phase2 = P1^6;       //步进电机2相
sbit Phase3 = P1^5;       //步进电机3相
sbit Phase4 = P1^4;       //步进电机4相

sbit LED    = P1^2;       //定时器指示LED

bit ldelay=0;     //长定时溢出标记,预置是0

uchar TimerCount = 0;     //定时溢出计数器

void main(void)          // 主程序
{
    //Timer0采用模式1,即16位计数器,时钟模式,10ms中断一次
    TMOD = 0x01;
    //10ms
//    TH0 = 0xE8;
//    TL0 = 0x0;
    //100ms
    TH0 = 0x10;
    TL0 = 0x0;

    EA = 1;          //开中断
    ET0 = 1;         //T/C0中断开放
    TR0 = 1;         //T/C0启动定时
    LED = 0;         //点亮LED
    while (1);       //死循环
}
//定时器0中断,根据pluse_width产生驱动电机的脉冲
void timer0() interrupt 1 using 1  
{
    
    //Timer0采用模式1,即16位计数器,时钟模式,10ms中断一次
    //10ms
//    TH0 = 0xE8;
//    TL0 = 0x0;
    //100ms
    TH0 = 0x10;
    TL0 = 0x0;

    if (++TimerCount >= 10 )
    {
        TimerCount = 0;
        LED = !LED;         //LED取反
    }
} 

⌨️ 快捷键说明

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