#ifndef __LCD_H
#define __LCD_H

#include "stm32f10x.h"
#include "delay.h"

/*****************?????*******************/
// #define	BK_FORWARD_MENU	         	0      //标况
// #define	BK_BACKWARD_MENU	        1      //标况
// #define	BK_CALIBRATION_MENU	      2      //标况
// #define	BK_ERROR_MENU	         		3      //标况
// #define	GK_FORWARD_MENU	         	4      //工况
// #define	GK_BACKWARD_MENU	        5      //工况
// #define	GK_CALIBRATION_MENU	      6      //工况
// #define	GK_ERROR_MENU	         		7      //工况


/***************兼容073重定义显示*********/
//#define	BK_FORWARD_MENU	         	0      //正向标况
//#define	GK_FORWARD_MENU	         	1      //正向工况
//#define	BK_BACKWARD_MENU	        2      //反向标况
//#define	GK_BACKWARD_MENU	        3      //反向工况

//#define	BK_CALIBRATION_MENU	      4      //检定标况
//#define	GK_CALIBRATION_MENU	      5      //检定工况 


//#define	BK_FORWARD_ERROR_MENU	    6      //正向错误标况  //错误流量不在液晶上显示
//#define	GK_FORWARD_ERROR_MENU	    7      //正向错误工况
//#define	BK_BACKWARD_ERROR_MENU	  8      //反向错误标况
//#define	GK_BACKWARD_ERROR_MENU	  9      //反向错误工况

/***************重定义显示*********/
//正常模式
#define BK_SH_MENU            0 //余额+单价
#define	YE_DJ_MENU	         	1 //正向标况+正向瞬时
#define	BK_WD_MENU	         	2 //正向标况+正向瞬时
#define	BK_YL_MENU	         	3 //正向标况+正向瞬时
#define	GK_SH_MENU	         	4 //正向标况+正向瞬时

//查询模式
#define SV_HV_MENU            0 //余额+单价
#define	DT_TM_MENU	         	1 //日期+时间
#define	IP_MENU_SZ	         	2 //IP+端口
#define	PT_MENU_SZ	         	3 
#define	IP_MENU_THR	         	4 //IP+端口
#define	PT_MENU_THR	         	5 
#define	BH_MENU_SZ	         	6 
#define	BH_MENU_THR	         	7 
#define BPS_AD_MENU           8

#define POINT_1  1
#define POINT_2  2
#define POINT_3  3

#define FIRST_LINE_DIGIT_POSIGITION   5
#define FIRST_LINE_DIGIT_NUM          9

#define SECOND_LINE_DIGIT_POSIGITION   14
#define SECOND_LINE_DIGIT_NUM          7


#define   LCD_BUFFER_LENGTH   35

#define        LCD_ADDR_READ                0x7D	
#define        LCD_ADDR_WRITE               0x7C
#define        LCD_WRITE_MODE               0xF0
#define        LCD_READ_MODE                0xF0

/**/
#define        LCD_ADDR_CONTROL1        0xE0
#define        LCD_ADDR_CONTROL2        0xF0

#define  LCD_SDA_PIN_NUM        GPIO_Pin_8	//	P3.1	IIC SDA 信号
#define  LCD_SDA_PIN_GROUP      GPIOB
#define  LCD_CLK_PIN_NUM        GPIO_Pin_9	//  P3.2	IIC SCA 信号
#define  LCD_CLK_PIN_GROUP      GPIOB


//IO方向设置
#define LCD_SDA_IN()  {GPIOB->CRH&=0XFFFFFFF0;GPIOB->CRH|=8;}
#define LCD_SDA_OUT() {GPIOB->CRH&=0XFFFFFFF0;GPIOB->CRH|=3;}


#define LCD_IIC_SCL    PBout(9) //SCL
#define LCD_IIC_SDA    PBout(8) //SDA	 
#define LCD_READ_SDA   PBin(8) 

#define	LCD_REG_DATA_ADDR 0x80

#define	LCD_DRIVE_MODE_COMMAND_ADDR 0x82
#define	LCD_DRIVE_MODE_14_13 0x00        //   1/4duty  1/3bias
#define	LCD_DRIVE_MODE_14_14 0x01        //   1/4duty  1/4bias
#define	LCD_DRIVE_MODE_18_13 0x02        //   1/8duty  1/3bias   48pin的只支持1/8duty，地址加载到33H
#define	LCD_DRIVE_MODE_18_14 0x03        //   1/8duty  1/4bias

