void LCD_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
//p10:BL(背光) p9:CS(片选) p8:RS(0=读写 1=写) p7:WR(写) p6:RD(读)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6; //GPIO_Pin_10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure); //GPIOC
GPIO_SetBits(GPIOC,GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6);
//数据脚LCD0-LCD15
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_Init(GPIOB, &GPIO_InitStructure); //GPIOB
GPIO_SetBits(GPIOB,GPIO_Pin_All);
Systick_ms(50); // delay 50 ms
LCD_WriteReg(0x0000,0x0001);
Systick_ms(50); // delay 50 ms
LCD_DeviceCode = LCD_ReadReg(0x0000);
while(1);
}
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
{
LCD_RS_CLR; //读写
LCD_CS_CLR; //取消片选
DATAOUT(LCD_Reg); //数据输出
LCD_WR_CLR;
LCD_WR_SET; //写数据
LCD_CS_SET;
LCD_WR_DATA(LCD_RegValue);
}
u16 LCD_ReadReg(u8 LCD_Reg)
{
LCD_RS_CLR; //读写
LCD_CS_CLR; //取消片选
DATAOUT(LCD_Reg); //数据输出
LCD_WR_CLR;
LCD_WR_SET; //写数据
LCD_CS_SET;
return LCD_RD_DATA();
}
u16 LCD_RD_DATA(void)
{
u16 t;
GPIOB->CRL=0X88888888; //PB0-7 上拉输入
GPIOB->CRH=0X88888888; //PB8-15 上拉输入
GPIOB->ODR=0X0000; //全部输出0
LCD_RS_SET;
LCD_CS_CLR;
//读取数据(读寄存器时,并不需要读2次)
LCD_RD_CLR;
LCD_RD_SET;
t=DATAIN;
LCD_CS_SET;
GPIOB->CRL=0X33333333; //PB0-7 上拉输出
GPIOB->CRH=0X33333333; //PB8-15 上拉输出
GPIOB->ODR=0XFFFF; //全部输出高
return t;
} |