1.介绍
第一次使用迪文屏的圆形屏幕,其实在想做一些什么Demo呢,后面突然想到,可以做一个雷达扫描装置,这个雷达扫描装置,可以用在定位,信号检测,让无线信号可视化,由于是圆形屏幕,整体感官会比方形屏幕更好。那我们就开始设计吧!
2.设计
首先就是找素材和设计素材,下面是我自己设计的关于雷达扫描的素材。
图1
其中雷达信号是一个动态的闪烁光点,这里设计了动图。 同时在代码中设计了动画函数,直接调用即可。 - //点动画
- 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号界面有点问题,后面我就在开机的时候,直接切换界面,这样开机的时候默认就是切换后的那个界面了。
图2
之后就是设计蓝牙扫描界面,和显示详细信息弹窗了,这一部分调试主要调试显示信号点位置和弹窗显示,具体设计界面如下图3所示。
图3
设计完成之后,结合C51的程序,就可以让屏幕动起来了,具体效果,大家可以看下面的视频。 3.总结 第一次接触迪文的圆形屏幕,一开始使用还有点不熟悉,后面多踩几次坑就熟悉了,对于圆形屏的Demo这只是刚刚开始,后面还会有更多有趣的Demo分享给大家的~
项目源码和工程: |