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

📄 adc_temperature.c

📁 深圳优龙公司LPC2148开发板(与iar公司开发板基本相同)的原理图和配套样例程序
💻 C
字号:
#include "user_func.h"

//*******************************************************************************************************************
//NTC热敏电阻WDCMFE-395-103F   典型参数B值为3950,25摄氏度的阻值为10K欧姆
//龚俊于2005-12-3 10:46根据厂家的提供资料整理出的数据表格
const struct {
	int Temp ;		//温度
	int RES ;		//温度所对应的电阻值
}TEMP_TAB[] = {
	{ -55,  997466000 } ,		//温度表格
	{ -54,  926658000 } ,		//温度表格
	{ -53,  861289000 } ,		//温度表格
	{ -52,  800914000 } ,		//温度表格
	{ -51,  745124000 } ,		//温度表格
	{ -50,  693543000 } ,		//温度表格
	{ -49,  645845000 } ,		//温度表格
	{ -48,  601704000 } ,		//温度表格
	{ -47,  560840000 } ,		//温度表格
	{ -46,  522993000 } ,		//温度表格
	{ -45,  487925000 } ,		//温度表格
	{ -44,  455415000 } ,		//温度表格
	{ -43,  425265000 } ,		//温度表格
	{ -42,  397290000 } ,		//温度表格
	{ -41,  371321000 } ,		//温度表格
	{ -40,  347205000 } ,		//温度表格
	{ -39,  324799000 } ,		//温度表格
	{ -38,  303972000 } ,		//温度表格
	{ -37,  284605000 } ,		//温度表格
	{ -36,  266688000 } ,		//温度表格
	{ -35,  249818000 } ,		//温度表格
	{ -34,  234204000 } ,		//温度表格
	{ -33,  219659000 } ,		//温度表格
	{ -32,  206105000 } ,		//温度表格
	{ -31,  193468000 } ,		//温度表格
	{ -30,  181681000 } ,		//温度表格
	{ -29,  170683000 } ,		//温度表格
	{ -28,  160416000 } ,		//温度表格
	{ -27,  150829000 } ,		//温度表格
	{ -26,  141871000 } ,		//温度表格
	{ -25,  133500000 } ,		//温度表格
	{ -24,  125672000 } ,		//温度表格
	{ -23,  118350000 } ,		//温度表格
	{ -22,  111498000 } ,		//温度表格
	{ -21,  105084000 } ,		//温度表格
	{ -20,   99077300 } ,		//温度表格
	{ -19,   93449600 } ,		//温度表格
	{ -18,   88175000 } ,		//温度表格
	{ -17,   83229600 } ,		//温度表格
	{ -16,   78590900 } ,		//温度表格
	{ -15,   74238400 } ,		//温度表格
	{ -14,   70152700 } ,		//温度表格
	{ -13,   66316200 } ,		//温度表格
	{ -12,   62712200 } ,		//温度表格
	{ -11,   59325400 } ,		//温度表格
	{ -10,   56141600 } ,		//温度表格
	{ -9,    53147500 } ,		//温度表格
	{ -8,    50330700 } ,		//温度表格
	{ -7,    47679900 } ,		//温度表格
	{ -6,    46184200 } ,		//温度表格
	{ -5,    42833900 } ,		//温度表格
	{ -4,    40619700 } ,		//温度表格
	{ -3,    38533000 } ,		//温度表格
	{ -2,    36565600 } ,		//温度表格
	{ -1,    34710300 } ,		//温度表格
	{ 0,     32960000 } ,		//温度表格
	{ 1,     31308100 } ,		//温度表格
	{ 2,     29748700 } ,		//温度表格
	{ 3,     28276000 } ,		//温度表格
	{ 4,     26884800 } ,		//温度表格
	{ 5,     25570200 } ,		//温度表格
	{ 6,     24327400 } ,		//温度表格
	{ 7,     23152300 } ,		//温度表格
	{ 8,     22040700 } ,		//温度表格
	{ 9,     20988900 } ,		//温度表格
	{ 10,    19993400 } ,		//温度表格
	{ 11,    19050900 } ,		//温度表格
	{ 12,    18158200 } ,		//温度表格
	{ 13,    17312400 } ,		//温度表格
	{ 14,    16510900 } ,		//温度表格
	{ 15,    15751100 } ,		//温度表格
	{ 16,    15030600 } ,		//温度表格
	{ 17,    14347200 } ,		//温度表格
	{ 18,    13698700 } ,		//温度表格
	{ 19,    13083300 } ,		//温度表格
	{ 20,    12499000 } ,		//温度表格
	{ 21,    11944100 } ,		//温度表格
	{ 22,    11416900 } ,		//温度表格
	{ 23,    10916100 } ,		//温度表格
	{ 24,    10440000 } ,		//温度表格
	{ 25,    10000000 } ,		//温度表格
	{ 26,     9556930 } ,		//温度表格
	{ 27,     9147430 } ,		//温度表格
	{ 28,     8757770 } ,		//温度表格
	{ 29,     8386900 } ,		//温度表格
	{ 30,     8033800 } ,		//温度表格
	{ 31,     7697530 } ,		//温度表格
	{ 32,     7377210 } ,		//温度表格
	{ 33,     7072000 } ,		//温度表格
	{ 34,     6781100 } ,		//温度表格
	{ 35,     6503780 } ,		//温度表格
	{ 36,     6239340 } ,		//温度表格
	{ 37,     5967110 } ,		//温度表格
	{ 38,     5746460 } ,		//温度表格
	{ 39,     5516800 } ,		//温度表格
	{ 40,     5297680 } ,		//温度表格
	{ 41,     5088280 } ,		//温度表格
	{ 42,     4888380 } ,		//温度表格
	{ 43,     4697430 } ,		//温度表格
	{ 44,     4514980 } ,		//温度表格
	{ 45,     4340600 } ,		//温度表格
	{ 46,     4173910 } ,		//温度表格
	{ 47,     4014520 } ,		//温度表格
	{ 48,     3862070 } ,		//温度表格
	{ 49,     3716240 } ,		//温度表格
	{ 50,     3588000 } ,		//温度表格
	{ 51,     3443140 } ,		//温度表格
	{ 52,     3315290 } ,		//温度表格
	{ 53,     3192870 } ,		//温度表格
	{ 54,     3075630 } ,		//温度表格
	{ 55,     2963310 } ,		//温度表格
	{ 56,     2855600 } ,		//温度表格
	{ 57,     2752560 } ,		//温度表格
	{ 58,     2653690 } ,		//温度表格
	{ 59,     2558900 } ,		//温度表格
	{ 60,     2467990 } ,		//温度表格
	{ 61,     2380800 } ,		//温度表格
	{ 62,     2297140 } ,		//温度表格
	{ 63,     2216860 } ,		//温度表格
	{ 64,     2139800 } ,		//温度表格
	{ 65,     2065830 } ,		//温度表格
	{ 66,     1994800 } ,		//温度表格
	{ 67,     1926580 } ,		//温度表格
	{ 68,     1861050 } ,		//温度表格
	{ 69,     1798090 } ,		//温度表格
	{ 70,     1737580 } ,		//温度表格
	{ 71,     1679420 } ,		//温度表格
	{ 72,     1623510 } ,		//温度表格
	{ 73,     1569780 } ,		//温度表格____后面的表格复印不清晰,看不清楚,故省略(龚俊注)
	{ 0,      0       }
} ;

