自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(164)
  • 收藏
  • 关注

原创 呼吸信号处理

2023-10-29 19:15:00 136 1

原创 体温信号处理

2023-10-29 19:14:49 93

原创 打包解包小工具

2023-10-29 19:14:12 117

原创 MATLAB脚本语音基础

列向访问。

2023-10-29 19:13:59 54

原创 MATLAB概述

2023-10-29 19:13:46 26

原创 医疗基本电路

共模抑制比:共模抑制比CMRR的定义是放大电路对差模信号的电压增益与对共模信号的电压增益之比的绝对值。当输入阻抗很高时,就相当于对前级电路开路,当输出阻抗很低时,对后级电路就相当于一个恒压源,即输出电压不受后级电路阻抗影响,隔离作用就是将负载对输入端的影响隔离掉,例如音频信号的干扰等。差模信号:幅度相等,相位相反的信号, 共模信号 :幅度相等,相位相同的信号。差模信号:两个输入端子的输入信号分别为vi1和vi2时,两信号的差值称为差模信号,而两信号的算术平均值称为共模信号。FB:反馈电压输入引脚;

2023-10-29 19:13:28 27

原创 血压计测量原理

心脏一张一缩,使血液在循环器官内川流不息。血液在血管内流动时,无论心脏收缩或舒张,都对血管壁产生 一定的压力。当心脏收缩时,大动脉里的压力最高,这时的血液称为“高压”;左心室舒张时,大动脉里的压力最低,故称为“低压” 。平时我们所说的“血压”实际上是指上臂肱动脉,即胳膊窝血管的血压测定,是大动脉血压的间接测定。通常我们测血压右侧与左侧的血压不一样,最高可相差10毫米汞柱,最低相差不到5毫米汞柱。血压计的测量原理大致上分两种:一种是基于听诊法,另一种基于示波法。这两种都需要一个袖带气囊缠绕在胳膊上,用来充气

2023-10-29 19:13:04 120

原创 器件笔记-

去耦:电源—电容–地 一般作用与储能与滤波 (保证电路的线性关系,去除噪声,防止影响电压灵敏度高的元器件),电压高,电容充电,电压低,电容放电,控制电压保持在一定的范围内;滤波:把电压变化转换成电流变化,频率越高,峰值电流越大,所以会缓冲电压(充电放电过程),(电容大,阻抗小,通过的频率高,超过1uF,理论上是电解液(电感成分),会导致阻抗增大)电阻有标称 (材质),封装(大小),考虑电路空间,功耗大小(封装小,功耗低,相对价格高,精度高,焊接技术要求高,不便于修理)如果功率过大,会被烧坏的;

2023-10-27 08:59:13 23

原创 移植 lvgl 库

几个比较关键的就是控制器的主频需要大于 16 MHz,对于 STM32F103来说,主频可以达到 72MHz,满足要求,所需要的 Flash 要大于 64KB,对于指南者这款开发板来将,他的主控是 STM32F103VET6,Flash 具有 512KB,远远满足要求。紧接着就是lv_port_indev.c的更改,关于这部分代码,lvgl 官方给出了好几个输入设备的函数,触摸屏,鼠标,小键盘,旋钮,按键等输入设备,我们这里所选用的是触摸屏,那么就可以把其他的都删去。

2023-10-27 08:58:41 108

原创 39. 矢量字体显示

在矢量字体文件中,每个字符都是以一系列的点存放的,其中有一些点是控制点, 利用这些控制点来实现绘制抛物线的功能,如图 点绘制线 所示,p1是控制点,c1、c2是曲线的端点, 因此曲线可以用下面的公式进行描述,这描述方式就是贝塞尔曲线。之前几个章节所讲的字体都属于点阵字体,这种字体并不是以矢量描述的,放大以后会出现锯齿。回过头,看图 火 ,方框处是不是和上面说的原理是一样的,空心的点是线段的端点, 实心的点是控制点,利用贝塞尔曲线,描绘出字体的轮廓,最后在进行黑色填充,就完成了。

2023-10-27 08:58:10 341

原创 38. SIF格式字体显示

