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);
}
for(i=0;i < 14;i++)
{
Send_Dat(table2);
delay_nms(5);
}
这个地方,函数Send_Dat(table2);的实参 与函数的定义不太一致,你试试使用Send_Dat(table2);看看? stm1024 发表于 2018-10-18 16:42
for(i=0;i < 14;i++)
{
Send_Dat(table2);
程序里时table2,复制出来不知道为啥变了。还能找到其他问题吗 很急 taonogo 发表于 2018-10-18 16:51
程序里时table2,复制出来不知道为啥变了。还能找到其他问题吗 很急
【i】发出来就没了:dizzy: 其他地方倒是没看出明显的错误,不过要不要考虑一下Check Busy呢? 调试看看呀,一个一个断点,看看是不是每次都发U,如是,看看是不是硬件或者设置问题.如果不是,就看看数据的指针了.
页:
[1]