拿到一块点阵屏幕,首先找卖家拿驱动例程
步骤
目录
1.void LCD_IO_Cfg(void)
2.void wr_cmd(u8 wrcmd)
3.void wr_data(u8 wrdata)
4.void init_lcd(void)
5.void disp_all(void)
6.void Fresh(void)
注:根据商家的时序图可以知道数据在上升沿/下降沿有效,我这里是上升沿。如下图
wr_cmd 写命令,A0=0
wr_cmd 写数据,A0=1
1.void LCD_IO_Cfg(void)
void LCD_IO_Cfg(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//CSGPIO_InitStructure.GPIO_Pin=GPIO_PIN_LCD_CS;GPIO_Init(GPIO_PORT_LCD_CS, &GPIO_InitStructure);//RESETGPIO_InitStructure.GPIO_Pin=GPIO_PIN_LCD_RESET;GPIO_Init(GPIO_PORT_LCD_RESET, &GPIO_InitStructure);//A0GPIO_InitStructure.GPIO_Pin=GPIO_PIN_LCD_A0;GPIO_Init(GPIO_PORT_LCD_A0, &GPIO_InitStructure);//SCKGPIO_InitStructure.GPIO_Pin=GPIO_PIN_LCD_SCK;GPIO_Init(GPIO_PORT_LCD_SCK, &GPIO_InitStructure);//DATAGPIO_InitStructure.GPIO_Pin=GPIO_PIN_LCD_DATA;GPIO_Init(GPIO_PORT_LCD_DATA, &GPIO_InitStructure);}
2.void wr_cmd(u8 wrcmd)
void wr_cmd(u8 wrcmd)
{u8 ii,DA;SCL_Low;CS_Low; Delay_us(LCD_DELAY_TIME);A0_Low; DA=wrcmd;for(ii=0;ii<8;ii++){ SCL_Low;Delay_us(LCD_DELAY_TIME);if((DA&0X80)==0X80){SDA_High;}else{SDA_Low;}Delay_us(LCD_DELAY_TIME);SCL_High;DA=DA<<1; }A0_High; CS_High;
}
3.void wr_data(u8 wrdata)
void wr_data(u8 wrdata)
{u8 ii,DA;SCL_Low;CS_Low; Delay_us(LCD_DELAY_TIME);A0_High; DA=wrdata;for(ii=0;ii<8;ii++){ SCL_Low;Delay_us(LCD_DELAY_TIME);if((DA&0X80)==0X80){SDA_High;}else{SDA_Low;} Delay_us(LCD_DELAY_TIME);SCL_High; DA=DA<<1;}A0_High; CS_High;
}
4.void init_lcd(void)
这里的代码,找商家要,不同商家,代码不一样
5.void disp_all(void)
void disp_all(void)
{u8 x,y,Z=0xb0;for(x = 0;x<4;x++){wr_cmd(Z);Z++;wr_cmd(0x10);wr_cmd(0x00);for(y = 0;y<128;y++){wr_data(0xff);}}
}
6.void Fresh(void)
void Fresh(void)
{u8 ii,jj;for(ii=0;ii<4;ii++){wr_cmd(0xb0+ii); //select pagewr_cmd(0x10); //set MSBwr_cmd(0x00); //set LSBLCD_CS_LOW; LCD_SCK_LOW;LCD_A0_HIG;for(jj=0;jj<128;jj++){wr_data(Dis_RAM[ii][jj]);}LCD_CS_HIG;}
}