#include <STC15F2K60S2.H>
#include <intrins.h>
unsigned char fa,fb,fc;
unsigned long value;
bit bdata xa;
bit bdata xb;
bit bdata xc;
unsigned int xdata cnt,cntc;
unsigned int xdata cntt;
unsigned int xdata cnt_datas,cnt_datal;
#define FOSE 0x1200;
void initialization()
{
P1M0=0x3c;
P1M1=0x00;
P3M0=0X0b;
P3M1=0X00;
P5M0=0X00;
P5M1=0X00;
}
void T0initialization()
{
AUXR &= 0x7F;//定时器时钟12T模式
TMOD &= 0xF0;//设置定时器模式
TMOD |= 0x01;//设置定时器模式
TL0 = 0x66;//设置定时初值
TH0 = 0xFC;//设置定时初值
TF0 = 0;//清除TF0标志
TR0 = 1;//定时器0开始计时
ET0=1;
}
/* void PCAinitialization()
{
CCON = 0; //初?化PCA控制寄存器
CL = 0; //??PCA寄存器
CH = 0;
CMOD = 0x00;
value=FOSE;
CCAP0L = value;
CCAP0H = value>>8;
//value+=FOSE;
CCAPM0 = 0x49; //PCA模块0为?6?定时器模式
CR = 1;
cntt = 0;
}*/
void delay(int ms)
{
int i,j;
for(i=0;i<100;i++)
for(j=0;j<ms;j++)
_nop_();
}
void IOchuli()
{
if(P34==0&&P32==1) //P34脚踏
{
delay(4); //改括号里面的值是脚踏开关的延时时间值,4表示延时4毫秒 (7脚=1)
if(P34==0&&P32==1) fa=0x01;
}
if(P35==1)//P35接近
{
delay(2); //改括号里面的值是接近开关的延时时间值,2表示延时2毫秒
if(P35==0) fa=0x02;
}
if(P34==0&&P32==0)
{
delay(4); //改括号里面的值是脚踏开关的延时时间值,4表示延时4毫秒 (7脚=0)
if(P34==0&&P32==0) fa=0x08;
}
}
void main()
{
initialization();
T0initialization();
//PCAinitialization();
EA=1;
P30=1; //电磁阀
P31=1;//刹车
P33=1;//离合
xc=1;
while(1)
{
IOchuli();
switch(fa)
{
case 0x01:
P31=1;
P30=0;
P33=0;
break;
case 0x02:
P30=1;
P33=1;
P31=0;
xb=0;
cntt=0;
xa=1;
break;
case 0x04:
P31=1;
xa=0;
cnt=0;
break;
case 0x08:
P31=1;
P30=0;
xb=1;
break;
default:break;
}
}
}
void T0Uart() interrupt 1
{
TL0 = 0x66;//设置定时初值
TH0 = 0xFC;//设置定时初值
if(xa==1)
{
cnt++;
if(cnt==10)
{
cnt=0;
cnt_datas++;
}
if(cnt_datas>=150) //改括号里面的值,2500表示刹车时间2500毫秒
{
fa=0x04;
xa=0;
cnt=0;
cnt_datas=0;
}
}
if(xb==1)
{
cntt++;
if(cntt>=10)
{
cntt=0;
cnt_datal++;
}
if(cnt_datal>=200)//改括号里面的值,200表示离合2000毫秒后动作,单位10ms
{
P33=0;
xb=0;
cntt=0;
cnt_datal=0;
}
}
else cntt=0;
}