#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar FX_FLAG=0; //电机运行方向标志
uchar time_num=0;
uchar time1_num=0;
uint W_ad=0;
uint H_ad=600;
uint sum = 0;
uchar Position_flag=0;
uchar XH_flag=0;
bit flag=0;
/*八拍方式驱动,顺序为A AB B BC C CD D DA*/
unsigned char code clockWise[]={0xF8,0xFc,0xF4,0xF6,0xF2,0xF3,0xF1,0xF9};
unsigned char code clockWise1[]={0xF9,0xF1,0xF3,0xF2,0xF6,0xF4,0xFc,0xF8};
sbit KEY1=P3^4;
sbit KEY2=P3^5;
sbit KEY3=P3^6;
sbit KEY4=P3^7;
sbit BEEP=P1^6;
sbit INT0_IO=P3^2;
/************************************
延时子程序
延时时间(xms*1)ms
*************************************/
void delayms(uint xms)
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
#include"LCD1602.H"
#include"ADC0832.H"
void keyscan()
{
if(!KEY1)
{
delayms(5);
if(!KEY1)
{
if(H_ad<1000)
H_ad+=10;
while(!KEY1);
}
}
else if(!KEY2)
{
delayms(5);
if(!KEY2)
{
if(H_ad>0)
H_ad-=10;
while(!KEY2);
}
}
}
void Control()
{
static uchar sta_flag=0;
static uchar i=0;
if(W_ad>H_ad)
{
FX_FLAG=1;
if(i<10)
i++;
else
i=0;
if(i<5)
BEEP=0;
else
BEEP=1;
if(Position_flag>0)
{flag=1;}
else
{flag=0;}
if(flag)
{
TR0=1;
if(INT0_IO)
{
delayms(200);
if(INT0_IO)
{
//flag=0;
if(!sta_flag)
{
sta_flag=1;
Position_flag--;
}
}
}
else if(!INT0_IO)
{
delayms(200);
if(!INT0_IO)
{
sta_flag=0;
}
}
}
else
{
if(!INT0_IO)
{
delayms(100);
if(!INT0_IO)
{
TR0=0;
sta_flag=0;
}
}
}
}
else
{
BEEP=1;
if(!KEY3)
{
delayms(5);
if(!KEY3)
{
if(Position_flag<4&&!TR0)
{
flag=1;
FX_FLAG=0;
Position_flag++;
}
while(!KEY3);
}
}
else if(!KEY4)
{
delayms(5);
if(!KEY4)
{
if(Position_flag>0&&!TR0)
{
FX_FLAG=1;
flag=1;
Position_flag--;
}
while(!KEY4);
}
}
if(flag)
{
TR0=1;
if(INT0_IO)
{
delayms(200);
if(INT0_IO)
{flag=0;}
}
}
else
{
if(!INT0_IO)
{
delayms(100);
if(!INT0_IO)
{
TR0=0;
}
}
}
}
}
/************************************
主程序
************************************/
void main()
{
float AD_Buf=0;
init_1602(); //初始化LCD1602
TMOD=0X01;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
ET0=1;
TR0=0;
EA=1;
while(1)
{
time_num++;
sum+=A_D();
if(time_num==10)
{
time_num=0;
AD_Buf=(float)(sum/10);
W_ad=(uint)(AD_Buf*3.9215);
// W_ad=sum/10;
sum=0;
}
display();
keyscan();
Control();
}
}
/********************************************
定时器0中断子程序
*********************************************/
void Time0() interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
if(FX_FLAG)
{P2=clockWise[time1_num];}
else
{P2=clockWise1[time1_num];}
time1_num++;
if(time1_num>7)
time1_num=0;
}