我用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);
}
uj5u.com熱心網友回復:
一個很常見的問題就是MCU復位速度快過1602,導致1602例外.STM32啟動后延時一會在操作1602看看
uj5u.com熱心網友回復:
我在主函式1602初始化之前延時了一段時間,還是會出現同樣的問題
uj5u.com熱心網友回復:
將Senfd_Com和Send_Dat里的延時設大一點吧!十有八九都是這問題
,LCD1602本身就是回應慢你這程式又沒有讀忙動作就要注意每寫一次延時都要長一點不能太快!
uj5u.com熱心網友回復:
將里面的JTAG禁用,因為你的板子MCU處理速度和LCD的速度不一樣,導致讀取資料有誤,具體操作如下RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//禁止JTAG功能
uj5u.com熱心網友回復:
你好你這個是直接將1062驅動的嗎uj5u.com熱心網友回復:
初始化事件不夠,1602初始化需要幾十ms以上,增加在使用前要有足夠的等待事件uj5u.com熱心網友回復:
LCD1602屬于慢吞吞器件,顯示信號之間需要給予足夠的延時轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/30587.html
標籤:單片機/工控
下一篇:求助關于simulink的問題
