我用stm32f103zet6的板子驱动一个LCD1602液晶,让其在第一行显示abcdefghijklmnop,
接线是 PB0~2接RS,RW,EN,PA0~7接D0~D7
但是显示的却是下图所示的
后来我将LCD的电源断掉再将单片机复位,再接上LCD的电源之后发现能够正常显示,如下图
但是如果不断掉LCD的电源就将单片机复位的话显示的仍然是错误的,请各位大佬不吝赐教!!!
下面是代码,key.h里面有延时函数
#include "stm32f10x.h"
#include "key.h"
#define Set_RS GPIO_SetBits(GPIOB,GPIO_Pin_0)
#define Set_RW GPIO_SetBits(GPIOB,GPIO_Pin_1)
#define Set_EN GPIO_SetBits(GPIOB,GPIO_Pin_2)
#define CLR_RS GPIO_ResetBits(GPIOB,GPIO_Pin_0)
#define CLR_RW GPIO_ResetBits(GPIOB,GPIO_Pin_1)
#define CLR_EN GPIO_ResetBits(GPIOB,GPIO_Pin_2)
GPIO_InitTypeDef GPIO_InitStructure;
unsigned char table[]="abcdefghijklmnop";
void Send_Com(unsigned char Send_Com)
{
CLR_RS;
GPIO_Write(GPIOA,(u16)Send_Com);
delay_ms(5);
Set_EN;
delay_ms(5);
CLR_EN;
}
void Send_Dat(unsigned char Send_Dat)
{
Set_RS;
GPIO_Write(GPIOA,Send_Dat);
delay_ms(5);
Set_EN;
delay_ms(5);
CLR_EN;
}
void init()
{
CLR_EN;
Send_Com(0x38);
Send_Com(0x0c);
Send_Com(0x06);
Send_Com(0x01);
}
void GPIO_Configuration(void)
{
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC, ENABLE);
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
int main(void)
{
unsigned char num;
GPIO_Configuration();
init();
Send_Com(0x80);
for(num=0;num<=15;num++)
{
Send_Dat(table[num]);
delay_ms(1);
}
while(1);
}