tlc1543.c

来自「51开发板的源程序」· C语言 代码 · 共 98 行

C
98
字号

#include "c51base.h" 

void some_nop()
{
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
}

uint ADCRead(uchar port) //从TLC1543读取采样值,形参port是采样的通道号
{
	uint idata ad_value;
	uchar i;

	TCL1543_CLK=0;
	TCL1543_CS=0;
	port<<=4;
	for (i=0;i<4;i++) //把通道号打入1543
	{
		TCL1543_IN = (bit)(port&0x80);
		TCL1543_CLK=1;
		some_nop();
		TCL1543_CLK=0;
		port<<=1;
	}
	for (i=0;i<6;i++) //填充6个TCL1543_CLK
	{
		TCL1543_CLK=1;
		some_nop();
		TCL1543_CLK=0;
	}
	TCL1543_CS=1;
	some_nop();some_nop();some_nop();some_nop();some_nop();some_nop();
	some_nop();some_nop();some_nop();some_nop();some_nop();some_nop();
	some_nop();some_nop();some_nop();some_nop();some_nop();some_nop();
	some_nop();some_nop();some_nop();
	TCL1543_CS=0; //等待AD转换
	some_nop();some_nop();some_nop();

	ad_value = 0;
	for (i=0;i<10;i++) //取D9,D8
	{
		TCL1543_OUT=1;
		TCL1543_CLK=1;
		ad_value <<= 1;
		if (TCL1543_OUT) 
			ad_value|=0x01;
		TCL1543_CLK=0;
	} 
//	ad_value >>= 2;
	TCL1543_CS=1;
	return (ad_value);
} 




uchar GetTemper(uchar number)
{
	uint idata value;
	value = ADCRead(number);
//	printf("温度通道%d-%d\n",(int)number,(int)value);
	if(value<=275)
		value = 0;
	else if(value>=275 && value < 415)//0-15度
		value = (value-270)/10;  
    else if(value>=415 && value <580) //16-32度
		value = (value-263)/10; 
	else if(value>=580 && value <639) //33-39度
		value = (value-255)/10; 
	else if(value>=639 && value <679) //40-45度
		value = (value-245)/10; 
	else if(value>=679 && value <709) //46-47度
		value = (value-235)/10; 
	else if(value>=709 && value <737) //48-51度
		value = (value-225)/10; 
	else if(value>=737 && value <756) //52-55度
		value = (value-215)/10; 
	else if(value>=756 && value <769) //56-56度
		value = (value-205)/10; 
	else if(value>=769 && value <786) //57-59度
		value = (value-195)/10; 
	else if(value>=786 && value <798) //60-61度
		value = (value-185)/10; 
	else if(value>=798 && value <808) //60-61度
		value = (value-175)/10; 
	else if(value>=808 && value <818) //60-61度
		value = (value-165)/10; 
	else if(value>=818 && value <865) //60-61度
		value = (9*value-4656)/41; 
	else if(value>=865 && value <912) //75-90度
		value = (value-639)/3; 
//printf("温度通道%d-%d\n",(int)number,(int)value);
		
	return value;				    
}								     
		
						

⌨️ 快捷键说明

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