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

📄 practise1.c

📁 单片机单片机单单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机单片机片机单片机单片机单片机
💻 C
字号:
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit feng=P2^3;
sbit dq=P2^2;
sbit led=P1^0;
sbit dula=P2^6;
sbit wela=P2^7;


float f_temp;
uint C_temp;

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71	
};

uchar code table2[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf
};

/******************延时***************************/

void delay_ms(uint z)
{
	uint ii,jj;
	for(ii=z;ii>0;ii--)
		for(jj=110;jj>0;jj--){}
}

/****************复位与存在***********************/

void reset()
{	
	uchar tt=00;
	
	dq=0;
	tt=250;
	while( tt>0 ) tt--;
	dq=1;
	tt++;tt++;
}
/*
void exist()
{
	uchar tt=20;
	while(dq==0||tt<0) tt--;//延时或者是检测到了存在信号
	if(dq==0)
	//delay_us(500);
	tt=100;
	while( tt>0 ) tt--;
	dq=1;
	//delay_us(2);	
}
*/


/*************************************************/

//写入字节
void write_byte(uchar xx)
{
	bit bb;
	uchar test=0x01;//*********************************这里可能有问题?
	uchar date=xx;
	uchar ii=0;
	uchar tt=0;	

	while(ii < 8)
	{
		bb=test&date;
		if(bb)
		{
			dq=0;
			tt=3;
			while(tt>0) tt--; //delay_us(8);
			dq=1;
			tt=30;
			while( tt>0 ) tt--; //delay_us(60);
		}
		else
		{
			dq=0;
			tt=30;
			while( tt>0 ) tt--; //delay_us(60);
			dq=1;
			tt++; tt++; //delay_us(2);
		}
		++ii;		
	}
			
}

bit read_bit()
{
	bit bb;
	uchar tt=0;
	
	dq=1;
	tt++;
	dq=0;
	tt++; tt++;  //delay_us(2);
	dq=1;
	tt=3;
	while(tt>0) tt--; //delay_us(4);
	bb=dq;
	tt=20;
	while(tt>0) tt--; //delay_us(40);	
	return bb;
}

//读字节
uchar read_byte()
{
	uchar byte=0x00;
	uchar ii=0;
	uchar temp;
	uchar tt=0;
	//uchar tt=0x01;
	
	while(ii < 8)
	{	
		tt++;
		//delay_us(2);
		temp=read_bit();
		byte=(byte>>1)|(temp<<7);
		++ii;	
		/*
		delay_us(2);
		temp=read_bit();
		byte=byte+temp&tt;
		tt<<1;
		*/		
	}
	
	return(byte);
}



/**********************温度************************/

void convert_temper()
{
	uchar tt;
	reset();
	tt=100;
	while(tt>0) tt--;
	//exist();
	write_byte(0xCC); //跳过读ROM操作
	write_byte(0x44);//温度转换命令
}

/*uint read_temper()
{
	uchar tt;
	uchar LSB_temper=0x00;
	uchar MSB_temper=0x00;

	reset();
	//exist();
	tt=100;
	while(tt>0) tt--;	
	write_byte(0xCC);
	write_byte(0xBE);
		
	LSB_temper=read_byte();
	MSB_temper=read_byte();
	
	C_temper=MSB_temper;
	C_temper=(C_temper<<8)|LSB_temper;
	C_temper=C_temper*0.0625*10;
	
	return C_temper;			
}
*/
uint read_temper()
{
	uchar a,b;
	reset();
	delay_ms(1);
	write_byte(0xcc);
	write_byte(0xbe);
	a=read_byte();
	b=read_byte();
	C_temp=b;
	C_temp<<=8;
	C_temp=C_temp|a;
	f_temp=C_temp*0.0625;
	C_temp=f_temp*10+0.5;
	f_temp=f_temp+0.05;
	return C_temp;
}
/******************响应******************************/

/*void display_temper()
{
	uchar xx,yy,zz;
	
	xx=C_temp/100;
	yy=C_temp/10%10;
	zz=C_temp%10;


	wela=1;
	P0=table2[0];
	wela=0;
	//delay_ms(2);
	
	P0=0x00;
	dula=1;
	P0=table[xx];
	dula=0;
	delay_ms(5);
	
	P0=0xff;
	wela=1;
	P0=table2[1];
	wela=0;
	//delay_ms(2);

	P0=0x00;	
	dula=1;
	P0=(table[yy]+0x80);
	dula=0;
	delay_ms(5);

	P0=0xff;
	wela=1;
	P0=table2[2];
	wela=0;
	//delay_ms(2);
	
	P0=0x00;
	dula=1;
	P0=table[zz];
	dula=0;
	delay_ms(5);
	
}
*/
void display(uchar num,uchar dat)
{
	uchar i;
	dula=0;
	P0=table[dat];
	dula=1;
	dula=0;
	wela=0;
	i=0xFF;
	i=i&(~((0x01)<<(num)));
	P0=i;
	wela=1;
	wela=0;
	delay_ms(1);
}

void dis_temp(uint t)
{
	uchar i;
	i=t/100;
	display(0,i);
	i=t%100/10;
	display(1,i);
	i=t%100%10;
	display(2,i);
}
/*******************************************/


void main()
{
	uchar ii;

	while(1)
	{
		convert_temper();
		read_temper();
		for(ii=0;ii<5;ii++)
		{
			dis_temp(read_temper);
		}
	}
}

⌨️ 快捷键说明

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