初级会员

- 积分
- 79
- 金钱
- 79
- 注册时间
- 2015-8-17
- 在线时间
- 12 小时
|
5金钱
请教下原子哥,为什么我的串口接收数据进来进行处理之后,经过换算显示在LCD屏上,一直不行,下面是我的中断程序与数据处理显示程序
void USART1_IRQHandler(void)
{
u8 count3=0;
if(USART_GetITStatus(USART1, USART_IT_RXNE))
{
USART_RX_BUF[count3]=USART_ReceiveData(USART1);
count3++;
USART_SendData(USART1,USART_RX_BUF[count3]);
}
void chesudisplay()
{
if(USART_RX_BUF[5]==0x34&&USART_RX_BUF[6]==0x31&&USART_RX_BUF[8]==0x30&&USART_RX_BUF[9]==0x44) //车速数据判断
{
if(USART_RX_BUF[12]>=0x30&&USART_RX_BUF[12]<=0x39) //低位接收数据是否为ASCLL码小于9
{
dis1[1]=USART_RX_BUF[12]-0x30;//转化成16进制
}
else
{
dis1[1]=(USART_RX_BUF[12]-0x41)+10; //低位接收数据是否为ASCLL码大于9
}
if(USART_RX_BUF[11]>=0x30&&USART_RX_BUF[11]<=0x39) //高位接收数据是否为ASCLL码小于9
{
dis1[2]=USART_RX_BUF[11]-0x30;
}
else
{
dis1[2]=(USART_RX_BUF[11]-0x41)+10; //高位接收数据是否为ASCLL码大于9
}
dis1[3]=dis1[2]*16+dis1[1];//数据赋值处理
chesu1=dis1[3]%10+0x30; //转化成ascll码
dis1[3]=dis1[3]/10;
chesu2=dis1[3]%10+0x30; //转化成ascll码
dis1[3]=dis1[3]/10;
chesu3=dis1[3]%10+0x30; //转化成ascll码
//显示字符串
//x,y:起点坐标
//width,height:区域大小
//size:字体大小
//*p:字符串起始地址
LCD_ShowNum(80,80,chesu1,24,24);
}
}
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LCD_Init();
LCD_Clear(BLUE);
;
chesudisplay();
LCD_ShowNum(80,80,chesu1,2,24);
LCD_ShowNum(84,122,chesu2,2,24);
LCD_ShowNum(88,155,chesu1,2,24);
}
|
|