LCD显示屏之前一切显示正常,有次上电之后LCD显示屏不显示应有内容。出现乱码

使用的是STM32F103C8T6最小系统版,LCD1602液晶

乱码如图:

 

代码如下

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "usart.h"
#include "timer.h"
#include "lcd1602.h"
#include "useri2c.h"    

char dis_temp[16];//ÏÔʾÊý×éÔÝ´æ
char dis_temp1[16];//ÏÔʾÊý×éÔÝ´æ
int dist_high = 1000;
int dist_low = 200;
u8 setFlag = 0;
u8 getFlag = 0;

//¶¨ÒåÒ»¸ö¹²Í¬Ì壬½á¹û¶ÁÈ¡µ½distanÊý×éÖУ¬distanc¾ÍÊǾàÀëµÄÕûÊýÖµ£¬²»ÐèÒªÔÙд³ÌÐòת»»
union distance_union
{
    unsigned long distance;
    unsigned int distanc;
    unsigned char distan[4];
};

int main(void)
 {
     unsigned char dat[1] = {0};
    union distance_union dist;
    delay_init();             //ÑÓʱº¯Êý³õʼ»¯
    NVIC_Configuration();//ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
    USARTx_Init(USART1,9600);   //´®¿Ú³õʼ»¯
     
     UserI2c_Init();
     LED_Init();           //LED¶Ë¿Ú³õʼ»¯
    KEY_Init();          //°´¼ü¶Ë¿Ú³õʼ»¯
    TIM3_Int_Init(499,7199);//10KhzµÄ¼ÆÊýƵÂÊ£¬¼ÆÊýµ½500Ϊ50ms 
    Lcd_Init();    //Òº¾§³õʼ»¯
    delay_ms(20);          
    Lcd_Puts(0,0,"Laser ranging");//ÏÔʾ    
    delay_ms(1000);     
    SensorWritenByte(dat,0x09,1);//ÉèΪ±»¶¯¶Áȡģʽ
     
    while(1)
    {            
        if(getFlag){//500msÖÃλһ´Î£¬¼´0.5ÃëÖ´ÐÐÒ»´Î²â¾à
            getFlag=0;//Çå³ý±ê־λ
            SensorReadnByte(dist.distan,0x02,4);//¶ÁÈ¡Â˲¨ºó¾àÀë
        }
        KeyScan();//ɨÃè°´¼ü
        if(KeyIsPress(key_set)){//Èç¹ûÉèÖð´¼ü°´ÏÂ
            setFlag++;//ÉèÖñêÖ¾Öµ¼Ó1
            setFlag%=3;//ʹÉèÖñêÖ¾ÖµÔÚ0~2Ö®¼ä±ä»¯£¬0Ϊ²»ÉèÖã¬1ΪÉèÖÃÏÂÏÞ£¬2ΪÉèÖÃÉÏÏÞ
        }
        if(setFlag==1){//Èç¹ûµ±Ç°±êÖ¾ÊÇÉèÖÃÏÂÏÞÖµ
            if(KeyIsPress(key_dec)){//Èç¹û¡°¼õ¡±°´¼ü°´ÏÂ
                if(dist_low>20){//Èç¹ûÏÂÏÞÖµ´óÓÚ20£¨²âÁ¿¾àÀë¹ýСʱ²»×¼È·£©
                    dist_low-=10;//ÏÂÏÞÖµµÝ¼õ10£¬µ¥Î»mm
                }
            }
            if(KeyIsPress(key_inc)){//Èç¹û¡°¼Ó¡±°´¼ü°´ÏÂ
                if(dist_low<(dist_high-10)){//Èç¹ûÏÂÏÞֵСÓÚÉÏÏÞ¼õ10£¨ÏÂÏÞ²»ÄÜ´óÓÚÉÏÏÞ£©
                    dist_low+=10;//ÏÂÏÞÖµµÝÔö10£¬µ¥Î»mm
                }
            }
            sprintf(dis_temp1," SL:%4d  H:%4d",dist_low,dist_high);      //´òÓ¡
        }
        else if(setFlag==2){//Èç¹ûµ±Ç°±êÖ¾ÊÇÉèÖÃÉÏÏÞÖµ
            if(KeyIsPress(key_dec)){//Èç¹û¡°¼õ¡±°´¼ü°´ÏÂ
                if(dist_high>(dist_low+10)){//Èç¹ûÉÏÏÞÖµ´óÓÚÏÂÏÞ¼Ó10£¨ÏÂÏÞ²»ÄÜ´óÓÚÉÏÏÞ£©
                    dist_high-=10;//ÉÏÏÞÖµµÝ¼õ10£¬µ¥Î»mm
                }
            }
            if(KeyIsPress(key_inc)){//Èç¹û¡°¼Ó¡±°´¼ü°´ÏÂ
                if(dist_high<2000){//Èç¹ûÉÏÏÞֵСÓÚ2000£¨×î´ó²âÁ¿¾àÀ룩
                    dist_high+=10;//ÉÏÏÞÖµµÝÔö10£¬µ¥Î»mm
                }
            }
            sprintf(dis_temp1,"  L:%4d SH:%4d",dist_low,dist_high);      //´òÓ¡
        }
        else{
            sprintf(dis_temp1,"  L:%4d  H:%4d",dist_low,dist_high);      //´òÓ¡
        }
        Lcd_Puts(0,1,dis_temp1);//ÏÔʾ 
        
            if(dist.distanc>=dist_high || dist.distanc<=dist_low){//²»ÔÚãÐÖµ·¶Î§ÄÚ
                beep = 1;//·äÃùÆ÷±¨¾¯
            }
            else{
                beep = 0;//¹Ø±Õ·äÃùÆ÷
            }
            sprintf(dis_temp,"dis:%dmm        ",dist.distanc);      //´òÓ¡
            Lcd_Puts(0,0,dis_temp);//ÏÔʾ             
    }
}

 

上电时,需要延时100ms,再操作LCD

之前能正常显示,后面显示乱码,有可能是接线有问题,检查一下接线。是否有松动。