#include "drive_1602.h"

#include <stdarg.h>		  //  ��׼ͷ�ļ�
#include "stdio.h"
#include "string.h"

#define lcddata P1

sbit rs=P2^7;       
sbit en=P2^6;  
//sbit rw=P2^6; 
extern void delay_xms(int xms);

void delay_1ms(unsigned int xms)//��ʱ�������вκ��� 
{   
	delay_xms(xms);
}  
//****Һ��д��ָ���****//
void Write_1602_com(unsigned char com)
{
//  rw=0;
  rs=0;//����/ָ��ѡ����Ϊָ�� 
  lcddata=com;//�������� 
  delay_1ms(1);   
  en=1;//����ʹ�ܶˣ�Ϊ������Ч���½�����׼�� 
  delay_1ms(1);  
  en=0;//en�ɸ߱�ͣ������½��أ�Һ��ִ������ 
 }

//***Һ��д�����ݺ���****// 
void Write_1602_date(unsigned char date)
{
//	 rw=0; 
	 rs=1;//����/ָ��ѡ����Ϊ����   
	 lcddata=date;//��������   
	 delay_1ms(1);   
	 en=1; //en�øߵ�ƽ��Ϊ�����½�����׼��  
	 delay_1ms(1); 
	 en=0; //en�ɸ߱�ͣ������½��أ�Һ��ִ������ 
} 

/************ д�ַ����ݺ���  *****************
//���ܣ���lcd1602ָ��λ������ʾ�ַ���
//����
//p:    ָ�����ʾ����ָ��
//x:    X����
//y:    Y����
//************ ***********  *****************/
void WriteLcd1602_String(char x,char y,char  *p)
{
	char i=0;
  if(y == 0)
	{
     Write_1602_com(0x80 + x);    
	}
	else
	{
      Write_1602_com(0xC0 + x);
  }
	while(*p != 0)
	{
        Write_1602_date(*p);
		    p++;
  }
}

char data String_Buff[16]={0};
void L1602_printf(char x,char y,char *format, ...)
{
		va_list ap;
		va_start(ap,format);
		vsprintf(String_Buff,format,ap);
		va_end(ap);
		WriteLcd1602_String(x,y,String_Buff);
//	  OLED_ShowString(x,y,(u8*)LcdBuff,16);
		//WriteLcd128_String(x,y,LcdBuff);
}
//***Һ����ʼ������****//
void lcd1602_init()
{ 
  Write_1602_com(0x38);//����Һ������ģʽ����˼��16*2����ʾ��5*7����8λ���� 
	delay_1ms(1);   
  Write_1602_com(0x0c);//����ʾ����ʾ��� 
	delay_1ms(1);   
  Write_1602_com(0x06);//�������ƶ�������Զ�����  
  delay_1ms(1);   	
  Write_1602_com(0x01);//����ʾ   
	delay_1ms(1);   
  Write_1602_com(0x80);
	delay_1ms(1);   
	
}  
void LCD1602_Write_address(unsigned char x,unsigned char y)
{ 
     x&=0x0f;             //�е�ַ������0-15��
     y&=0x01;             //�е�ַ������0-1��
     if(y==0)             //����ǵ�һ��
         Write_1602_com(x|0x80);        //���е�ַд��
     else                 //����ǵڶ���
         Write_1602_com((x+0x40)|0x80); //���е�ַд��
} 
void LCD1602_Disp(unsigned char x,unsigned char y,unsigned char buf)
{ 
     LCD1602_Write_address(x,y);    //�Ƚ���ַ��Ϣд��
     Write_1602_date(buf);  //��д��Ҫ��ʾ������
}