#include "Character_lcd.h"

void LCD_16T202DA1EA_Init(void){
     HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
     HAL_Delay(1);
     HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
     HAL_Delay(1);
     HAL_GPIO_WritePin(GPIOD, GPIO_PIN_10, GPIO_PIN_RESET);
     HAL_Delay(1);
     HAL_GPIO_WritePin(GPIOD, GPIO_PIN_10, GPIO_PIN_SET);
}

typedef struct{
	uint16_t RW_PIN;
	uint16_t RS;
	uint16_t E;
	uint16_t Reset;
	uint16_t DB0;
	uint16_t DB1;
	uint16_t DB2;
	uint16_t DB3;
	uint16_t DB4;
	uint16_t DB5;
	uint16_t DB6;
	uint16_t DB7;
	GPIO_TypeDef * RW_PIN_Port;
	GPIO_TypeDef * RS_Port;
	GPIO_TypeDef * E_Port;
	GPIO_TypeDef * DB0_Port;
	GPIO_TypeDef * DB1_Port;
	GPIO_TypeDef * DB2_Port;
	GPIO_TypeDef * DB3_Port;
	GPIO_TypeDef * DB4_Port;
	GPIO_TypeDef * DB5_Port;
	GPIO_TypeDef * DB6_Port;
	GPIO_TypeDef * DB7_Port;
}lcd_Pin_st;
void LCD_M68_DataWrite_COMMAND_Init(void){
    lcd_Pin_st lcdset;
    lcdset.RW_PIN = GPIO_PIN_12;//pd
    lcdset.RS     = GPIO_PIN_11;//pd
    lcdset.E      = GPIO_PIN_13;//pd
    lcdset.DB0	  = GPIO_PIN_14; //pd
    lcdset.DB1	  = GPIO_PIN_15;//pd
    lcdset.Reset  = GPIO_PIN_10;
    lcdset.DB2	  = GPIO_PIN_2;//pg
    lcdset.DB3	  = GPIO_PIN_3;//pg
    lcdset.DB5	  = GPIO_PIN_4;//pg
    lcdset.DB4	  = GPIO_PIN_5;//pg
    lcdset.DB6	  = GPIO_PIN_6;//pg
    lcdset.DB7	  = GPIO_PIN_7;//pg

	HAL_GPIO_WritePin(GPIOD, lcdset.E|lcdset.RS|lcdset.RW_PIN|lcdset.DB0|lcdset.DB1  , GPIO_PIN_RESET); 		
	HAL_GPIO_WritePin(GPIOG, lcdset.DB2|lcdset.DB3|lcdset.DB4|lcdset.DB5|lcdset.DB7, GPIO_PIN_SET);
	//PIN Init
	HAL_GPIO_WritePin(GPIOD, lcdset.E , GPIO_PIN_SET);  
	
	HAL_GPIO_WritePin(GPIOD, lcdset.DB0, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD, lcdset.DB1, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOG, lcdset.DB2, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOG, lcdset.DB3, GPIO_PIN_SET);	
	HAL_GPIO_WritePin(GPIOG, lcdset.DB4, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOG, lcdset.DB5, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOG, lcdset.DB6, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOG, lcdset.DB7, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD, lcdset.E , GPIO_PIN_RESET);  
	HAL_Delay(1);

}

void LCD_M68_DataWrite_COMMAND_TEST(void){
    lcd_Pin_st lcdset;
	char aa = 'a';
    lcdset.RW_PIN = GPIO_PIN_12;//pd
    lcdset.RS     = GPIO_PIN_11;//pd
    lcdset.E      = GPIO_PIN_13;//pd
    lcdset.DB0= GPIO_PIN_14; //pd
    lcdset.DB1= GPIO_PIN_15;//pd
    
    lcdset.DB2= GPIO_PIN_2;//pg
    lcdset.DB3= GPIO_PIN_3;//pg
    lcdset.DB5= GPIO_PIN_4;//pg
    lcdset.DB4= GPIO_PIN_5;//pg
    lcdset.DB6= GPIO_PIN_6;//pg
    lcdset.DB7= GPIO_PIN_7;//pg


	HAL_GPIO_WritePin(GPIOG, lcdset.DB2|lcdset.DB3|lcdset.DB4|lcdset.DB5|lcdset.DB6|lcdset.DB7, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD, lcdset.DB0|lcdset.DB1 , GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD, lcdset.E  , GPIO_PIN_RESET);		  
	HAL_GPIO_WritePin(GPIOD, lcdset.RS	, GPIO_PIN_RESET);		   
	HAL_GPIO_WritePin(GPIOD, lcdset.RW_PIN, GPIO_PIN_RESET);
	HAL_Delay(1);


	HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD, lcdset.E  , GPIO_PIN_SET);	

	HAL_GPIO_WritePin(GPIOD, lcdset.DB0, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD, lcdset.DB1, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOG, lcdset.DB2, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOG, lcdset.DB3, GPIO_PIN_RESET);	
	HAL_GPIO_WritePin(GPIOG, lcdset.DB4, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOG, lcdset.DB5, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOG, lcdset.DB6, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOG, lcdset.DB7, GPIO_PIN_RESET);

	HAL_GPIO_WritePin(GPIOD, lcdset.E , GPIO_PIN_RESET); 
	HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOG, lcdset.DB2|lcdset.DB3|lcdset.DB4|lcdset.DB5|lcdset.DB6|lcdset.DB7, GPIO_PIN_RESET);


}



