微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 基于KL25Z的心率检测仪(2)

基于KL25Z的心率检测仪(2)

时间:10-02 整理:3721RD 点击:

其中LCD5110与ML25Z的连接关系为:

VCC      --  3.3V

2.GND     --  GND

3.SCE      --  PTC2

4.RESET    --  PTC0  

5.D/C      --  PTC1

6.SDIN     --  PTE1

7.SCLK     --  PTE0

8.LED+     --  3.3V

为实现LCD5110的显示,需将相应的GPIO口设置为输出模式,并定于好输出高低电平信号的语句,其内容如下:

  1. #define sce_1     sce=1   
  2. #define sce_0     sce=0  
  3. #define dc_1      dc=1   
  4. #define dc_0      dc=0   
  5. #define RST_1     RST=1  
  6. #define RST_0     RST=0  
  7. #define LCD_SCLK_1  SCLK=1  
  8. #define LCD_SCLK_0  SCLK=0  
  9. #define LCD_SDIN_1  SDIN=1   
  10. #define LCD_SDIN_0  SDIN=0  

  11. DigitalOut dc(PTC1);
  12. DigitalOut RST(PTC0);
  13. DigitalOut SCLK(PTE0);
  14. DigitalOut SDIN(PTE1);

复制代码

配置LCD5110以SPI模式工作的函数如下:

  1. void SPI_CONFIG()
  2. {
  3.         RST_1;
  4.     DigitalOut RST(PTC0);
  5.         sce_1;               
  6.     DigitalOut sce(PTC2);  
  7.         dc_1;
  8.         DigitalOut dc(PTC1);
  9.     LCD_SCLK_1;
  10.         DigitalOut SCLK(PTE0);
  11.     LCD_SDIN_1;
  12.         DigitalOut SDIN(PTE1);
  13.         RST_0;
  14.         wait(0.1);
  15.         RST_1;
  16.         wait(0.1);
  17.         RST_0;
  18.         wait(0.1);
  19.         RST_1;
  20.         wait(0.1);
  21. }

复制代码

LCD5110的测试化函数为:

  1. void LCD_init(void)
  2. {
  3.         LCD_write_byte(0x21,0);
  4.         LCD_write_byte(0xc3,0);
  5.         LCD_write_byte(0x10, 0);
  6.         LCD_write_byte(0x20,0);
  7.         LCD_write_byte(0x0C,0);
  8.         LCD_clear();
  9. }

复制代码

此外,为了实现信息的显示还需有:字节发送函数void LCD_write_byte(uint8_t dt, uint8_t command)、位置显示设置函数void LCD_set_XY(uint8_t X, uint8_t Y)、清屏函数void LCD_clear(void)、字符显示函数void LCD_write_char(unsigned char c,char dis)、字符串显示函数void LCD_write_english_string(unsigned char X,unsigned char Y,char *s,char dis)、辅助显示函数uint32_t oled_pow(unsigned char m,unsigned char n)、数值显示函数void OLED_ShowNum(unsigned char x,unsigned char y,uint32_t num,unsigned char len)等。

为了实现图7所示的显示效果,可使用字模提取软件来构建小字库的方法来实现,其界面如图8所示。


图7 中文显示界面



图8 字模提取


读取字模显示汉字的函数如下:

  1. void LCD_write_hanzi(unsigned char X,unsigned char Y,char s)
  2. {       
  3.     do
  4.     {       
  5.                 char line;
  6.                 LCD_set_XY(X,Y);       
  7.                  for (line=0; line<12; line++)
  8.                 {       
  9.                                 LCD_write_byte(HZK[s][line], 1);
  10.           }
  11.                 LCD_set_XY(X,Y+1);
  12.                 for (line=12; line<24; line++)
  13.                 {               
  14.                        
  15.                           LCD_write_byte(HZK[s][line], 1);
  16.           }
  17.           }while(0);               
  18. }

复制代码

显示“心率检测仪”字样的函数为:

  1. void jm(void)
  2. {
  3.         LCD_write_hanzi(8,0,0);
  4.         LCD_write_hanzi(20,0,1);
  5.         LCD_write_hanzi(32,0,2);
  6.         LCD_write_hanzi(44,0,3);
  7.         LCD_write_hanzi(56,0,4);
  8. }

复制代码

实现心率采集与数值显示的功能结构体语句如下:

  1. while(1)
  2.          {
  3.         // sendDataToProcessing('S', Signal);   
  4.         if (QS == true) {                  
  5.                               LCD_write_english_string(8,2,"BPM:      ",0);
  6.                               LCD_write_english_string(8,4,"HRV:     ms",0);
  7.                               OLED_ShowNum(40,2,BPM,3);
  8.                               OLED_ShowNum(40,4,IBI,3);
  9.                               QS = false;            
  10.         }
  11.         wait(0.02);   
  12.     }

复制代码

在心率传感器与KL25Z的连接上,除了电源的连接外,主要是将心率传感器的信号输出端与PTB0引脚相连,以采集心率的模拟信号值。此外,为了确保对心率信号的周期性采集,还配置了定时器中断函数void timer_isr(void),串口数据发送函数void sendDataToProcessing(char symbol, short data )等,并2ms为间隔进行周期性的数据采集。

   经编译,所生成的代码参数如图9所示。


图9 编译结果

   在外挂RS232串口的情况下,使用心率传感器所配的专用软件Processing,可绘制出图10所示的心率波形图。


图10 心率波形图


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top