/********************************************************************************************************************
【函数名称】int Temperature_Look_Tab( int R )
【功能描述】NTC热敏电阻查表的程序代码
【参数输入】无
【参数返回】无
********************************************************************************************************************/
int Temperature_Look_Tab( int R )
{
	unsigned short m = 0 ;
	
	while( TEMP_TAB[m].RES != 0 )
	{
		if( TEMP_TAB[m].RES < R )    goto LOOK_TAB ;
		m++ ;
	}
	return 255 ;		//超过最大极限,表格中无这样的值

LOOK_TAB:
	if( m == 0 ) return TEMP_TAB[0].Temp ;		//零下55度或更低温度
	
	if( (TEMP_TAB[m-1].RES - R) > (R - TEMP_TAB[m].RES) ) //判别R离谁近
		return  TEMP_TAB[m].Temp ;
	else
		return  TEMP_TAB[m-1].Temp ;
}

/********************************************************************************************************************
【函数名称】void NTC_Resistor_Temperature_Test( void )
【功能描述】热敏电阻温度测试
【参数输入】无
【参数返回】无
********************************************************************************************************************/
void NTC_Resistor_Temperature_Test( void )
{
	unsigned int a ;
	unsigned char m ;
	unsigned int adc[16] ;
	int T ;
	
	#define FEQ_TIMER		1000
	unsigned int FEQ = FEQ_TIMER ;

	Uart_Printf( UART0, "\nNTC Resistor Temperature_Test, 'ESC' key to exit\n" );

	ADC_Channel_6_Init() ;

	while ( UART_GetKeyByPolling( UART0 ) != ESC_KEY )
	{
		for( m = 0; m < 16; m++ )		//16次采样
		{
			adc[m] = ADC_Channel_6_Measure();		//AIN6是温度检测
		}

		for( m = 1; m < 16; m++ )		//取平均值
		{
			adc[0] = adc[0] + adc[m] ;
		}
		
		a = adc[0] / 16 ;		//平均值

		if( FEQ > 1 )
			FEQ-- ;
		else
		{
			FEQ = FEQ_TIMER ;
			Uart_Printf( UART0, "AIN6 : %04d\n" , a );
	
			a = ( 10000 * 100 * (1023-a) / a ) * 10 ;		//计算电阻值,单位是毫欧姆,10K电阻分压;
			Uart_Printf( UART0, "      Resistor Value is %04d\n" , a );
				
			T = Temperature_Look_Tab( a ) ;
			Uart_Printf( UART0, "                  Temperature Value is %d 'C\n" , T );
		}
		
	}
}

⌨️ 快捷键说明

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