system.c
uchar flag_1ms=0;
void Timer0_Init(void)
{
TH0 = T1MS>>8; //赋初值
TL0 = T1MS; //赋初值
TMOD = 0x01; //设置定时器0用十六位定时器方式
EA = 1; //打开总中断
ET0 = 1; //打开定时器0中断
TR0 = 1; //启动定时器0
}
void Timer0() interrupt 1 //中断号1
{
TH0 = T1MS>>8; //赋初值
TL0 = T1MS; //赋初值
flag_1ms=1;
}
/*void Delay_us(uint xus)
{
for(;xus>0;xus--);
}
void Delay_ms(uint xms)
{
for(;xms>0;xms--)
{
Delay_us(1000);
}
}
*/
void delay(uint i)
{
while(i--);
}
system.h
#include "reg52.h"
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整形
#define FOSC 12000000L //定义晶振频率
#define T1MS (65536-FOSC/12/1000) //定时10毫秒的时候,计数器要写入的值
//void Delay_us(uint xus); //us级延时
//void Delay_ms(uint xms); //ms级延时
void Timer0_Init(void); //定时器初始化
void delay(uint i);
system.h
#include "system.h"
sbit MOTOR_PS = P1^6;
sbit MOTOR_PHASE1 = P1^5;
sbit MOTOR_PHASE2 = P1^4;
sbit MOTOR_I01 = P1^3;
sbit MOTOR_I11 = P1^2;
sbit MOTOR_I02 = P1^1;
sbit MOTOR_I12 = P1^0;
#define Motor_Active() (MOTOR_PS=1)
#define Motor_Sleep() (MOTOR_PS=0)
#define MOTOR_STEP_1() do{MOTOR_PHASE1=1;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define MOTOR_STEP_2() do{MOTOR_PHASE1=0;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define MOTOR_STEP_3() do{MOTOR_PHASE1=0;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define MOTOR_STEP_4() do{MOTOR_PHASE1=1;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define MOTOR_STEP1_4_1() do{MOTOR_PHASE1=1;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=1;MOTOR_I12=1;}while(0)
#define MOTOR_STEP1_4_2() do{MOTOR_PHASE1=1;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=1;}while(0)
#define MOTOR_STEP1_4_3() do{MOTOR_PHASE1=1;MOTOR_PHASE2=1;MOTOR_I01=1;MOTOR_I11=0;MOTOR_I02=1;MOTOR_I12=0;}while(0)
#define MOTOR_STEP1_4_4() do{MOTOR_PHASE1=1;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=1;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define MOTOR_STEP1_4_5() do{MOTOR_PHASE1=0;MOTOR_PHASE2=1;MOTOR_I01=1;MOTOR_I11=1;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define MOTOR_STEP1_4_6() do{MOTOR_PHASE1=0;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=1;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define MOTOR_STEP1_4_7() do{MOTOR_PHASE1=0;MOTOR_PHASE2=1;MOTOR_I01=1;MOTOR_I11=0;MOTOR_I02=1;MOTOR_I12=0;}while(0)
#define MOTOR_STEP1_4_8() do{MOTOR_PHASE1=0;MOTOR_PHASE2=1;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=1;}while(0)
#define MOTOR_STEP1_4_9() do{MOTOR_PHASE1=0;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=1;MOTOR_I12=1;}while(0)
#define MOTOR_STEP1_4_10() do{MOTOR_PHASE1=0;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=1;}while(0)
#define MOTOR_STEP1_4_11() do{MOTOR_PHASE1=0;MOTOR_PHASE2=0;MOTOR_I01=1;MOTOR_I11=0;MOTOR_I02=1;MOTOR_I12=0;}while(0)
#define MOTOR_STEP1_4_12() do{MOTOR_PHASE1=0;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=1;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define MOTOR_STEP1_4_13() do{MOTOR_PHASE1=1;MOTOR_PHASE2=0;MOTOR_I01=1;MOTOR_I11=1;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define MOTOR_STEP1_4_14() do{MOTOR_PHASE1=1;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=1;MOTOR_I02=0;MOTOR_I12=0;}while(0)
#define MOTOR_STEP1_4_15() do{MOTOR_PHASE1=1;MOTOR_PHASE2=0;MOTOR_I01=1;MOTOR_I11=0;MOTOR_I02=1;MOTOR_I12=0;}while(0)
#define MOTOR_STEP1_4_16() do{MOTOR_PHASE1=1;MOTOR_PHASE2=0;MOTOR_I01=0;MOTOR_I11=0;MOTOR_I02=0;MOTOR_I12=1;}while(0)
void Motor_For(void);
void Motor_For1_4(void);
void Motor_Rev1_4(void);
motor.c
#include "motor.h"
void Motor_For(void)
{
static uchar timer=0;
timer++;
switch(timer)
{
case 1: MOTOR_STEP_1();break;
case 2: MOTOR_STEP_2();break;
case 3: MOTOR_STEP_3();break;
case 4: MOTOR_STEP_4();timer=0;break;
}
}
void Motor_For1_4(void)
{
static uchar timer=0;
timer++;
switch(timer)
{
case 1: MOTOR_STEP1_4_1();break;
case 2: MOTOR_STEP1_4_2();break;
case 3: MOTOR_STEP1_4_3();break;
case 4: MOTOR_STEP1_4_4();break;
case 5: MOTOR_STEP1_4_5();break;
case 6: MOTOR_STEP1_4_6();break;
case 7: MOTOR_STEP1_4_7();break;
case 8: MOTOR_STEP1_4_8();break;
case 9: MOTOR_STEP1_4_9();break;
case 10: MOTOR_STEP1_4_10();break;
case 11: MOTOR_STEP1_4_11();break;
case 12: MOTOR_STEP1_4_12();break;
case 13: MOTOR_STEP1_4_13();break;
case 14: MOTOR_STEP1_4_14();break;
case 15: MOTOR_STEP1_4_15();break;
case 16: MOTOR_STEP1_4_16();timer=0;break;
}
}
void Motor_Rev1_4(void)
{
static timer=17;
timer--;
switch(timer)
{
case 1: MOTOR_STEP1_4_1();timer=17;break;
case 2: MOTOR_STEP1_4_2();break;
case 3: MOTOR_STEP1_4_3();break;
case 4: MOTOR_STEP1_4_4();break;
case 5: MOTOR_STEP1_4_5();break;
case 6: MOTOR_STEP1_4_6();break;
case 7: MOTOR_STEP1_4_7();break;
case 8: MOTOR_STEP1_4_8();break;
case 9: MOTOR_STEP1_4_9();break;
case 10: MOTOR_STEP1_4_10();break;
case 11: MOTOR_STEP1_4_11();break;
case 12: MOTOR_STEP1_4_12();break;
case 13: MOTOR_STEP1_4_13();break;
case 14: MOTOR_STEP1_4_14();break;
case 15: MOTOR_STEP1_4_15();break;
case 16: MOTOR_STEP1_4_16();break;
}
}
main.c
#include "system.h"
#include "key.h"
#include "motor.h"
sbit sw1 = P3^7;
extern uchar flag_1ms; //在其他模块中寻找其定义。另外,extern也可用来进行链接指定。
static unsigned int key_timer=0;
void main(void) //程序的主函数
{
Timer0_Init(); 定时器0函数调用
Motor_Active();
while(1) //大括号里面的东西,被不停的循环执行
{
//1ms进入一次
if(flag_1ms==1) //加了我之后,我的大括号里面的东西,被定期的1ms执行一次,反复执行
{
flag_1ms=0;
if(sw1==0)
{
key_timer++;
if(key_timer==100)
{
Motor_For();
}
else if(key_timer==900)
{
Motor_For();
}
else if(key_timer>=910)
{
key_timer=899;
}
}
else
{
key_timer=0;
}
}
}
}