代码如下:
#include <reg52.h>
#define u8 unsigned char
#define u32 unsigned long
sbit key1=P3^2;
sbit key2=P3^3;
bit direction;
u8 code F[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
u8 code R[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0C,0x08};
u32 beats;
void Timer0_init();
void StartMotor(u32 angel);
void Delay_ms(u8 t);
void main()
{
Timer0_init();
EA=1;
while(1)
{
if(key1==0)
{
direction=1;
StartMotor(90);
}
else if(key2==0)
{
direction=0;
StartMotor(90);
}
}
}
void Timer0_init()
{
TMOD|=0X01;
TH0=(65536-1843)/256;
TL0=(65536-1843)%256;
ET0=1;
TR0=1;
}
void Timer0() interrupt 1
{
static u8 i=0;
TH0=(65536-1843)/256;
TL0=(65536-1843)%256;
if(beats!=0)
{
if(direction==1)
P2=F[i];
else
P2=R[i];
i++;
if(i>7)
{
i=0;
}
beats--;
}
else
{
P2=0;
TR0=0;
}
}
void StartMotor(u32 angel)
{
EA=0;
TR0=1;
beats=angel*4076/360;
EA=1;
}
仿真如下:![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e9c87dbe265d42e59c3dc8ed7a28e65a.png#pic_center)