📄 main.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 + -