基于KL25Z的心率检测仪(2)
其中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口设置为输出模式,并定于好输出高低电平信号的语句,其内容如下:
- #define sce_1 sce=1
- #define sce_0 sce=0
- #define dc_1 dc=1
- #define dc_0 dc=0
- #define RST_1 RST=1
- #define RST_0 RST=0
- #define LCD_SCLK_1 SCLK=1
- #define LCD_SCLK_0 SCLK=0
- #define LCD_SDIN_1 SDIN=1
- #define LCD_SDIN_0 SDIN=0
- DigitalOut dc(PTC1);
- DigitalOut RST(PTC0);
- DigitalOut SCLK(PTE0);
- DigitalOut SDIN(PTE1);
配置LCD5110以SPI模式工作的函数如下:
- void SPI_CONFIG()
- {
- RST_1;
- DigitalOut RST(PTC0);
- sce_1;
- DigitalOut sce(PTC2);
- dc_1;
- DigitalOut dc(PTC1);
- LCD_SCLK_1;
- DigitalOut SCLK(PTE0);
- LCD_SDIN_1;
- DigitalOut SDIN(PTE1);
- RST_0;
- wait(0.1);
- RST_1;
- wait(0.1);
- RST_0;
- wait(0.1);
- RST_1;
- wait(0.1);
- }
LCD5110的测试化函数为:
- void LCD_init(void)
- {
- LCD_write_byte(0x21,0);
- LCD_write_byte(0xc3,0);
- LCD_write_byte(0x10, 0);
- LCD_write_byte(0x20,0);
- LCD_write_byte(0x0C,0);
- LCD_clear();
- }
此外,为了实现信息的显示还需有:字节发送函数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 字模提取
读取字模显示汉字的函数如下:
- void LCD_write_hanzi(unsigned char X,unsigned char Y,char s)
- {
- do
- {
- char line;
- LCD_set_XY(X,Y);
- for (line=0; line<12; line++)
- {
- LCD_write_byte(HZK[s][line], 1);
- }
- LCD_set_XY(X,Y+1);
- for (line=12; line<24; line++)
- {
-
- LCD_write_byte(HZK[s][line], 1);
- }
- }while(0);
- }
显示“心率检测仪”字样的函数为:
- void jm(void)
- {
- LCD_write_hanzi(8,0,0);
- LCD_write_hanzi(20,0,1);
- LCD_write_hanzi(32,0,2);
- LCD_write_hanzi(44,0,3);
- LCD_write_hanzi(56,0,4);
- }
实现心率采集与数值显示的功能结构体语句如下:
- while(1)
- {
- // sendDataToProcessing('S', Signal);
- if (QS == true) {
- LCD_write_english_string(8,2,"BPM: ",0);
- LCD_write_english_string(8,4,"HRV: ms",0);
- OLED_ShowNum(40,2,BPM,3);
- OLED_ShowNum(40,4,IBI,3);
- QS = false;
- }
- wait(0.02);
- }
在心率传感器与KL25Z的连接上,除了电源的连接外,主要是将心率传感器的信号输出端与PTB0引脚相连,以采集心率的模拟信号值。此外,为了确保对心率信号的周期性采集,还配置了定时器中断函数void timer_isr(void),串口数据发送函数void sendDataToProcessing(char symbol, short data )等,并2ms为间隔进行周期性的数据采集。
经编译,所生成的代码参数如图9所示。
图9 编译结果
在外挂RS232串口的情况下,使用心率传感器所配的专用软件Processing,可绘制出图10所示的心率波形图。
图10 心率波形图