标题:
基于STM32f103的红外测温仪程序(测温模块MLX90614,芯片GY906)
[打印本页]
作者:
DOOMSKYWR
时间:
2020-9-22 09:23
标题:
基于STM32f103的红外测温仪程序(测温模块MLX90614,芯片GY906)
之前集训要求做的红外测温仪,采用STM32F103系列作为主控,利用MLX90614采集温度,配以OLED显示以及flash存储数据(5个).
请不要问我要电路图,一是没时间,二是程序源码里面对每个模块接哪个IO口都是可以看见的,电子设计是灵活的.
下面贴出部分源码,完整程序的压缩包在附件.
单片机源程序如下:
gy906_gpio.h
#ifndef __GY906_GPIO_H_
#define __GY906_GPIO_H_
#include <inttypes.h>
#define macI2C_WR 0 /* 写控制bit */
#define macI2C_RD 1 /* 读控制bit */
/* 定义I2C总线连接的GPIO端口,用户只需要修改下面四行代码就可以任意改变SCL,SDA的引脚 */
#define macGPIO_PORT_I2C GPIOB /* GPIO端口 */
#define macRCC_I2C_PORT RCC_APB2Periph_GPIOB /* GPIO时钟 */
#define macI2C_SCL_PIN GPIO_Pin_9 /* 连接到SCL时钟线的GPIO */
#define macI2C_SDA_PIN GPIO_Pin_8 /*连接到SDA时钟线的GPIO */
/* 定义读写SCL,SDA的宏,以便增加代码的可移植性和可阅读性 */
#if 0 /*条件编译:选择GPIO的库函数实现IO读写 */
#define macI2C_SCL_1() GPIO_SetBits(macGPIO_PORT_I2C, macI2C_SCL_PIN) /* SCL = 1 */
#define macI2C_SCL_0() GPIO_ResetBits(macGPIO_PORT_I2C, macI2C_SCL_PIN) /* SCL = 0 */
#define macI2C_SDA_1() GPIO_SetBits(macGPIO_PORT_I2C, macI2C_SDA_PIN) /* SDA = 1 */
#define macI2C_SDA_0() GPIO_ResetBits(macGPIO_PORT_I2C, macI2C_SDA_PIN) /* SDA = 0 */
#define macI2C_SDA_READ() GPIO_ReadInputDataBit(macGPIO_PORT_I2C, macI2C_SDA_PIN) /* ¶áSDA¿úÏß×′ì¬ */
#else
#define macI2C_SCL_1() macGPIO_PORT_I2C->BSRR = macI2C_SCL_PIN /* SCL = 1 */
#define macI2C_SCL_0() macGPIO_PORT_I2C->BRR = macI2C_SCL_PIN /* SCL = 0 */
#define macI2C_SDA_1() macGPIO_PORT_I2C->BSRR = macI2C_SDA_PIN /* SDA = 1 */
#define macI2C_SDA_0() macGPIO_PORT_I2C->BRR = macI2C_SDA_PIN /* SDA = 0 */
#define macI2C_SDA_READ() ((macGPIO_PORT_I2C->IDR & macI2C_SDA_PIN) != 0) /* 读写SDA口状态 */
#endif
void i2c_Start(void);
void i2c_Stop(void);
void i2c_SendByte(uint8_t _ucByte);
uint8_t i2c_ReadByte(void);
uint8_t i2c_WaitAck(void);
void i2c_Ack(void);
void i2c_NAck(void);
uint8_t i2c_CheckDevice(uint8_t _Address);
#endif
全部资料51hei下载地址 红外测温+显示+存储+按键控制:
测温.7z
(205.15 KB, 下载次数: 559)
2020-9-22 14:48 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
yy3900636
时间:
2021-1-20 19:17
太谢谢楼主的分享了。。。很实用
作者:
5287152
时间:
2021-3-6 14:39
正在学习红外测温,谢谢。
作者:
5287152
时间:
2021-3-6 14:40
谢谢楼主的分享了,好好下来学习。
作者:
wanyi5aini
时间:
2021-4-25 04:27
亲爱的楼主 为啥我测出来的温度是276.29 就不会改变了呢
作者:
wifingtta
时间:
2023-4-16 16:22
谢谢楼主,已测试可用。楼主程序里是通过外部中断,按键触发测量的,所以可以把测温程序从外部中断放到main里,就可以直接看到数据了。这时提取出来,测试没问题,温度需要自己加补偿
while(1)
{
DelayMs(1000);
tt=get_temperature();
OLED_ShowCN(0,0,0);
OLED_ShowCN(17,0,1);
OLED_ShowStr(34,0,": ",2);
OLED_ShowNum(50,0,change(tt)+3.14,2);//加3.14是因为我没有聚集棱镜所以辐射无法聚集导致测温有误差属于修正误差的额外加值(可以自己修改)
if(change(tt)<32.86||change(tt)>34.16)//不正常警告
{
OLED_ShowCN(0,6,7);
OLED_ShowCN(17,6,0);
OLED_ShowCN(34,6,4);
OLED_ShowCN(50,6,5);
LED1(1);
LED3(0);
}
else
{
OLED_ShowCN(0,6,7);
OLED_ShowCN(17,6,0);
OLED_ShowCN(34,6,6);
OLED_ShowCN(50,6,5);
LED1(0);
LED3(1);
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1