📄 lengku.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 + -