如 代码清单:SIF-5 所示,字库数据成功加载到SDRAM后, 调用GUI_SIF_CreateFont函数创建SIF字体,此函数的第三个参数为字体类型,必须严格等于字库转换器中选择的类型。导入模式文件之后,点击字体转换器左上角的File,然后选择Save As,设置文件名为思源黑体36_4bpp,保存文件格式为.sif, 见图 保存字库 和图 选择保存类型。SIF格式字库同样是通过字体转换器生成,全字库的生成步骤与生成XBF格式全字库的步骤完全一致, 不过这次我们稍微变化一下,只生成我们需要的部分。

2023-10-27 08:57:52 180

原创 37. XBF格式字体显示

此回调函数的实现方法是固定的。使用GUI_XBF_CreateFont函数创建字体,此函数的前两个参数就是最开始声明的结构体,第3个参数是字体类型, 必须和字体转换器所生成的字体类型相同,否则出错,第4个参数是实际用来获取字库数据的回调函数,由用户定义, 最后1个参数是需要传输给回调函数的自定义数据指针,此处传输的是字库的地址。有一点需要注意,字体转换器里设置的字体大小是包括字体上下边界的总大小,而不同的字体有着不同尺寸的上下边界, 例如思源黑体这样的字体上下边界就很宽,而新宋体的上下边界就比较窄。

2023-10-27 08:57:30 366

原创 36. emWin支持的字体

带2bpp抗锯齿的扩展比例位图字体的显示效果如图 带2bpp抗锯齿的扩展比例位图字体 所示。带4bpp抗锯齿的扩展比例位图字体的显示效果如图 带4bpp抗锯齿的扩展比例位图字体。外部位图字体(XBF)格式,和SIF字体一样,XBF字体是包含字体信息的二进制数据块, emWin自带的字体转换器可以用来创建XBF文件,具体方法会在之后章节讲解。最推荐的声明自定义字体原型的方法是将它们放入一个应用程序定义的头文件中,并且使用这些字体的所有源文件都应该要包含, 见 代码清单:声明自定义字体。

2023-10-27 08:57:13 110

原创 35. 字符编码

表格 GBK兼容ASCII和GB2312的原理 说明了GBK是如何兼容ASCII和GB2312标准的, 当我们设定系统使用GBK标准的时候,它按顺序遍历字符串,按字节检测字符值的大小,若遇到一个字符的值大于127时, 就再读取它后面的一个字符,把这两个字符值合在一起,用GBK解码,解码完后,再读取第3个字符,重新开始以上过程, 若该字符值小于127,则直接用ASCII解码。对于UTF-8单字节的编码,该字节的第1位设为0(从左边数起第1位,即最高位),剩余的位用来写入字符的Unicode编号。

2023-10-27 08:56:56 19

原创 34. PNG图片显示

首先还是必须要用f_open打开PNG图片文件, 然后不同的是用GUI_ALLOC_AllocZero函数申请一块动态内存, 并且用GUI_ALLOC_h2p把这段动态内存的句柄转为指针_acbuffer, 方便之后使用,接着用f_read函数把图片数据读到刚刚申请到的动态内存中,读取完成后关闭文件, 使用GUI_PNG_Draw函数将动态内存中的PNG数据绘制到LCD上,如果之后的程序不再使用这张PNG, 就必须使用GUI_ALLOC_Free函数释放动态内存。返回值:绘制成功返回0,绘制失败返回非0。

2023-10-26 09:14:44 38

原创 33. GIF图片显示

如 代码清单:GIF-7 所示,从外部存储器中直接绘制GIF图片前必须先通过文件系统函数f_open函数打开GIF文件, 图片打开成功后调用GUI_GIF_GetInfoEx函数获取GIF图片的X大小、Y大小和总帧数等信息,根据获取到的总帧数使用for循环绘制GIF子图象, 循环体中GUI_GIF_GetImageInfoEx函数主要用来获取GIF每一帧的显示时间,GUI_GIF_DrawSubEx负责绘制GIIF图像,GUI_Delay负责长度执行每一帧显示时间的演示。

2023-10-26 09:14:28 56

原创 32. JPEG图片显示

