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

📄 ds18b2~1.c

📁 本程序能实现温度的实时采集与显示
💻 C
字号:
#include <reg1210.h>
//#include<reg51.h>
#include <intrins.h>
#include<stdio.h>
#include<stdlib.h> 
#include<math.h> 

extern void autobaud(void);
#define CLR_RI  (RI=0)
#define CLR_TI  (TI=0)

sbit  TMDAT=P2^0;

/*----------------------------------------------------
*   整型转换成字符型子程序
*----------------------------------------------------*/
unsigned  inttochar(unsigned  int int1)
 {
 unsigned char ch1;
 switch(int1)
    {
    case(0):ch1='0';break;
    case(1):ch1='1';break;
    case(2):ch1='2';break;
    case(3):ch1='3';break;
    case(4):ch1='4';break;
    case(5):ch1='5';break;
    case(6):ch1='6';break;
    case(7):ch1='7';break;
    case(8):ch1='8';break;
    case(9):ch1='9';break;
    default:break;
    }
    return(ch1);
 }
/*----------------------------------------------------
*   整型转换成浮点型子程序
*----------------------------------------------------*/
float  inttofloat(unsigned  int int1)
 {
 float ch1;
 switch(int1)
    {
    case(0):ch1=0;break;
    case(1):ch1=1;break;
    case(2):ch1=2;break;
    case(3):ch1=3;break;
    case(4):ch1=4;break;
    case(5):ch1=5;break;
    case(6):ch1=6;break;
    case(7):ch1=7;break;
    case(8):ch1=8;break;
    case(9):ch1=9;break;
    default:break;
    }
    return(ch1);
 } 
/*----------------------------------------------------
*   delay N count  c里的一个while语句相当于汇编里的一个DJNZ语句,即两个机器周期
*----------------------------------------------------*/
void Delay_Count (unsigned char Count )	//延时时间为:(Count*2+5)*0.362  us
{
    while(--Count);  
}

/*----------------------------------------------------
*   HEX->BCD查表程序,整数部分
*----------------------------------------------------*/
unsigned char hextobcd(unsigned char tab)
{
unsigned	int tab1;
	switch(tab)
	{
		case(0x00):	tab1=0x000; break;
		case(0x01): tab1=0x001; break;
		case(0x02): tab1=0x002; break;
		case(0x03): tab1=0x003; break;
		case(0x04): tab1=0x004; break;
		case(0x05): tab1=0x005; break;
		case(0x06): tab1=0x006; break;
		case(0x07): tab1=0x007; break;
		case(0x08): tab1=0x008; break;
		case(0x09): tab1=0x009; break;
		case(0x0A): tab1=0x0A; break;
		case(0x0B): tab1=0x0B; break;
		case(0x0C): tab1=0x0C; break;
		case(0x0D): tab1=0x0D; break;
		case(0x0E): tab1=0x0E; break;
		case(0x0F): tab1=0x0F; break;
		case(0x10):	tab1=0x010; break;
		case(0x11): tab1=0x011; break;
		case(0x12): tab1=0x012; break;
		case(0x13): tab1=0x013; break;
		case(0x14):	tab1=0x014; break;
		case(0x15):	tab1=0x015; break;
		case(0x16):	tab1=0x016; break;
		case(0x17):	tab1=0x017; break;
		case(0x18):	tab1=0x018; break;
		case(0x19):	tab1=0x019; break;
		case(0x1A):	tab1=0x01A; break;
		case(0x1B):	tab1=0x01B; break;
		case(0x1C):	tab1=0x01C; break;
		case(0x1D):	tab1=0x01D; break;
		case(0x1E):	tab1=0x01E; break;
		case(0x1F):	tab1=0x01F; break;
		case(0x20):	tab1=0x020; break;
		case(0x21):	tab1=0x021; break;
		case(0x22):	tab1=0x022; break;
		case(0x23):	tab1=0x023; break;
		case(0x24):	tab1=0x024; break;
		case(0x25):	tab1=0x025; break;
		case(0x26):	tab1=0x026; break;
		case(0x27):	tab1=0x027; break;
		case(0x28):	tab1=0x028; break;

		default: tab1=0x00;break;
	}
	return(tab1);
}
/*----------------------------------------------------
*   HEX->BCD查表程序,小数部分
*----------------------------------------------------*/
unsigned char hextobcd1(unsigned char tab)
{
unsigned int tab1;
	switch(tab)
	{
		case(0x00):	tab1=0x000; break;
		case(0x01): tab1=0x001; break;
		case(0x02): tab1=0x001; break;
		case(0x03): tab1=0x002; break;
		case(0x04): tab1=0x003; break;
		case(0x05): tab1=0x003; break;
		case(0x06): tab1=0x004; break;
		case(0x07): tab1=0x004; break;
		case(0x08): tab1=0x005; break;
		case(0x09): tab1=0x006; break;
		case(0x0A): tab1=0x006; break;
		case(0x0B): tab1=0x007; break;
		case(0x0C): tab1=0x008; break;
		case(0x0D): tab1=0x008; break;
		case(0x0E): tab1=0x009; break;
		case(0x0F): tab1=0x009; break;

		default: tab1=0x00;break;
	}
	return(tab1);
}

