从串口调试助手输入汉字,在lcd上面显示~~~现在的情况是输入一个汉字显示两个,如输入“啊”显示的是
啊
阿
u16 RxData,data_RxData, data_str16[512],data_str8[512]; //串口接收数据
int main(void)
{
// int num,n; /* 显示lcd型号 n 扇区开始数*/
u8 i,j; /* ifor循环使用,j判断数据高低位 */
u8 s1,s2; /* s汉字字符串长度 h,w 16*16汉字换行使用*/
int y = 50, x = 0;
// u8 data_read[512], data_write[512];
unsigned char TxBuf[100] = "\rARM第八组\r\n";
// u8 data_read[512], data_write[512] , *ptr;
// n= 500; //数据从扇区数500开始写
// ptr=(u8 *)data_str8;
// int q=0;
s1 = s2 = 0; /*汉字字符串长度*/
j=0; /*j判断数据高低位*/
/* System clocks configuration ---------------------------------------------*/
SystemInit();
/* Initialize the LCD */
STM3210C_LCD_Init();
/* Clear the LCD */
LCD_Clear(White);
/* Set the LCD Text Color */
LCD_SetTextColor(Black);
USART_Configuration();
printf("\rHello contex-M3\r\n");
/* 串口提示信息 */
for (i = 0; TxBuf[i] !='\0'; i++)
{
USART_SendData(USART2, TxBuf[i]);
while (USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET);
}
while (1)
{
/*PD7 灯亮,可以从串口输入数据*/
// GPIO_ResetBits(GPIOD , GPIO_Pin_7);
/* 从串口接收数据, */
while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET){}
RxData = USART_ReceiveData(USART2); //汉字存的区位码
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET){}
USART_SendData(USART2, RxData);
// printf("RxData:%x",RxData);
if(RxData>= 0x00 && RxData<=0x7f) // ascii 码对照表
{
printf("%c",RxData);
}
/*显示汉字*/
else
{
/*将高低字节组合在一起*/
if (j == 0)
{data_RxData = RxData; j=1;} //低字节
else
if(j == 1)
{
data_RxData += RxData<<8; j = 0; //高字节
/*将每个字 存入字符组*/
// data_RxData=data_RxData1;
data_str16[s1++] = data_RxData;
data_str8[s2++] = RxData;
/*控制x,y,将汉字显示在同一行,并到行尾时换行*/
if(y<239)
{
if(x<303)
{
ili9320_PutChinese(y, x,data_RxData,0x0000,0xFFFF);
x+=16;
}
else
{
x=0;
y+=36;
}
}
else{
y=0;
LCD_Clear(White);
}
}
}
|