首先还是必须要用f_open打开JPEG图片文件,然后不同的是用GUI_ALLOC_AllocZero函数申请一块动态内存, 并且用GUI_ALLOC_h2p把这段动态内存的句柄转为指针_acbuffer,方便之后使用,接着用f_read函数把图片数据读到刚刚申请到的动态内存中, 读取完成后关闭文件,使用GUI_JPEG_Draw函数将动态内存中的JPEG数据绘制到LCD上,如果之后的程序不再使用这张JPEG, 就必须使用GUI_ALLOC_Free函数释放动态内存。见 代码清单:JPEG-6。

2023-10-26 09:14:14 104

原创 31. BMP图片显示

首先还是必须要用f_open打开BMP图片文件,然后不同的是用GUI_ALLOC_AllocZero函数申请一块动态内存, 并且用GUI_ALLOC_h2p把这段动态内存的句柄转为指针_acbuffer,方便之后使用,接着用f_read函数把图片数据读到刚刚申请到的动态内存中, 读取完成后关闭文件,使用GUI_BMP_Draw函数将动态内存中的BMP数据绘制到LCD上,如果之后的程序不再使用这张BMP,就必须使用GUI_ALLOC_Free函数释放动态内存。目前最常见的是256位色BMP和24位色BMP。

2023-10-26 09:14:01 140

原创 30. 图标控件

接下来是创建图标控件的重点,使用ICONVIEW_CreateEx函数创建图标控件,函数的前4个参数分别对应了控件的起始坐标和尺寸, 第5个参数是控件的父窗口句柄,我们选择桌面窗口WM_HBKWIN作为图标控件的父窗口,还有单个图标的垂直尺寸这个参数比较重要, 这个参数是包含图标下方文本信息的尺寸的,需要根据图标尺寸和实际字体大小来调整。3) 选择C文件的颜色格式。图标控件没有固定外观,具体显示什么样的内容完全由用户决定,不过它的结构是不变的, 例如带透明度的图标控件如图 带透明度的图标控件样式 所示。

2023-10-26 09:13:40 98

原创 29. 曲线图控件

创建数据对象的创建相对比较简单,首先是调用GRAPH_DATA_YT_Create函数,设置待显示曲线的颜色为红色,最大可显示600个数据, 函数的后面两个参数分别是待添加到对象中的数据的指针和待添加数据的个数,在 代码清单:曲线图-4 中我们不在初始化阶段添加数据, 所有后两个参数都填0,数据对象创建成功后会返回它的句柄,得到数据对象的句柄之后就可以使用GRAPH_AttachData函数将数据对象添加到曲线图控件中。由于控件本质上是窗口,所以曲线图控件在创建时可以使用几乎所有的窗口创建标志。

2023-10-26 09:13:23 160

原创 28. 进度条控件

在WM_PAINT消息中, 首先使用PROGBAR_GetValue函数获取进度条当前的值,然后将这个值加1后再通过PROGBAR_SetValue函数输入回进度条, if语句判断进度条的值是否到达100,如果到达100则设值为0,从头开始。此函数的第一个参数指向的是 代码清单:进度条-3 的资源表结构,但不使用其中的para参数, 其中的Flags参数的可选值与PROGBAR_CreateEx()函数的ExFlags参数相同,用于设置进度条方向。进度条(Progbar)控件也是一种用户数据可视化的控件。

2023-10-26 09:13:10 63

原创 27. 滑块控件

滑块控件的值需要随着滑块的滑动一直更新,所以我们在通知代码WM_NOTIFICATION_VALUE_CHANGED中, 使用SLIDER_GetValue函数获取当前滑块的值,然后使用EDIT_SetValue函数把得到的值送到编辑框中。这样就实现了滑动滑块控件的同时更新编辑框中数值的功能。100, SLIDER_SetWidth函数设置ID_SLIDER_1的宽度为20像素,ID_SLIDER_2的宽度为30像素, SLIDER_SetSkinClassic函数将ID_SLIDER_2设置为经典皮肤。

2023-10-26 09:12:58 103

原创 26. 列表轮控件

