⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temp.c

📁 充电器源代码 才有AVR CPU 控制 可以对大部分电池充电
💻 C
字号:
/*******************************************************************************
*  name: temp.c
*  author: fengzai(panda)
*  date: 2007.1.25
*  decribe: detect the temp
********************************************************************************/

#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include "usart.h"
#include "temp.h"
#include "adc.h"


#define uchar	unsigned char
#define uint	unsigned int
#define BIT(x)	(1<<(x))
#define NOP()	asm("nop")
#define WDR() 	asm("wdr")


/*-----------------------------------------------------------------------------
*  温度测量模块,包括三个函数,adc2_init(); adc2_cal2(); temp();
*-----------------------------------------------------------------------------*/
void adc2_init(void)
{
	//adc转换初始化
	ADCSRA	= 0x00;	//禁止AD转换
	ADMUX	= 0xC2;
	SFIOR |= 0x00;
	ACSR	= 0x80; //禁止模拟比较器
	ADCSRA	= 0xC7;
}


unsigned int adc2_calc(void)
{
	//计算实际电压
	unsigned long value=0;
	unsigned int voltage=0; //电压单位为(mV)
	value=ADCL;		 //首先读低位
	value|=(int)ADCH << 8; //然后读高位
	voltage=(value*2560)>>10;
	return voltage;
}

unsigned int temp(void)
{
 unsigned int res,t,l=0;
 unsigned int temp1,temp2,temp;
 uchar i;

 for(i=0;i<16;i++)   //采样16次,减少误差
 {
   adc2_init();
   _delay_ms(10);
   l =  adc2_calc();
   //send_int(l);
   t += l;
 }
 i=0;
 //put_s("t:");
 t = t>>4;
 //send_int(t);
 
 res = (5000000/(5000-t)-1000)*22;  //计算热敏电阻的值
 
 if(res<17000&&res>1203)    //采用查表的方法测量温度
 {
    while(res<tempratrue[i])
    i++;
 }
 
 //put_s(((unsigned int)i));
 temp1 = tempratrue[i];      //找到温度范围后,假定变化是线性的
 temp2 = tempratrue[i-1];
 
 temp = i*5+(temp2-res)*5/(temp2-temp1);
 
 //send_int(temp);
 
 //send_int(res);
 
 return(temp);
}

/*------------------------------------------------------------------------------
*   end of file
*-----------------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -