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

📄 zuosi.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 c_temper;
float f_temper;

uint L_temper;
uint H_temper;

//uchar code configer_reg[]={0x1f,0x3f,0x5f,0x7f};
/*
struct ic_code
{
	uchar romcode[8];
}ic_code;
ic_code cc[2];
*/
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,
0xBf,0x86,0xDb,0xCf,0xE6, 0xEd,0xEd,0x87,0xFf,0xEf};

/*******************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 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); 
} 

void write_cmd(uchar z)//写命令
{
	uchar t,i;
	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);
	}	
	
}

void convert_t()//温度转变
{
	dq_reset();

	write_cmd(0xcc);
	write_cmd(0x44);
}

uint get_temper()//从暂存器中获取温度
{

	uchar LSB_temper;
	uchar MSB_temper;

	dq_reset();

	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;
}
/**********************dealtemperature*****************************/
void init()//初始化
{
	L_temper=100;
	H_temper=320;
	
	c_temper=200;
	dula=0;
	wela=0;
}

void display_temper(uint wengdu)//显示当前温度值
{
	uchar xx,yy,zz;
	uint temper;
	
	temper=wengdu;
	xx=temper/100;
	yy=temper%100/10;
	zz=temper%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);
}

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



void deal_temper()//温度处理函数
{
	uchar t;
	
	while(1)
	{
		convert_t();	  
		for(t=0;t<10;t++)
		{
			display_temper(get_temper());
		}
		if((c_temper>H_temper)||(c_temper<L_temper)) warn_temper();
	}	
}

void main()
{
	init();

	while(1)
	{	
	
		deal_temper();
	}
}

⌨️ 快捷键说明

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