📄 lcddev_i_0.c
字号:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include "WCDTypes.h" // standard type definitions
#include "sysutil.h"
#include "lcd_api.h"
#include "globlapi.h"
#include "uhapi.h"
#include "devgpio.h"
//#include "pubparam.h"
//#include "gpio_support.h"
extern UINT8 color_Lcd_Width, color_Lcd_Height;
unsigned short *lpBitBuffer;
unsigned char lcd_inid =0;
#define LCD_CTRL_REG *((unsigned char *)0xC00000)
#define LCD_DATA_REG *((unsigned char *)0xC00002)
#define MAX_LCD_ROWS 0xA2
#define MAX_LCD_COLS 0x84
#define LCD_ROW_OFF 0x00
#define LCD_COL_OFF 0x00
void delay_ms(UINT32 delay);
void set_lcd_background_light(BOOL);
void lcm_init(void)
{
UINT i;
//;standby mode off
//standby_off
LCD_CTRL_REG = 0x2c;
delay_ms(5);
LCD_CTRL_REG = 0xEB;//turn on OTP
//set internal osc on
LCD_CTRL_REG = 0x02;
LCD_CTRL_REG = 0x01;
delay_ms(5);
//
LCD_CTRL_REG = 0x20;
LCD_CTRL_REG = 0x05;
//
LCD_CTRL_REG = 0x26;
LCD_CTRL_REG = 0x01;
delay_ms(5);
//
LCD_CTRL_REG = 0x26;
LCD_CTRL_REG = 0x09;
delay_ms(5);
//
LCD_CTRL_REG = 0x26;
LCD_CTRL_REG = 0x0b;
delay_ms(5);
//
LCD_CTRL_REG = 0x26;
LCD_CTRL_REG = 0x0f;
delay_ms(5);
//
LCD_CTRL_REG = 0x28;
LCD_CTRL_REG = 0x00;
//
LCD_CTRL_REG = 0x2e;
//
LCD_CTRL_REG = 0x45;
LCD_CTRL_REG = 0x00;
//
LCD_CTRL_REG = 0x53;
LCD_CTRL_REG = 0x00;
//
LCD_CTRL_REG = 0x10;
LCD_CTRL_REG = 0x22;
//
LCD_CTRL_REG = 0x24;
LCD_CTRL_REG = 0x22;
//
LCD_CTRL_REG = 0x30;
LCD_CTRL_REG = 0x09;
//
LCD_CTRL_REG = 0x32;
LCD_CTRL_REG = 0x0e;
//
LCD_CTRL_REG = 0x40;
LCD_CTRL_REG = 0x00;
//
LCD_CTRL_REG = 0x34;
LCD_CTRL_REG = 0x0D;
//
LCD_CTRL_REG = 0x2a;
LCD_CTRL_REG = 0x42;
delay_ms(5);
LCD_CTRL_REG = 0x2b;
LCD_CTRL_REG = 0x20;
delay_ms(5);
//
LCD_CTRL_REG = 0x22;
LCD_CTRL_REG = 0x11;
//
LCD_CTRL_REG = 0x55;
LCD_CTRL_REG = 0x00;
//
LCD_CTRL_REG = 0x56;
LCD_CTRL_REG = 0x00;
//
LCD_CTRL_REG = 0x57;
LCD_CTRL_REG = 0x9f;
//
LCD_CTRL_REG = 0x59;
LCD_CTRL_REG = 0x00;
LCD_CTRL_REG = 0x00;
LCD_CTRL_REG = 0x9f;
LCD_CTRL_REG = 0x00;
i = (UINT16)(color_Lcd_Width * color_Lcd_Height/2);
for(; i!=0 ; i--)
{
LCD_DATA_REG = 0xFF;
LCD_DATA_REG = 0xFF;
LCD_DATA_REG = 0xFF;
LCD_DATA_REG = 0xFF;
}
//;Display on
LCD_CTRL_REG = 0x51;
}
void set_lcd_background_light(BOOL b)
{
if(b)
uhGPIOWrite (PORTD_BIT4, HIGH_STATE);
else
uhGPIOWrite (PORTD_BIT4, LOW_STATE);
}
void test_lcd(void)
{
int i, j, s;
unsigned short c[] = {0xF800, 0x07E0, 0x001F};
unsigned short p;
s=sizeof(c)/sizeof(c[0]);
i=0;
while(i<3){
//data pattern
p=c[i];
i++;
//i%=s;
//p=0x001F;
if(i++&0x1)
uhGPIOWrite (PORTA_BIT4, HIGH_STATE);
else
uhGPIOWrite (PORTA_BIT4, LOW_STATE);
//Y address Area
LCD_CTRL_REG =0x43;
LCD_CTRL_REG =LCD_COL_OFF+20;
LCD_CTRL_REG=LCD_COL_OFF+MAX_LCD_COLS-1-20;
//X Address Area
LCD_CTRL_REG =0x42;
LCD_CTRL_REG =LCD_ROW_OFF+i*20+20;
LCD_CTRL_REG=LCD_ROW_OFF+(i+2)*20;
//filling data
for(j=0;j<(MAX_LCD_ROWS-40)*(MAX_LCD_COLS-40); j++){
LCD_DATA_REG=p >>8;
LCD_DATA_REG=p ;
}
}
}
void InitLCDDriver( void )
{
lpBitBuffer = (unsigned short *)GSMMalloc( color_Lcd_Width * color_Lcd_Height * 2 );
lcm_init();
//set_lcd_background_light(1);
test_lcd();
GSMmemset( (unsigned char *)lpBitBuffer, 0x00, (color_Lcd_Width * color_Lcd_Height * 2) );
lcd_inid = 1;
}
void lcm_UpdateScreen( LCD_BOX box )
{
UINT32 i, j;//, index, index1;
UINT32 startX, startY, endX, endY;
//UINT8 writeData;
startX = box.origin.x;
startY = box.origin.y;
endX = box.origin.x + box.area.width;
endY = box.origin.y + box.area.height;
//Y address Area
LCD_CTRL_REG =0x43;
LCD_CTRL_REG =LCD_COL_OFF + startX;
LCD_CTRL_REG=LCD_COL_OFF + endX - 1;
//X Address Area
LCD_CTRL_REG =0x42;
LCD_CTRL_REG =LCD_ROW_OFF + startY;
LCD_CTRL_REG=LCD_ROW_OFF + endY - 1;
//filling data
for(i=0;i<box.area.height;i++)
{
for(j=0;j<box.area.width;j++)
{
LCD_DATA_REG = (lpBitBuffer[startX+j+(i+startY)*color_Lcd_Width]) >> 8;
LCD_DATA_REG = (lpBitBuffer[startX+j+(i+startY)*color_Lcd_Width]);
}
}
}
void HwLCDSetBoxColor( unsigned char startX, unsigned char startY,
unsigned char width, unsigned char height, unsigned short color )
{
int i, j, startPos;
if( !lcd_inid )
InitLCDDriver();
startPos = startY * color_Lcd_Width + startX;
for( i = 0; i < height; i++ )
{
for( j = 0; j < width; j++ )
lpBitBuffer[startPos + (i*color_Lcd_Width+j)] = color;
}
}
void HwLCDWriteLine( unsigned short *pbScreenData, unsigned char startX,
unsigned char startY, unsigned char rowLen )
{
//?? jay
GSMmemcpy( (unsigned short *)&(lpBitBuffer[(startY * color_Lcd_Width + startX)]), (unsigned short *)pbScreenData, (rowLen*2) );
}
void HwLCDWrite( unsigned short *pbScreenData,
unsigned short int wFirstY,
unsigned short int wFirstX,
unsigned short int wYLength,
unsigned short int wXLength)
{
int i, j, startPos;
if( !lcd_inid )
InitLCDDriver();
startPos = wFirstY * color_Lcd_Width + wFirstX;
for( i = 0; i < wYLength; i++ )
{
for( j = 0; j < wXLength; j++ )
lpBitBuffer[startPos + (i*color_Lcd_Width+j)] = *pbScreenData;
}
}
void HwLCDWriteRow( unsigned char *pbScreenData, unsigned int wRow, unsigned int wHeight )
{
unsigned int i;
UINT32 offset = 0;
if( !lcd_inid )
InitLCDDriver();
for (i = wRow ; i< (wRow + wHeight) ; i ++)
{
if( i >= color_Lcd_Height) break;
GSMmemcpy ( lpBitBuffer + i*color_Lcd_Width, pbScreenData+offset, color_Lcd_Width*2);
offset += color_Lcd_Width*2;
}
}
void delay_ms(UINT32 delay)
{
UINT32 i = 0 ;
UINT32 j;
for(; i<delay ; i++)
{
j = 1000;
while(j)
j--;
}
}
void lcd_enter_standby()
{
LCD_CTRL_REG = 0x50; //display off 0x50
delay_ms(50);
LCD_CTRL_REG = 0x2D; //standby ON
delay_ms(100);
}
void lcd_exit_standby()
{
LCD_CTRL_REG = 0x2C;
//;turn on internal Osc
LCD_CTRL_REG = 0x02;
LCD_CTRL_REG = 0x01;
//;DC-DC select X1.5
LCD_CTRL_REG = 0x20;
LCD_CTRL_REG = 0x05;
//;DC/DC and AMP on/OFF (booster1/2/3 and AMP on)
LCD_CTRL_REG = 0x26;
LCD_CTRL_REG = 0x0F;
//;Temperature Compensation
//;DDRAM Burst Mode off
//;RAM skip Area off
LCD_CTRL_REG = 0x45;
LCD_CTRL_REG = 0x00;
//;Normal Display Pattern
LCD_CTRL_REG = 0x53;
LCD_CTRL_REG = 0x00;
//;Driver output mode 1/160 duty
LCD_CTRL_REG = 0x10;
LCD_CTRL_REG = 0x20;
//;DC-DC Clock Division
//;Address Mode
//;Row Vector Mode
//;Entry Mode
//;N-block Inversion
//;Contrast Control 1
LCD_CTRL_REG = 0x2A;
LCD_CTRL_REG = 0x42;
//;Contrast Control 2
//;Bias Set (1/5 and 2nd boosting step X(-4))
LCD_CTRL_REG = 0x22;
LCD_CTRL_REG = 0x11;
//;Partial Display Mode
//;Partial start line
//;Partial end line
//;Scroll mode
//;Display on
LCD_CTRL_REG = 0x51;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -