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

📄 nadc.c

📁 温度计
💻 C
字号:
#include<regx52.h>
#define uchar unsigned char
#define uint unsigned int
#define io_clock  P2_0
#define data_input P2_1
#define data_out P2_2
#define cs P2_3
#define rs P2_4
#define rw P2_5
#define e P2_6

void write_command(uchar com);
void write_data(uchar odata);
uint tlc2543(uchar command_word);
void delayms(uint z);
void init();
void bin_to_dec(uint bd);
void carry_reset();

uchar code table1[]="       ";
uchar code table[]="0123456789";
uint T,getint,g,s,bi,q,result[32];
float te;
void main()
{
    long sum=0;
	uint num;
	P3_7=0;
	for(num=0;num<3;num++)
	{
	result[0]=tlc2543(0x00);
	}
	while(1)
	{
	for(num=0;num<32;num++)
		{
		result[num]=tlc2543(0x00);
		sum+=result[num];
		delayms(1);
		}
	init();
	g=0;
	s=0;
	q=0;
	bi=0;
	getint=sum>>5;
    sum=0;
	te=-0.0000000017*getint*getint*getint+0.000006*getint*getint-0.021*getint+96;
//	te=-0.0000045*getint*getint-0.0037*getint+87;
	T=(int)(te*10);
	bin_to_dec(T);
	//bin_to_dec(getint);
	for(num=0;num<7;num++)
	{
	write_data(table1[num]);
	}
//	write_data(table[q]);
	write_data(table[bi]);
	write_data(table[s]);
	write_data('.');
	write_data(table[g]);	
	write_data(0xdf);
	write_data(0x63);
	delayms(50);
	}

}

 uint tlc2543(uchar command_word)
{
	uint adcresult=0,num;
	cs=0;
	for(num=0;num<12;num++)
	{
	io_clock=0;
	delayms(1);
	adcresult<<=1;
	data_input=(bit)(command_word&0x80);
 	command_word<<=1;
	io_clock=1;
	delayms(1);
	if(data_out) adcresult=adcresult|0x0001;
	}
	cs=1;
	return adcresult;
}

  /*uint   tlc2543(uchar   port)   
  {   
  uint   ad=0,i;   
  io_clock=0;   
  cs=0;   
  port<<=4;   
  for(i=0;i<12;i++)   
  {   
      if(data_out)   ad|=0x01;   
     data_input=(bit)(port&0x80);   
     io_clock=1;   
      delayms(3);   
     io_clock=0;   
      delayms(3);   
      port<<=1;   
      ad<<=1;   
  }   
  cs=1;   
  ad>>=1;   
  return(ad);   
  } */

void init()
{
	e=0;
	write_command(0x38);
	write_command(0x0e);
	write_command(0x06);
	write_command(0x01);
	write_command(0x80);	
}

void write_command(uchar com)
{
	
	rs=0;
	rw=0;
	P0=com;
	delayms(5);
	e=1;
	delayms(5);
	e=0;
}

void write_data(uchar odata)
{
	
	rs=1;
	rw=0;
	P0=odata;
	delayms(5);
	e=1;
	delayms(5);
	e=0;
}

void delayms(uint z)
{
	uint x,y;
	for(x=0;x<z;x++)
		for(y=0;y<110;y++);
}

void bin_to_dec(uint bd)
	{	 
	if((bd&0x0800)!=0) g+=8,s+=4,q+=2;
	if((bd&0x0400)!=0) g+=4,s+=2,q+=1;
	carry_reset();
	if((bd&0x0200)!=0) g+=2,s+=1,bi+=5;
	carry_reset();
	if((bd&0x0100)!=0) g+=6,s+=5,bi+=2;
	carry_reset();
	if((bd&0x0080)!=0) g+=8,s+=2,bi+=1;
	carry_reset();
	if((bd&0x0040)!=0) g+=4,s+=6;
	carry_reset();
	if((bd&0x0020)!=0) g+=2,s+=3;
	carry_reset();
	if((bd&0x0010)!=0) g+=6,s+=1;
	carry_reset();
	if((bd&0x0008)!=0) g+=8;
	carry_reset();
	if((bd&0x0004)!=0) g+=4;
	carry_reset();
	if((bd&0x0002)!=0) g+=2;
	carry_reset();
	if((bd&0x0001)!=0) g+=1;
	carry_reset();
	}

	void carry_reset()
	{
	if(g>=10)
	  g-=10,s+=1;
	if(s>=10)
	  s-=10,bi+=1;
	if(bi>=10)
	  bi-=10,q+=1;
	if(q>=10)
	  q-=10;
	}		

⌨️ 快捷键说明

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