#include <reg51.h> //函數頭文件
#define uint unsigned int
#define uchar unsigned char
unsigned char temp; //聲明變量
static unsigned char index=0;
unsigned char code BeatCode[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //步進電機正轉控制
unsigned char code DefeatCode[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
unsigned long beats=0; //輸出節拍數
void StartMotor (unsigned long angle); //輸出節拍數
sbit S2=P3^0; //聲明按鍵
sbit S3=P3^1;
void delay(uint z);
void main() //主函數
{
EA=1; //開啟總中斷
TMOD=0x01; //選擇定時器0,工作方式1
TH0=0xf8; //裝在初始值
TL0=0xcd;
ET0=1; //定時器T0中斷
TR0=1; //開啟定時器0
StartMotor(360);
while(1);
}
void StartMotor (unsigned long angle) //控制函數
{
EA=0; //關閉總中斷
beats=(angle*4076)/360; //計算輸出節拍數
EA=1; //開啟總中斷
}
void InterruptTimer0() interrupt 1 //中斷工作方式1
{
TH0=0xf8; //重裝初始值
TL0=0xcd;
if(S2==0) //按鍵控制
{
temp=P1;
temp=temp&0xf0;
temp=temp|BeatCode[index];
P1=temp;
index++;
index=index&0x07;
beats--;
}
else if(S3==0)
{
//temp=P1;
temp=temp&0xf0;
temp=temp|DefeatCode[index];
P1=temp;
index++;
index=index&0x07;
beats--;
}
}
void delkay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
|