/****************************************************************
程序名称: 按键控制电机正反转
p1.0键为反转 p1.1键为停止 p1.2键为正转
*****************************************************************/
/*头文件*/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define _Nop() _nop_()
/*端口定义*/
#define motor P0 /*步进电机接口*/
sbit P12 = P1^2; /*控制正转按键*/
sbit P11 = P1^1; /*控制电机停止*/
sbit P10 = P1^0; /*控制电机反转*/
sbit led1 = P1^3; /*正转指示灯*/
sbit led2 = P1^4; /*反转指示灯*/
uchar code table1[]={0xf3,0xf6,0xfc,0xf9}; /*正转表*/
uchar code table2[]={0xf3,0xf9,0xfc,0xf6}; /*反转表*/
/*1MS为单位的延时程序*/
void delay_1ms(uchar x)
{
uchar j;
while(x--) { for(j=0;j<125;j++); }
}
/*主程序*/
void main()
{
uchar yunzhuang=0; /*运转状况 0停止 1正转 2反转*/
uchar count=0; /*电机转动步数*/
motor = 0xf0; /*电机停止*/
while(1){
if(yunzhuang==0){
motor = 0xf0; /*电机停转*/
led1=0;led2=0;
}
else if(yunzhuang==1){
led1=0;led2=1; //等于0为点亮LED灯
motor = table1[count]; /*电机正转*/
}
else if(yunzhuang==2){
led1=1;led2=0; //等于0为点亮LED灯
motor = table2[count]; /*电机反转*/
}
count++;
if(count>=4) count=0;
delay_1ms(5);
if(P12==0){
delay_1ms(3);
if(P12==0){
yunzhuang = 1;
}
}
else if(P11==0){
delay_1ms(3);
if(P11==0){
yunzhuang = 0;
count = 0;
}
}
else if(P10==0){
delay_1ms(3);
if(P10==0){
yunzhuang = 2;
}
}
}
}