void LCD_M68_DataWrite_COMMAND(uint8_t line,uint8_t cmd,uint8_t data){
    lcd_Pin_st lcdset;
	uint16_t temp_Pinbuf[8]={0,};
	GPIO_TypeDef* temp_Portbuf[8]={0,};
    lcdset.RW_PIN = GPIO_PIN_12;//pd
    lcdset.RS     = GPIO_PIN_11;//pd
    lcdset.E      = GPIO_PIN_13;//pd
    lcdset.DB0    = GPIO_PIN_14;//pd
    lcdset.DB1	  = GPIO_PIN_15;//pd
    lcdset.DB2	  = GPIO_PIN_2;//pg
    lcdset.DB3	  = GPIO_PIN_3;//pg
    lcdset.DB5	  = GPIO_PIN_4;//pg
    lcdset.DB4    = GPIO_PIN_5;//pg
    lcdset.DB6	  = GPIO_PIN_6;//pg
    lcdset.DB7	  = GPIO_PIN_7;//pg

	HAL_GPIO_WritePin(GPIOD, lcdset.E|lcdset.RS|lcdset.RW_PIN|lcdset.DB0|lcdset.DB1  , GPIO_PIN_RESET); 		
	HAL_GPIO_WritePin(GPIOG, lcdset.DB2|lcdset.DB3|lcdset.DB4|lcdset.DB5|lcdset.DB6|lcdset.DB7, GPIO_PIN_RESET);
	//PIN Init

	if(cmd == Instruction_CMD){
		HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_RESET);  // Init Instruction CMD  
	}else{
		HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_SET);		//Init Data CMD
	}
	HAL_Delay(1);

	memcpy(&temp_Pinbuf[0] ,&lcdset.DB0     ,8);
	memcpy(&temp_Portbuf[0],&lcdset.DB0_Port,8);
	
    HAL_GPIO_WritePin(GPIOD, lcdset.E  , GPIO_PIN_SET);  	
	if(data & 0x01)
		HAL_GPIO_WritePin(GPIOD, lcdset.DB0, GPIO_PIN_SET);
	else
		HAL_GPIO_WritePin(GPIOD, lcdset.DB0, GPIO_PIN_RESET);
	
	if(data & 0x02)
		HAL_GPIO_WritePin(GPIOD, lcdset.DB1, GPIO_PIN_SET);
	else 
		HAL_GPIO_WritePin(GPIOD, lcdset.DB1, GPIO_PIN_RESET);
	
	if(data & 0x04)
		HAL_GPIO_WritePin(GPIOG, lcdset.DB2, GPIO_PIN_SET);
	else
		HAL_GPIO_WritePin(GPIOG, lcdset.DB2, GPIO_PIN_RESET);
	
	if(data & 0x08)
		HAL_GPIO_WritePin(GPIOG, lcdset.DB3, GPIO_PIN_SET);
	else
		HAL_GPIO_WritePin(GPIOG, lcdset.DB3, GPIO_PIN_RESET);
	
	if(data & 0x10)
		HAL_GPIO_WritePin(GPIOG, lcdset.DB4, GPIO_PIN_SET);
	else
		HAL_GPIO_WritePin(GPIOG, lcdset.DB4, GPIO_PIN_RESET);
	
	if(data & 0x20)
		HAL_GPIO_WritePin(GPIOG, lcdset.DB5, GPIO_PIN_SET);
	else
		HAL_GPIO_WritePin(GPIOG, lcdset.DB5, GPIO_PIN_RESET);
	
	if(data & 0x40)
		HAL_GPIO_WritePin(GPIOG, lcdset.DB6, GPIO_PIN_SET);
	else
		HAL_GPIO_WritePin(GPIOG, lcdset.DB6, GPIO_PIN_RESET);
	
	if(data & 0x80)
		HAL_GPIO_WritePin(GPIOG, lcdset.DB7, GPIO_PIN_SET);
	else
		HAL_GPIO_WritePin(GPIOG, lcdset.DB7, GPIO_PIN_RESET);
								
		
	HAL_GPIO_WritePin(GPIOD, lcdset.E  , GPIO_PIN_RESET);  		//Init E Line
	if(cmd == Instruction_CMD){
		HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_SET);		//Init Data CMD
	}else{
		HAL_GPIO_WritePin(GPIOD, lcdset.RS , GPIO_PIN_RESET);  // Init Instruction CMD  
	}
}