本实验中我们把3个列表轮控件的属性设置成完全一样的,那就需要使用for循环依次初始化3个列表轮控件, 其中LISTWHEEL_SetLineHeight函数设置的高度是包含字体高度的,LISTWHEEL_SetSnapPosition函数将列表轮停止时的选项吸附位置设置在中间, 使用LISTWHEEL_SetOwnerDraw函数设置一个用户绘制函数,用来美化控件。列表轮基础实验的实验现象如图 列表轮基础实验现象 所示,分别上下滑动年月日3个控件可以选择不同的选项,每个控件的选项都是循环显示的。

2023-10-26 09:12:40 51

原创 25. 表格控件

表格控件基础实验的实验现象如图 表格控件基础实验初始状态 和图 添加若干行和列之后的状态 所示, 点击表格控件中的某一行会在下发显示当前行的文本信息,点击“Add Row”按钮可以向表格中增加新的一行数据, “Del Row”按钮可以删除表格的最后一行,“Add Column”按钮可以增加新的一列,“DelColumn”按钮可以删除表格的最后一列。当然也可以使用emWin预定义好的表格控件ID, 但最多只有GUI_ID_LISTVIEW0到GUI_ID_LISTVIEW3,共4个ID可供使用。

2023-10-26 09:11:59 96

原创 23. 多行文本控件

使用MULTIEDIT_SetBkColor函数和MULTIEDIT_SetTextColor函数分别设置控件背景颜色为黑色, 字体颜色为绿色,这两个函数的由于在前面已经设置多行文本为只读模式了,所以在设置控件颜色的时候需要对应不同的模式, 最后设置文本对齐方式为左对齐。和其他控件一样,多行文本控件相关API函数几乎都是使用句柄来操作的,但在建立对话框资源表的时候并没有定义它的句柄, 那就需要通过WM_GetDialogItem函数来自动建立并获取多行文本控件的句柄。如果为0,则将桌面窗口作为其父窗口;

2023-10-26 09:11:40 118

原创 24. 下拉框控件

成功获取句柄后,设置ID_DROPDOWN_0和ID_DROPDOWN_1展开状态的列表高度为100像素,设置字体大小为24, 使能自动使用滚动条并设置滚动条的宽度为20,最后使用DROPDOWN_AddString函数为两个下拉框控件各添加8个选项。此函数的第一个参数指向的是 代码清单:控件基础-3 的资源表结构,但不使用其中的para参数, 其中的Flags参数的可选值与表格 ExFlags可选值 相同。下拉框控件支持5种通知代码,以区分各种不同的操作动作,见表格 下拉框控件支持的通知代码。

2023-10-26 09:11:08 130

原创 22. 编辑框控件

设置ID_EDIT_1为浮点数编辑模式,初值为3.1415926,可编辑和显示的最小值为0.0,最大值为10.0,最多可显示小数点后7位,显示模式为正常, 即只有当数值为负值时才显示负号,否则显示前导零。编辑框控件基础实验的实验现象如图 编辑框控件基础实验初始现象 和图 编辑框被点击后的现象 , 可以看到有三排编辑框,第一排是字符文本模式,第二排左侧是浮点数文本模式,第二排右侧是十六进制文本模式, 第三排是二进制文本模式,当点击其中一个编辑框时,下方的文本控件会显示出相应的内容。

2023-10-26 09:10:53 221

原创 21. 文本控件

使用TEXT_SetTextAlign 函数把5个文本控件 的文本对齐方式全部设置为水平左对齐和垂直居中对齐,全部文本对齐方式见表格 ExFlags参数可选值 , 使用TEXT_SetFont函数分别给5个控件设置不同的字体,然后TEXT_SetText函数输入想要显示的文本内容, 其中最后一个控件使用TEXT_SetDec函数显示一个5位的不含小数和符号的十进制数。文本控件基础实验最终的实验现象如图 文本控件基础实验现象 所示, 可以看到各种文本控件的显示效果,并且对话框右侧的数值会不断累加。

2023-10-26 09:10:39 79

原创 20. 单选按钮控件

