项目功能实现说明:
1、oled显示图片
初始化oled屏幕
void Oled_Init(void)
{
Oled_Pin_Init();
OLED_RES_H;
Delay_ms(100);
OLED_RES_L;
Delay_ms(100);
OLED_RES_H;
Delay_ms(100);
Mcu_Send_Cmd_Oled(0xAE); //关闭显示
Mcu_Send_Cmd_Oled(0xD5); //设置时钟分频因子,震荡频率
Mcu_Send_Cmd_Oled(80); //[3:0],分频因子;[7:4],震荡频率
Mcu_Send_Cmd_Oled(0xA8); //设置驱动路数
Mcu_Send_Cmd_Oled(0X3F); //默认0X3F(1/64)
Mcu_Send_Cmd_Oled(0xD3); //设置显示偏移
Mcu_Send_Cmd_Oled(0X00); //默认为0
Mcu_Send_Cmd_Oled(0x40); //设置显示开始行 [5:0],行数.
Mcu_Send_Cmd_Oled(0x8D); //电荷泵设置
Mcu_Send_Cmd_Oled(0x14); //bit2,开启/关闭
Mcu_Send_Cmd_Oled(0x20); //设置内存地址模式
Mcu_Send_Cmd_Oled(0x02); //[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;
Mcu_Send_Cmd_Oled(0xA1); //段重定义设置,bit0:0,0->0;1,0->127;
Mcu_Send_Cmd_Oled(0xC8); //设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数
Mcu_Send_Cmd_Oled(0xDA); //设置COM硬件引脚配置
Mcu_Send_Cmd_Oled(0x12); //[5:4]配置
Mcu_Send_Cmd_Oled(0x81); //对比度设置
Mcu_Send_Cmd_Oled(0xEF); //1~255;默认0X7F (亮度设置,越大越亮)
Mcu_Send_Cmd_Oled(0xD9); //设置预充电周期
Mcu_Send_Cmd_Oled(0xf1); //[3:0],PHASE 1;[7:4],PHASE 2;
Mcu_Send_Cmd_Oled(0xDB); //设置VCOMH 电压倍率
Mcu_Send_Cmd_Oled(0x30); //[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;
Mcu_Send_Cmd_Oled(0xA4); //全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
Mcu_Send_Cmd_Oled(0xA6); //设置显示方式;bit0:1,反相显示;0,正常显示
Mcu_Send_Cmd_Oled(0xAF); //开启显示
Oled_Clear_Screen();
}
//显示图片
void Oled_Show_Pic(u8 *buf)
{
int i,j;
u8 w,h;
w = buf[2];
h = buf[4];
int m,n;
m = h/8;
if(h % 8 != 0 )
{
m+=1;
}
for(i=0;i<m;i++)
{
Mcu_Send_Cmd_Oled(0xb0|i); //页地址
Mcu_Send_Cmd_Oled(0x00); //列地址低四位
Mcu_Send_Cmd_Oled(0x10); //列地址高四位
for(j=0;j<w;j++)
{
Mcu_Send_Data_Oled(buf[j+i*w+6]);
}
}
}
2、显示时钟
dateAndTime_t *dateAndTime;//时间&日期
while (1)
{
dateAndTime = RTC_getDateAndTime ();//获取时间日期//显示年月日
sprintf(uiBuf, "20502d/%02d/%02d" , dateAndTime->year, dateAndTime->month, dateAndTime-1
OLED_showString(10,l ,uiBuf,16);
sprintf(uiBuf, "%02d:802d;%02d" , dateAndTime->hour , dateAndTime-"minute, dateAndTime->
//参数1:转换后的字符串参数2:转换的格式参数3:转换的数据
OLED_Showstring (18,4,uiBuf,12);
if(key scan (=-l,
{
FLAG++;
return;
}
实验结果:
3、测量温湿度(sht20传感器)
u8 uiBuf[40];//接收转换后的字符串
while (1)
{
SHT20_readTemAndHum (& humidity, stemperature);
sprintf(uiBuf,"E: %d%RH T:&d c", (char) humidity, (char)temperature);
OLED_show (10,1,uiBuf) ;
if (key_scan ()=-1)
{
FLAG++;
return;
}
实验结果:
4、心率检测HP_06模块
uint8_t HP_6_OpenBp(void)
{
uint32_t i;
for( i = 0; i < PROTOCLO_BUF_MAX_LEN; i++)
{
tx_buf[i] = cmd_bp_open[i];
}
return HP_6_SendCmd( tx_buf, rx_buf);
}
uint8_t HP_6_CloseBp(void)
{
uint32_t i;
for( i = 0; i < PROTOCLO_BUF_MAX_LEN; i++)
{
tx_buf[i] = cmd_bp_close[i];
}
return HP_6_SendCmd( tx_buf, rx_buf);
}
实验结果: