基于51单片机冰箱温度控制器设计(毕业设计资料)
说明:此设计为便携式冰箱,包含制热和压缩机降温控制,冰箱内实际温度和设定温度比较,进行降温和升温
控制伴随LED状态显示,降温压缩机用电机模拟,冰箱门开闭状态并显示,当温度高于报警温度值,蜂鸣器报警。
注意:按键需半秒按下生效(保护措施),升温和降温切换有延迟(和实际情况一致)。开启时由于引脚初始化
前高电平,所以压缩机和制热装置同时工作。进入初始化后恢复正常。
资料包从主页进行下载
链接:https://pan.baidu.com/s/1bMnNEv0cCAdTZ4xYCa3rtQ
提取码:hj9e
复制这段内容后打开百度网盘手机App,操作更方便哦
/* 冰箱温度控制仿真程序 */
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit ds = P2 ^ 7;
sbit bemp = P3 ^ 7;
sbit lcden = P2 ^ 2;
sbit lcdrs = P2 ^ 0;
sbit lcdrw = P2 ^ 1;
sbit sh_zeng = P1 ^ 7;
sbit sh_jian = P1 ^ 6;
sbit xia_zeng = P1 ^ 5;
sbit xia_jian = P1 ^ 4;
sbit dianji = P3 ^ 0;
sbit heat = P3 ^ 1;
sbit zhengchang = P1 ^ 2;
sbit door = P1 ^ 3;
uchar door_flag = 1;
uchar code table1[] = "TEMP:";
uchar code table2[] = "SET:";
uchar code table3[] = "WAR:";
uchar code table4[] = "0123456789.-+";
uchar code table5[] = "OFF";
uchar code table6[] = "ON ";
uchar code table7[] = "C";
uchar bai, shi, ge, flag, num, shi_sh, shi_xia, ge_sh, ge_xia;
int temp;
/* 初始化温度上下限 */
int warn_sh = 2;
int warn_xia = 37;
void delayms( uint z )
{
uint x, y;
for ( x = z; z > 0; z-- )
for ( y = 110; y > 0; y-- )
;
}
void dsreset() /* DS18B20初始化 */
{
uint i;
ds = 0;
i = 103;
while ( i > 0 )
i--;
ds = 1;
i = 1;
while ( i > 0 )
i--;
}
bit tempreadbit( void ) /* 读一位数据函数 */
{
uint i;
bit dat;
ds = 0; i++; /* 延时 */
ds = 1; i++; i++;
dat = ds;
i = 8; while ( i > 0 )
i--;
return(dat);
}
uchar tempread( void )
{
uchar i, j, dat;
dat = 0;
for ( i = 1; i <= 8; i++ )
{
j = tempreadbit();
dat = (j << 7) | (dat >> 1); /* 将位转换为字节 */
}
return(dat);
}
void tempwrite( uchar dat ) /* 向DS18B20写一个字节数据函数 */
{
uint i;
uchar j;
bit testb;
for ( j = 1; j <= 8; j++ )
{
testb = dat & 0x01;
dat = dat >> 1;
if ( testb )
{
ds = 0;
i++; i++;
ds = 1;
i = 8; while ( i > 0 )
i--;
}else {
ds = 0;
i = 8; while ( i > 0 )
i--;
ds = 1;
i++; i++;
}
}
}
void tempchange() /* DS18B20开始获取温度并转换 */
{
dsreset();
delayms( 1 );
tempwrite( 0xcc ); /* 写跳过读ROM指令 */
tempwrite( 0x44 ); /* 写温度转换指令 */
}