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

📄 succeed.c

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

#define uchar unsigned char 
#define uint unsigned int 

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

uint c1_temper,c2_temper;
float f1_temper,f2_temper;

uint L_temper;
uint H_temper;

uchar iccode[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00};

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,
0xBf,0x86,0xDb,0xCf,0xE6, 0xEd,0xEd,0x87,0xFf,0xEf};

void delay_ms(uint z);
void delay_us();
void dq_reset();
void write_cmd(uchar z);
uchar read_temper();
uint get_temper();
uchar read_bit();
void get_firstid();
void get_seconedid();
void write_date(uchar z);
uchar read_date();
void write_bit(uchar dd);
void convert();
void deal_temper();
void deal_ds1();
void deal_ds2();
void display_temper(uint wengdu,uchar fc);
void init1();
void init2();
void warn_temper(uchar dj);
/*******************delaytime********************/

void delay_ms(uint z)//毫秒级的延迟
{	
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);	
}

void delay_us()//延时微秒
{
	_nop_();
}
/********************dqreset**************************/

void dq_reset()//复位
{
	uchar t;
	
	dq=0;
	for(t=250;t>0;t--);
	dq=1;
	for(t=100;t>0;t--);
}

/***********************temper*********************/

uchar read_temper()//读温度
{ 
	uchar i;
	uchar temp; 
	uchar dd;

	temp=0x00; 
	for(i=0;i<8;i++) 
	{ 
		temp=_cror_(temp,1); 
		
		dd=read_bit();
		if(dd==1) 
		{ 
			temp=temp|0x80; 
		} 
		else 
		{ 
			temp=temp|0x00; 
		} 
	} 
	return(temp); 
} 

uint get_temper()//get centigrad for the ram
{

	uchar LSB_temper;
	uchar MSB_temper;
	uint c_temper=0;
	float f_temper=0;

	//dq_reset();
	//write_cmd(0xcc);
	//write_cmd(0xcc);
	write_cmd(0xbe);

	LSB_temper=read_temper();
	MSB_temper=read_temper();
	
	c_temper=MSB_temper;
	c_temper=c_temper<<8;
	c_temper=c_temper|LSB_temper;
	f_temper=c_temper*0.0625;
	c_temper=f_temper*10+0.5;
	
	return c_temper;
}

void write_cmd(uchar z)//写命令
{
	uchar i,t;
	uchar temper;
	uchar cmd=z;

	for(i=0;i<8;i++)
	{
		temper=cmd&0x01;
		if(temper)
		{
			dq=0;
			delay_us();
			delay_us();
			dq=1;
			for(t=30;t>0;t--);	
		}
		else
		{
			dq=0;
			for(t=50;t>0;t--);
			dq=1;
			delay_us();	delay_us();		
		}
		cmd=_cror_(cmd,1);
	}	
	
}

/************************writeorreadbit********************************/

uchar read_bit()
{
	uchar dd;
	uchar t;

	dq=0;
	delay_us();
	dq=1;
	for(t=2;t>0;t--);
	dd=dq;//get the signal
	for(t=20;t>0;t--);
	return(dd);	
}

void write_bit(uchar dd)
{
	uchar t;

	if(dd==1)
	{
		dq=0;
		delay_us();
		dq=1;
		for(t=30;t>0;t--);	
	}	
	else
	{
		dq=0;
		for(t=20;t>0;t--);
		dq=1;
		delay_us();
		delay_us();
	}
}

/*************************getid*************************/

void get_firstid()
{
	uchar t;
	uchar w=0;
	uchar d1,d2;
	
	dq_reset();
	write_cmd(0xf0);

	for(t=0;t<64;t++)
	{
		d1=read_bit();
		d2=read_bit();
		if((t>0)&&(t%8==0)) ++w;	
		iccode[w]=_cror_(iccode[w],1);
		
		if( (d1==1) && (d2==0) )
		{
			iccode[w]=(iccode[w])|0x80;
			write_bit(1);
		}
		else if( (d1==0) && (d2==1))
		{
			iccode[w]=(iccode[w])|0x00;
			write_bit(0);
		}
		else if( (d1==0) && (d2==0) )
		{
			iccode[w]=(iccode[w])|0x00;
			write_bit(0);
		}
	}
}

