本帖最后由 负熵 于 2019-8-15 16:32 编辑
最近在弄一个lcd1602方面的程序,stm8单片机接收串口信息显示到1602上。数据格式为D1xxxxxxxxxxxxxxxx,固定D1开头,1602显示后面16位信息。结果接受第一个数据显示正常,显示第二个数据,另一行就花屏。
相关的程序如下:
int main(void)
{
//char str[16];
//u8 c[17] = "12345678901234567";
//char d[17] = "abcdefghijklmnop7";
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
USART_Configuration();//串口初始化
GPIO_Configuration();
LCD1602_Init();
LCD1602_ClearScreen();
while(1)
{
LCD1602_Show_Str(0, 1, bluetooth_date);
SysTick_Delay_Ms(100);
//LCD1602_Show_Str(0, 0, c);
//LCD1602_Show_Str(0, 0, "1234");
}
//LCD1602_Show_Str(2, 1, "TEST ");
}
中断程序
extern u8 bluetooth_date[16];
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
u8 usart1_rxdata;
if(UART1_GetITStatus(UART1_IT_RXNE) != RESET)
{
static u8 i,start1,star,start2=0; //start1:检测第一个字符D,start2:检测第二个字符1
u8 start3;
usart1_rxdata = UART1_ReceiveData8();
if (star==1)
{
bluetooth_date=usart1_rxdata;
i=i+1;
}
if (i>=16)
{
i=0;
star=0;
LCD1602_ClearScreen();
}
start3=usart1_rxdata;
start1=start2;
start2=start3;
if ((start1=='D')&&(start2=='1'))
{
star=1;
i=0;
}
//UART1_ClearITPendingBit(UART1_IT_RXNE); //清除UART1挂起标志
}
}
|