通过STM32F103作为控制芯片,将液晶显示屏作为运算器的显示界面,4×4键盘为运算输入模块,制作了经纬度运算器,可以从键盘输入经度纬度以及偏向角度与距离,计算对方的经纬度坐标,经纬度运算部分代码如下所示。
#include "stm32f1xx_hal.h"
#include "usart/bsp_debug_usart.h"
#include "led/bsp_led.h"
#include "beep/bsp_beep.h"
#include "keypad.h"
#include "math.h"
#define pi 3.14159265
float Ea = 6378136.49;
float Eb = 6356755.2882;
int ChangetoSexagesimal(float Num, int *a, int *b, int *c)
{
float e;
int Hour,Minute,Second;
Hour = (int)(Num); //
Minute = (int)((Num-Hour)*60);
Second = (int)(((Num-Hour)*60 - Minute) *60); //
e = ((Num-Hour)*60 - Minute) *60 - Second; //ËÄÉ«ÎåÈë
if(5 <=(int)(e *10) )
{
Second = Second + 1;
}
if(60 == Second)
{
Second = 0;
Minute = Minute + 1;
}
if(60 == Minute)
{
Minute = 0;
Hour = Hour + 1;
}
*a = Hour;
*b = Minute;
*c = Second;
return 1;
}
void inputxy(double GLAT,double GLON,double distance,double angle)
{
float LongtitudeNumber = 0;
float LatitudeNumber = 0;
int LongtitudeHour = 0;
int LongtitudeMinute = 0;
int LongtitudeSecond = 0;
int LatitudeHour = 0;
int LatitudeMinute = 0;
int LatitudeSecond = 0;
float dx = distance*100*sin(angle);
float dy = distance*100*cos(angle);
float ec =Eb+(Ea-Eb)*(90.0-GLAT)/90.0;
float ed = ec*cos(GLAT*pi/180);
LongtitudeNumber = (dx/ed + GLAT*pi/180.0)*180.0/pi;
LatitudeNumber = (dy/ec + GLON*pi/180.0)*180.0/pi;
(void)ChangetoSexagesimal(LongtitudeNumber, &LongtitudeHour, &LongtitudeMinute, &LongtitudeSecond);
(void)ChangetoSexagesimal(LatitudeNumber, &LatitudeHour