恒温控制系统单片机仿真c语言,基于51单片机的恒温控制系统电路与程序源码设计资料...

#include

void main()//主函数

{

init();//初始化函数

while(1)

{

temp_control();//控制按键函数

unnormal_proccessing(get_temp(Ds18b20ReadTemp()),up_limit_temp,down_limit_temp);//恒温控制函数

}

}

void init()//初始化函数

{

uint i,j;

//函数初始化

LcdInit();//LCD初始化函数

Ds18b20Init();

//I/O口初始化

heatting=1;//不制热

refrigerating=1;//不制冷

//LCD初始化显示

LcdWriteCom(0x80);//第一行显示

j=strlen(num1);

for(i=0; i

{

LcdWriteData(num1[i]);

delay_ms(1);

}

LcdWriteCom(0x80+0x40);//第二行显示

j=strlen(num2);

for(i=0; i

{

LcdWriteData(num2[i]);

delay_ms(1);

}

LcdWriteCom(0x04);  //关闭写一个指针加1

}

uint get_temp(uint temp)//计算温度函数

{

float tp;

tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量

//如果温度是正的那么,那么正数的原码就是补码它本身

temp=tp*0.0625*100+0.5;

//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点

//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就

//算加上0.5,还是在小数点后面。

return temp;

}

void display_real_tenp(uint temp)//实时温度显示函数

{

uchar datas[] = {0, 0, 0, 0}; //定义数组

datas[0] = temp % 10000 / 1000;

datas[1] = temp % 1000 / 100;

datas[2] = temp % 100 / 10;

datas[3] = temp % 10;

LcdWriteCom(0x80+0x0a);                 //写地址 80表示初始地址

LcdWriteData('0'+datas[0]); //十位

LcdWriteCom(0x80+0x0b);        //写地址 80表示初始地址

LcdWriteData('0'+datas[1]); //个位

LcdWriteCom(0x80+0x0d);         //写地址 80表示初始地址

LcdWriteData('0'+datas[2]); //显示小数点

LcdWriteCom(0x80+0x0e);                 //写地址 80表示初始地址

LcdWriteData('0'+datas[3]); //显示小数点

}

void temp_control()//控制温度上下限函数

{

if(limit_choise==0)//选择按键

{

delay_ms(5);

if(limit_choise==0)

{

while(!limit_choise);

limit_choise_num++;

if(limit_choise_num>=3)

{

limit_choise_num=0;

}

}

}

if(limit_choise_num==0)//正常显示

{

LcdWriteCom(0x0c);//关闭光标

display_real_tenp(get_temp(Ds18b20ReadTemp()));//显示函数

}

if(limit_choise_num==1)//调节上限温度

{

LcdWriteCom(0x80+0X40+2);

LcdWriteCom(0x0f);//开启光标

if(increase_temperature==0)//增加温度

{

delay_ms(5);

if(increase_temperature==0)

{

while(!increase_temperature);

up_limit_temp++;

if(up_limit_temp>=100)

{

up_limit_temp=0;

}

//写入新数据

LcdWriteCom(0x80+0X40+0x03);

LcdWriteData('0'+up_limit_temp/10);

LcdWriteCom(0x80+0X40+0x04);

LcdWriteData('0'+up_limit_temp%10);

LcdWriteCom(0x80+0X40+2);//光标回写

}

}

if(reduce_temperature==0)//减少温度

{

delay_ms(5);

if(reduce_temperature==0)

{

while(!reduce_temperature);

up_limit_temp--;

if(up_limit_temp<0)

{

up_limit_temp=99;

}

//写入新数据

LcdWriteCom(0x80+0X40+0x03);

LcdWriteData('0'+up_limit_temp/10);

LcdWriteCom(0x80+0X40+0x04);

LcdWriteData('0'+up_limit_temp%10);

LcdWriteCom(0x80+0X40+2);//光标回写

}

}

}

if(limit_choise_num==2)//调节下限温度

{

LcdWriteCom(0x80+0X40+12);

LcdWriteCom(0x0f);//开启光标

if(increase_temperature==0)//增加温度

{

delay_ms(5);

if(increase_temperature==0)

{

while(!increase_temperature);

down_limit_temp++;

if(down_limit_temp>=100)

{

down_limit_temp=0;

}

//写入新数据

LcdWriteCom(0x80+0X40+0x0d);

LcdWriteData('0'+down_limit_temp/10);

LcdWriteCom(0x80+0X40+0x0e);

LcdWriteData('0'+down_limit_temp%10);

LcdWriteCom(0x80+0X40+12);//光标回写

}

}

if(reduce_temperature==0)//减少温度

{

delay_ms(5);

if(reduce_temperature==0)

{

while(!reduce_temperature);

down_limit_temp--;

if(down_limit_temp<0)

{

down_limit_temp=99;

}

//写入新数据

LcdWriteCom(0x80+0X40+0x0d);

LcdWriteData('0'+down_limit_temp/10);

LcdWriteCom(0x80+0X40+0x0e);

LcdWriteData('0'+down_limit_temp%10);

LcdWriteCom(0x80+0X40+12);//光标回写

}

}

}

}

void unnormal_proccessing(uint temp,uint up_temp,uint down_temp)//恒温控制函数

{

uchar datas[] = {0, 0, 0, 0}; //定义数组

uint temp1=0;

datas[0] = temp % 10000 / 1000;

datas[1] = temp % 1000 / 100;

datas[2] = temp % 100 / 10;

datas[3] = temp % 10;

temp1=datas[0]*1000+datas[1]*100+datas[2]*10+datas[3];//实际的温度乘以100

if(temp1 < down_temp*100)//升温函数

{

heatting=0;//制热

warning=0;

delay_ms(10);

warning=1;

}

else//正常

{

heatting=1;//不制热

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值