TN905红外测温驱动

在这里插入图片描述

接口

#include "sys.h"
#include "usart.h"		
#include "delay.h"	
#include "stdio.h" 	

#define TN905_CLK_H()  	GPIOB->ODR|=1<<13
#define TN905_DOUT_H()	GPIOB->ODR|=1<<14
#define TN905_TEST_H()	GPIOB->ODR|=1<<1
#define TN905_CLK_L()		GPIOB->ODR&= ~(1<<13)
#define TN905_DOUT_L()	GPIOB->ODR&= ~(1<<14)
#define TN905_TEST_L()	GPIOB->ODR&= ~(1<<1)
#define TN905_DOUT_IN() (GPIOB->IDR&(1<<14))
#define TN905_CLK_IN() (GPIOB->IDR&(1<<13))


void tn905_Init(void)
{
    
    
	RCC->APB2ENR|=1<<3;    //使能PORTB时钟	   	 
	GPIOB->CRL&=0Xffffff0f; 
	GPIOB->CRL|=0X00000030;	//PB1 out 
	TN905_TEST_L();


//	GPIOB->CRH&=0XFF0FFFFF; 
//	GPIOB->CRH|=0X00300000;	//PB13    
	GPIOB->ODR|=3<<13;   	//PB13/14/15上拉 clk miso mosi

}

unsigned char tn905_GetByte(void)
{
    
    
		unsigned char tmp = 0,i = 0;
	
		for( i = 0; i < 8; i++)
		{
    
    
				tmp <<= 1;
				//TN905_CLK_L();		
				//delay_us(250);
				while(TN905_CLK_IN() != 0);
				if(TN905_DOUT_IN() > 0)
					tmp++;			
				while(TN905_CLK_IN() == 0);
				//TN905_CLK_H();
				//delay_us(250);
		}
		//	printf("%x ",tmp);
		return tmp;
}

float tn905_Get_temperature(void)
{
    
    
	float t = 0.0;
	unsigned char tmp[5] = {
    
    0},sum;

	tmp[0] = tn905_GetByte();
	tmp[1] = tn905_GetByte();
	tmp[2] = tn905_GetByte();
	tmp[3] = tn905_GetByte();
	tmp[4] = tn905_GetByte();

	printf("%x %x %x %x %x\r\n",tmp[0],tmp[1],tmp[2],tmp[3],tmp[4]);
	//校验
	sum = tmp[0]+ tmp[1] + tmp[2];
//	printf("sum %x\r\n",sum);
	if(tmp[3] != sum)
		return 0;
	//判断结尾
	if(tmp[4] != 0x0d)
		return 0;
	//计算温度
	t = tmp[1] * 256 + tmp[2];
	t /= 16;
	t = t - 273.5;
	if(tmp[0] == 'L')
		return t;
	else 
		return 0;
}



int main(void)
{
    
    		
	float t = 0.0;
 	Stm32_Clock_Init(9);	//系统时钟设置
	uart_init(72,115200);	 	//串口初始化为9600
	delay_init(72);	   	 	//延时初始化 
//	LED_Init();		  		//初始化与LED连接的硬件接口

	tn905_Init();
	mlx_90164_init();
	printf("初始化完成\r\n");
	
	
	while(1)
	{
    
    
			TN905_TEST_H();
			delay_ms(10);
			TN905_TEST_L();
			delay_ms(10);
			t = tn905_Get_temperature();
			printf("温度:%.1f\r\n",t);
			delay_ms(100);   
	}
}










猜你喜欢

转载自blog.csdn.net/u010835747/article/details/120711112
今日推荐