«November 2008»
1
2345678
9101112131415
16171819202122
23242526272829
30
 导 航
首页(2)
论坛新帖

 公 告
暂无公告...

 日 志
·LCD驱动代码
·热烈祝贺MTK开发blog开通

 评 论
·把它压缩让我们下载就行了嘛
·晕,怎么看啊,大哥,能发份...
·怎么是乱的,上传的时候格式...

 链 接

 统 计
博客名称:MTK开发
日志总数:2
评论数量:3
访问次数:614
建立时间:2008年9月5日
 LCD驱动代码
 jaken 发表于 2008-9-5 21:34:00
extern void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada); extern void GPIO_WriteIO(char data, char port); extern void PWM2_level(kal_uint8 level); //---------------------------------------------------------------------- kal_bool lcd_assert_fail = KAL_FALSE; kal_uint16 lcd_entry_mode_shadow = 0x1030; typedef enum { #if defined(DRIVE_IC_R61500) LCD_DRV_ID_R61500, #endif #if defined(DRIVE_IC_R61503) LCD_DRV_ID_R61503, #endif #if defined(DRIVE_IC_HX8309A) LCD_DRV_ID_HX8309A, #endif #if defined(DRIVE_IC_ILI9221) LCD_DRV_ID_ILI9221, #endif LCD_DRV_ID_UNKNOW }enum_LcdDrvIdType; /*6223 supports R61500*/ enum_LcdDrvIdType lcd_driver_ic_type = 0; //modify by MagicNing from LCD_DRV_ID_R61503 /* default value for Himax R61500 */ kal_uint16 lcd_power_ctrl_shadow1,lcd_power_ctrl_shadow3,lcd_power_ctrl_shadow4; //---------------------------------------------------------------------- #if ( defined(DUAL_LCD) && !defined(COLOR_SUBLCD) ) const kal_uint8 SubLCDSetArray[] = { 0x01, // 0000 0001 0x02, // 0000 0010 0x04, // 0000 0100 0x08, // 0000 1000 0x10, // 0001 0000 0x20, // 0010 0000 0x40, // 0100 0000 0x80 // 1000 0000 }; const kal_uint8 SubLCDReSetArray[] = { 0xFE, // 1111 1110 0xFD, // 1111 1101 0xFB, // 1111 1011 0xF7, // 1111 0111 0xEF, // 1110 1111 0xDF, // 1101 1111 0xBF, // 1011 1111 0x7F // 0111 1111 }; #endif /* default value for Himax HX8306A */ //---------------------------------------------------------------------- // LCD_Delay milli seconds //---------------------------------------------------------------------- void LCD_Delay(kal_uint8 time) { //volatile kal_uint32 delay; //for (delay =0;delay >2)|((DrvId&0x000001ff)>>1)); } #elif defined(LCD_16BIT_MODE) { /*read LCD driver ID */ *(volatile kal_uint16 *)MAIN_LCD_CMD_ADDR = 0x0000; LCD_Delay(10); DrvId = *(volatile kal_uint16 *)MAIN_LCD_DATA_ADDR; CheckDrvId = (kal_uint16)DrvId; } #elif defined(LCD_9BIT_MODE) { /*read LCD driver ID */ *(volatile kal_uint16 *)MAIN_LCD_CMD_ADDR = 0x0000; *(volatile kal_uint16 *)MAIN_LCD_CMD_ADDR = 0x0000; DrvId = ( *(volatile kal_uint16 *)MAIN_LCD_DATA_ADDR )<<8; DrvId |= ( *(volatile kal_uint16 *)MAIN_LCD_DATA_ADDR ); CheckDrvId = (kal_uint16)(((DrvId&0x0002fe00)>>2)|((DrvId&0x000001ff)>>1)); } #elif defined(LCD_8BIT_MODE) { /*read LCD driver ID */ *(volatile kal_uint8 *)MAIN_LCD_CMD_ADDR = 0x00; *(volatile kal_uint8 *)MAIN_LCD_CMD_ADDR = 0x00; LCD_Delay(10); DrvId = ( *(volatile kal_uint8 *)MAIN_LCD_DATA_ADDR )<<8; DrvId |= ( *(volatile kal_uint8 *)MAIN_LCD_DATA_ADDR ); CheckDrvId = (kal_uint16)DrvId; kal_prompt_trace(TRACE_INFO,"lcd_check_drv_id 1(%x)",CheckDrvId); } #endif #if defined(DRIVE_IC_R61500) if( CheckDrvId == LCD_Driver_ID_R61500 ) { lcd_driver_ic_type = LCD_DRV_ID_R61500 ; } #endif #if defined(DRIVE_IC_R61503) if( CheckDrvId == LCD_Driver_ID_R61503 ) { lcd_driver_ic_type = LCD_DRV_ID_R61503 ; } #endif #if defined(DRIVE_IC_HX8309A) else if( CheckDrvId == LCD_Driver_ID_HX8309A ) { /*change wait state*/ SET_LCD_PARALLEL_WRITE_WAIT_STATE(8); lcd_driver_ic_type = LCD_DRV_ID_HX8309A ; } #endif #if defined(DRIVE_IC_ILI9221) else if( CheckDrvId == LCD_Driver_ID_ILI9221 ) { lcd_driver_ic_type = LCD_DRV_ID_ILI9221 ; } #endif } //---------------------------------------------------------------------- // init_lcd_interface //---------------------------------------------------------------------- void init_lcd_interface(void) { kal_uint32 i; REG_LCD_ROI_CTRL=0; CLEAR_LCD_CTRL_RESET_PIN; #if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6223)||defined(MT6223P)) #if 1 //add by MagicNing SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)3); SET_LCD_PARALLEL_CE2WR_HOLD_TIME(3); SET_LCD_PARALLEL_CE2RD_SETUP_TIME(3); SET_LCD_PARALLEL_WRITE_WAIT_STATE(31);//31 SET_LCD_PARALLEL_READ_LATENCY_TIME(31); SET_LCD_ROI_CTRL_CMD_LATENCY(3); #else SET_LCD_PARALLEL_CE2WR_SETUP_TIME((kal_uint32)1); SET_LCD_PARALLEL_CE2WR_HOLD_TIME(1); SET_LCD_PARALLEL_CE2RD_SETUP_TIME(1); SET_LCD_PARALLEL_WRITE_WAIT_STATE(2); SET_LCD_PARALLEL_READ_LATENCY_TIME(2); SET_LCD_ROI_CTRL_CMD_LATENCY(2); #endif #if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6223)||defined(MT6223P)) #if (defined(LCD_16BIT_MODE)) SET_LCD_PARALLEL_16BIT_DATA_BUS;//ywm++ 20060518 #elif (defined(LCD_18BIT_MODE)) GPIO_ModeSetup(55, 1); *((volatile unsigned short *) 0x801201B0) |= 0x4000; *((volatile unsigned short *) 0x801201D0) |= 0x0001; SET_LCD_PARALLEL_18BIT_DATA_BUS; #elif (defined(LCD_8BIT_MODE)) SET_LCD_PARALLEL_8BIT_DATA_BUS; #endif /* // XXX LCD GAMMA Here!! SET_LCD_PARALLEL_GAMMA_R_TABLE(LCD_PARALLEL_GAMMA_DISABLE); SET_LCD_PARALLEL_GAMMA_G_TABLE(LCD_PARALLEL_GAMMA_DISABLE); SET_LCD_PARALLEL_GAMMA_B_TABLE(LCD_PARALLEL_GAMMA_DISABLE); */ /*not support*/ // for(i=0;i<62;i++) // SET_GAMMA_TABLE(LCD_GAMMA_TABLE0, i, i); // SET_GAMMA_TABLE(LCD_GAMMA_TABLE0, 62, 61); // SET_GAMMA_TABLE(LCD_GAMMA_TABLE0, 63, 61); /*not support*/ //SET_LCD_PARALLEL_GAMMA_R_TABLE(LCD_PARALLEL_GAMMA_TABLE0); //SET_LCD_PARALLEL_GAMMA_G_TABLE(LCD_PARALLEL_GAMMA_TABLE0); //SET_LCD_PARALLEL_GAMMA_B_TABLE(LCD_PARALLEL_GAMMA_TABLE0); #endif #if (defined(MT6219)) DISABLE_LCD_PARALLEL_SYNC; #endif #endif Delayms(120); SET_LCD_CTRL_RESET_PIN; Delayms(100); //(0x20000); //ywm++ 20060524 } /* init_lcd_interface() */ /*============================================================== * DRIVE_IC_R61500 ==============================================================*/ #if defined(DRIVE_IC_R61500) void LCD_SetPageAddr(kal_uint8 start_page, kal_uint8 end_page) { LCD_CtrlWrite_R61500(0x42); LCD_CtrlWrite_R61500(start_page+2); //yypp LCD_CtrlWrite_R61500(end_page+2); } void LCD_SetColAddr(kal_uint8 start_column, kal_uint8 end_column) { LCD_CtrlWrite_R61500(0x43); LCD_CtrlWrite_R61500(start_column); LCD_CtrlWrite_R61500(end_column); } void LCD_EnterSleep_R61500(void) { LCD_CtrlWrite_R61500(0x50); LCD_CtrlWrite_R61500(0x2d); LCD_CtrlWrite_R61500(0x02); LCD_CtrlWrite_R61500(0x00); LCD_CtrlWrite_R61500(0x20); LCD_CtrlWrite_R61500(0x00); LCD_CtrlWrite_R61500(0x26); LCD_CtrlWrite_R61500(0x0f); LCD_CtrlWrite_R61500(0x26); LCD_CtrlWrite_R61500(0x09); LCD_CtrlWrite_R61500(0x26); LCD_CtrlWrite_R61500(0x01); LCD_CtrlWrite_R61500(0x26); LCD_CtrlWrite_R61500(0x00); } void LCD_ExitSleep_R61500(void) { LCD_CtrlWrite_R61500(0x2C); Delayms(20); LCD_CtrlWrite_R61500(0x02); LCD_CtrlWrite_R61500(0x01); //SET INTERNAL OCS ON Delayms(20); LCD_CtrlWrite_R61500(0x26); LCD_CtrlWrite_R61500(0x01); //BOOSTER1 ON Delayms(20); LCD_CtrlWrite_R61500(0x26); LCD_CtrlWrite_R61500(0x09); //BOOSTER1 ON AND AMP ON Delayms(20); LCD_CtrlWrite_R61500(0x26); LCD_CtrlWrite_R61500(0x0B); //BOOSTER2 ON AND AMP ON Delayms(20); LCD_CtrlWrite_R61500(0x26); LCD_CtrlWrite_R61500(0x0F); //BOOSTER3 ON AND AMP ON Delayms(100); LCD_CtrlWrite_R61500(0x20); LCD_CtrlWrite_R61500(0x0a); Delayms(100); LCD_CtrlWrite_R61500(0x51); Delayms(500); } void LCD_Partial_On_R61500(kal_uint16 start_page,kal_uint16 end_page) { #if 0 #if (defined(LCD_CMD_DMA_MODE)) #if (defined(LCD_8BIT_MODE)) LCD_CtrlWrite_R61500(0x0042); LCD_DataWrite_R61500(((end_page&0xFF)<<8)|(start_page&0xFF)); #elif (defined(LCD_9BIT_MODE)) #elif (defined(LCD_18BIT_MODE)) #elif (defined(LCD_16BIT_MODE)) SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0042&0xFF00) )|((0x0042&0xFF) )); SET_LCD_CMD_PARAMETER(1,LCD_DATA,((end_page&0xFF) <<8)|((start_page&0xFF) )); LCD_SEND_DMA_CMD(2); #endif #else LCD_CtrlWrite_R61500(0x0042); LCD_DataWrite_R61500((start_page&0xFF)|((end_page&0xFF)<<8)); #endif #endif } void LCD_Partial_Off_R61500(void) { #if 0 #if (defined(LCD_CMD_DMA_MODE)) #if (defined(LCD_8BIT_MODE)) LCD_CtrlWrite_R61500(0x0042); LCD_DataWrite_R61500(0xDB00); #elif (defined(LCD_9BIT_MODE)) #elif (defined(LCD_18BIT_MODE)) #elif (defined(LCD_16BIT_MODE)) SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0042&0xFF00) )|((0x0042&0xFF) )); SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0xDB00&0xFF00) )|((0xDB00&0xFF) )); LCD_SEND_DMA_CMD(2); #endif #else LCD_CtrlWrite_R61500(0x0042); LCD_DataWrite_R61500(0xDB00); #endif #endif } kal_uint8 LCD_Partial_line_R61500(void) { return 1; /* partial display in 1 line alignment */ } void LCD_blockClear_R61500(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data) { kal_uint16 LCD_x; kal_uint16 LCD_y; LCD_SetPageAddr(x1,x2); LCD_SetColAddr(y1,y2); for(LCD_y=y1;LCD_y<=y2;LCD_y++) { for(LCD_x=x1;LCD_x<=x2;LCD_x++) { LCD_DataWrite_R61500(data); } } } void LCD_ClearAll_R61500(kal_uint16 data) { LCD_blockClear_R61500(0,0,LCD_WIDTH-1,LCD_HEIGHT-1,data); } void LCD_set_reg(kal_uint16 reg_index, kal_uint16 reg_data) { LCD_CtrlWrite_R61500(reg_index); LCD_DataWrite_R61500(reg_data); } void LCD_Init_R61500(kal_uint32 bkground, void **buf_addr) { volatile kal_uint32 i; kal_uint16 background = (kal_uint16)bkground; kal_uint16 read_data; init_lcd_interface(); DRV_WriteReg(GPIO_MODE1,0x5554); DRV_WriteReg(GPIO_MODE2,0x1555); DRV_WriteReg(GPIO_MODE3,0x4500); LCD_CtrlWrite_R61500(0x2C); //Standby mode OFF Delayms(20); //LCD_CtrlWrite_R61500(0xEB); //Sets MTP mode on //Delayms(5); LCD_CtrlWrite_R61500(0x02); LCD_CtrlWrite_R61500(0x01); //OSC ON Delayms(20); LCD_CtrlWrite_R61500(0x26); LCD_CtrlWrite_R61500(0x01); //DCDC1 ON Delayms(20); LCD_CtrlWrite_R61500(0x26); LCD_CtrlWrite_R61500(0x09); //AMP ON Delayms(20); LCD_CtrlWrite_R61500(0x26); LCD_CtrlWrite_R61500(0x0b); //DCDC2 ON Delayms(20); LCD_CtrlWrite_R61500(0x26); LCD_CtrlWrite_R61500(0x0f); //DCDC3 ON Delayms(20); LCD_CtrlWrite_R61500(0x28); LCD_CtrlWrite_R61500(0x01); //Temperature Compensation Set LCD_CtrlWrite_R61500(0x45); LCD_CtrlWrite_R61500(0x00); //RAM Skip Area Set LCD_CtrlWrite_R61500(0x53); LCD_CtrlWrite_R61500(0x00); //Specified Display Pattern Set : Normal display LCD_CtrlWrite_R61500(0x10); LCD_CtrlWrite_R61500(0x25); //0x23/0x25//Driver Output Mode Set : Display Duty(1/162)、SDIR/SWP/CDR LCD_CtrlWrite_R61500(0x20); LCD_CtrlWrite_R61500(0x0A); //0x02//DC-DC Select LCD_CtrlWrite_R61500(0x24); LCD_CtrlWrite_R61500(0x11); //0x00//DCDC Clock Division Set LCD_CtrlWrite_R61500(0x30); LCD_CtrlWrite_R61500(0x05); //0x02/0x09/0x0E//Addressing Mode Set LCD_CtrlWrite_R61500(0x32); LCD_CtrlWrite_R61500(0x0E); //0x00//Row Vector Mode Set LCD_CtrlWrite_R61500(0x40); LCD_CtrlWrite_R61500(0x00); //Entry Mode Set LCD_CtrlWrite_R61500(0x42); LCD_CtrlWrite_R61500(0x02); LCD_CtrlWrite_R61500(0xA1); //X ADDRESS Delayms(1); LCD_CtrlWrite_R61500(0x43); LCD_CtrlWrite_R61500(0x00); LCD_CtrlWrite_R61500(0x7F); //Y ADDRESS Delayms(1); LCD_CtrlWrite_R61500(0x34); LCD_CtrlWrite_R61500(0x90); //0x92/0x88/0xD9//N-block inversion Set LCD_CtrlWrite_R61500(0x2A); LCD_CtrlWrite_R61500(0xbF);// modify by MagicNing from 0xbf //Bontrast Control (1) //in normal display mode and partial display mode 0 LCD_CtrlWrite_R61500(0x2B); LCD_CtrlWrite_R61500(0x54);//Contrast Control (2) //in partial display mode 1 LCD_CtrlWrite_R61500(0x22); LCD_CtrlWrite_R61500(0x11); //Bias Set LCD_CtrlWrite_R61500(0x55); LCD_CtrlWrite_R61500(0x01); //0x00//Partial Display Mode Set LCD_CtrlWrite_R61500(0x36); LCD_CtrlWrite_R61500(0x00); //Frame Frequency control LCD_CtrlWrite_R61500(0x5A); LCD_CtrlWrite_R61500(0x00); //Scroll Start Line Set Delayms(100); LCD_CtrlWrite_R61500(0x51); //Turns the display ON LCD_ClearAll_R61500(0xFFFF); Delayms(50); /* turn on backlight */ // *((volatile unsigned short *) 0x80120150) &= 0xF3FF; // *((volatile unsigned short *) 0x80120000) |= 0x20; // *((volatile unsigned short *) 0x801200C0) |= 0x20; } //ywm++ 20060525 void LCD_PWRON_R61500(kal_bool on) { //ywm++ 20050525 if(on) { LCD_ExitSleep_R61500(); } else { LCD_EnterSleep_R61500(); } //ywm-- 20050525 } void LCD_SetContrast_R61500(kal_uint8 level) { } void LCD_ON_R61500(kal_bool on) { #if 1 if (on) { LCD_CtrlWrite_R61500(0x51); } else { LCD_CtrlWrite_R61500(0x50); } #else //ywm++ 20050525 if(on) { LCD_ExitSleep_R61500(); } else { LCD_EnterSleep_R61500(); } //ywm-- 20050525 #endif } void LCD_BlockWrite_R61500(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy) { LCD_SetColAddr(startx, endx); LCD_SetPageAddr(starty,endy); LCD_CtrlWrite_R61500(0x51); //Turns the display ON DISABLE_LCD_TRANSFER_COMPLETE_INT; DISABLE_LCD_ROI_CTRL_CMD_FIRST; while (LCD_IS_RUNNING){}; START_LCD_TRANSFER; } void LCD_Size_R61500(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height) { *out_LCD_width = LCD_WIDTH; *out_LCD_height = LCD_HEIGHT; } /*Engineering mode*/ kal_uint8 LCD_GetParm_R61500(lcd_func_type type) { switch(type) { case lcd_Bais_func: return 1; case lcd_Contrast_func: return 1; case lcd_LineRate_func: return 4; case lcd_Temperature_Compensation_func: return 4; default: ASSERT(0); return 100; } } void LCD_SetBias_R61500(kal_uint8 *bias) { } void LCD_Contrast_R61500(kal_uint8 *contrast) { } void LCD_LineRate_R61500(kal_uint8 *linerate) { } void LCD_Temp_Compensate_R61500(kal_uint8 *compensate) { } void LCD_Set_Scan_Direction_R61500(kal_uint8 rotate_value) { } #endif /*============================================================== * DRIVE_IC_S6B33BF ==============================================================*/ #if defined(DRIVE_IC_S6B33BF) void LCD_SetPageAddr_S6B33BF(kal_uint8 start_page, kal_uint8 end_page) { LCD_CtrlWrite_S6B33BF(0x42); LCD_CtrlWrite_S6B33BF(start_page); LCD_CtrlWrite_S6B33BF(end_page); } void LCD_SetColAddr_S6B33BF(kal_uint8 start_column, kal_uint8 end_column) { LCD_CtrlWrite_S6B33BF(0x43); LCD_CtrlWrite_S6B33BF(start_column+4); LCD_CtrlWrite_S6B33BF(end_column+4); } void LCD_EnterSleep_S6B33BF(void) { LCD_CtrlWrite_S6B33BF(0x50); LCD_CtrlWrite_S6B33BF(0x2d); LCD_CtrlWrite_S6B33BF(0x02); LCD_CtrlWrite_S6B33BF(0x00); LCD_CtrlWrite_S6B33BF(0x20); LCD_CtrlWrite_S6B33BF(0x00); LCD_CtrlWrite_S6B33BF(0x26); LCD_CtrlWrite_S6B33BF(0x0f); LCD_CtrlWrite_S6B33BF(0x26); LCD_CtrlWrite_S6B33BF(0x09); LCD_CtrlWrite_S6B33BF(0x26); LCD_CtrlWrite_S6B33BF(0x01); LCD_CtrlWrite_S6B33BF(0x26); LCD_CtrlWrite_S6B33BF(0x00); } void LCD_ExitSleep_S6B33BF(void) { LCD_CtrlWrite_S6B33BF(0x2C); Delayms(20); LCD_CtrlWrite_S6B33BF(0x02); LCD_CtrlWrite_S6B33BF(0x01); //SET INTERNAL OCS ON Delayms(20); LCD_CtrlWrite_S6B33BF(0x26); LCD_CtrlWrite_S6B33BF(0x01); //BOOSTER1 ON Delayms(20); LCD_CtrlWrite_S6B33BF(0x26); LCD_CtrlWrite_S6B33BF(0x09); //BOOSTER1 ON AND AMP ON Delayms(20); LCD_CtrlWrite_S6B33BF(0x26); LCD_CtrlWrite_S6B33BF(0x0B); //BOOSTER2 ON AND AMP ON Delayms(20); LCD_CtrlWrite_S6B33BF(0x26); LCD_CtrlWrite_S6B33BF(0x0F); //BOOSTER3 ON AND AMP ON Delayms(100); LCD_CtrlWrite_S6B33BF(0x20); LCD_CtrlWrite_S6B33BF(0x0a); Delayms(100); LCD_CtrlWrite_S6B33BF(0x51); // Delayms(500); } void LCD_Partial_On_S6B33BF(kal_uint16 start_page,kal_uint16 end_page) { #if 0 LCD_CtrlWrite_R61500(0x0042); LCD_DataWrite_R61500((start_page&0xFF)|((end_page&0xFF)<<8)); #endif } void LCD_Partial_Off_S6B33BF(void) { #if 0 LCD_CtrlWrite_R61500(0x0042); LCD_DataWrite_R61500(0xDB00); #endif } kal_uint8 LCD_Partial_line_S6B33BF(void) { return 1; /* partial display in 1 line alignment */ } void LCD_blockClear_S6B33BF(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data) { kal_uint16 LCD_x; kal_uint16 LCD_y; LCD_SetPageAddr_S6B33BF(x1,x2); LCD_SetColAddr_S6B33BF(y1,y2); for(LCD_y=y1;LCD_y<=y2;LCD_y++) { for(LCD_x=x1;LCD_x<=x2;LCD_x++) { LCD_DataWrite_S6B33BF(data); } } } void LCD_ClearAll_S6B33BF(kal_uint16 data) { LCD_blockClear_S6B33BF(0,0,LCD_WIDTH-1,LCD_HEIGHT-1,data); } void LCD_Init_S6B33BF(kal_uint32 bkground, void **buf_addr) { volatile kal_uint32 i; kal_uint16 background = (kal_uint16)bkground; kal_uint16 read_data; init_lcd_interface(); DRV_WriteReg(GPIO_MODE1,0x5554); DRV_WriteReg(GPIO_MODE2,0x1555); DRV_WriteReg(GPIO_MODE3,0x4500); LCD_CtrlWrite_S6B33BF(0x2C); //Standby mode OFF Delayms(20); //LCD_CtrlWrite_S6B33BF(0xEB); //Sets MTP mode on //Delayms(5); LCD_CtrlWrite_S6B33BF(0x02); LCD_CtrlWrite_S6B33BF(0x01); //OSC ON Delayms(20); LCD_CtrlWrite_S6B33BF(0x26); LCD_CtrlWrite_S6B33BF(0x01); //DCDC1 ON Delayms(20); LCD_CtrlWrite_S6B33BF(0x26); LCD_CtrlWrite_S6B33BF(0x09); //AMP ON Delayms(20); LCD_CtrlWrite_S6B33BF(0x26); LCD_CtrlWrite_S6B33BF(0x0b); //DCDC2 ON Delayms(20); LCD_CtrlWrite_S6B33BF(0x26); LCD_CtrlWrite_S6B33BF(0x0f); //DCDC3 ON Delayms(20); LCD_CtrlWrite_S6B33BF(0x28); LCD_CtrlWrite_S6B33BF(0x01); //Temperature Compensation Set LCD_CtrlWrite_S6B33BF(0x45); LCD_CtrlWrite_S6B33BF(0x00); //RAM Skip Area Set LCD_CtrlWrite_S6B33BF(0x53); LCD_CtrlWrite_S6B33BF(0x00); //Specified Display Pattern Set : Normal display LCD_CtrlWrite_S6B33BF(0x10); LCD_CtrlWrite_S6B33BF(0x25); //0x23/0x25//Driver Output Mode Set : Display Duty(1/162)、SDIR/SWP/CDR LCD_CtrlWrite_S6B33BF(0x20); LCD_CtrlWrite_S6B33BF(0x0A); //0x02//DC-DC Select LCD_CtrlWrite_S6B33BF(0x24); LCD_CtrlWrite_S6B33BF(0x11); //0x00//DCDC Clock Division Set LCD_CtrlWrite_S6B33BF(0x30); LCD_CtrlWrite_S6B33BF(0x05); //0x02/0x09/0x0E//Addressing Mode Set LCD_CtrlWrite_S6B33BF(0x32); LCD_CtrlWrite_S6B33BF(0x0E); //0x00//Row Vector Mode Set LCD_CtrlWrite_S6B33BF(0x40); LCD_CtrlWrite_S6B33BF(0x00); //Entry Mode Set //add by MagicNing LCD_CtrlWrite_S6B33BF(0x21); LCD_CtrlWrite_S6B33BF(0x00); LCD_CtrlWrite_S6B33BF(0xBF); //X ADDRESS LCD_CtrlWrite_S6B33BF(0x31); LCD_CtrlWrite_S6B33BF(0x00); LCD_CtrlWrite_S6B33BF(0x83); //Y ADDRESS //End MagicNing LCD_CtrlWrite_S6B33BF(0x42); LCD_CtrlWrite_S6B33BF(0x00); LCD_CtrlWrite_S6B33BF(0xBF); //X ADDRESS Delayms(1); LCD_CtrlWrite_S6B33BF(0x43); LCD_CtrlWrite_S6B33BF(0x00); LCD_CtrlWrite_S6B33BF(0x83); //Y ADDRESS Delayms(1); LCD_CtrlWrite_S6B33BF(0x34); LCD_CtrlWrite_S6B33BF(0x90); //0x92/0x88/0xD9//N-block inversion Set LCD_CtrlWrite_S6B33BF(0x2A); LCD_CtrlWrite_S6B33BF(0xbF);// modify by MagicNing from 0xbf //Bontrast Control (1) //in normal display mode and partial display mode 0 LCD_CtrlWrite_S6B33BF(0x2B); LCD_CtrlWrite_S6B33BF(0x54);//Contrast Control (2) //in partial display mode 1 LCD_CtrlWrite_S6B33BF(0x22); LCD_CtrlWrite_S6B33BF(0x11); //Bias Set LCD_CtrlWrite_S6B33BF(0x55); LCD_CtrlWrite_S6B33BF(0x01); //0x00//Partial Display Mode Set LCD_CtrlWrite_S6B33BF(0x36); LCD_CtrlWrite_S6B33BF(0x00); //Frame Frequency control LCD_CtrlWrite_S6B33BF(0x5A); LCD_CtrlWrite_S6B33BF(0x00); //Scroll Start Line Set Delayms(100); LCD_CtrlWrite_S6B33BF(0x51); //Turns the display ON LCD_ClearAll_S6B33BF(0x0000); } void LCD_PWRON_S6B33BF(kal_bool on) { if(on) { LCD_ExitSleep_S6B33BF(); } else { LCD_EnterSleep_S6B33BF(); } } void LCD_SetContrast_S6B33BF(kal_uint8 level) { } void LCD_ON_S6B33BF(kal_bool on) { if (on) { LCD_CtrlWrite_S6B33BF(0x51); } else { LCD_CtrlWrite_S6B33BF(0x50); } } void LCD_BlockWrite_S6B33BF(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy) { LCD_SetColAddr_S6B33BF(startx, endx); LCD_SetPageAddr_S6B33BF(starty,endy); LCD_CtrlWrite_S6B33BF(0x51); //Turns the display ON DISABLE_LCD_TRANSFER_COMPLETE_INT; DISABLE_LCD_ROI_CTRL_CMD_FIRST; while (LCD_IS_RUNNING){}; START_LCD_TRANSFER; } void LCD_Size_S6B33BF(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height) { *out_LCD_width = LCD_WIDTH; *out_LCD_height = LCD_HEIGHT; } /*Engineering mode*/ kal_uint8 LCD_GetParm_S6B33BF(lcd_func_type type) { switch(type) { case lcd_Bais_func: return 1; case lcd_Contrast_func: return 1; case lcd_LineRate_func: return 4; case lcd_Temperature_Compensation_func: return 4; default: ASSERT(0); return 100; } } void LCD_SetBias_S6B33BF(kal_uint8 *bias) { } void LCD_Contrast_S6B33BF(kal_uint8 *contrast) { } void LCD_LineRate_S6B33BF(kal_uint8 *linerate) { } void LCD_Temp_Compensate_S6B33BF(kal_uint8 *compensate) { } void LCD_Set_Scan_Direction_S6B33BF(kal_uint8 rotate_value) { } #endif /*============================================================== * //--------- 凌达光电1.7 ST7669 132 X 162 -----------// ==============================================================*/ #if defined(DRIVE_IC_ST7669) void LCD_EnterSleep_ST7669(void) { LCD_CtrlWrite_ST7669(0x10); LCD_CtrlWrite_ST7669(0x28); } void LCD_ExitSleep_ST7669(void) { LCD_CtrlWrite_ST7669(0x11); LCD_CtrlWrite_ST7669(0x29); } void LCD_Partial_On_ST7669(kal_uint16 start_page,kal_uint16 end_page) { } void LCD_Partial_Off_ST7669(void) { } kal_uint8 LCD_Partial_line_ST7669(void) { return 1; /* partial display in 1 line alignment */ } void LCD_blockClear_ST7669(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data) { //---------- 华利维 1.75 ST7669 132 X 162 --------------// kal_uint16 i; kal_uint16 j; kal_uint8 dat1; kal_uint8 dat2; dat1 = (data>>8)&0xFF; dat2 = data&0x00FF; LCD_CtrlWrite_ST7669(0x2a); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(x1+2); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(x2+2); LCD_CtrlWrite_ST7669(0x2b); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(y1+2); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(y2+2); LCD_CtrlWrite_ST7669(0x2c); for(i=0;i<(x2-x1+1);i++) { for(j=0;j<(y2-y1+1);j++) { LCD_DataWrite_ST7669(dat1); LCD_DataWrite_ST7669(dat2); } } } void LCD_ClearAll_ST7669(kal_uint16 data) { LCD_blockClear_ST7669(0,0,LCD_WIDTH+4,LCD_HEIGHT,data); } void LCD_Init_ST7669(kal_uint32 bkground, void **buf_addr) { volatile kal_uint32 i; kal_uint16 background = (kal_uint16)bkground; kal_uint16 read_data; init_lcd_interface(); DRV_WriteReg(GPIO_MODE1,0x5554); DRV_WriteReg(GPIO_MODE2,0x1555); DRV_WriteReg(GPIO_MODE3,0x4500); //---------- 华利维 1.75 ST7669 132 X 162 --------------// //-----------start initial 3 sequence // ----- Delayms(10); LCD_CtrlWrite_ST7669(0x01); Delayms(10); //----disable autoread+manual read once---- LCD_CtrlWrite_ST7669(0xd7); LCD_DataWrite_ST7669(0xdf); LCD_CtrlWrite_ST7669(0xe0); LCD_DataWrite_ST7669(0x00); Delayms(10); LCD_CtrlWrite_ST7669(0xe3); Delayms(10); LCD_CtrlWrite_ST7669(0x0e1); //-----------sleep out---------------------- LCD_CtrlWrite_ST7669(0x28); LCD_CtrlWrite_ST7669(0x11); Delayms(10); //-----------VOP set-------------------- LCD_CtrlWrite_ST7669(0xc0); //控制亮度 // LCD_DataWrite_ST7669(0x0f); // 1701h//4001=1.72" //亮度值 LCD_DataWrite_ST7669(0x1f); // 1701h//4001=1.72" //亮度值 //jaken edit LCD_DataWrite_ST7669(0x01); //-----------OTPB set------------------- LCD_CtrlWrite_ST7669(0xc3); LCD_DataWrite_ST7669(0x04); // 0004h LCD_CtrlWrite_ST7669(0xc4); LCD_DataWrite_ST7669(0x06); Delayms(20); LCD_CtrlWrite_ST7669(0xc5); LCD_DataWrite_ST7669(0x21); // 0021h LCD_CtrlWrite_ST7669(0xcb); LCD_DataWrite_ST7669(0x01); LCD_CtrlWrite_ST7669(0xb7); LCD_DataWrite_ST7669(0x00); LCD_CtrlWrite_ST7669(0xd0); LCD_DataWrite_ST7669(0x1d); LCD_CtrlWrite_ST7669(0xbc); LCD_DataWrite_ST7669(0x04); LCD_CtrlWrite_ST7669(0xbd); LCD_DataWrite_ST7669(0x07); //------------MTP set--------------------- LCD_CtrlWrite_ST7669(0xd7); LCD_DataWrite_ST7669(0xdf); LCD_CtrlWrite_ST7669(0xb5); LCD_DataWrite_ST7669(0x8a);//0x8C // 把0xb5 寄存器改为0x8a 寄存器0xf0 的0x19 改为0x1C 可解决闪屏的问题 LCD_CtrlWrite_ST7669(0xf0); LCD_DataWrite_ST7669(0x06); LCD_DataWrite_ST7669(0x0b); LCD_DataWrite_ST7669(0x0d); LCD_DataWrite_ST7669(0x1C); //0x19 LCD_CtrlWrite_ST7669(0xb4); LCD_DataWrite_ST7669(0x18); LCD_CtrlWrite_ST7669(0x25); LCD_DataWrite_ST7669(0x3f); //----------command table 1------------- LCD_CtrlWrite_ST7669(0x20); LCD_CtrlWrite_ST7669(0x2a); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(0x02); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(0x81); LCD_CtrlWrite_ST7669(0x2b); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(0x02); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(0xa1); LCD_CtrlWrite_ST7669(0x3a); LCD_DataWrite_ST7669(0x05); LCD_CtrlWrite_ST7669(0x36); LCD_DataWrite_ST7669(0xc8); LCD_CtrlWrite_ST7669(0xbb); LCD_DataWrite_ST7669(0x26); LCD_CtrlWrite_ST7669(0xb0); LCD_DataWrite_ST7669(0xa1); //-----------gamma table set---------- LCD_CtrlWrite_ST7669(0xf9); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(0x03); LCD_DataWrite_ST7669(0x05); LCD_DataWrite_ST7669(0x07); LCD_DataWrite_ST7669(0x09); LCD_DataWrite_ST7669(0x0b); LCD_DataWrite_ST7669(0x0d); LCD_DataWrite_ST7669(0x0f); LCD_DataWrite_ST7669(0x11); LCD_DataWrite_ST7669(0x13); LCD_DataWrite_ST7669(0x15); LCD_DataWrite_ST7669(0x17); LCD_DataWrite_ST7669(0x19); LCD_DataWrite_ST7669(0x1b); LCD_DataWrite_ST7669(0x1d); LCD_DataWrite_ST7669(0x1f); //-------- display on---------- LCD_CtrlWrite_ST7669(0x29); LCD_ClearAll_ST7669(0x0000); } void LCD_PWRON_ST7669(kal_bool on) { if(on) { LCD_ExitSleep_ST7669(); } else { LCD_EnterSleep_ST7669(); } } void LCD_SetContrast_ST7669(kal_uint8 level) { } void LCD_ON_ST7669(kal_bool on) { if(on) { LCD_ExitSleep_ST7669(); } else { LCD_EnterSleep_ST7669(); } } void LCD_BlockWrite_ST7669(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy) { DISABLE_LCD_TRANSFER_COMPLETE_INT; DISABLE_LCD_ROI_CTRL_CMD_FIRST; while (LCD_IS_RUNNING){}; //---------- 华利维 1.75 ST7669 132 X 162 --------------// LCD_CtrlWrite_ST7669(0x2a);// set segment address LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(startx+2); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(endx+2); LCD_CtrlWrite_ST7669(0x2b);//set page address LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(starty+2); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(endy+2); LCD_CtrlWrite_ST7669(0x2c); START_LCD_TRANSFER; } void LCD_Size_ST7669(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height) { *out_LCD_width = LCD_WIDTH; *out_LCD_height = LCD_HEIGHT; } /*Engineering mode*/ kal_uint8 LCD_GetParm_ST7669(lcd_func_type type) { switch(type) { case lcd_Bais_func: return 1; case lcd_Contrast_func: return 1; case lcd_LineRate_func: return 4; case lcd_Temperature_Compensation_func: return 4; default: ASSERT(0); return 100; } } void LCD_SetBias_ST7669(kal_uint8 *bias) { } void LCD_Contrast_ST7669(kal_uint8 *contrast) { } void LCD_LineRate_ST7669(kal_uint8 *linerate) { } void LCD_Temp_Compensate_ST7669(kal_uint8 *compensate) { } void LCD_Set_Scan_Direction_ST7669(kal_uint8 rotate_value) { } #endif /*============================================================== * //--------- 凌达光电1.7 ST7669V 132 X 162 -----------// ==============================================================*/ #if defined(DRIVE_IC_ST7669V) void LCD_EnterSleep_ST7669V(void) { LCD_CtrlWrite_ST7669(0x10); LCD_CtrlWrite_ST7669(0x28); } void LCD_ExitSleep_ST7669V(void) { LCD_CtrlWrite_ST7669(0x11); LCD_CtrlWrite_ST7669(0x29); } void LCD_Partial_On_ST7669V(kal_uint16 start_page,kal_uint16 end_page) { } void LCD_Partial_Off_ST7669V(void) { } kal_uint8 LCD_Partial_line_ST7669V(void) { return 1; /* partial display in 1 line alignment */ } void LCD_blockClear_ST7669V(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data) { kal_uint16 i; kal_uint16 j; kal_uint8 dat1; kal_uint8 dat2; dat1 = (data>>8)&0xFF; dat2 = data&0x00FF; LCD_CtrlWrite_ST7669(0x2a);// set segment address LCD_DataWrite_ST7669(0x00); //0x00 //jaken by LCD_DataWrite_ST7669(x1+4); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(x2+4); LCD_CtrlWrite_ST7669(0x2b);//set page address LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(y1+2); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(y2+2); LCD_CtrlWrite_ST7669(0x2c); for(i=0;i<(x2-x1+1);i++) { for(j=0;j<(y2-y1+1);j++) { LCD_DataWrite_ST7669(dat1); LCD_DataWrite_ST7669(dat2); } } } void LCD_ClearAll_ST7669V(kal_uint16 data) { LCD_blockClear_ST7669V(0,0,LCD_WIDTH-1,LCD_HEIGHT-1,data); } void LCD_Init_ST7669V(kal_uint32 bkground, void **buf_addr) { volatile kal_uint32 i; kal_uint16 background = (kal_uint16)bkground; kal_uint16 read_data; init_lcd_interface(); DRV_WriteReg(GPIO_MODE1,0x5554); DRV_WriteReg(GPIO_MODE2,0x1555); DRV_WriteReg(GPIO_MODE3,0x4500); Delayms(200); LCD_CtrlWrite_ST7669(0x11); //sleep out Delayms(100); LCD_CtrlWrite_ST7669(0xd7); LCD_DataWrite_ST7669(0xdf); LCD_CtrlWrite_ST7669(0xe0); LCD_DataWrite_ST7669(0x00); Delayms(100); LCD_CtrlWrite_ST7669(0xe3); Delayms(200); LCD_CtrlWrite_ST7669(0xe1); LCD_CtrlWrite_ST7669(0xca); LCD_DataWrite_ST7669(0x05); LCD_CtrlWrite_ST7669(0xc3); LCD_DataWrite_ST7669(0x06); LCD_CtrlWrite_ST7669(0xc4); LCD_DataWrite_ST7669(0x07); LCD_CtrlWrite_ST7669(0xc5); LCD_DataWrite_ST7669(0x00); LCD_CtrlWrite_ST7669(0xc6); LCD_DataWrite_ST7669(0x00); LCD_CtrlWrite_ST7669(0xcb); LCD_DataWrite_ST7669(0x01); LCD_CtrlWrite_ST7669(0x25); //--- 对比度---// LCD_DataWrite_ST7669(0x16); //62 LCD_CtrlWrite_ST7669(0xc0); //亮度 LCD_DataWrite_ST7669(0xF0); LCD_DataWrite_ST7669(0x00); // add wunanqiang //------------MTP set--------------------- LCD_CtrlWrite_ST7669(0xd7); LCD_DataWrite_ST7669(0x9f);//0xdf LCD_CtrlWrite_ST7669(0xc7); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(0x00); LCD_CtrlWrite_ST7669(0xb5); LCD_DataWrite_ST7669(0x8a);//0x8C // 把0xb5 寄存器改为0x8a 寄存器0xf0 的0x19 改为0x1C 可解决闪屏的问题 LCD_CtrlWrite_ST7669(0xf0); LCD_DataWrite_ST7669(0x06); LCD_DataWrite_ST7669(0x0b); LCD_DataWrite_ST7669(0x0d); LCD_DataWrite_ST7669(0x1C); //0x19 //end add LCD_CtrlWrite_ST7669(0x3a); LCD_DataWrite_ST7669(0x05); LCD_CtrlWrite_ST7669(0x36); LCD_DataWrite_ST7669(0xC0); //扫描方向 //LCD_DataWrite_ST7669(0xC0);// add by zengping 2008-1-22屏幕掉转 //writed(0xd4); LCD_CtrlWrite_ST7669(0x29); //display on //the end of initial code for ST7669 LCD_ClearAll_ST7669V(0x0000); } void LCD_PWRON_ST7669V(kal_bool on) { if(on) { LCD_ExitSleep_ST7669V(); } else { LCD_EnterSleep_ST7669V(); } } void LCD_SetContrast_ST7669V(kal_uint8 level) { } void LCD_ON_ST7669V(kal_bool on) { if(on) { LCD_ExitSleep_ST7669V(); } else { LCD_EnterSleep_ST7669V(); } } void LCD_BlockWrite_ST7669V(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy) { while (LCD_IS_RUNNING){}; DISABLE_LCD_TRANSFER_COMPLETE_INT; DISABLE_LCD_ROI_CTRL_CMD_FIRST; LCD_CtrlWrite_ST7669(0x2a);// set segment address LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(startx+2); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(endx+2); LCD_CtrlWrite_ST7669(0x2b);//set page address LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(starty+2); LCD_DataWrite_ST7669(0x00); LCD_DataWrite_ST7669(endy+2); LCD_CtrlWrite_ST7669(0x2c); START_LCD_TRANSFER; } void LCD_Size_ST7669V(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height) { *out_LCD_width = LCD_WIDTH; *out_LCD_height = LCD_HEIGHT; } /*Engineering mode*/ kal_uint8 LCD_GetParm_ST7669V(lcd_func_type type) { switch(type) { case lcd_Bais_func: return 1; case lcd_Contrast_func: return 1; case lcd_LineRate_func: return 4; case lcd_Temperature_Compensation_func: return 4; default: ASSERT(0); return 100; } } void LCD_SetBias_ST7669V(kal_uint8 *bias) { } void LCD_Contrast_ST7669V(kal_uint8 *contrast) { } void LCD_LineRate_ST7669V(kal_uint8 *linerate) { } void LCD_Temp_Compensate_ST7669V(kal_uint8 *compensate) { } void LCD_Set_Scan_Direction_ST7669V(kal_uint8 rotate_value) { } #endif /*============================================================== * DRIVE_IC_R61503 ==============================================================*/ #if defined(DRIVE_IC_R61503) //---------------------------------------------------------------------- // LCD_EnterSleep_R61503 //---------------------------------------------------------------------- void LCD_EnterSleep_R61503(void) { lcd_power_ctrl_shadow1 |= 0x02; lcd_power_ctrl_shadow3 &= ~0x10; lcd_power_ctrl_shadow4 &= ~0x2000; /*display off*/ LCD_CtrlWrite_R61503(0x0007);LCD_DataWrite_R61503(0x0002);//display off LCD_CtrlWrite_R61503(0x0012);LCD_DataWrite_R61503(0x0000); Delayms(40); LCD_CtrlWrite_R61503(0x0007);LCD_DataWrite_R61503(0x0000);//display off Delayms(40); /*power off*/ LCD_CtrlWrite_R61503(0x0010);LCD_DataWrite_R61503(0x0180); LCD_CtrlWrite_R61503(0x0011);LCD_DataWrite_R61503(0x0660); LCD_CtrlWrite_R61503(0x0012);LCD_DataWrite_R61503(0x1024); LCD_CtrlWrite_R61503(0x0013);LCD_DataWrite_R61503(0x0E05); LCD_CtrlWrite_R61503(0x0010);LCD_DataWrite_R61503(0x0100); Delayms(40); /*sleep mode*/ LCD_CtrlWrite_R61503(0x0010); LCD_DataWrite_R61503(0x0002); } //---------------------------------------------------------------------- // LCD_ExitSleep_R61503 //---------------------------------------------------------------------- void LCD_ExitSleep_R61503(void) { /*exit sleep mode*/ LCD_CtrlWrite_R61503(0x0010); LCD_DataWrite_R61503(0x0000); Delayms(40); /*power on*/ LCD_CtrlWrite_R61503(0x0010);LCD_DataWrite_R61503(0x11B0); LCD_CtrlWrite_R61503(0x0011);LCD_DataWrite_R61503(0x0000); LCD_CtrlWrite_R61503(0x0012);LCD_DataWrite_R61503(0x1115); LCD_CtrlWrite_R61503(0x0013);LCD_DataWrite_R61503(0x8c03); LCD_CtrlWrite_R61503(0x0012);LCD_DataWrite_R61503(0x1134); Delayms(40); /*display on*/ LCD_CtrlWrite_R61503(0x0007);LCD_DataWrite_R61503(0x0001); Delayms(40); LCD_CtrlWrite_R61503(0x0007);LCD_DataWrite_R61503(0x0021); Delayms(30); LCD_CtrlWrite_R61503(0x0007);LCD_DataWrite_R61503(0x0233); } //---------------------------------------------------------------------- // LCD_Partial_On_R61503 //---------------------------------------------------------------------- void LCD_Partial_On_R61503(kal_uint16 start_page,kal_uint16 end_page) { } //---------------------------------------------------------------------- // LCD_Partial_Off_R61503 //---------------------------------------------------------------------- void LCD_Partial_Off_R61503(void) { } //---------------------------------------------------------------------- // LCD_Partial_line_R61503 //---------------------------------------------------------------------- kal_uint8 LCD_Partial_line_R61503(void) { return 1; /* partial display in 1 line alignment */ } //---------------------------------------------------------------------- // LCD_blockClear_R61503 //---------------------------------------------------------------------- void LCD_blockClear_R61503(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data) { kal_uint16 LCD_x; kal_uint16 LCD_y; LCD_CtrlWrite_R61503(0x50);LCD_DataWrite_R61503(x1&0xFF); LCD_CtrlWrite_R61503(0x51);LCD_DataWrite_R61503(x2&0xFF); LCD_CtrlWrite_R61503(0x52);LCD_DataWrite_R61503(y1&0xFF); LCD_CtrlWrite_R61503(0x53);LCD_DataWrite_R61503(y2&0xFF); LCD_CtrlWrite_R61503(0x20);LCD_DataWrite_R61503(x1&0xFF); LCD_CtrlWrite_R61503(0x21);LCD_DataWrite_R61503(y1&0xFF); LCD_CtrlWrite_R61503(0x22); for(LCD_y = y1; LCD_y <= y2; LCD_y++ ) for(LCD_x = x1; LCD_x <= x2; LCD_x++ ) LCD_DataWrite_R61503(data); } //---------------------------------------------------------------------- // LCD_ClearAll_R61503 //---------------------------------------------------------------------- void LCD_ClearAll_R61503(kal_uint16 data) { LCD_blockClear_R61503(0,0,LCD_WIDTH-1,LCD_HEIGHT-1,data); } //---------------------------------------------------------------------- // LCD_Init_R61503 //---------------------------------------------------------------------- void LCD_Init_R61503(kal_uint32 bkground, void **buf_addr) { init_lcd_interface(); DRV_WriteReg(GPIO_MODE1,0x5554); DRV_WriteReg(GPIO_MODE2,0x1555); DRV_WriteReg(GPIO_MODE3,0x4500); //R61503U+LPL2.0 For GG1N4154 LCD_CtrlWrite_R61503(0x0000);LCD_DataWrite_R61503(0x0001); Delayms(20); LCD_CtrlWrite_R61503(0x0007);LCD_DataWrite_R61503(0x0000); LCD_CtrlWrite_R61503(0x0012);LCD_DataWrite_R61503(0x0000); Delayms(10); LCD_CtrlWrite_R61503(0x00A4);LCD_DataWrite_R61503(0x0001); Delayms(10); LCD_CtrlWrite_R61503(0x0030);LCD_DataWrite_R61503(0x0601); LCD_CtrlWrite_R61503(0x0031);LCD_DataWrite_R61503(0x0501); LCD_CtrlWrite_R61503(0x0032);LCD_DataWrite_R61503(0x0307); LCD_CtrlWrite_R61503(0x0033);LCD_DataWrite_R61503(0x0206); LCD_CtrlWrite_R61503(0x0034);LCD_DataWrite_R61503(0x0002); LCD_CtrlWrite_R61503(0x0035);LCD_DataWrite_R61503(0x0004); LCD_CtrlWrite_R61503(0x0036);LCD_DataWrite_R61503(0x0600); LCD_CtrlWrite_R61503(0x0037);LCD_DataWrite_R61503(0x0701); LCD_CtrlWrite_R61503(0x0038);LCD_DataWrite_R61503(0x1f0f); LCD_CtrlWrite_R61503(0x0039);LCD_DataWrite_R61503(0x0000); LCD_CtrlWrite_R61503(0x0007);LCD_DataWrite_R61503(0x0031); LCD_CtrlWrite_R61503(0x0018);LCD_DataWrite_R61503(0x0001); LCD_CtrlWrite_R61503(0x0010);LCD_DataWrite_R61503(0x11b0); LCD_CtrlWrite_R61503(0x0011);LCD_DataWrite_R61503(0x0007); LCD_CtrlWrite_R61503(0x0012);LCD_DataWrite_R61503(0x0114);// Delayms(10); LCD_CtrlWrite_R61503(0x0013);LCD_DataWrite_R61503(0x8c03);//8d07 LCD_CtrlWrite_R61503(0x0012);LCD_DataWrite_R61503(0x1115);//1114 Delayms(10); LCD_CtrlWrite_R61503(0x0001);LCD_DataWrite_R61503(0x0100); LCD_CtrlWrite_R61503(0x0002);LCD_DataWrite_R61503(0x0700); LCD_CtrlWrite_R61503(0x0003);LCD_DataWrite_R61503(0x1030); LCD_CtrlWrite_R61503(0x0008);LCD_DataWrite_R61503(0x0603); LCD_CtrlWrite_R61503(0x0070);LCD_DataWrite_R61503(0x1b00); LCD_CtrlWrite_R61503(0x0071);LCD_DataWrite_R61503(0x0001); LCD_CtrlWrite_R61503(0x0090);LCD_DataWrite_R61503(0x0004); LCD_CtrlWrite_R61503(0x0091);LCD_DataWrite_R61503(0x0000); LCD_CtrlWrite_R61503(0x0092);LCD_DataWrite_R61503(0x0002); LCD_CtrlWrite_R61503(0x0007);LCD_DataWrite_R61503(0x0001); Delayms(30); LCD_CtrlWrite_R61503(0x0007);LCD_DataWrite_R61503(0x0021); Delayms(10); LCD_CtrlWrite_R61503(0x0012);LCD_DataWrite_R61503(0x1134); Delayms(10); LCD_CtrlWrite_R61503(0x0007);LCD_DataWrite_R61503(0x0233); LCD_CtrlWrite_R61503(0x0022); LCD_ClearAll_R61503(0x0000); // Delayms(100); } //---------------------------------------------------------------------- // LCD_PWRON_R61503 //---------------------------------------------------------------------- void LCD_PWRON_R61503(kal_bool on) { if(on) { LCD_ExitSleep_R61503(); } else { LCD_EnterSleep_R61503(); } } //---------------------------------------------------------------------- // LCD_SetContrast_R61503 //---------------------------------------------------------------------- void LCD_SetContrast_R61503(kal_uint8 level) { #if defined(PWM_SET_CONTRAST) if( level >=6 ) { PWM1_Configure(200,68+(((level-6))*4)); } else { PWM1_Configure(200,20+(((level))*9)); } PWM1_Start(); #endif } //---------------------------------------------------------------------- // LCD_ON_R61503 //---------------------------------------------------------------------- void LCD_ON_R61503(kal_bool on) { if(on) { LCD_ExitSleep_R61503(); } else { LCD_EnterSleep_R61503(); } } //---------------------------------------------------------------------- // LCD_BlockWrite_R61503 //---------------------------------------------------------------------- void LCD_BlockWrite_R61503(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy) { LCD_CtrlWrite_R61503(0x50);LCD_DataWrite_R61503(startx&0xFF); LCD_CtrlWrite_R61503(0x51);LCD_DataWrite_R61503(endx&0xFF); LCD_CtrlWrite_R61503(0x52);LCD_DataWrite_R61503(starty&0xFF); LCD_CtrlWrite_R61503(0x53);LCD_DataWrite_R61503(endy&0xFF); LCD_CtrlWrite_R61503(0x20);LCD_DataWrite_R61503(startx&0xFF); LCD_CtrlWrite_R61503(0x21);LCD_DataWrite_R61503(starty&0xFF); LCD_CtrlWrite_R61503(0x22); Delayms(100); DISABLE_LCD_TRANSFER_COMPLETE_INT; DISABLE_LCD_ROI_CTRL_CMD_FIRST; while (LCD_IS_RUNNING){}; START_LCD_TRANSFER; } //---------------------------------------------------------------------- // LCD_Size_R61503 //---------------------------------------------------------------------- void LCD_Size_R61503(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height) { *out_LCD_width = LCD_WIDTH; *out_LCD_height = LCD_HEIGHT; } //---------------------------------------------------------------------- // LCD_GetParm_R61503 //---------------------------------------------------------------------- /*Engineering mode*/ kal_uint8 LCD_GetParm_R61503(lcd_func_type type) { switch(type) { case lcd_Bais_func: return 1; case lcd_Contrast_func: return 1; case lcd_LineRate_func: return 4; case lcd_Temperature_Compensation_func: return 4; default: ASSERT(0); return 100; } } //---------------------------------------------------------------------- // LCD_SetBias_R61503 //---------------------------------------------------------------------- void LCD_SetBias_R61503(kal_uint8 *bias) { } //---------------------------------------------------------------------- // LCD_Contrast_R61503 //---------------------------------------------------------------------- void LCD_Contrast_R61503(kal_uint8 *contrast) { #if defined(PWM_SET_CONTRAST) if( (*contrast) >=6 ) { PWM1_Configure(200,68+((((*contrast)-6))*4)); } else { PWM1_Configure(200,20+((((*contrast)))*9)); } PWM1_Start(); #endif } //---------------------------------------------------------------------- // LCD_LineRate_R61503 //---------------------------------------------------------------------- void LCD_LineRate_R61503(kal_uint8 *linerate) { } //---------------------------------------------------------------------- // LCD_Temp_Compensate_R61503 //---------------------------------------------------------------------- void LCD_Temp_Compensate_R61503(kal_uint8 *compensate) { } //---------------------------------------------------------------------- // LCD_Set_Scan_Direction_R61503 //---------------------------------------------------------------------- void LCD_Set_Scan_Direction_R61503(kal_uint8 rotate_value) { switch (rotate_value) { case LCD_LAYER_ROTATE_NORMAL: lcd_entry_mode_shadow = 0x1030; break; case LCD_LAYER_ROTATE_90: lcd_entry_mode_shadow = 0x1028; break; case LCD_LAYER_ROTATE_180: lcd_entry_mode_shadow = 0x1000; break; case LCD_LAYER_ROTATE_270: lcd_entry_mode_shadow = 0x1018; break; case LCD_LAYER_MIRROR: lcd_entry_mode_shadow = 0x1020; break; case LCD_LAYER_MIRROR_ROTATE_90: lcd_entry_mode_shadow = 0x1008; break; case LCD_LAYER_MIRROR_ROTATE_180: lcd_entry_mode_shadow = 0x1010; break; case LCD_LAYER_MIRROR_ROTATE_270: lcd_entry_mode_shadow = 0x1038; break; } } #endif /*============================================================== * DRIVE_IC_HX8309A ==============================================================*/ #if defined(DRIVE_IC_HX8309A) //---------------------------------------------------------------------- // LCD_EnterSleep_HX8309A //---------------------------------------------------------------------- void LCD_EnterSleep_HX8309A(void) { #if defined(__LCD_TMR_DISPLAY__) /* add lcm TMR 2007-01-03 MarkeyMa@RD4 */ LCD_MainLCD_CtrlWrite(LCD_Display1_HX8309A); LCD_MainLCD_DataWrite(0x007f); LCD_MainLCD_CtrlWrite(LCD_LCD_AC_HX8309A); LCD_MainLCD_DataWrite(0x0000); #else //display off LCD_MainLCD_CtrlWrite(LCD_Display1_HX8309A); LCD_MainLCD_DataWrite(0x0044); LCD_MainLCD_CtrlWrite(LCD_Power_Control3_HX8309A); LCD_MainLCD_DataWrite(0x0007); LCD_MainLCD_CtrlWrite(LCD_Power_Control4_HX8309A); LCD_MainLCD_DataWrite(0x0f0f); LCD_MainLCD_CtrlWrite(LCD_Power_Control1_HX8309A); LCD_MainLCD_DataWrite(0x0002); #endif } //---------------------------------------------------------------------- //
 阅读全文(159) | 回复(3)

0
顶一下

 评 论
 3楼 52RD网友(游客) 发表于 2008-11-14 20:06:00
  把它压缩让我们下载就行了嘛
 2楼 zhiganglet 发表于 2008-9-6 10:48:00
  晕,怎么看啊,大哥,能发份给小弟吗,邮箱是zhiganglet@126.com,thanks
 1楼 jaken 发表于 2008-9-5 21:40:00
  怎么是乱的,上传的时候格式是正确的呀.
9 1 :

发表点评:
昵 称: 匿名
验证码: 7861

日志搜索: