基于单片机的温度湿度采集系统
程序
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#include <intrins.h>
typedef bit BOOL
;
sbit io
= P1
^1 ;
sbit bee
=P1
^0;
sbit rs
= P2
^5 ;
sbit rw
= P2
^6 ;
sbit ep
= P2
^7 ;
bit flag_300ms
;
sbit K1
=P1
^2;
sbit K2
=P1
^3;
sbit K3
=P1
^4;
uchar yemian
=0;
uchar flat
=1;
uchar data_byte
;
uchar RH
,RL
,TH
,TL
;
uchar WenDu
,ShiDu
;
#include "eeprom52.h"
void delay(uchar ms
)
{
uchar i
;
while(ms
--)
{
for(i
= 0 ; i
<250;i
++) ;
}
}
void delay1()
{
uchar i
;
i
--;
i
--;
i
--;
i
--;
i
--;
i
--;
}
void longdelay(uchar s
)
{
while(s
--)
{
delay(20) ;
}
}
void write_eeprom()
{
SectorErase(0x2000);
byte_write(0x2000, WenDu
);
byte_write(0x2001, ShiDu
);
byte_write(0x2060, a_a
);
}
void read_eeprom()
{
WenDu
= byte_read(0x2000);
ShiDu
= byte_read(0x2001);
a_a
= byte_read(0x2060);
}
void init_eeprom()
{
read_eeprom();
if(a_a
!= 2)
{
WenDu
= 30;
ShiDu
= 80;
a_a
= 2;
write_eeprom();
}
}
void warn()
{
if(TH
>=WenDu
)
{
bee
=0;
}
if(RH
>=ShiDu
)
{
bee
=0;
}
if( TH
<WenDu
&& RH
<ShiDu
)
{
bee
=1;
}
}
BOOL
lcd_bz()
{
BOOL result
;
rs
= 0 ;
rw
= 1 ;
ep
= 1 ;
result
= (BOOL
)(P0
& 0x80) ;
ep
= 0 ;
return result
;
}
void write_cmd(uchar cmd
)
{
while(lcd_bz()) ;
rs
= 0 ;
rw
= 0 ;
ep
= 0 ;
P0
= cmd
;
ep
= 1 ;
ep
= 0 ;
}
void write_addr(uchar addr
)
{
write_cmd(addr
|0x80) ;
}
void write_byte(uchar dat
)
{
while(lcd_bz()) ;
rs
= 1 ;
rw
= 0 ;
ep
= 0 ;
P0
= dat
;
ep
= 1 ;
ep
= 0 ;
}
void lcd_init()
{
write_cmd(0x38) ;
delay(1);
write_cmd(0x08) ;
delay(1);
write_cmd(0x01) ;
delay(1);
write_cmd(0x06) ;
delay(1);
write_cmd(0x0c) ;
delay(1);
}
void display(uchar addr
, uchar q
)
{
delay(1) ;
write_addr(addr
) ;
write_byte(q
) ;
delay(1) ;
}
void start()
{
io
=1;
delay1();
io
=0;
delay(20);
io
=1;
delay1();
delay1();
delay1();
delay1();
delay1();
}
uchar
receive_byte()
{
uchar i
,temp
,count
;
for(i
=0;i
<8;i
++)
{
temp
=0;
delay1();delay1();delay1();delay1();
if(io
==1)temp
=1;
count
=2;
while((io
)&&count
++);
if(count
==1)break;
data_byte
<<=1;
data_byte
|=temp
;
}
return data_byte
;
}
void receive()
{
uchar T_H
,T_L
,R_H
,R_L
,check
,num_check
;
uchar count
;
start();
io
=1;
if(!io
)
{
while((io
)&&count
++);
R_H
=receive_byte();
R_L
=receive_byte();
T_H
=receive_byte();
T_L
=receive_byte();
check
=receive_byte();
io
=0;
delay1();delay1();delay1();delay1();delay1();
io
=1;
num_check
=R_H
+R_L
+T_H
+T_L
;
if(num_check
=check
)
{
RH
=R_H
;
RL
=R_L
;
TH
=T_H
;
TL
=T_L
;
check
=num_check
;
}
}
}
void showw()
{
lcd_init();
delay(10);
display(0x05,'W');
display(0x06,'e');
display(0x07,'l');
display(0x08,'c');
display(0x09,'o');
display(0x0a,'m');
display(0x0b,'e');
delay(250);
delay(250);
delay(250);
}
void time_init()
{
EA
= 1;
TMOD
= 0X01;
ET0
= 1;
TR0
= 1;
}
void key()
{
if(!K1
)
{
delay(20);
if(!K1
)
{
while(!K1
)
;
yemian
++;
flat
++;
if(yemian
>=3) { yemian
=0; }
}
}
}
shezhi()
{
if(!K2
)
{
delay(50);
if(!K2
)
{
;
if(yemian
==1)
{
WenDu
+=1;
if(WenDu
>99) { WenDu
=99; }
}
if(yemian
==2)
{
ShiDu
+=1;
if(ShiDu
>99) { ShiDu
=99; }
}
write_eeprom();
}
}
if(!K3
)
{
delay(50);
if(!K3
)
{
;
if(yemian
==1)
{
WenDu
-=1;
if(WenDu
<1) {WenDu
=1; }
}
if(yemian
==2)
{
ShiDu
-=1;
if(ShiDu
<1) { ShiDu
=1; }
}
write_eeprom();
}
}
}
void main()
{
init_eeprom();
time_init();
showw();
while(1)
{
key();
if(yemian
==0)
{
if(flat
==1)
{
flat
=0;
lcd_init();
display(0x00,'T') ;
display(0x01,'e');
display(0x02,'m');
display(0x03,'p');
display(0x04,':');
display(0x08,0xdf);
display(0x09,'C');
display(0x40,'H') ;
display(0x41,'u');
display(0x42,'m');
display(0x43,'i');
display(0x44,':');
display(0x47,'%');
display(0x48,'R');
display(0x49,'H');
display(0x0c,'T');
display(0x0d,':');
display(0x0e,WenDu
/10+0x30);
display(0x0f,WenDu
%10+0x30);
display(0x4c,'H');
display(0x4d,':');
display(0x4e,ShiDu
/10+0x30);
display(0x4f,ShiDu
%10+0x30);
}
if(flag_300ms
== 1)
{
flag_300ms
= 0;
receive();
display(0x05,TH
/10+0x30);
display(0x06,TH
%10+0x30);
display(0x45,RH
/10+0x30);
display(0x46,RH
%10+0x30);
warn();
}
}
if(yemian
==1)
{
if(flat
==1)
{
flat
=0;
bee
=1;
lcd_init();
display(0x06,'T');
display(0x07,'e');
display(0x08,'m');
display(0x09,'p');
}
shezhi();
display(0x47,WenDu
/10+0x30);
display(0x48,WenDu
%10+0x30);
}
if(yemian
==2)
{
if(flat
==1)
{
flat
=0;
bee
=1;
lcd_init();
display(0x06,'H');
display(0x07,'u');
display(0x08,'m');
display(0x09,'i');
}
shezhi();
display(0x47,ShiDu
/10+0x30);
display(0x48,ShiDu
%10+0x30);
}
}
}
void time0_int() interrupt
1
{
static uchar value
;
TH0
= 0x3c;
TL0
= 0xb0;
if(value
% 6 == 0)
{
flag_300ms
= 1;
value
= 0;
}
}
头文件
#ifndef _EEPROM52_H_
#define _EEPROM52_H_
uchar a_a
;
#define RdCommand 0x01
#define PrgCommand 0x02
#define EraseCommand 0x03
#define Error 1
#define Ok 0
#define WaitTime 0x01
sfr ISP_DATA
=0xe2;
sfr ISP_ADDRH
=0xe3;
sfr ISP_ADDRL
=0xe4;
sfr ISP_CMD
=0xe5;
sfr ISP_TRIG
=0xe6;
sfr ISP_CONTR
=0xe7;
void ISP_IAP_enable(void)
{
EA
= 0;
ISP_CONTR
= ISP_CONTR
& 0x18;
ISP_CONTR
= ISP_CONTR
| WaitTime
;
}
void ISP_IAP_disable(void)
{
ISP_CONTR
= ISP_CONTR
& 0x7f;
ISP_TRIG
= 0x00;
EA
= 1;
}
void ISPgoon(void)
{
ISP_IAP_enable();
ISP_TRIG
= 0x46;
ISP_TRIG
= 0xb9;
_nop_();
}
unsigned char byte_read(unsigned int byte_addr
)
{
EA
= 0;
ISP_ADDRH
= (unsigned char)(byte_addr
>> 8);
ISP_ADDRL
= (unsigned char)(byte_addr
& 0x00ff);
ISP_CMD
= ISP_CMD
& 0xf8;
ISP_CMD
= ISP_CMD
| RdCommand
;
ISPgoon();
ISP_IAP_disable();
EA
= 1;
return (ISP_DATA
);
}
void SectorErase(unsigned int sector_addr
)
{
unsigned int iSectorAddr
;
iSectorAddr
= (sector_addr
& 0xfe00);
ISP_ADDRH
= (unsigned char)(iSectorAddr
>> 8);
ISP_ADDRL
= 0x00;
ISP_CMD
= ISP_CMD
& 0xf8;
ISP_CMD
= ISP_CMD
| EraseCommand
;
ISPgoon();
ISP_IAP_disable();
}
void byte_write(unsigned int byte_addr
, unsigned char original_data
)
{
EA
= 0;
ISP_ADDRH
= (unsigned char)(byte_addr
>> 8);
ISP_ADDRL
= (unsigned char)(byte_addr
& 0x00ff);
ISP_CMD
= ISP_CMD
& 0xf8;
ISP_CMD
= ISP_CMD
| PrgCommand
;
ISP_DATA
= original_data
;
ISPgoon();
ISP_IAP_disable();
EA
=1;
}
#endif
原理图
转载请注明原文地址:https://blackberry.8miu.com/read-4464.html