项目日志:Day10 + 11 --- 2020.8.1 / 8.3

祝:八月快乐

每次先把主任务贴上:

1. 解决单片机与屏之间的数据读写问题;
2. 解决屏幕时间读取与显示问题;
3. 批量烧录问题(长远问题);

8.1

上午

查资料发现所用屏幕不一定带有RTC芯片,也就是说不一定能够支持RTC时钟(难搞);
所以现在只能尝试通过C51开发来实现时钟功能;
一不小心烧了个内核进去结果屏幕炸了…
现在直接黑屏,什么都下载不进去;
只能退回去让官方换内核了…


下午

论坛里有人回了帖子,该型号的屏不具备RTC硬件,要做变量显示来实时显示时间;
也就是说在单片机上加入RTC硬件,再将数据发送至屏幕上;
迪文自带的HEX文件下载工具没有办法下载,总是提示下载失败,我佛了;
通过sscom串口助手下载的HEX文件无法实现结果;

晚上

晚上开会讨论了接下来的项目细节;
这是个大项目了呀,安身立命的东西;


8.3

上午

发现一个问题,当屏幕中变量数据显示控件中数据类型选择浮点数时,键盘按键无法录入数据;
但当将其改成四字节整数时是可以录入的;
关键在于变量数据录入控件并不支持浮点数,只有定点小数格式;
所以现在可能需要将浮点小数转为定点小数;
还有一个关键问题就是定点小数中小数点的位置;
已经发帖,等待回复;

下午

论坛有人回复了,确实是不相通,两个控件若类型不同无法显示;
那么真就只能用定点小数了;
下午在干接线活儿;
把屏幕和单片机联通,但是数据还是发不出去也读不进来;
可能第一次的接线失败了…

晚上

终于弄清楚迪文屏幕定点小数的原理:
其根本不是二进制的定点小数,对于任何一个十六进制数,都是先转换成十进制整数,然后根据软件中所定下的整数和小数位数来移动十进制的小数位置,就比如 0x0064,转换成十进制是 100,那么如果我们在软件里设置整数位 1 位,小数位 2 位,那么显示的就是 1.00;如果整数 2 位,小数 1 位,那么显示的就是 10.0;

关键问题解决了,现在只需要用整型即可;
明天实验一下数据的读取和写入;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据星历计算卫星位置的方法是比较复杂的,需要用到天文学中的一些计算方法和公式,因此需要一些较为复杂的计算。以下是一个大致的计算流程: 1. 将给定的日期时间转换为儒略日(Julian day)。 2. 根据儒略日计算相应的世纪数。 3. 计算卫星的平近点角(Mean Anomaly)和升交点赤经(Right Ascension of Ascending Node)。 4. 计算卫星的轨道倾角(Inclination)、近地点角距(Argument of Perigee)、半长轴(Semi-Major Axis)等轨道参数。 5. 计算卫星的真近点角(True Anomaly)。 6. 根据卫星的真近点角、轨道参数和世纪数等信息,计算卫星的位置。 下面是一个简单的 C++ 代码示例,可以用来计算给定日期时间的 C01 卫星位置: ```c++ #include <iostream> #include <cmath> using namespace std; const double PI = 3.14159265358979323846; const double GM = 3.986005e14; const double OMEGA_E = 7.2921151467e-5; const double MU_GPS = 3.986005e14; const double C_GPS = 299792458.0; // 计算儒略日 double julian_day(int year, int month, int day, int hour, int minute, int second) { int a = (14 - month) / 12; int y = year + 4800 - a; int m = month + 12 * a - 3; int jdn = day + (153 * m + 2) / 5 + 365 * y + y / 4 - y / 100 + y / 400 - 32045; double jd = jdn + ((double)hour - 12) / 24 + (double)minute / 1440 + (double)second / 86400; return jd; } // 计算卫星位置 void satellite_position(double t, double *pos) { // 从星历中读取轨道参数等信息 double a = 26559700.0; double e = 0.008777161321; double i = 0.9757632172; double O = 0.5405171530; double w = 3.510029399; double M = 0.0; double n = sqrt(MU_GPS / pow(a, 3)); double t0 = 0.0; // 计算平近点角 double E = M + e * sin(M); double E0 = E; while (abs(E - E0) > 1e-12) { E0 = E; E = M + e * sin(E); } double v = 2 * atan(sqrt((1 + e) / (1 - e)) * tan(E / 2)); double r = a * (1 - e * cos(E)); // 计算卫星位置 double x = r * (cos(O) * cos(w + v) - sin(O) * sin(w + v) * cos(i)); double y = r * (sin(O) * cos(w + v) + cos(O) * sin(w + v) * cos(i)); double z = r * sin(w + v) * sin(i); double dt = t - t0; pos[0] = x * cos(OMEGA_E * dt) + y * sin(OMEGA_E * dt); pos[1] = -x * sin(OMEGA_E * dt) + y * cos(OMEGA_E * dt); pos[2] = z; } int main() { int year = 2020; int month = 12; int day = 23; int hour = 23; int minute = 0; int second = 0; double jd = julian_day(year, month, day, hour, minute, second); double t = (jd - 2451545.0) / 36525.0; double pos[3]; satellite_position(t, pos); cout << "C01卫星位置:" << endl; cout << "X = " << pos[0] << " m" << endl; cout << "Y = " << pos[1] << " m" << endl; cout << "Z = " << pos[2] << " m" << endl; return 0; } ``` 注意:由于卫星位置的计算涉及很多天文学中的参数和公式,因此以上代码仅供参考,具体实现需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值