回复【2楼】正点原子:
---------------------------------
来这里也有一段时间了,也来分享一下昨晚想出来的算法,本人刚刚接触STM32这个东西,写得有点低端,还望各位不要见笑!!
/*把海里每小时换成公里每小时*/
void Show_GPS_Speed(void) //GPS接收回来的地面速率海里每小时转换成公里每小时
{
float hl, gl; //hl海里/H gl 公里/H
if(speed[1]=='.')
{
hl=(speed[0]-0x30)+((speed[2]-0x30)*(0.1))+((speed[3]-0x30)*(0.01))+((speed[4]-0x30)*(0.001));
//hl=4.234;
gl=hl*1.852;
if(gl>=10)
{
speed1[0]=gl/10;
speed1[1]=gl-speed1[0]*10;
speed1[2]=0x2E;
speed1[3]=(gl-speed1[0]*10-speed1[1])/(0.1);
speed1[4]=(gl-speed1[0]*10-speed1[1]-speed1[3]*0.1)/(0.01);
//显示公里每小时的速度
LCD_ShowChar(261, 196, speed1[0]+0x30, 12, 0);
LCD_ShowChar(267, 196, speed1[1]+0x30, 12, 0);
LCD_ShowChar(273, 196, speed1[2], 12, 0);
LCD_ShowChar(279, 196, speed1[3]+0x30, 12, 0);
LCD_ShowChar(285, 196, speed1[4]+0x30, 12, 0);
}
else
{
speed1[0]=gl;
speed1[1]=0x2E;
speed1[2]=(gl-speed1[0])/(0.1);
speed1[3]=(gl-speed1[0]-(speed1[2]*0.1))/(0.01);
speed1[4]=(gl-speed1[0]-(speed1[2]*0.1)-(speed1[3]*0.01))/(0.001);
//显示公里每小时的速度
LCD_ShowChar(261, 196, speed1[0]+0x30, 12, 0);
LCD_ShowChar(267, 196, speed1[1], 12, 0);
LCD_ShowChar(273, 196, speed1[2]+0x30, 12, 0);
LCD_ShowChar(279, 196, speed1[3]+0x30, 12, 0);
LCD_ShowChar(285, 196, speed1[4]+0x30, 12, 0);
}
}
if(speed[2]=='.')
{
hl=(speed[0]-0x30)*10+(speed[1]-0x30)+((speed[3]-0x30)*(0.1))+((speed[4]-0x30)*(0.01));
//hl=77.78;
gl=hl*1.852;
if(gl>=100)
{
speed1[0]=gl/100;
speed1[1]=(gl-speed1[0]*100)/(10);
speed1[2]=(gl-speed1[0]*100-(speed1[1]*10));
speed1[3]=0x2E;
speed1[4]=(gl-speed1[0]*100-(speed1[1]*10)-speed1[2])/(0.1);
//显示公里每小时的速度
LCD_ShowChar(261, 196, speed1[0]+0x30, 12, 0);
LCD_ShowChar(267, 196, speed1[1]+0x30, 12, 0);
LCD_ShowChar(273, 196, speed1[2]+0x30, 12, 0);
LCD_ShowChar(279, 196, speed1[3], 12, 0);
LCD_ShowChar(285, 196, speed1[4]+0x30, 12, 0);
}
else
{
speed1[0]=gl/10;
speed1[1]=gl-speed1[0]*10;
speed1[2]=0x2E;
speed1[3]=(gl-speed1[0]*10-speed1[1])/(0.1);
speed1[4]=(gl-speed1[0]*10-speed1[1]-speed1[3]*0.1)/(0.01);
//显示公里每小时的速度
LCD_ShowChar(261, 196, speed1[0]+0x30, 12, 0);
LCD_ShowChar(267, 196, speed1[1]+0x30, 12, 0);
LCD_ShowChar(273, 196, speed1[2], 12, 0);
LCD_ShowChar(279, 196, speed1[3]+0x30, 12, 0);
LCD_ShowChar(285, 196, speed1[4]+0x30, 12, 0);
}
}
if(speed[3]=='.')
{
hl=(speed[0]-0x30)*100+((speed[1]-0x30)*(10))+((speed[2]-0x30))+((speed[4]-0x30)*(0.1));
//hl=668.6;
gl=hl*1.852;
if(gl>=1000)
{
speed1[0]=gl/1000;
speed1[1]=(gl-speed1[0]*1000)/(100);
speed1[2]=(gl-speed1[0]*1000-(speed1[1]*100))/10;
speed1[3]=(gl-speed1[0]*1000-(speed1[1]*100)-speed1[2]*10);
speed1[4]=0x20;
//显示公里每小时的速度
LCD_ShowChar(261, 196, speed1[0]+0x30, 12, 0);
LCD_ShowChar(267, 196, speed1[1]+0x30, 12, 0);
LCD_ShowChar(273, 196, speed1[2]+0x30, 12, 0);
LCD_ShowChar(279, 196, speed1[3]+0x30, 12, 0);
LCD_ShowChar(285, 196, speed1[4], 12, 0);
}
else
{
speed1[0]=gl/100;
speed1[1]=(gl-speed1[0]*100)/(10);
speed1[2]=(gl-speed1[0]*100-(speed1[1]*10));
speed1[3]=0x2E;
speed1[4]=(gl-speed1[0]*100-(speed1[1]*10)-speed1[2])/(0.1);
//显示公里每小时的速度
LCD_ShowChar(261, 196, speed1[0]+0x30, 12, 0);
LCD_ShowChar(267, 196, speed1[1]+0x30, 12, 0);
LCD_ShowChar(273, 196, speed1[2]+0x30, 12, 0);
LCD_ShowChar(279, 196, speed1[3], 12, 0);
LCD_ShowChar(285, 196, speed1[4]+0x30, 12, 0);
}
}
}
|