|
这几天搞了一个LCD屏,供应商给的代码贼多问题,自己调通了。驱动粘贴出来。
#define A0_UP GPIO_SetBits(GPIOC,GPIO_Pin_0)
#define A0_DOWN GPIO_ResetBits(GPIOC,GPIO_Pin_0)
#define CS_UP GPIO_SetBits(GPIOB,GPIO_Pin_4)
#define CS_DOWN GPIO_ResetBits(GPIOB,GPIO_Pin_4)
#define RST_UP GPIO_SetBits(GPIOB,GPIO_Pin_7)
#define RST_DOWN GPIO_ResetBits(GPIOB,GPIO_Pin_7)
#define SCLK_UP GPIO_SetBits(GPIOB,GPIO_Pin_5)
#define SCLK_DOWN GPIO_ResetBits(GPIOB,GPIO_Pin_5)
#define SDA_UP GPIO_SetBits(GPIOB,GPIO_Pin_6)
#define SDA_DOWN GPIO_ResetBits(GPIOB,GPIO_Pin_6)
/*
********************************************************************************
* 内部静态函数定义
********************************************************************************
*/
/*
********************************************************************************
* 全局函数定义
********************************************************************************
*/
/******************************************************************************
* 名 称: delay_us
* 功 能:
* 入口参数: 无
* 出口参数: 无
*******************************************************************************/
void delay_us(char us_value) //delay about 1 us
{
while(us_value--)
{
nop();
nop();
nop();
}
}
/******************************************************************************
* 名 称: delay_ms
* 功 能:
* 入口参数: 无
* 出口参数: 无
*******************************************************************************/
void delay_ms(int ms_value) //delay about 1 ms
{
int k;
for(k=0;k<ms_value;k++)
{
delay_us(200);
}
}
/******************************************************************************
* 名 称: delay_ms
* 功 能:
* 入口参数: 无
* 出口参数: 无
*******************************************************************************/
void wr_cmd(char x)
{
unsigned char ii,DA;
SCLK_DOWN;
CS_DOWN;
nop();
A0_DOWN;
DA=x;
for(ii=0;ii<8;ii++)
{
if((DA&0x80)==0x80)
SDA_UP;
else SDA_DOWN;
SCLK_UP;
nop();nop();nop();nop();
SCLK_DOWN;
DA=DA<<1;
}
CS_UP;
nop();
}
/******************************************************************************
* 名 称: wr_data
* 功 能:
* 入口参数: 无
* 出口参数: 无
*******************************************************************************/
void wr_data(unsigned char x)
{
unsigned char ii,DA;
SCLK_DOWN;
CS_DOWN;nop();
A0_UP;
DA=x;
for(ii=0;ii<8;ii++)
{
if((DA&0x80)==0x80)
SDA_UP;
else SDA_DOWN;
SCLK_UP;
nop();nop();nop();nop();
SCLK_DOWN;
DA=DA<<1;
}
CS_UP;nop();
}
/******************************************************************************
* 名 称: 初始化LCD
* 功 能: 初始化IO口
* 入口参数: 无
* 出口参数: 无
*******************************************************************************/
void lcd_init(void)
{
GPIO_Init(GPIOB,GPIO_Pin_7,GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(GPIOB,GPIO_Pin_6,GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(GPIOB,GPIO_Pin_5,GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(GPIOB,GPIO_Pin_4,GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(GPIOC,GPIO_Pin_0,GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(GPIOC,GPIO_Pin_1,GPIO_Mode_Out_PP_Low_Fast);
RST_UP;
delay_ms(10);
RST_DOWN;
delay_ms(50);
RST_UP;
delay_ms(10);
wr_cmd(0xe3);
wr_cmd(0xA2);
wr_cmd(0xA0);
wr_cmd(0xc8);
wr_cmd(0x2c);
wr_cmd(0x2e);
wr_cmd(0x2F);
wr_cmd(0X25);//对比度微调
wr_cmd(0x81);
wr_cmd(constr);
wr_cmd(0xAF);
wr_cmd(0x40);
delay_ms(10);
}
/******************************************************************************
* 名 称: disp_panxl
* 功 能:
* 入口参数: 无
* 出口参数: 无
*******************************************************************************/
void disp_panxl(unsigned char dat1,unsigned char dat2)
{
unsigned char ii,jj;
wr_cmd(0x40);
for(ii=0;ii<4;ii++)
{
wr_cmd(SBP+ii);
wr_cmd(0x10);
wr_cmd(0x00+QSS);
for(jj=0;jj<64;jj++)
{
wr_data(dat1);
wr_data(dat2);
}
}
for(ii=0;ii<4;ii++)
{
wr_cmd(XBP+ii);
wr_cmd(0x10);
wr_cmd(0x00+QSS);
for(jj=0;jj<64;jj++)
{
wr_data(dat1);
wr_data(dat2);
}
}
}
/******************************************************************************
* 名 称: clr_screen
* 功 能:
* 入口参数: 无
* 出口参数: 无
*******************************************************************************/
void clr_screen(void)
{
disp_panxl(0x00,0x00);
}
/******************************************************************************
* 名 称: Draw_panxel
* 功 能:
* 入口参数: 无
* 出口参数: 无
*******************************************************************************/
void Draw_panxel(uint8_t start_Row,uint8_t start_COL_H,uint8_t start_COL_L,const unsigned char * data)
{
unsigned char jj,col;
uint8_t draw[64];
memcpy_user(draw,data,64);
for(col = 0;col < 4;col ++)
{
wr_cmd(start_Row+col);
wr_cmd(start_COL_H);
wr_cmd(start_COL_L);
for(jj =0;jj<16;jj++)
{
wr_data(draw[jj+ col*16]);
}
}
}
|
评分
-
查看全部评分
|