#define	LCD_SYSTEM_MODE_COMMAND_ADDR 0x84
#define	LCD_ON_LIGHT_UP	 	LCD_SYSTEM_MODE_ON_ON
//#define	LCD_OFF	 					LCD_SYSTEM_MODE_OFF_OFF
#define	LCD_SYSTEM_MODE_OFF_OFF 0x00     //  内部系统振荡器OFF，LCD显示OFF
#define	LCD_SYSTEM_MODE_ON_OFF 0x02     //  内部系统振荡器ON，LCD显示OFF
#define	LCD_SYSTEM_MODE_ON_ON 0x03     //  内部系统振荡器ON，LCD显示ON

#define	LCD_FRAME_RATE_COMMAND_ADDR 0x86
#define	LCD_FRAME_RATE_80 0x00		//帧率80
#define	LCD_FRAME_RATE_160 0x01		//帧率160


#define	LCD_FLICKER_COMMAND_ADDR 0x88
#define	LCD_FLICKER_OFF 0x00				//	闪烁关闭
#define	LCD_FLICKER_2HZ 0x01				//	闪烁2HZ
#define	LCD_FLICKER_1HZ 0x02				//	闪烁1HZ
#define	LCD_FLICKER_05HZ 0x03				//	闪烁0.5HZ

void LCD_Write(u8 sadd,u8 *buf,u8 len);
void LCD_Write_reg(u8 sadd,u8 *buf,u8 len);
void LCD_Read(u8 sadd, u8 *buf, u8 len);

extern  u8 LCD_Buffer[LCD_BUFFER_LENGTH];



void LCD_READ_REG(u8 *reg_value,u8 address,u8 reg_num);
void LCD_GPIO_init(void);
void LCD_driver_init(void);
void LCD_Display(u8 *RAM);
void LCD_Clear(void);
void LCD_buf_Clear(void);
void LCD_DisplaySeg(u16 SegNum);
void LCD_ClearSeg(u16 SegNum);
void LCD_DisplayDigit(unsigned char Position,unsigned char Digit);
void LCD_ClearDigit(unsigned char Position);
void LCD_DisplayNum(u8 line,double number,u8 integer_len,u8 flag);
void LCD_DisplaySignal(u8 signal);
void LCD_DisplayString(unsigned char *string);
void LCD_ClearSignal(u8 signal);
void LCD_DisplayTime(void);
void LCD_DisplayYearTime(void);



void LCD_DisplayDefault(void);

//正常模式
void LCD_Display_Normal_Mode(u8 showtype);

//查询模式
void LCD_Display_Look_Mode(u8 showtype);

//段码序号宏定义
void LCD_DisplayAll(void);


//字码段是分成两层的

#define LCD_CS_LOW       	GPIO_ResetBits(GPIOE, GPIO_Pin_1)
#define LCD_CS_HIGH  		  GPIO_SetBits(GPIOE, GPIO_Pin_1)
#define LCD_RD_LOW       	GPIO_ResetBits(GPIOE, GPIO_Pin_0)
#define LCD_RD_HIGH  		  GPIO_SetBits(GPIOE, GPIO_Pin_0)
#define LCD_WR_LOW   		  GPIO_ResetBits(GPIOB, GPIO_Pin_9)
#define LCD_WR_HIGH      	GPIO_SetBits(GPIOB, GPIO_Pin_9)
#define LCD_DATA_LOW       GPIO_ResetBits(GPIOB, GPIO_Pin_8)
#define LCD_DATA_HIGH 	   GPIO_SetBits(GPIOB, GPIO_Pin_8)
#define Read_data         PBin(8)
//-----Ht1622命令宏定义-----
#define LCD_COMMAND 		     0x04			//100
#define LCD_WriteModeID		  0x05			//101
#define LCD_ReadModeID		  0x06			//110
#define LCD_INIT						0xff 	//开启LCD驱动+1/3bias+4coms
#define LCD_ON						0x03 	//开启偏压
#define LCD_OSC						0x01		//开启内部振荡器

#define LCDSDA_IN()   {GPIOB->CRH&=0XFFFFFFF0;GPIOB->CRH|=8;}
#define LCDSDA_OUT()  {GPIOB->CRH&=0XFFFFFFF0;GPIOB->CRH|=3;}

