51单片机,我想用电脑发送一个字符串给单片机,然后显示在lcd1602上面,但是显示有问题,而且也无法正确返回我发送的字符串,求大佬帮忙解答,代码如下
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
#include "MatrixKey.h"
#include "LCD1602.h"
void TxByte(unsigned char dat);
void TxString(unsigned char *dat,unsigned char strlen);
unsigned char KeyNum;
unsigned char RxBuffer[8]; // 接收缓冲区
unsigned char RxIndex = 0; // 接收索引
unsigned char Rx_flag = 0;
void main()
{
LCD_Init(); // 初始化LCD
UART_Init(); // 串口初始化
while (1)
{
//TxString( "hello",5);
KeyNum = MatrixKey(); // 检测矩阵键盘的输入
if(KeyNum != 0) // 如果有按键按下
{
LCD_ShowNum(1, 1, KeyNum, 2); // 在 LCD 第一行显示键码
SBUF = KeyNum; // 通过串口发送键码给电脑
while (!TI); // 等待直到发送完成
TI = 0; // 清除发送中断标志
}
Delay(100);
if(Rx_flag)
{
Rx_flag=0;
TxString(RxBuffer,8);
}
}
}
void TxByte(unsigned char dat)
{
SBUF=dat;
while(!TI);
TI=0;
}
void TxString(unsigned char *dat,unsigned char strlen)
{
unsigned char i;
for(i=0;i<strlen;i++)
{
TxByte(dat[i]);
}
}
void UART_Routine() interrupt 4
{
if (RI)
{ // 如果接收标志为1,说明接收到数据
RI = 0;
RxBuffer[RxIndex++] = SBUF; // 存入接收缓冲区
LCD_ShowString(2, 1, RxBuffer); // 在 LCD 第二行显示字符串
// RxBuffer[RxIndex] = '\0'; // 确保字符串终止
if(RxIndex==8)
{
Rx_flag=1;
RxIndex = 0;
}
}
}

