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

📄 lengku.c

📁 这是一个用于冷库控制板的程序
💻 C
字号:
//这是一个冷库控制板程序
//陈永飞同志于2009-1-15写,QQ:49204743
#include<reg52.h>
#include"DS18B20.h"
#define uchar unsigned char
#define uint unsigned int
#define leddata P0		//宏定义数码管的段码输出为P0口
sbit wdbw=P2^7;		//零上温度时为百位;零下温度时为负号
sbit wdsw=P2^6;		//温度十位
sbit wdgw=P2^5;		//温度个位

sbit led1=P1^0;		//设定温度上限指示灯
sbit led2=P1^1;		//设定温度下限指示灯

sbit set=P1^2;		//设定温度
sbit up=P1^3;		//加按键
sbit down=P1^4;		//减按键
sbit jdq=P1^5;		//加热继电器输出
sbit zhilen=P1^6;	//制冷继电器输出
sbit len_re=P1^7;	//冷热选择开关

//sbit DQ =P1^6;//根据实际情况定义端口
char a,b,p;
uint ok;
uchar id;
bit zencang=1,shang=0,xia=0;
//////////////////////////////////
uchar code tab[]={          0xC0,/*0*/
					        0xF9,/*1*/
					        0xA4,/*2*/
					        0xB0,/*3*/
					        0x99,/*4*/
					        0x92,/*5*/
					        0x82,/*6*/
					        0xF8,/*7*/
					        0x80,/*8*/
					        0x90,/*9*/
							0xbf,/*-*/
				};

////////延时程序/////////////////////////////
 
void delays(uchar x)
{
	uchar y;
	for(y=200;y>0;y--)
	for(;x>0;x--);
}


/////////显示程序///////////////
void desplay()
{
	if(zencang==1)
	{
	 ok=Read_Temperature();		//调用读温度函数
	 p=( char)(ok>>4);	//温度数据转换
		if(p&0x80)	//如果为真,则显示正温度
			{wdbw=0;leddata=tab[p/100];delays(10);wdbw=1;}
		else{wdbw=0;leddata=tab[11];delays(10);wdbw=1;}
		 wdsw=0;leddata=tab[p%100/10];delays(10);wdsw=1;	//温度显示十位
		 wdgw=0;leddata=tab[p%10];delays(10);wdgw=1;		//温度显示个位
	}
	if(shang==1)
	{
		if(a&0x80)	//如果为真,则显示正温度
			{wdbw=0;leddata=tab[a/100];delays(10);wdbw=1;}
		else{wdbw=0;leddata=tab[11];delays(10);wdbw=1;}
		 wdsw=0;leddata=tab[a%100/10];delays(10);wdsw=1;	//温度显示十位
		 wdgw=0;leddata=tab[a%10];delays(10);wdgw=1;		//温度显示个位	
	}
	if(xia==1)
	{
		if(b&0x80)	//如果为真,则显示正温度
			{wdbw=0;leddata=tab[b/100];delays(10);wdbw=1;}
		else{wdbw=0;leddata=tab[11];delays(10);wdbw=1;}
		 wdsw=0;leddata=tab[b%100/10];delays(10);wdsw=1;	//温度显示十位
		 wdgw=0;leddata=tab[b%10];delays(10);wdgw=1;		//温度显示个位	
	}
}

///////////按键程序/////////////////
void key()
{
	if(!set)		//设定温度键程序
		{
			while(!set)display();
			id++;if(id>2)id=0;
		}

	if(id==0)
	{
		led2=1;	//如果退出设定温度时,关闭下限设定指示灯
		zencang=1;	//正常显示标字为1
		xia=0;		//下限温度标字为0
		shang=0;	//上限温度标字为0
	}

	if(id==1)		//调设定温度上限值程序
	{
		zencang=0;	//正常显示标字为0
		shang=1;	//上限温度标字为1
		xia=0;		//下限温度标字为0
		led1=0;		//点亮温度上限设定指示灯
		if(!up)
		{
			while(!up)display();
			a++;
			if(a>125)a=125;		//如果温度变量上限值a中的数大于最高温度125度时,		
		}
		if(!down)
		{
			while(!down)display();
			a--;
			if(a<=b)a=(b+1);			//如果温度变量上限值a中的数等于温度下限变量b时,
		}
			
	}

	if(id==2)		//调设定温度下限值程序
	{
		zencang=0;	//正常显示标字为0
		led2=0;		//点亮温度下限设定指示灯
		led1=1;		//关闭温度上限设定指示灯
		shang=0;	//上限温度标字为0
		xia=1;		//下限温度标字为1
		if(!up)
		{
			while(!up)display();
			a++;
			if(b>=a)b=(a-1);		//如果温度变量下限值b中的数等于上限值a时,		
		}
		if(!down)
		{
			while(!down)display();
			a--;
			if(b<-55)b=-55;			//如果温度变量下限值b中的数小于温度最低-55时,
		}		
	}	
}

////////////加热和制冷工旷/////
void jiare()
{
	if((p>=a)&len_re)	//冷热开关为高平时,制冷
	{
		zhilen=0;	//启动压缩机,制冷
	}
	if((p<=b)&len_re)
	{
		zhilen=1;	//关闭压缩机,停止工作
	}

	if((p>=a)&(!len_re))	//冷热开关为低平时,制热
	{
		jdq=0;	//启动加热继电器,制热
	}
	if((p<=b)&(!len_re))
	{
		jdq=1;	//关闭加热继电器,停止工作
	}	
}
/////////////主程序/////////////////
void main()
{
	adjust_res(0x7f); //调整18B20的分辨率 0x1f:0.5; 0x3f:0.25; 0x5f:0.125; 0x7f:0.0625
	while(1)
	{
		Scan_Key();		//调用按键扫描程序
		display();		//调用数码管显示程序
		jiare();		
	}
}

⌨️ 快捷键说明

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