#define LCD12864_SID_OUT(x) (x) ? (GPIOC->BSRR |= 1<<1) : (GPIOC->BRR |= 1<<1)
#define LCD12864_SCLK_OUT(x) (x) ? (GPIOC->BSRR |= 1<<0) : (GPIOC->BRR |= 1<<0)
//LCD12864_SCLK_OUT(1表示输出1,LCD12864_SCLK_OUT(0)表示输出0。
#define CS GPIO_Pin_2 //PC2
#define SID GPIO_Pin_1 //PC1
#define SCLK GPIO_Pin_0 //PC0
#define SET(n) GPIO_SetBits(GPIOC,n) //置1
#define RESET(n) GPIO_ResetBits(GPIOC,n) //置0
//配置SCLK、CS、SID引脚
void LCDIO_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = CS|SID|SCLK;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void LCD12864_Init(void)
{
delay_ms(200);
SET(CS); //CS拉高
delay_ms(50);
LCD12864_Write(WRITE_CMD, 0x30); /
delay_us(150);
LCD12864_Write(WRITE_CMD, 0x30);
delay_us(40);
LCD12864_Write(WRITE_CMD, 0x0C);
delay_us(150);
LCD12864_Write(WRITE_CMD, 0x01);
delay_ms(15);
LCD12864_Write(WRITE_CMD, 0x06);
}
int main(void)
{
SystemInit();
delay_init();
LCDIO_init();
LCD12864_Init();
LCD12864_Display_Words(0, 0, "Hello, world!");
LCD12864_Display_Words(1, 0, "www.eeboard.com");
while(1);
}
说明:我的是串行驱动液晶屏,CS一直拉高(软件控制),RST不复位也是一直拉高(硬件控制),完整程序看附件!
|