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

📄 main.c

📁 51单片机项目集
💻 C
字号:
/*********************************************************************/
//读取DS18B20温度,通过数码管显示,在温度超过35度时继电器吸合																						
/*********************************************************************/
#include<reg51.h>
#include"18B20.c"		
#define uchar unsigned char 
#define uint unsigned int

code  uchar seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
code uchar seven_bit[] = {0xfe,0xfd,0xfb,0xf7};
uchar cp;
uint temp1,temp2;
sbit jdq = P2^6; 
void timer0_init(void)	 //初始化
{
	TMOD = 0x01;
	TH0 = 0xec;
	TL0 = 0x78;
	TR0 = 1;
	EA  = 1;
	ET0 = 1;
}
/*****************************************************************************/
void timer0_isr(void) interrupt 1		  //中断
{
	uchar j;
	TR0 = 0;
	EA = 0;
	TH0 = 0xec;
	TL0 = 0x78;
	TR0 = 1;
	EA = 1;
	cp++;
	if(cp >= 200)   //刚好1秒
   {
		cp = 0;
		temp1 = Read_Temperature();//得到温度
		if((temp1 & 0x80) == 0x80) //如果温度为负值
		{	
		
			temp2 =0x7f & ~temp1  +  (0x0f & ~c) /15;  //整数处理,需要加上小数来的借位
			c = 0x0f & ~c + 0x01;   //小数处理
		}
		else temp2 = temp1;//如果温度为正值,不用处理
	}
	P0 = 0xff;
	switch(j)
	{
		case 0:P0 = seven_seg[c * 10/16];break;//显示小数
		case 1:P0 = 0x7f & seven_seg[temp2 % 10];break;//显示个位并加上小数点
		case 2:{	
					if((temp2 < 10) && (temp1 < 0x80)){P0 = 0xff;break;}//如果温度小于10度,且为正值,十位0不显示
					if((temp1 > 0x80) && (temp2 < 10)){P0 = 0xbf;break;}//如果温度小于10度,且为负值,十位0不显示,只显示“-”
				   	P0 = seven_seg[temp2 / 10];	break;//如果温度大于10度,10位正常显示
				
				}
		case 3:{
					if((temp1 > 0x80) && ((temp2 / 10) > 0))//如果温度为负值,且十位不为0,百位显示“-”
					P0 = 0xbf;
					break;
				}
	}
	P2 = seven_bit[j];
	j++;
	if(j >= 4)
	j=0;
}
void main(void)
{
	timer0_init();
	
	while(1)
	{
		if(temp2 >= 35) 
			jdq = 0;
		else
			jdq = 1;
	}
}

⌨️ 快捷键说明

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