stm32链接lcd1602 乱码踩坑总结


void Init_LCD1602() 
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);	
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;				 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);					 

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

	write_com(0x28);
    delay_ms(30);
	write_com(0x01);
	delay_ms(30);
	write_com(0x06);
	delay_ms(30);
	write_com(0x0c);
	delay_ms(30);   
}

/******************指令************************/
void write_com(u8 com)	 			  
{
  
  rs=0; 
  rw=0;
	en=1; 
	GPIO_Write(GPIOA,com/16*16); 
	en=0;
	en=1;
	GPIO_Write(GPIOA,com%16*16);
  en=1;  
  en=0; 
}
 
/*******************数据 乱码在硬件下正常的情况下,主要为高四位和低四位的冲突,表现为只发其中之一,忽略再次使能************************/
void write_dat(u8 date)	     	  
{ 
  rs=1;	
  rw=0; 
	en=1;
  GPIO_Write(GPIOA,date/16*16); //先发高四位
  en=0;
  en=1;	
	GPIO_Write(GPIOA,date%16*16);//再发低四位
  en=1;  
  en=0; 
}

你可能感兴趣的:(stm32链接lcd1602 乱码踩坑总结)