#define			_LCD_BELOW_ZERO_SY					0
#define			_LCD_ZONGLIANG_SY						4



//-----Ht1623命令宏定义---
/**************************************************
* S1-S54
**************************************************/
#define			_LCD_SIZHULOG_23A						     			276 //1

#define			_LCD_BATTERY_4_23A    								278 //3
#define			_LCD_BATTERY_3_23A 		    						279	//4
#define			_LCD_BATTERY_2_23A		    		        271 //5
#define			_LCD_BATTERY_1_23A		    			      270 //6
#define			_LCD_BATTERY_SHELL_23A					 			277	//2

#define			_LCD_METER_23A									      269  //7  
#define			_LCD_SIGNAL_COMMUNICATION_23A				  268
#define			_LCD_VALVE_M_23A											5 
#define			_LCD_LOCK_23A													6 
#define			_LCD_OPEN_23A													7 
#define			_LCD_CLOSE_23A												4    //12



//#define			_LCD_HORIZONTALLINE_1_23A							65 //27
//#define			_LCD_SINGLEBILL_23A										64
//#define			_LCD_LADDERBILL_23A								    60
//#define			_LCD_HORIZONTALLINE_2_23A							68 //30

//#define			_LCD_WORK_CONDITION_23A								76 //31
//#define			_LCD_SURPLUSE_23A											67
//#define			_LCD_STAND_CONDITION_23A							2
//#define			_LCD_TOTAL_23A												3 //34

//#define			_LCD_X_23A											   1 
//#define			_LCD_ACCOUNT_23A									 0
//#define			_LCD_BILLBACK_23A									 275

//#define			_LCD_LAST_23A								       274 //38
//#define			_LCD_RECHARGE_23A								   273
//#define			_LCD_SETTLEMENT_23A								 266

//#define			_LCD_NOW_23A									     267 //41
//#define			_LCD_LADDER_23A									   260
//#define			_LCD_UNIT_PRICE_23A								 272

//#define			_LCD_N_1_23A										    265  //44
//#define			_LCD_M3_1_23A										    264
//#define			_LCD_YUAN_1_23A										  139
//#define			_LCD_kPa_23A										    130
//#define			_LCD_oC_23A											    131
//#define			_LCD_L_pul_23A										  140
//#define			_LCD_N_2_23A										    129//50
//#define			_LCD_M3_2_23A										    128
//#define			_LCD_h_23A											    142
//#define			_LCD_YUAN_2_23A										  135
//#define			_LCD_YUAN_M3_23A								    134//54

#define			_LCD_WIFI_23A													63  //13  							
#define			_LCD_4G_Flag_23A											71      
#define			_LCD_4G_1_23A													70
#define			_LCD_4G_2_23A									    		69
#define			_LCD_4G_3_23A									    		77
#define			_LCD_4G_4_23A									        78
#define			_LCD_4G_5_23A									        79
#define			_LCD_WARNING_23A									    87  //20   

#define			_LCD_CONFIGURATION_23A								74 //21
#define			_LCD_T_23A										        73
#define			_LCD_CHARGE_23A												72 //23   增
#define			_LCD_LOOKUP_23A									      80
#define			_LCD_BACKSET_23A									    75
#define			_LCD_K_23A										   			 66 //26
#define			_LCD_BOOTTOOTH_23A										65 //27    增
#define			_LCD_CHECK_23A												64//28

#define			_LCD_HORIZONTALLINE_1_23A					 60 //29
#define			_LCD_SINGLEBILL_23A								68 
#define			_LCD_LADDERBILL_23A								76 
#define			_LCD_HORIZONTALLINE_2_23A					67	

#define			_LCD_WORK_CONDITION_23A							2  //33
#define			_LCD_SURPLUSE_23A										3 
#define			_LCD_STAND_CONDITION_23A						1 
#define			_LCD_TOTAL_23A											 0

#define			_LCD_X_23A									275
#define			_LCD_ACCOUNT_23A						274 //38
#define			_LCD_BILLBACK_23A						273

#define			_LCD_LAST_23A								266
#define			_LCD_RECHARGE_23A						267 //41
#define			_LCD_SETTLEMENT_23A					260
#define			_LCD_NOW_23A								272
#define			_LCD_LADDER_23A							265  //44
#define			_LCD_UNIT_PRICE_23A					264

#define			_LCD_N_1_23A										  139  //46
#define			_LCD_M3_1_23A										  130
#define			_LCD_YUAN_1_23A										131

