#include "drive_1602.h"
#include "string.h"
#include "stdio.h"


#define uint unsigned int 
#define uchar unsigned char
	
/*
����5V USB��·����
����ʵ������ֹͣ�Ϳ�������
ʵ���������ٷ���
���ٵȼ��ߵ͸�3��

*/
sbit SW1=P3^7;
sbit SW2=P3^6;
sbit SW3=P3^5;


sbit fun=P3^3;//����io

uchar temp,humi;
int JCount=0;

void delay_xms(int xms)
{
    char ix=0;
	  for(;xms>0;xms--)
	   for(ix=110;ix>0;ix--);
}
uchar SET=0;
bit keyflag=0;

bit openflag=0;//������־λ
uchar dw_val=3;//��λֵ
int pwm_cnt=0;
#define pwm_max 1000
int set_pwm=pwm_max;

void KeyRead(void)
{
    if(!SW1)
		{
       if(!SW1&&keyflag==0)	
			 {
				 keyflag=1;
				 openflag^=1;
			   while(!SW1);
			 }
		}
    else if(!SW2)
		{
       if(!SW2&&keyflag==0)	
			 {
				 keyflag=1;
				 if(++dw_val>3)dw_val=1;
			   while(!SW2);
			 }
		}
		
	  else if(!SW3)
		{
       if(!SW3&&keyflag==0)	
			 {
				 keyflag=1;
				 if(dw_val>1)dw_val--;
			 }
		}
		else
		{
		  keyflag=0;
		}


}

void Timer0Init(void)		//10����@11.0592MHz
{
	
	TMOD &= 0xF0;		//���ö�ʱ��ģʽ
	TMOD |= 0x01;		//���ö�ʱ��ģʽ
	TL0 = 0x00;		//���ö�ʱ��ֵ
	TH0 = 0xDC;		//���ö�ʱ��ֵ
	TF0 = 0;		//���TF0��־
	ET0=1;
	TR0 = 1;		//��ʱ��0��ʼ��ʱ
	EA=1;
	
}

uchar get_key=0;
void TimeISR()interrupt 1
{
  TL0 = 0x66;		//���ö�ʱ��ֵ
	TH0 = 0xFC;		//���ö�ʱ��ֵ 1ms
	if(++get_key>10)
	{
	  get_key=0;
		KeyRead();
	}
	pwm_cnt++;
	if(pwm_cnt>=pwm_max)
	{
	   pwm_cnt=0;
		
	}
	if(pwm_cnt>set_pwm)
	{
	   fun=1;
	}
	else
	{
	  fun=0;
	}
	JCount++;
}

void UartInit(void)		//9600bps@11.0592MHz
{
	PCON &= 0x7F;		//�����ʲ�����
	SCON = 0x50;		//8λ����,�ɱ䲨����
	TMOD &= 0x0F;		//�����ʱ��1ģʽλ
	TMOD |= 0x20;		//�趨��ʱ��1Ϊ8λ�Զ���װ��ʽ
	TL1 = 0xFD;		//�趨��ʱ��ֵ
	TH1 = 0xFD;		//�趨��ʱ����װֵ
	ET1 = 0;		//��ֹ��ʱ��1�ж�
	TR1 = 1;		//������ʱ��1
	EA=1;
	ES=0;
}


void sendData(char *p,unsigned  char n)
{
  if( p == 0) return ;
	 ES = 0;
	 if(n > 0)
	 {
		 while(n --)
		 {
			 SBUF = *p++ ;
			 while(!TI)  ;
			 TI = 0      ;
		 }
	 }
	// ES = 1;
}



//   �����ڷ����ַ���
void sendString(char *p)
{
   if(p == 0) return ;
   sendData(p,strlen(p));
}
uchar rxdat=0;
//  �����жϺ���
void usart() interrupt 4
{
  if(RI == 1)
	{  
		rxdat=SBUF;
		switch(rxdat)
		{
		  case 0x5a:
				openflag^=1;
			break;
			
			case 0x65:
				 if(++dw_val>3)dw_val=1;
			break;
			
			case 0x78:
				 if(dw_val>1)dw_val--;
			break;
		}
    // setUsartRxData(SBUF); 
	}			 
	RI = 0;
	TI = 0;
}



void main()
{
	lcd1602_init();
	UartInit();
	delay_xms(200);
	Timer0Init();
  while(1)
	{
		
	 	if(JCount>500)//500ms�ɼ�һ��
		{
				JCount=0;
			  if(openflag)
				{
			    L1602_printf(0,0,"FUN:ON"); 
					switch(dw_val)
					{
					  case 1:
							set_pwm=300;
						break;
						
						case 2:
							set_pwm=700;
						break;
						
						case 3:
							set_pwm=pwm_max;
						break;
					}
						
						
				}else
				{
				  L1602_printf(0,0,"FUN:OFF"); 
				}
				L1602_printf(0,1,"Gears:%d",dw_val); 
		}
  }
	
	

}