void get_seconedid()
{
	uchar t;
	uchar w=8;
	uchar d1,d2;
	
	dq_reset();
	write_cmd(0xf0);

	for(t=0;t<64;t++)
	{
		d1=read_bit();
		d2=read_bit();
		if( (t>0) && (t%8==0) ) ++w;
		iccode[w]=_cror_(iccode[w],1);
		
		if( (d1==1) && (d2==0) )
		{
			write_bit(1);
			iccode[w]=(iccode[w])|0x80;
		}
		else if( (d1==0) && (d2==1) )
		{
			iccode[w]=(iccode[w])|0x00;
			write_bit(0);
		}
		else if( (d1==0) && (d2==0) )
		{
			iccode[w]=(iccode[w])|0x00;
			write_bit(1);
		}
	}
}

/************************writeorreaddata************************/

void write_date(uchar z)
{
	uchar t,i;
	uchar temper;
	uchar dat=z;

	for(i=0;i<8;i++)
	{
		temper=dat&0x01;
		if(temper)
		{
			dq=0;
			delay_us();
			delay_us();
			dq=1;
			for(t=30;t>0;t--);
		}
		else
		{
			dq=0;
			for(t=50;t>0;t--);
			dq=1;
			delay_us();	delay_us();	
		}
		dat=_cror_(dat,1);
	}	
}
/*
uchar read_date() 
{ 

	uchar t; 
	uchar i;
	uchar temper; 

	temper=0x00; 
	for(i=0;i<8;i++) 
	{ 
		temper=_cror_(temper,1); 
		dq=0; 
		delay_us();
		delay_us();
		dq=1; 
		delay_us();delay_us();
		if(dq==1) 
		{ 
			temper=temper | 0x80; 
		} 
		else 
		{ 
			temper=temper | 0x00; 
		} 
		for(t=20;t>0;t--); 
	} 
	return(temper); 
} */

/*************************ramfuntion********************************/

void convert_t()//温度转变
{
	write_cmd(0x44);
}

/****************************temperdeal***********************************/

void deal_temper()
{
	while(1)
	{
		deal_ds1();
		deal_ds2();
	}
}

void deal_ds1()
{
	uchar t1;
	uchar i;

	dq_reset();		
	write_cmd(0x55);
	for(i=0;i<8;i++)
	{
		write_date(iccode[i]);
	}
	while(1){
	convert_t();
	c1_temper=get_temper();
	for(t1=0;t1<20;t1++)
	{
		display_temper(get_temper,1);
		if((c1_temper>H_temper)||(c1_temper<L_temper)) warn_temper(1);
	}
	}	
}

void deal_ds2()
{
	uchar t1;
	uchar i;

	dq_reset();
	write_cmd(0x55);
	for(i=8;i<16;i++)
	{
		write_date(iccode[i]);
	}	

	convert_t();
	for(t1=0;t1<20;t1++)
	{
		c2_temper=get_temper();
		display_temper(c2_temper,1);
	//	if(c2_temper>H_temper||c2_temper<L_temper) warn_temper(2);
	}
	
}

void warn_temper(uchar dj)//温度告警
{
	uchar t;
	uchar flag=1;
	uchar c_temp;
	
	while(flag)
	{
		for(t=0;t<10;t++)
		{	
			feng=0;
			display_temper(get_temper(),dj);
		}
		convert_t();
		c_temp=get_temper();
		if((c_temp<=H_temper)&&(c_temp>L_temper))
		{
			flag=0;
			feng=1;		
		}
	}
}

void display_temper(uint wengdu,uchar fc)//显示当前温度值
{
	uchar xx,yy,zz;
	uint temp;
	
	temp=wengdu;
	xx=temp/100;
	yy=temp%100/10;
	zz=temp%10;
	
	wela=1;
	P0=0xfe;
	wela=0;

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

	P0=0x00;
	dula=1;
	P0=(table[yy]+0x80);
	dula=0;
	delay_ms(2);
	
	P0=0xff;
	wela=1;
	P0=0xfb;
	wela=0;

	P0=0x00;
	dula=1;
	P0=table[zz];
	dula=0;
	delay_ms(1);

	P0=0xff;
	wela=1;
	P0=0xdf;
	wela=0;

	P0=0x00;
	dula=1;
	P0=table[fc];
	dula=0;
	delay_ms(1);
}

/**********************init()andmain()******************************/

void init2()//初始化
{
	L_temper=100;
	H_temper=320;
	
	c1_temper=200;
	c2_temper=200;
	dula=0;
	wela=0;
}

void main()
{
	init2();
	while(1)
	{
		get_firstid();
		get_seconedid();
		deal_temper();
	}	
}

⌨️ 快捷键说明

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