#define			_LCD_kPa_23A										  140 //49
#define			_LCD_oC_23A										    129//50
#define			_LCD_L_pul_23A										128
#define			_LCD_N_2_23A											142
#define			_LCD_M3_2_23A										  135
#define			_LCD_h_23A								    		134//54
#define			_LCD_YUAN_2_23A										133//55
#define			_LCD_YUAN_M3_23A								  132//56



/********************************************************
* 冒号
********************************************************/
#define			_LCD_POINT1_23A					 19
#define			_LCD_POINT2_23A					 24
#define			_LCD_POINT3_23A					 258
#define			_LCD_POINT4_23A					 256
#define			_LCD_POINT5_23A					 242
#define			_LCD_POINT6_23A					 240
#define			_LCD_POINT7_23A					 227
#define			_LCD_POINT8_23A					 224
#define			_LCD_POINT9_23A					 211
#define			_LCD_POINT10_23A				 200
#define			_LCD_POINT11_23A				 186
#define			_LCD_POINT12_23A				 184
#define			_LCD_POINT13_23A				 170
#define			_LCD_POINT14_23A				 168
#define			_LCD_POINT15_23A				 155
#define			_LCD_POINT16_23A				 152
#define			_LCD_POINT17_23A				 245
#define			_LCD_POINT18_23A				 247
#define			_LCD_POINT19_23A				 229
#define			_LCD_POINT20_23A				 231
#define			_LCD_POINT21_23A				 212
#define			_LCD_POINT22_23A					215
#define			_LCD_POINT23_23A					196
#define			_LCD_POINT24_23A					191
#define			_LCD_POINT25_23A					173
#define			_LCD_POINT26_23A					175
#define			_LCD_POINT27_23A					157
#define			_LCD_POINT28_23A					159

/*******************************************************
数字
*******************************************************/
#define			_LCD_1A_23A											15
#define			_LCD_1B_23A											23
#define			_LCD_1C_23A										  21
#define			_LCD_1D_23A											12
#define			_LCD_1E_23A											13
#define			_LCD_1F_23A											14
#define			_LCD_1G_23A											22

#define			_LCD_2A_23A											31
#define			_LCD_2B_23A											62
#define			_LCD_2C_23A							        61
#define			_LCD_2D_23A											28
#define			_LCD_2E_23A											20
#define			_LCD_2F_23A											30
#define			_LCD_2G_23A											29

#define			_LCD_3A_23A							95
#define			_LCD_3B_23A							94
#define			_LCD_3C_23A							93
#define			_LCD_3D_23A							92
#define			_LCD_3E_23A							84
#define			_LCD_3F_23A							86
#define			_LCD_3G_23A							85

#define			_LCD_4A_23A											88
#define			_LCD_4B_23A											81
#define			_LCD_4C_23A											83
#define			_LCD_4D_23A											91
#define			_LCD_4E_23A											90
#define			_LCD_4F_23A											89
#define			_LCD_4G_23A											82

#define			_LCD_5A_23A							11
#define			_LCD_5B_23A							18
#define			_LCD_5C_23A							16
#define			_LCD_5D_23A							8
#define			_LCD_5E_23A							9
#define			_LCD_5F_23A							10
#define			_LCD_5G_23A							17

#define			_LCD_6A_23A							59
#define			_LCD_6B_23A							58
#define			_LCD_6C_23A							57
#define			_LCD_6D_23A							56
#define			_LCD_6E_23A							25
#define			_LCD_6F_23A							27
#define			_LCD_6G_23A							26

#define			_LCD_7A_23A							251
#define			_LCD_7B_23A							243
#define			_LCD_7C_23A							249
#define			_LCD_7D_23A							248
#define			_LCD_7E_23A							257
#define			_LCD_7F_23A							259
#define			_LCD_7G_23A							250

#define			_LCD_8A_23A							235
#define			_LCD_8B_23A							226
#define			_LCD_8C_23A							225
#define			_LCD_8D_23A							232
#define			_LCD_8E_23A							241
#define			_LCD_8F_23A							234
#define			_LCD_8G_23A							233

#define			_LCD_9A_23A							219
#define			_LCD_9B_23A							210
#define			_LCD_9C_23A							208
#define			_LCD_9D_23A							216
#define			_LCD_9E_23A							217
#define			_LCD_9F_23A							218
#define			_LCD_9G_23A  						209

