这是我的笨办法。
LCD端口初始化
//LCD_D0-> A9, LCD_D1-> A10, LCD_D2-> A11, LCD_D3-> A12
//LCD_D4-> A15, LCD_D5-> B3, LCD_D6-> B4, LCD_D7-> B5
//数据端口配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_15; //PA9,PA10,PA11,PA12,PA15 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化PA9,PA10,PA11,PA12,PA15
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; //PB3,PB4,PB5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化PB3,PB4,PB5
//LCD1602数据
void LCD_DATAOUT(INT8U Data)
{
INT8U Temp;
Temp=Data;
//判断第0位
if(Temp&0x01)
GPIOB->BSRR=GPIO_Pin_5;
else
GPIOB->BRR=GPIO_Pin_5;
//判断第1位
if(Temp&0x02)
GPIOB->BSRR=GPIO_Pin_4;
else
GPIOB->BRR=GPIO_Pin_4;
//判断第2位
if(Temp&0x04)
GPIOB->BSRR=GPIO_Pin_3;
else
GPIOB->BRR=GPIO_Pin_3;
//判断第3位
if(Temp&0x08)
GPIOA->BSRR=GPIO_Pin_15;
else
GPIOA->BRR=GPIO_Pin_15;
//判断第4位
if(Temp&0x10)
GPIOA->BSRR=GPIO_Pin_12;
else
GPIOA->BRR=GPIO_Pin_12;
//判断第5位
if(Temp&0x20)
GPIOA->BSRR=GPIO_Pin_11;
else
GPIOA->BRR=GPIO_Pin_11;
//判断第6位
if(Temp&0x40)
GPIOA->BSRR=GPIO_Pin_10;
else
GPIOA->BRR=GPIO_Pin_10;
//判断第7位
if(Temp&0x80)
GPIOA->BSRR=GPIO_Pin_9;
else
GPIOA->BRR=GPIO_Pin_9;
}
|