代码清单:单选按钮-4 在此消息中实现了对话框客户窗口的背景颜色重绘,根据在WM_NOTIFY_PARENT消息中获取到的单选按钮选项值, 使用GUI_SetBkColor函数修改背景颜色,背景颜色存放在一个GUI_COLOR类型的数组aColor[]中。单选按钮控件基础实验的实验现象如图 初始选项实验现象 和图 选择不同选项时的实验现象 所示, 选择不同的选项,对话框的背景就会变为对应的颜色。单选按钮控件支持4种通知代码,以区分不同的控件行为,见表格 单选按钮支持的通知代码。

2023-10-26 09:10:22 100

原创 19. 复选框控件

本实验选用的复选框贴图见表格 CHECKBOX_SetImage函数第三个参数的所有可选值 ,分为未选中和已被选中两种, 在复选框以点击的通知代码WM_NOTIFICATION_CLICKED内, 根据CHECKBOX_GetState函数返回的复选框状态调用CHECKBOX_SetImage函数切换两种贴图即可。复选框贴图实验的现象如图 复选框未被选中时的贴图效果 和图 复选框被选中时的贴图效果 所示, 可以看到在上一个实验的基础上新增的Checkbox3按钮在初始未选中和已被选中时的贴图效果。

2023-10-25 09:09:54 148

原创 18. 按钮控件

在自定义回调函数的WM_PAINT消息中, 首先通过WM_GetClientRect函数获取按钮客户区的左上点坐标和右下点坐标,这个坐标实际上是从对话框资源表中设置的按钮大小得来的, 然后通过BUTTON_IsPressed函数判断按钮是被按下还是被释放,为1时按钮被按下,为0时按钮被释放,接着根据不同的按钮状态绘制对应不同状态的外观样式。按钮控件本质上也是窗口,所以其内部也是有默认的回调函数的,通过WM_SetCallback函数可以把按钮回调函数重定向为自定义回调, 这样就能实现各种各样的按钮效果。

2023-10-25 09:09:39 125

原创 17. 框架窗口控件

主窗口回调负责绘制边框、标题栏等外观以及处理边框上按钮的消息,客户窗口回调负责绘制控件的客户区以及处理子控件的消息, 因为在框架窗口控件中创建的子控件,会以客户窗口作为他们的父窗口。如果是用对话框形式间接创建的框架窗口控件,则对话框回调函数就是控件的客户窗口回调。如 代码清单:框架窗口-3 所示,首先定义控件ID,控件ID可以使用系统默认ID也可以自定义,默认ID可在GUI.h中找到, 如果使用自定义控件ID,则需要以GUI_ID_USER为基础,在它之上依次递增,以免与系统默认的控件ID冲突。

2023-10-25 09:09:21 41

原创 16. 对话框基础

阻塞式对话框,顾名思义,是会阻塞当前执行的线程或任务的对话框,且默认情况下具有输入焦点,直到用户把它关掉,才能继续执行当前线程。可以看到,对话框创建完成之后,资源表中包含的所有控件都显示了出来,但是现在的对话框并没有实质性的功能, 因为对话框回调函数中还不包含各个控件的初始化代码。有了资源表,还差一个对话框回调函数就可以创建对话框了,代码清单:对话框-2 显示了对话框回调函数的框架, 这个回调函数其实跟普通窗口的回调几乎是一样的,唯一不同的是对话框回调函数需要接收两种专有消息。函数的具体参数在之后讲解。

2023-10-25 09:09:02 23

原创 15. 控件基础

当控件的属性被更改时,控件的窗口或控件的一部分会被标记为无效,但此时不立刻执行重绘,重绘操作由窗口管理器在稍后完成, 或者控件可以通过调用WM_Paint()或WM_Exec()强制执行重绘,直到所有无效窗口都被重绘。和窗口不同的是,控件创建时有一个默认的回调函数, 调用GUI_Exec()会使得窗口管理器向这些控件回调函数发送 WM_PAINT消息来执行重绘操作, 所有以被标记为无效的控件的回调函数都会收到WM_PAINT消息。控件通常作为子窗口创建,其父窗口可以是任何类型的窗口,甚至是另一个控件。

2023-10-25 09:08:35 19

原创 14. 窗口管理器

