第3个回答 推荐于2016-06-18
#include <reg52.h>
sbit P0_0=P0^0;
sbit P0_1=P0^1;
unsigned char codes[2][8]={{0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03}, //9,18,36,45,54,63,72,81度 顺时针
{0x0b,0x09,0x0d,0x0c,0x0e,0x06,0x07,0x03}}; //9,18,36,45,54,63,72,81度 逆时针
unsigned char counts,flag,t;
// 度数,正/反转,速度控制
delay(unsigned char x) //延时
{
unsigned char i;
for( i=0;i<x;i++);
}
main()
{
TMOD=0x01; //定时器初始化
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(P0_0==0) //判断正转按键是否按下
{
delay(5);
if(P0_0==0) flag=0; //判断是否真正按下
}
if(P0_1==0) //判断反转按键是否按下
{
delay(5);
if(P0_1==0) flag=1; //判断是否真正按下
}
}
}
void motor() interrupt 1
{
t++; //控制速度
if(t==8)
{
t=0;
P1=codes[flag][counts]; //转动
counts++;
if (counts==8) counts=0; //角度重置
}
TF0=0; //重新计时
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
}本回答被提问者采纳