#include "lcd.h"

char lcd[9][2] = {{0x0F,0x0A},{0x0B,0x0C},{0x09,0x0E},{0x04,0x0E},{0x0D,0x06},{0x0F,0x06},{0x08,0x0A},{0x0F,0x0E},{0x0C,0x0E}}; 
xdata char lcd_ram[17] _at_ 0xFFE8;

void init_lcd( uint8_t vol,     //LCD对比度控制
               uint8_t typesel, //LCD电容型驱动方式选择
               uint8_t duty,    //LCD占空比选择
               uint8_t pumpon,  //PUMPON 必须为 1，电容偏压型和电压稳定器型 LCD 才有效 
               uint8_t tlcd,    //LCD类型
               uint8_t fcctl,   //FCCTL 充电时间控制位 
               uint8_t rlcd,    //LCD 偏置电阻选择位 
               uint8_t mod)     //驱动模式选择位 
{
    SYSCON |= 0x02;//subclk en
    CLKEN1 |= 0x40;
    
    LCDCON1 = 0;
    LCDCON1 = mod | (rlcd<<2) | (fcctl<<5) | (tlcd<<7);
    LCDCON = 0;
    LCDCON = vol | (typesel<<3) | (duty<<4);
    LCDCON |= (pumpon<<6);
    //SEG9-SEG25 布线原因，DEMO板com1-com4对应LCD手册com4-com1
    SEGEN1 		= 0x00;
		SEGEN2  	=	0xFF;
		SEGEN3  	= 0xFF;
		SEGEN4  	= 0x01;
		COMEN   	= 0xFF;
    
}

void lcd_on(void)
{
    LCDCON |= 0x80;
}

void lcd_off(void)
{
    LCDCON &= 0x7F;
}

//DEMO板使用idd22模式配置
void LCD_Test(void)
{
	  IO_CLR();
		P5 = 0xFF;
	  //ENABLE BOR
    BORCON |= 0x01;    
    //DISABLE WDT
    WDTCON &= 0xFD;
  
  		//idd21
//    init_lcd( p1000,     //LCD对比度控制
//						  CAP_BIAS, //LCD电容型驱动方式选择
//						  DUTY1_4,    //LCD占空比选择
//						  PUMP_OFF,  //PUMPON 必须为 1，电容偏压型和电压稳定器型 LCD 才有效 
//						  RES_LCD,    //LCD类型
//						  FCCTL_1PER4,   //FCCTL 充电时间控制位 
//						  BIAS_RES_990K,    //LCD 偏置电阻选择位 
//						  NORMAL_RES_990K);    //驱动模式选择位 
	
	  //idd22
    init_lcd( p1000,     //LCD对比度控制
						  INTER_VOL_STABLE, //LCD电容型驱动方式选择
						  DUTY1_4,    //LCD占空比选择
						  PUMP_ON,  //PUMPON 必须为 1，电容偏压型和电压稳定器型 LCD 才有效 
						  CAP_LCD,    //LCD类型
						  FCCTL_1PER4,   //FCCTL 充电时间控制位 
						  BIAS_RES_990K,    //LCD 偏置电阻选择位 
						  NORMAL_RES_990K);    //驱动模式选择位 
    
  		//idd23
//    init_lcd( p1000,     //LCD对比度控制
//						  CAP_BIAS, //LCD电容型驱动方式选择
//						  DUTY1_4,    //LCD占空比选择
//						  PUMP_ON,  //PUMPON 必须为 1，电容偏压型和电压稳定器型 LCD 才有效 
//						  CAP_LCD,    //LCD类型
//						  FCCTL_1PER4,   //FCCTL 充电时间控制位 
//						  BIAS_RES_990K,    //LCD 偏置电阻选择位 
//						  NORMAL_RES_990K);    //驱动模式选择位 	  

  		//idd24
//    init_lcd( p1000,     //LCD对比度控制
//						  CAP_BIAS, //LCD电容型驱动方式选择
//						  DUTY1_4,    //LCD占空比选择
//						  PUMP_OFF,  //PUMPON 必须为 1，电容偏压型和电压稳定器型 LCD 才有效 
//						  RES_LCD,    //LCD类型
//						  FCCTL_1PER4,   //FCCTL 充电时间控制位 
//						  BIAS_RES_990K,    //LCD 偏置电阻选择位 
//						  NORMAL_RES_990K);    //驱动模式选择位 	
	  lcd_ram[2] = lcd[1][0];
	  lcd_ram[3] = lcd[1][1];
		lcd_ram[4] = lcd[4][0];
	  lcd_ram[5] = lcd[4][1];
	  lcd_ram[6] = 0x0A;
		
		//close all other peri
    CLKEN0 = 0;
    CLKEN1 = 0x40;//enable lcd clock  
		delay_ms(50);
	  lcd_on();
		
    //chose inter 32kHz clock
    //SUBCLKEN = 1
    system_clk_div(CPUCLK_DIV0);
    clk_enable(SUBCLK);
    
    //wait ilrc stable
    while((CLKSTAT & 0x04) == 0);
    
    //subclk is ilrc
    sub_clk_sel(ILRC);
     
		 //idd24
//    //subclk is XTAL
//    sub_clk_sel(XTAL);
//    
//    //wait XTAL stable
//    while((CLKSTAT & 0x02) == 0);   
		
    //choose subclk as main clock
    main_clk_sel(SUBCLK);    
 
    
    //DISABLE IHRC
    clk_disable(IHRC);

    //cpu enter idle
    cpu_idle();
    
    while(1);  
}