taonogo 发表于 2018-10-18 16:33:56

stm32 1602显示字符串求助

在proteus里仿真正常,但是实物上显示玩最后一个字符 u 后 还会继续显示u 。屏幕满了之后会从左上角开始 覆盖前面的字符。最后满屏都是u。
先贴代码
#include "stm32f10x.h"
#define Set_RSGPIO_SetBits(GPIOB,GPIO_Pin_0)
#define Set_RWGPIO_SetBits(GPIOB,GPIO_Pin_1)
#define Set_ENGPIO_SetBits(GPIOB,GPIO_Pin_3)

#define CLR_RSGPIO_ResetBits(GPIOB,GPIO_Pin_0)
#define CLR_RWGPIO_ResetBits(GPIOB,GPIO_Pin_1)
#define CLR_ENGPIO_ResetBits(GPIOB,GPIO_Pin_3)


void delay_nus(unsigned long n)
{
      unsigned long j;
      while(n--)
      { j=8;
          while(j--);
      }
}


void delay_nms(unsigned long n)
{
      while(n--)
         delay_nus(1100);
}





//unsigned char table[]="abcdefghijklmvop";
//u8 table[]="abcdefghijklmvop";

u8table1[]="->China Yancheng" ;
u8table2[]="Welcome To You" ;

//void Send_Com(unsigned char Send_Com)
void Send_Com(int Send_Com)
{

CLR_RS;
      delay_nms(1);
CLR_RW;
                delay_nms(1);
//CLR_EN;
Set_EN;
                delay_nms(1);
GPIO_Write(GPIOA,(u16)Send_Com);
delay_nms(5);
CLR_EN;
delay_nms(5);
Set_EN;

}

void Send_Dat(int Send_Dat)
{

Set_RS;
                delay_nms(1);
CLR_RW;      
                delay_nms(1);
Set_EN;
                delay_nms(1);
GPIO_Write(GPIOA,Send_Dat);
delay_nms(5);
CLR_EN;
delay_nms(5);
Set_EN;
}

void init()
{
Set_EN;
delay_nms(15);
Send_Com(0x38);
delay_nms(5);
Send_Com(0x38);
delay_nms(5);
Send_Com(0x38);
delay_nms(5);      
Send_Com(0x38);
delay_nms(5);
Send_Com(0x08);
delay_nms(1);
Send_Com(0x01);
delay_nms(1);
Send_Com(0x06);
delay_nms(1);
Send_Com(0x0c);
delay_nms(1);
}

void GPIO_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
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();
delay_nms(500);
init();
u8 i;
//while(1)
// {
    Send_Com(0x80);//???????
    for(i=0;i < 16;i++)
    {
       Send_Dat(table1);
             delay_nms(5);
    }

    Send_Com(0x80+0x40);//???????
                           delay_nms(5);
    for(i=0;i < 14;i++)
    {
             Send_Dat(table2);
             delay_nms(5);
    }
                while(1);
//}      
      
//delay_nms(5);
//Send_Com(0x80);
//      delay_nms(5);
//
//for(num=0;num<=15;num++)
//{
//Send_Dat(table);
//delay_nms(300);
//}

//while(1);

}

stm1024 发表于 2018-10-18 16:42:48

for(i=0;i < 14;i++)
    {
             Send_Dat(table2);
             delay_nms(5);
    }
这个地方,函数Send_Dat(table2);的实参 与函数的定义不太一致,你试试使用Send_Dat(table2);看看?

taonogo 发表于 2018-10-18 16:51:27

stm1024 发表于 2018-10-18 16:42
for(i=0;i < 14;i++)
    {
             Send_Dat(table2);


程序里时table2,复制出来不知道为啥变了。还能找到其他问题吗 很急

taonogo 发表于 2018-10-18 16:52:10

taonogo 发表于 2018-10-18 16:51
程序里时table2,复制出来不知道为啥变了。还能找到其他问题吗 很急

【i】发出来就没了:dizzy:

stm1024 发表于 2018-10-18 17:06:04

其他地方倒是没看出明显的错误,不过要不要考虑一下Check Busy呢?

butterflyspring 发表于 2018-10-19 09:45:26

调试看看呀,一个一个断点,看看是不是每次都发U,如是,看看是不是硬件或者设置问题.如果不是,就看看数据的指针了.
页: [1]
查看完整版本: stm32 1602显示字符串求助