系列文章目录
错误总结(没有什么各位有用的东西)跳转
关于嵌入式3/4作品展示(比较具体的描述了开机页面,灯控制页面的实现)跳转
OLED屏幕显示贪吃蛇跳转
作品展示链接(B站平台内播放)
视频跳转
视频地址:
https://www.bilibili.com/video/BV1u44y1S7h5/?spm_id_from=333.999.0.0&vd_source=80dd998adf6419478f40a8a950edd07e
前言
有些东西怎么说都难以说清楚,所以我把视频的链接放在开头,这次视频稍微还是能看的,所以就比较建议看视频的效果演示先。
关于本文的介绍,于3/4作品展示一文提及的功能,本文不加以赘述,贪吃蛇部分我打算另起一文。
我重点关注贪吃蛇的代码,关于本文最重要的能力是读懂各个模块相应的说明手册,本文只是浅浅的谈一下这方面的能力。
一、心率检测页面功能的描述和实现
在每次进入该页面的时候都会弹出向下打开检测功能的字样,打开向下打开的功能之后,就会展现出向上关闭的字样。根据字样操作完成相应的功能。
实现部分,理解测心率和血压手册的描述,相应的发数据,读数据,在根据标志位用按键卡住心率测量的开关。
代码部分
//想要说明的部分
if((bp_flag == 0) && (ganrao1_flag == 0))
{
HP_6_Closebp();
}
//-----------------------------------------------------------------
u8 oldval = 0;
u8 key;
u8 rbuff[24] = {0};
u8 hp_buff[20];
key = get_KEY_page_4_number();
//开始测量
if(key == 1)
{
HP_6_OpenRate();
hp_sta = 1;
OLED_clear();
}
//关闭测量
if(key == 2)
{
HP_6_CloseRate();
hp_sta = 0;
OLED_clear();
}
//获取测量结果
if(hp_sta == 1)
{
oled_dis_16(5,2,"请向下关闭测量");
HP_6_GetRateResult(rbuff);
if(rbuff[7] != 0 && rbuff[7] != oldval)
{
oldval = rbuff[7];
sprintf((char *)hp_buff,"rate:%3d",rbuff[7]);
oled_dis_16(2,30,hp_buff);
}
}
else
{
oled_dis_16(3,2,"请向上开启测量");
}
ganrao1_flag = 1;
想要说明一下的是,这里特别的是因为心率和血压是一个测量元件,关掉心率的电源就会关掉血压的电源,
这个问题卡了我一下子,后来有了一个思路。整个工程是循环的,进入这个页面的时候,我希望关掉血压或者心率的电源一次就好,接下来需要开电关电在由我开关。也不知道有没有描述清楚,反正是实现的办法就是通过一个标志位,在循行这个页面的时候,通过一次关电。然后后面的循环都不能够实现开头的关电。
在在代码显示里面,我有特别标明的一个地方,就是我所说的东西。
二、血压检测页面功能的描述和实现
实现的效果和心率来说有进度条。
实现的方法,其实和心率没有什么差别。进度条无非就是记录测量时间,然后根据时间写一个定时器。仅此而已。
代码如下(示例):
oled_show_5();
hp_sta = 0;
if((hp_sta == 0) && (ganrao2_flag == 0))
{
HP_6_CloseRate();
}
ganrao1_flag = 0;
u8 key;
key = get_KEY_page_4_number();
if(key==1)
{
HP_6_Openbp();
bp_flag = 1;
flag_time_10 = 3;
OLED_clear();
}
else if(key==2)
{
HP_6_Closebp();
bp_load_flag = 0;
bp_flag = 0;
flag_time_10 = 0;
OLED_clear();
}
if(bp_flag == 1)
{
oled_dis_16(0,32,"向下关闭测量");
if(bpbuff[7] == 2)
{
HP_6_Closebp();
printf("false\r\n");
oled_dis_16(3,60,"false");
oled_dis_16(5,60,"Reopen me");
if(bp_load_flag==0) OLED_clear();
bp_load_flag = 1;
}
if(bpbuff[7] == 1)
{
HP_6_Closebp();
if(bp_load_flag==0) OLED_clear();
sprintf((char *)h_buff,"H:%3dPa",bpbuff[10]);
sprintf((char *)l_buff,"L:%3dPa",bpbuff[11]);
oled_dis_16(3,60,h_buff);
oled_dis_16(5,60,l_buff);
bp_load_flag = 1;
HP_6_Openbp();
}
}
else
{
oled_dis_16(0,32,"向上开启测量");
}
ganrao2_flag = 1;
delay(100);
既然每个下面都哔哔赖赖一下,那么这里我想说的是,我觉得代码这种东西,除非是真的很小的功能,不然每个功能就像人体一样,是相互实现,相互成就,相互回应的,我比较讨厌这种比较断章取义的办法读代码。我喜欢直接怼这个工程。当然断章取义有断章取义的好处。
总结
也没啥好总结的,这个我觉得有开关电源是两个模块相互影响的时候,没有什么好的想法可以看一下。我提供了一个代码量小而且稍微有思路的一个解决方案。