51温控系统说明书

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于单片机的简单温控系统

机控学院自动化12-2 潘星光3120619213

实现功能:利用单片机89C52和热电偶进行测量发热电阻的温度,利用LCD1602进行显示的温度和人工可设置温度的上限与下限值,即有两个按键是来控制上限值的大小,而另两个按键则是控制下限值的大小的。发热电阻从系统上电后就立即通电发热,设置好所需要温度范围,则测量温度显示的数值会随发热电阻通电时间的增大而增大,当测量的温度超出所设定的上限值时,就会驱动蜂鸣器报警,发热电阻停止通电,同时也会驱动马达扇风来降温;而当测量温度低于所设定的下限值时,也会进行报警,但电机不会被启动和发热电阻也继续通电发热。当然当测量温度在上限值和下限值之间时,是不会进行报警和驱动马达的,但发热电阻仍处于通电状态中。

电路原理图:

主程序:

#include

#include<1602.h>

#include

sbit ds = P2^2;

sbit beep = P2^3;

sbit rd = P3^7;

sbit k = P1^0;

bit flag;

uchar ds_rom[8];

uchar H,L,Key_value; void TempDelay(uchar us)

{

while(us--); //6.51us }

void ds_reset()

{

ds=1;

_nop_();

ds=0;

TempDelay(80);//52 0us

ds=1;

TempDelay(5);

if(ds==0)

flag=1;

else

flag=0;

TempDelay(20);

ds=1;

}

bit ds_read_bit()

{

bit dat;

ds=0;

_nop_();

_nop_();

ds=1;

_nop_();

dat=ds;

TempDelay(12);

return dat;

}

uchar ds_read_byte()

{

uchar i,j,value;

for(i=0;i<8;i++)

{

j=ds_read_bit();

value=(j<<7)|(value>

>1);

}

return value;

}

void ds_write_byte(uchar

dat)

{

uchar i,onebit;

for(i=0;i<8;i++)

{

onebit=dat&0x01;

if(onebit)

//写1

{

ds=0;

TempDelay(1);

ds=1;

_nop_();

}

else //写0

{

ds=0;

TempDelay(11);

ds=1;

_nop_();

}

dat>>=1;

}

}

void ds_change()

{

ds_reset();

ds_write_byte(0xcc);

ds_write_byte(0x44)

;

}

uchar get_temperature()

{

uint temp;

uchar a,b,c;

ds_reset();

ds_write_byte(0xcc);

ds_write_byte(0xbe);

a=ds_read_byte();

b=ds_read_byte();

temp=b;

temp<<=8;

temp|=a;

c = temp*0.0625;

return c;

}

void key()

{

Key_value = P3;

Key_value =

Key_value & 0x0f;

if ( Key_value !=

0x0f )

{

delay(5);

if

( Key_value != 0x0f )

{

switch(Key_value)

{

case

0x0e: H++; break;

case

0x0d: H--; break;

case

0x0b: L++; break;

case

0x07: L--; break;

}

}

}

}

void main()

{

uchar i;

rd = 0;

init_1602();

write_com( 0x80 + 0 + 3);

write_data( 'H' );

write_com( 0x80 + 0 + 8);

write_data( 'L' );

lcd_distostr(1,1,0);

H = 35;

L = 25;

k = 1;

while(1)

{

ds_change();

i = get_temperature();

lcd_dis( 1,14,ucharto str( i ) );

lcd_dis( 0,5,ucharto s tr( H ) );

lcd_dis( 0,10,ucharto str( L ) );

if ( i>=H)

{

beep = 0;

k = 0;

}

else if(i<=L)

{

beep = 0;

k = 1;

}

else

{

beep = 1;

k = 1;

}

key();

}

}

相关文档
最新文档