Justice_Gao

  • 2019-02-14
  • 回复了主题帖: MAX32630FTHR设计笔记(11):血氧传感器MAX30102采集人体血氧浓度和心率(C语言版...

    time_opp 发表于 2019-2-13 18:41 请问Com.h文件在哪找的?
    自己编写的

  • 2018-12-26
  • 回复了主题帖: 颁奖:答题赢好礼:Vicor为现代铁路应用设计电源系统

    信息无误。兑换成E币,谢谢

  • 2018-11-22
  • 加入了学习《TI Device Selection Guide》,观看 TI-B2-HPD

  • 加入了学习《TI Device Selection Guide》,观看 如何选择AMPS产品

  • 加入了学习《DIY》,观看 编程玩具DIY

  • 2018-11-19
  • 回复了主题帖: 【奖品发送完毕】:看Maxim 深入浅出低功耗处理器视频精彩为您呈现!

    感谢EEworld, 换成E金币。谢谢

  • 2018-10-22
  • 回复了主题帖: 【GD32F350开发分享十】基于GD32F350的单导联心电采集系统

    Justice_Gao 发表于 2018-10-22 15:44 兄台真会开玩笑
    {:1_101:}

  • 回复了主题帖: 【GD32F350开发分享十】基于GD32F350的单导联心电采集系统

    xinxiaojun 发表于 2018-10-22 14:46 目测要获大奖 ,简直是评测贴的典范.
    兄台真会开玩笑

  • 2018-10-21
  • 加入了学习《随身信息牌测试视频》,观看 随身信息牌测试视频

  • 加入了学习《随身信息牌测试视频》,观看 随身信息牌测试视频

  • 2018-10-19
  • 回复了主题帖: 【GD32F350开发分享十】基于GD32F350的单导联心电采集系统

    ketose 发表于 2018-10-19 13:01 没有给出心电信号原关键部分, 但是要把心电信号原理讲一下啊。
    心脏活动的主要表现之一是产生电激动,它出现在心脏机械性收缩之前。心肌激动的电流可以从心脏经过身体组织传导至体表,使体表的不同部位产生不同的电位变化。 按照心脏激动的时间顺序,将此体表电位的变化记录下来,形成一条连续曲线,即为心电图。在正常情况下,每次心动周期在心电图上均可出现相应的一组波形. P 波:由心房的激动所产生。前一半主要由右心房所产生,后一半主要由左心房所产生。正常 P波的宽度不超过 0.11s,最高幅度不超过 2.5mm。 QRS 波群:反映左、右心室的电激动过程,称 QRS 波群的宽度为 QRS 时限,代表全部心室肌激动过程所需要的时间。正常人最高不超过 0.10s。 T 波:代表心室激动后复原时所产生的电位。在 R 波为主的心电图上, T 波不应低于 R 波 1/10。 U 波:位于 T 波之后,可能是反映心肌激动后电位与时间的变化。 P-R 间期:是从 P 波起点到 QRS 波群起点的相隔时间。它代表从心房激动开始到心室开始激动的时间。这一期间随着年龄的增长而有加长的趋势。 QRS 间期:从 Q 波开始至 S 波终了的时间间隔。它代表两侧心室肌(包括心室间隔肌)的电激动过程。 S-T 段:从 QRS 波群的终点到 T 波起点的一段。正常人的 S-T 段是接近基线的,与基线间的距离一般不超过 0.05mm。 P-R 段:从 P 波后半部分起始端至 QRS 波群起点。同样,正常人的这一段也是接近基线的。 Q-T 间期:从 QRS 波群开始到 T 波终结相隔的时间。它代表心室肌除极和复极的全过程。正常情况下, Q-T 间期的时间不大于 0.04s。 将两个电极置于人体表面上不同的两点,通过导线与心电图机相连,就可以描出一种心电图波形。描记心电图时的电极安放位置及导线与放大器的联接方式称为心电图导联。对单导心电图机来说,心电图是通过多个导联而得出的体表电位差的不同时间的记录。临床诊断上,为便于统一和比较,对常用的导联做出了严格的规定。现在广泛应用的是标准十二导联,分别记为 I、 Ⅱ、 Ⅲ、 aVR、 aVL、 aVF、 V1~V6。 I、 Ⅱ、 Ⅲ为双极导联, aVR、 aVL、 aVF 为单极肢体加压导联, V1~V6 为单极胸导联。获取两个测试点的电位差时,用双极导联;获取某一点相对于参考点的电位时,用单极导联

  • 2018-10-18
  • 回复了主题帖: 【GD32F350开发分享十】基于GD32F350的单导联心电采集系统

    jdsnpgxj 发表于 2018-10-18 16:00 Justice_Gao出品。必属精品呀
    谢谢  不知道这次能不能拿大奖

  • 加入了学习《EE网友DIY作品:都市青年家庭安防卫士》,观看 都市青年家庭安防卫士

  • 发表了主题帖: 【GD32F350开发分享十】基于GD32F350的单导联心电采集系统

    本帖最后由 Justice_Gao 于 2018-10-18 16:44 编辑 一、作品名称 基于GD32F350的单导联心电采集系统二、作品简介       传统心电监测常见有常规心电图检测、监护心电图检测和动态心电图检测。常规心电图检测使用12导联同步检测,大部门在医院或体检中心使用,存在设备体积大、不适合院外监护等缺点。监护心电图采用三导联检测心电信号,主要有CCU、ICU监护室的实时心电监护仪,按次数收费,仅限于医院。而常见的动态心电图检测配合不同数量的电极,可检测不同导联心电信号,设备需要提前预约,数据分析和报告获取都必须前往医院,且不够便携。       为了更加便捷高效地监测人体的心律特征,设计了一种基于GD32F350的单导联心电采集系统。该系统采用单导联的方式获取心电信号,只需将导联电极片安装于使用者手上,即可随时随地查看自己的心电图,无需前往医院专门检查自己的心脏健康情况。系统采用蓝牙的传输方式,将心电信号通过蓝牙实时上传至手机APP端,APP端集成心电信号的滤波算法,实时绘制使用者的心电图,同时,在测量结束后,给出测量报告。该系统不但解决了传统心电监测设备不方便的问题,还可以为使用者提供心电分析报告及心电图,为进一步医生确诊提供详细的参考依据。 三、系统框图图1 系统框图      如图1所示,系统主要由微控制器GD32F350、TFT显示屏、心电信号处理电路、金属电极片、独立按键、LED显示灯、蓝牙模块、手机APP和服务器组成。其中,微控制器GD32F350、独立按键和LED显示灯集成于GD32F350开发板上,其他部分的硬件和软件为自主设计。系统利用的GD32F350的资源包括RTC、定时器Timer0、串口USART0和串口USART1、ADC转换、SPI总线、外部中断EXTI和GPIO控制,融合心电信号处理算法,可以实现实时心电数据的采集,并通过蓝牙传输至APP端进行算法处理和绘制。      GD32F350通过UART0与蓝牙模块(nRF52832)连接,通过外部中断的方式判断蓝牙是否连接上APP,通过GPIO控制LED指示灯,通过外部中断的方式判断独立按键,通过SPI/UART1与TFT显示屏连接,并将RTC实时时钟显示在屏幕上,接收心电信号处理电路的输出信号,通过ADC采样,利用TIMER0定时采样,即设置采样率。GD32F350的时钟源采用外部高速晶振8MHz以及外部低速时钟32.768KHz(自己焊接)。      蓝牙模块以nRF52832为主控芯片,通过串口与GD32F350连接,将串口数据转成蓝牙数据,传输至手机APP实时显示并给出评估报告。      TFT显示屏主要显示图片、动态滚动字幕、动态实时时钟、静态文字等。      心电信号处理电路主要用于放大滤波稳定微弱的心电信号,是整个系统功能的基础条件。      下面,分各个模块进一步详细介绍。 四、各部分实现的功能说明和解析(1)硬件设计4.1 GD32F350最小系统(开发板)图2 GD32F350开发板作为主MCU,系统功能的实现,调用内部很多资源。该系统采用了GD32F350的以下功能:1)        异步通信接口UART0和UART12)        外部高速时钟HXAL,8MHz晶振(自己焊接)3)        GPIO 通用输入输出接口4)         软件模拟I2C,SPI总线通信协议5)        RTC实时时钟;6)        外部低速时钟LXAL,32.768KHz晶振(自己焊接)7)        Timer0定时器捕获高速输入8)        12位ADC单次采样连续模式9)        外部中断,边沿触发可以说,兆易创新推出的这款GD32F芯片,无论是从高频率的处理速度还是资源的配备上,都是能够满足绝大部分的应用。 4.2 心电信号处理电路图3 心电信号处理电路        如图3所示,为心电信号处理电路(由于知识产权原因,具体参数不提供),该部分是整个系统能够实现最终功能的基础,包括心电信号放大、滤波、稳定。电路采用3.0V直流稳压电源供电,图4为心电信号处理电路供电电路。心电信号处理电路输出端信号传入至GD32F350的通道11进行ADC转换。GD32F350采用逐次逼近方式的12位模拟数字转换器ADC,有 19 个多路复用通道,可以测量来自16个外部通道,2个内部通道和电池电压(VBAT)通道的模拟信号。模拟看门狗允许应用程序来检测输入电压是否超出用户设定的高低阈值。每个通道的 A/D 转换可以配置成单次、连续、扫描或间断转换模式。如果GD32F350能够支持差分输入ADC就更好了。本系统设置ADC为12位分辨率,采用定时器设置采样频率,采样频率为250Hz。图4 心电信号处理电路供电电路        如图5所示,为心电信号处理电路实物图。电路的输出为一路模拟信号输入至GD32F350的ADC通道,电路的输入为三个金属导联电极片,分别接人体任意三个部位,但不能两两短路,如图6所示,为三个金属导联电极片。图5 心电信号处理电路实物图图6 金属导联电极片 4.3 TFT显示屏和RTC实时时钟       TFT显示屏主要显示图片、静态文字、滚动字幕、实时时钟以及绘制心电图波形。      RTC实时时钟的初始化设置可以通过APP设置,APP通过蓝牙下发指令,蓝牙模块将指令通过串口下发,如图7所示,设置成功后,实时时钟会显示在TFT显示屏上,并按秒更新计数。 图7 TFT显示屏显示内容及实时时钟 4.4 蓝牙模块        系统采用nRF52832设计蓝牙模块,最小系统电路图如图8所示。上电后,nRF52832广播蓝牙连接消息,未与手机蓝牙建立连接时,引脚STATUS为高电平,LED闪烁,建立蓝牙连接时,引脚STATUS为低电平,LED常亮,触发GD32F350外部下跳沿中断,GD32F350开启定时中断和ADC采样,nRF52832通过串口接收心电数据,并通过蓝牙传输至手机APP,手机APP绘制实时心电图,如图9所示。断开蓝牙连接后,引脚STATUS为高电平,LED闪烁,触发GD32F350外部上升沿中断,GD32F350关闭定时中断和ADC采样,手机APP结束绘制心电图,并给出心电图综合评估报告,如图10所示。图8 nRF52832最小系统原理图图9 实时心电图                         图10 心电图综合评估报告 4.5独立按键和LED显示灯        这两个部分的硬件在GD32F350的开发板上有,主要用于按键事件触发及工作指示功能。当开始心电采集时,LED显示灯呈流水灯式变化,否则静止不动,保持当前状态。 (2)软件设计       GD32F350软件设计流程图如图11所示。首先,系统初始化,包括GPIO输入输出、外部中断、ADC初始化、SPI初始化、串口UART0和UART1初始化、定时器初始化、系统参数初始化等等;蓝牙未连接时,STATUS引脚为高电平,当蓝牙连接上,STATUS引脚由高电平变为低电平,触发GD32F350的外部下跳沿中断事件,则开启ADC和定时器,LED灯开始流水灯式闪烁,系统开始正常工作;当蓝牙断开时,STATUS引脚由低电平变为高电平,触发GD32F350的外部上升沿中断事件,则关闭ADC和定时器,LED停止闪烁;图11 GD32F350软件设计流程图        nRF52832蓝牙模块的软件设计流程图如图12所示,其主要功能为将串口数据转成蓝牙数据发送至APP手机客户端,并通过STATUS输出引脚通知GD32F350是否已经连接上蓝牙。串口数据遵循数据格式,若不是定义的数据格式的数据,将被视为无效数据丢弃,目的是保证系统的安全性和不可复制性。图12 nRF52832蓝牙模块软件设计流程图 如图13所示,为心率算法的软件流程图。 图13 心率算法软件流程图 五、演示视频图14 实物演示示意说明图如图14所示,为实物演示示意说明图。1---->TFT显示屏2---->心电信号处理电路模块3---->GD32F350开发板4---->金属导联电极片5---->蓝牙模块6---->心电模拟信号发生器(用于模拟心电信号)7---->电源视频请看下面$('flv_Utb').innerHTML=(mobileplayer() ? "" : AC_FL_RunContent('width', '500', 'height', '375', 'allowNetworking', 'internal', 'allowScriptAccess', 'never', 'src', 'https://player.youku.com/player.php/sid/XMzg3Mjg4NTYyNA==.html?spm=a2h3j.8428770.3416059.1/v.swf', 'quality', 'high', 'bgcolor', '#ffffff', 'wmode', 'transparent', 'allowfullscreen', 'true')); 如无法播放,请直接进入网页观看基于GD32F350的单导联心电采集系统视频 六、源码 (1)GD32F350开发工具  Keil MDK 5.23源码架构如图15所示源码下载: (2)蓝牙nRF52832开发工具 IAR 7.8SDK版本 13.0源码下载:注意:需要SDK13.0的库才能编译通过 七、论坛发帖情况(1)【GD32F350开发分享一】GPIO之点亮LED灯(2)【GD32F350开发分享二】GD32F350时钟配置,非常重要(3)【GD32F350开发分享三】定时器T0中断:内部高速时钟源(4)【GD32F350开发分享四】定时器T0中断:外部高速时钟源8MHz(5)【GD32F350开发分享五】GPIO模拟SPI控制液晶显示屏(6)【GD32F350开发分享六】USART0和USART1的双串口应用(7)【GD32F350开发分享七】GPIO模拟I2C驱动(8)【GD32F350开发分享八】RTC年月日时分秒实时时钟,并显示在TFT屏幕上(9)【GD32F350开发分享九】单端输入ADC+定时器单次转换(10)GD32F350开发分享十】作品提交 八、作品总结与展望       本作品采用单导联采集人体心电信号,通过算法提高心电测量的精确度和准确度,为使用者提供心电相关联的生理健康参数指标,便于使用者能够更加方便快捷地获取到准确的数据,为身体感到异常时提供就医参考数据及病历,同时间接改变使用者的生理作息,引导使用者坚持健康的生活方式。     本作品可以应用于智慧养老:提供心电监测及改善产品和集成软件API接口     还可以应用于智慧医疗:是基于心电诊疗医院等单位/机构推出的心电监测及改善服务。         最后,由衷感谢兆易创新和电子工程世界EEWORLD举办的这次活动和机会,让我接触国产芯片,体验到其功能的强大。

  • 2018-10-16
  • 发表了主题帖: 【GD32F350开发分享九】单端输入ADC+定时器单次转换

    如果GD32F350能支持差分ADC就更好了,原因大家应该都知道 作品也快完成了,还在忙着写报告,估计要压点提交作品了 GD32F350芯片上的12 位 ADC 是一种采用逐次逼近方式的模拟数字转换器。它有 19 个多路复用通道, 可以测量来自 16 个外部通道, 2 个内部通道和电池电压(VBAT)通道的模拟信号。 模拟看门狗允许应用程序来检测输入电压是否超出用户设定的高低阈值。 每个通道的 A/D 转换可以配置成单次、连续、扫描或间断转换模式。 ADC 转换的结果可以按照左对齐或右对齐的方式存储在 16 位数据寄存器中。 片上的硬件过采样机制可以通过减少 MCU 的相关计算负担来提高性能。   void adc_config(void) {     /* ADC contineous function enable */     adc_special_function_config(ADC_CONTINUOUS_MODE, ENABLE);     /* ADC trigger config */     adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE);     /* ADC data alignment config */     adc_data_alignment_config(ADC_DATAALIGN_RIGHT);     /* ADC channel length config */     adc_channel_length_config(ADC_REGULAR_CHANNEL, 1);     /* ADC regular channel config */     adc_regular_channel_config(0, BOARD_ADC_CHANNEL, ADC_SAMPLETIME_239POINT5);     adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);     /* ADC resolusion 12B */     adc_resolution_config(ADC_RESOLUTION_12B);         /* enable ADC interface */     adc_enable();     /* ADC calibration and reset calibration */     adc_calibration_enable(); }复制代码 如代码所示, (1)选择高性能12位分辨率 (2)选择模拟输入通道ADC channel11 (3)选择转换开始的触发方式:规则通道的外部触发 (4)选择转换模式:连续模式,连续转换所选择的输入通道 (5)选择数据寄存器可配置数据对齐方式为右对齐 (6)选择采样时间239.5周期 采样时间影响ADC的转换时间 ADC的转换时间 = 采样时间 +12.5周期 采样时间越久,精度越高,但是不能超过采样频率(采样间隔)。 用定时器定时采样频率,定时时间到,转换开始 定时器参考帖子 【GD32F350开发分享四】定时器T0中断:外部高速时钟源8MHz

  • 发表了日志: 【GD32F350开发分享九】单端输入ADC+定时器单次转换

  • 2018-10-14
  • 回复了主题帖: 【GD32F350开发分享八】RTC年月日时分秒实时时钟,并显示在TFT屏幕上

    tianjiu 发表于 2018-10-14 17:09 这次用GD32F350,在测试RTC时用的是内部振荡器,误差约10%,经过几次测试校准,感觉内部的RTC挺好用的
    内部RTC相对更加低功耗  外部RTC稍微耗电一点 能校准最好了

  • 2018-10-11
  • 发表了主题帖: 【GD32F350开发分享八】RTC年月日时分秒实时时钟,并显示在TFT屏幕上

    本帖最后由 Justice_Gao 于 2018-10-11 15:52 编辑 为了得到更加精确的RTC时钟,我采用了LXTAL外部晶振,自己动手焊接了32.768KHz和匹配电容。 时钟选择如下: #define RTC_CLOCK_SOURCE_LXTAL #define BKP_VALUE    0x32F0 rtc_timestamp_struct rtc_timestamp; rtc_parameter_struct rtc_initpara; __IO uint32_t prescaler_a = 0, prescaler_s = 0; void rtc_setup(void); void rtc_show_time(void); void rtc_show_timestamp(void); uint8_t usart_input_threshold(uint32_t value); bool RTC_Timer_Set_Flag=0; void rtc_pre_config(void); /*!     \brief      RTC configuration function     \param[in]  none     \param[out] none     \retval     none */ void rtc_pre_config(void) {     #if defined (RTC_CLOCK_SOURCE_IRC40K)           rcu_osci_on(RCU_IRC40K);           rcu_osci_stab_wait(RCU_IRC40K);           rcu_rtc_clock_config(RCU_RTCSRC_IRC40K);              prescaler_s = 0x18F;           prescaler_a = 0x63;     #elif defined (RTC_CLOCK_SOURCE_LXTAL)           rcu_osci_on(RCU_LXTAL);           rcu_osci_stab_wait(RCU_LXTAL);           rcu_rtc_clock_config(RCU_RTCSRC_LXTAL);           prescaler_s = 0xFF;           prescaler_a = 0x7F;     #else     #error RTC clock source should be defined.     #endif /* RTC_CLOCK_SOURCE_IRC40K */     rcu_periph_clock_enable(RCU_RTC);     rtc_register_sync_wait(); }复制代码 然后通过串口可以设置初始化年月日时分秒,如下图所示 设置当下时间为2018-10-11 15:22:00,设置时间的代码如下: void rtc_setup(void) {     /* setup RTC time value */     uint32_t tmp_year=0xFF,tmp_month=0xFF,tmp_date=0xFF,tmp_hh = 0xFF, tmp_mm = 0xFF, tmp_ss = 0xFF;     rtc_initpara.rtc_factor_asyn = prescaler_a;     rtc_initpara.rtc_factor_syn = prescaler_s;     //rtc_initpara.rtc_year = 0x18;     rtc_initpara.rtc_day_of_week = RTC_SATURDAY;     //rtc_initpara.rtc_month = RTC_APR;     //rtc_initpara.rtc_date = 0x30;     rtc_initpara.rtc_display_format = RTC_24HOUR;     rtc_initpara.rtc_am_pm = RTC_AM;                 RTC_Timer_Set_Flag = 0;     /* current time input */     USART1_SendBuffer("=======Configure RTC Time========\n\r",sizeof("=======Configure RTC Time========\n\r"));                     USART1_SendBuffer("\n\r  please input year:\n\r",sizeof("  please input year:\n\r"));                 while (tmp_year == 0xFF){            tmp_year = usart_input_threshold(99);         rtc_initpara.rtc_year = tmp_year;     }                 usart_data_transmit(EVAL_COM1, tmp_year/16+0x30);                 while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));                 usart_data_transmit(EVAL_COM1, tmp_year%16+0x30);                 while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));                 USART1_SendBuffer("\n\r  please input month:\n\r",sizeof("  please input month:\n\r"));                 while (tmp_month == 0xFF){            tmp_month = usart_input_threshold(12);         rtc_initpara.rtc_month = tmp_month;     }                 usart_data_transmit(EVAL_COM1, tmp_month/16+0x30);                 while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));                 usart_data_transmit(EVAL_COM1, tmp_month%16+0x30);                 while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));                 USART1_SendBuffer("\n\r  please input date:\n\r",sizeof("  please input date:\n\r"));                 while (tmp_date == 0xFF){            tmp_date = usart_input_threshold(31);         rtc_initpara.rtc_date = tmp_date;     }                         usart_data_transmit(EVAL_COM1, tmp_date/16+0x30);                 while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));                 usart_data_transmit(EVAL_COM1, tmp_date%16+0x30);                 while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));                 USART1_SendBuffer("\n\r  please input hour:\n\r",sizeof("  please input hour:\n\r"));     while (tmp_hh == 0xFF){            tmp_hh = usart_input_threshold(23);         rtc_initpara.rtc_hour = tmp_hh;     }                 usart_data_transmit(EVAL_COM1, tmp_hh/16+0x30);                 while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));                 usart_data_transmit(EVAL_COM1, tmp_hh%16+0x30);                 while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));                 USART1_SendBuffer("\n\r  please input minute:\n\r",sizeof("  please input minute:\n\r"));     while (tmp_mm == 0xFF){            tmp_mm = usart_input_threshold(59);         rtc_initpara.rtc_minute = tmp_mm;     }                 usart_data_transmit(EVAL_COM1, tmp_mm/16+0x30);                 while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));                 usart_data_transmit(EVAL_COM1, tmp_mm%16+0x30);                 while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));                 USART1_SendBuffer("\n\r  please input second:\n\r",sizeof("  please input second:\n\r"));     while (tmp_ss == 0xFF){         tmp_ss = usart_input_threshold(59);         rtc_initpara.rtc_second = tmp_ss;     }                 usart_data_transmit(EVAL_COM1, tmp_ss/16+0x30);                 while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));                 usart_data_transmit(EVAL_COM1, tmp_ss%16+0x30);                 while(RESET == usart_flag_get(EVAL_COM1, USART_FLAG_TBE));     /* RTC current time configuration */     if(ERROR == rtc_init(&rtc_initpara)){            USART1_SendBuffer("\n\r** RTC time configuration failed! **\n\r",sizeof("\n\r** RTC time configuration failed! **\n\r"));     }else{         USART1_SendBuffer("\n\r** RTC time configuration success! **\n\r",sizeof("\n\r** RTC time configuration success! **\n\r"));         rtc_show_time();         RTC_BKP0 = BKP_VALUE;                                 RTC_Timer_Set_Flag = 1;     }    }复制代码 最后,在TFT上面显示实时时钟,结果如下图, TFT液晶显示屏的驱动可以参考我的另外一个帖子 【GD32F350开发分享五】GPIO模拟SPI控制液晶显示屏 液晶显示屏最下面是个滚动字幕,每隔1秒刷新实时时钟。 下面给个视频: $('flv_d33').innerHTML=(mobileplayer() ? "" : AC_FL_RunContent('width', '500', 'height', '375', 'allowNetworking', 'internal', 'allowScriptAccess', 'never', 'src', 'https://player.youku.com/player.php/sid/XMzg1Nzk5NzA4OA==.html?spm=a2h3j.8428770.3416059.1/v.swf', 'quality', 'high', 'bgcolor', '#ffffff', 'wmode', 'transparent', 'allowfullscreen', 'true')); 点不开就直接点这里,http://v.youku.com/v_show/id_XMzg1Nzk5NzA4OA==.html?spm=a2h3j.8428770.3416059.1

  • 发表了日志: 【GD32F350开发分享八】RTC年月日时分秒实时时钟,并显示在TFT屏幕上

  • 2018-10-10
  • 回复了主题帖: 【GD32F350开发分享七】GPIO模拟I2C驱动

    hujj 发表于 2018-10-10 10:24 开始的宏定义值得借鉴,谢谢楼主!
    不客气

最近访客

< 1/4 >

统计信息

已有62人来访过

  • 芯币:463
  • 好友:1
  • 主题:27
  • 回复:57
  • 课时:1
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言