/*----------------------------------------------------
*   start Reset Pulse
----------------------------------------------------*/
void tmreset(void)
{
    TMDAT=0;
   Delay_Count(255);
   Delay_Count(255);
   Delay_Count(255);
   Delay_Count(255);
    TMDAT=1;
	Delay_Count(70);
	while(TMDAT);
//	printf("已调用完判忙函数3\r\n");
	while(~TMDAT);
//	printf("已调用完判忙函数2\r\n");
    Delay_Count(255);

}


/*----------------------------------------------------
*   start Reset Pulse
----------------------------------------------------/
void  tmreset()
{

//	P0=0xfe;

//	FLAG1=0;
    TMDAT=1;
    Delay_Count(1);		//2.5us
    TMDAT=0;
    Delay_Count(250);	//505us
    Delay_Count(250);	//505us
    Delay_Count(250);	//505us
    TMDAT=1;
    Delay_Count(28);	//61us
    Delay_Count(28);	//61us
    Delay_Count(28);	//61us
    while(TMDAT);

//	printf("初始化成功\n");
 while(~TMDAT);
 //printf("初始化成功1\n");
			Delay_Count(110);	//225us
			Delay_Count(110);	//225us
			Delay_Count(110);	//225us
		
}

/*----------------------------------------------------
*   Read a bit from 1820
*----------------------------------------------------*/
bit tmrbit(void)
{
 int i=0;
    bit dat;
    TMDAT=0;
	_nop_();
    _nop_();
    _nop_();

	_nop_();
    _nop_();
    _nop_();

	_nop_();
    _nop_();
    _nop_();

	_nop_();
    _nop_();
    _nop_();
    TMDAT=1;
    _nop_();

    _nop_();

    _nop_();

    _nop_();
    dat = TMDAT;
    Delay_Count(30);

    Delay_Count(30);

    Delay_Count(30);

    Delay_Count(30);
    TMDAT=1;
    return dat;
}
/*----------------------------------------------------
*   Read a byte from 1820
*----------------------------------------------------*/
unsigned char tmrbyte()
{
unsigned char i,j,dat=0;
    for(i=1;i<=8;i++)
    {
        j=tmrbit();
        dat=(j<<7)|(dat>>1);
    }
    return dat;
}
/*----------------------------------------------------
*   Write a byte from 1820
*----------------------------------------------------*/
void tmwbyte(unsigned char dat)
{
 unsigned char i;
 for(i=0;i<8;i++)
 {
 TMDAT=0;
_nop_();
_nop_();
_nop_();
_nop_();

_nop_();
_nop_();
_nop_();
_nop_();

_nop_();
_nop_();
_nop_();
_nop_();

_nop_();
_nop_();
_nop_();
_nop_();
TMDAT=dat&0x01;
Delay_Count(20);
_nop_();
_nop_();

Delay_Count(20);
_nop_();
_nop_();

Delay_Count(20);
_nop_();
_nop_();

Delay_Count(20);
_nop_();
_nop_();

TMDAT=1;
_nop_();
_nop_();

_nop_();
_nop_();

_nop_();
_nop_();

_nop_();
_nop_();
dat>>=1;
}
}
/*----------------------------------------------------
*    Main
*----------------------------------------------------*/
unsigned char main1(unsigned char num)
{
unsigned char a,b,a2,b2,i,j,cha[4];
unsigned int w1,w2;
unsigned int da1,da2;
float fa1,fa2,fa3;
//unsigned char  chinese4[];
//autobaud();

//while(1)
//	{
				tmreset();
				tmwbyte(0x0CC);
				tmwbyte(0x044);
		
				tmreset();
				tmwbyte(0x0CC);
				tmwbyte(0x0BE);
			
				a=tmrbyte(); //低8位
				b=tmrbyte(); //高8位

				a2=a&0x0F;
				w1=hextobcd1(a2); //小数(整型)

fa1=inttofloat(w1);
printf("%f\n",fa1);
				printf("%d\n",w1);

				a2=a&0x0F0;
				a2=a2>>4;
				b2=b&0x00F;
				b2=b2<<4;
				a2=a2|b2;
				w2=hextobcd(a2); //整数

				printf("%d\n",w2);

				da1=w2/10; //整数部分十位
				da2=w2%10; //整数部分个位
				
				cha[0]=inttochar(da1);
				cha[1]=inttochar(da2);
				cha[2]='.';
				cha[3]=inttochar(w1);
				cha[4]='\0';
			
//fa2=atof(cha);

//printf("%f\n",fa2);
fa2=inttofloat(cha[0]);				
fa3=inttofloat(cha[1]);

printf("%s\n",cha);

fa3=12.3; //+fa1/10;


//printf("%f\n",fa3);
				for(j=1;j<=10;j++)
					{
					for(i=1;i<=200;i++)
						Delay_Count(255);
					}


//unsigned char code chinese4[] = {"T"};
//	}
if (num==0)
	return cha[0];
else if(num==1)
	return cha[1];
else if(num==2)
	return cha[2];
else if(num==3)
	return cha[3];
else if(num==4)
	return cha[4];

}

⌨️ 快捷键说明

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