#define			_LCD_10A_23A						195
#define			_LCD_10B_23A						194
#define			_LCD_10C_23A						193
#define			_LCD_10D_23A						192
#define			_LCD_10E_23A						201
#define			_LCD_10F_23A						203
#define			_LCD_10G_23A						202

#define			_LCD_11A_23A						179
#define			_LCD_11B_23A						171
#define			_LCD_11C_23A						177
#define			_LCD_11D_23A						176
#define			_LCD_11E_23A						185
#define			_LCD_11F_23A						187
#define			_LCD_11G_23A						178

#define			_LCD_12A_23A						163
#define			_LCD_12B_23A						154
#define			_LCD_12C_23A						153
#define			_LCD_12D_23A						160
#define			_LCD_12E_23A						169
#define			_LCD_12F_23A						162
#define			_LCD_12G_23A						161

#define			_LCD_13A_23A						147
#define			_LCD_13B_23A						138
#define			_LCD_13C_23A						136
#define			_LCD_13D_23A						144
#define			_LCD_13E_23A						145
#define			_LCD_13F_23A						146
#define			_LCD_13G_23A						137

#define			_LCD_14A_23A						252
#define			_LCD_14B_23A						253
#define			_LCD_14C_23A						254
#define			_LCD_14D_23A						255
#define			_LCD_14E_23A						263
#define			_LCD_14F_23A						261
#define			_LCD_14G_23A						262

#define			_LCD_15A_23A						236
#define			_LCD_15B_23A						228
#define			_LCD_15C_23A						238
#define			_LCD_15D_23A						239
#define			_LCD_15E_23A					  246
#define			_LCD_15F_23A						244
#define			_LCD_15G_23A						237

#define			_LCD_16A_23A						220
#define			_LCD_16B_23A						213
#define			_LCD_16C_23A						214
#define			_LCD_16D_23A						223
#define			_LCD_16E_23A						230
#define			_LCD_16F_23A	  				221
#define			_LCD_16G_23A						222

#define			_LCD_17A_23A						204
#define			_LCD_17B_23A						197
#define			_LCD_17C_23A						199
#define			_LCD_17D_23A						207
#define			_LCD_17E_23A						206
#define			_LCD_17F_23A						205
#define			_LCD_17G_23A						198

#define			_LCD_18A_23A						180
#define			_LCD_18B_23A						181
#define			_LCD_18C_23A						182
#define			_LCD_18D_23A						183
#define			_LCD_18E_23A						190
#define			_LCD_18F_23A						188
#define			_LCD_18G_23A						189

#define			_LCD_19A_23A						164
#define			_LCD_19B_23A						156
#define			_LCD_19C_23A						166
#define			_LCD_19D_23A						167
#define			_LCD_19E_23A						174
#define			_LCD_19F_23A						172
#define			_LCD_19G_23A						165

#define			_LCD_20A_23A						148
#define			_LCD_20B_23A						141
#define			_LCD_20C_23A						143
#define			_LCD_20D_23A						151
#define			_LCD_20E_23A						158
#define			_LCD_20F_23A						149
#define			_LCD_20G_23A						150


#define		SIZHULOG				0
#define		NET_SIG					1
#define		POWER_CONNECT		2
#define		WARNING_SYM			3

#define		BAT_CAP_0			0
#define		BAT_CAP_1			1
#define		BAT_CAP_2			2
#define		BAT_CAP_3			3
#define		BAT_CAP_4			4

void LCD_DisplayfisrtLine(u8 pointnum,double number);
void LCD_DisplaysecondLine(u8 pointnum,double number);

void LCD_DisplayfisrtLineNew(u8 pointnum,double number,u8 DigitNumIN,u8 DigitPosition);
void LCD_DisplaysecondLineNew(u8 pointnum,double number,u8 DigitNumIN,u8 DigitPosition);

void LCD_DisplayfisrtLine_Look(u8 show_type,u8* showdata);
void LCD_DisplaysecondLine_Look(u8 show_type,u8* showdata);

void LCD_show_tem(double number);
void LCD_show_pre(double number);
void show_time(u8 hour, u8 minute);
void show_error(u8 error);
void show_valvecloseid(u16 valvecloseid);
void show_error_sym(u8 sym_index);
void clear_error_sym(u8 sym_index);
void show_bat_sym(u8 bat_cap);

//extern u8	LCD_number_overrun_flag;
#endif /* LCD_H_ */
