其中雷达信号是一个动态的闪烁光点,这里设计了动图。
同时在代码中设计了动画函数,直接调用即可。
- //点动画
- void point_animat(u8 point_value)
- {
- if(point_list[point_value].increase_flag == 0)
- {
- point_list[point_value].animat_cnt++;
- if(point_list[point_value].animat_cnt >= 4)
- {
- point_list[point_value].increase_flag = 1;
- }
- }
- else
- {
- point_list[point_value].animat_cnt--;
- if(point_list[point_value].animat_cnt <= 0)
- {
- point_list[point_value].increase_flag = 0;
- }
- }
-
- write_dgus_vp(0x2000, (u8 *)&point_list[point_value].animat_cnt, 2);
- }
复制代码之后就是扫描的动画,定义好圆心,然后让图片进行旋转。
- //雷达扫描旋转
- void radar_scan()
- {
- static u16 angle = 0;
- static u16 timer_cnt = 0;
- if(display_status == 0) //扫描状态才进行扫描
- {
- timer_cnt++;
- if(timer_cnt >= 2000)
- {
- timer_cnt = 0;
- angle++;
- if(angle >= 360)
- {
- angle = 0;
- }
- write_dgus_vp(0x1000, (u8 *)&angle, 2);
- }
- }
- }
复制代码之后就是串口数据的定义了,这里代码太长,我就不贴了,后面可以自己去源码里面看,都写着注释呢,协议内容如下。
- /*协议
- byte0 0添加 1删除
- byte1 rssi
- byte2~14 addr
- byte15 名字长度
- byte16~+ 名字
- */
复制代码最后的逻辑就是,接收到添加信号点的协议,就显示一个信号点,每个信号点都有自己相应的向心轴线,然后通过RSSI调整和中心点的位置,使得每个信号点不会进行太多的叠加。
根据三角函数,然后设置对应的位置,代码如下:
- #define POINT_CENTRE 210
- #define PI 3.14159265
- #define TRIGONOMETRIC 3.14159265 / 180
- void point_pos_set(u8 point_value, u8 rssi_value)
- {
- u8 set_pos[] = {0x00, 0x00, 0x00, 0x00};
- point_list[point_value].pos_x = sin((float)(point_value * 45) * TRIGONOMETRIC) * (210 * (float)(rssi_value / 100.0f)) + POINT_CENTRE;
- point_list[point_value].pos_y = cos((float)(point_value * 45) * TRIGONOMETRIC) * (210 * (float)(rssi_value / 100.0f)) + POINT_CENTRE;
- set_pos[0] = point_list[point_value].pos_x / 256;
- set_pos[1] = point_list[point_value].pos_x % 256;
- set_pos[2] = point_list[point_value].pos_y / 256;
- set_pos[3] = point_list[point_value].pos_y % 256;
- write_dgus_vp(point_value * 0x100 + 0x2100 + 1, set_pos, 2);
- UART2_Sendbyte(set_pos[0]);
- UART2_Sendbyte(set_pos[1]);
- UART2_Sendbyte(set_pos[2]);
- UART2_Sendbyte(set_pos[3]);
- }
复制代码上面都是逻辑的设计,接下来就是界面的设计了,首先设计一个开机界面,为了给开机界面加上一定的动画,我拿基本控件给盖住背景,让其有一定的动画效果。
这里有一个小窍门,就是我本来一开始不准备设计开机动画的,之后设计开机动画,但是已经有个0号界面了,用开机动画替换0号界面有点问题,后面我就在开机的时候,直接切换界面,这样开机的时候默认就是切换后的那个界面了。