使用WM_CreateWindow函数创建一个窗口,创建标志为WM_CF_SHOW即创建完成之后显示窗口,链接窗口回调函数,实际的窗口绘制和重绘工作由回调函数完成, 没有额外的用户数据。接着直接在桌面背景上创建窗口并移动它,移动结束后使用WM_SetCallback函数把默认的背景窗口回调函数重定向为自定义回调函数, 再重新创建和移动窗口,第二次移动结束后再次使用WM_SetCallback函数恢复默认的背景窗口回调函数。桌面始终是最底层的窗口,当没有定义其他窗口时,它是默认的(活动的)窗口。

2023-10-25 09:08:15 287

原创 13. 内存设备

如果创建的内存设备有足够多的内存, 那么整个窗口都会放到内存设备中进行绘制,如果这个内存设备的可用内存无法绘制完整窗口,则窗口管理器会使用“分段”来绘制窗口。用于绘图操作的内存只在绘图操作期间分配,如果在绘制或重绘窗口时没有足够的可用内存,则不使用内存设备进行绘制或重绘窗口。这样就完成了一次最简单的内存设备的使用。内存设备基础实验的结果如图 内存设备实验结果 所示,将例程下载到开发板运行后, 在屏幕上能看到左侧不使用内存设备直接绘制的数字有明显的闪烁现象,而右侧使用内存设备绘制的数字稳定无闪烁。

2023-10-25 09:07:59 71

原创 12. 颜色

随着越来越多的硬件平台开始使用和ABGR稍微不同的颜色格式,emWin从V5.30开始增加了对ARGB逻辑颜色格式的支持, 以便在某些情况下能够显着提高性能。这也是跟之前的逻辑颜色格式有关, 含字母M的表示ARGB颜色格式下使用的调色板,不带M的表示在ABGR格式下使用的调色板。首先,根据屏幕大小计算出可以显示多少色条,然后将每条色条的名称通过GUI_DispStringInRect函数显示出来, 最后调用GUI_DrawGradientH函数根据指定的颜色,绘制出所有的色条。

2023-10-25 09:07:45 73

原创 11. 显示位图

位图转换器SEGGER公司为emWin开发的一种主要用于将PC格式的图片转换为C文件格式或C流位图格式的工具,支持BMP、GIF、PNG和JPEG格式的转换。BitsPerPixel: 位图图像单个像素所占的位数,该参数和上一个参数都与位图的宽度和颜色格式有关,假设位图使用的颜色格式是ARGB8888,那么图像单个像素数据就占32位;BytesPerLine: 位图图像每一行的字节数,该参数与位图的宽度和颜色格式有关,假设位图使用的颜色格式是ARGB8888,乘上图片的宽度,就是图像每一行的字节数;

2023-10-25 09:07:30 80

原创 10. 2D绘图

那如何给正方体上色呢?以上代码的内容包括:一个矩形起始坐标和终点坐标的数组BasicRect,用于绘制饼图的角度值数组aValues和颜色数组aColor, 用于生成二维码的字符串QR_TEXT,以及用于绘制正方体六个面的多边形点列表数组。2的正方体, 由口诀的第一句话,可以知道角OBB’等于45°,第二句话说明了AA’和BB’的长度等于原来的长度的二分之一。这里需要注意的是,GUI_SetLineStyle()函数只有在画笔大小为1的时候才有效,画线函数的坐标x0的值必须小于x1的值,否则函数无法显示。

2023-10-25 09:04:01 71

原创 数值显示-

和十进制函数一样,浮点显示函数也需要注意显示位数和符号位的问题, 而待显示数值最高位为零的问题对其没有影响。例如待显示数为12345, 当指定显示位数小于5时,函数无法显示,大于5时,会在待显示数值的最高位补零,其中GUI_DispDecSpace()函数会在最高位补空格。(3) 如果待显示数值中含有负号或小数点,包括使用GUI_DispDecShift()和GUI_DispSDecShift(), 在指定显示位数时需要把这些符号也计算在内,否则函数无法正常显示。可以看出各种进制间不同函数的显示效果。

2023-10-25 09:03:37 23

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除