利用51单片机控制土壤湿度传感器检测土壤湿度并显示湿度数据在LCD1602屏C语言详细代码
时间: 2024-05-28 09:08:33 浏览: 83
注:本代码是基于51单片机和LCD1602屏幕的C语言代码,用于控制土壤湿度传感器检测土壤湿度并显示湿度数据。本代码仅供参考,如有不对之处,欢迎指正。
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define SDA P2_0
#define SCL P2_1
#define ADDR 0x90
sbit RS=P1^0;
sbit RW=P1^1;
sbit E=P1^2;
uchar code str[]="Soil Humidity:";
void delay(uint t)
{
while(t--);
}
void IIC_start()
{
SDA=1;
_nop_();
SCL=1;
_nop_();
SDA=0;
_nop_();
SCL=0;
_nop_();
}
void IIC_stop()
{
SDA=0;
_nop_();
SCL=1;
_nop_();
SDA=1;
_nop_();
SCL=0;
_nop_();
}
uchar IIC_ack()
{
uchar ack_bit;
SDA=1;
_nop_();
SCL=1;
_nop_();
ack_bit=SDA;
SCL=0;
_nop_();
return ack_bit;
}
void IIC_write_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
SDA=dat&0x80;
_nop_();
SCL=1;
_nop_();
SCL=0;
_nop_();
dat<<=1;
}
IIC_ack();
}
uchar IIC_read_byte()
{
uchar i,dat=0;
SDA=1;
for(i=0;i<8;i++)
{
dat<<=1;
SCL=1;
_nop_();
dat|=SDA;
SCL=0;
_nop_();
}
return dat;
}
void write_com(uchar com)
{
RS=0;
RW=0;
E=1;
P2=com;
delay(200);
E=0;
}
void write_data(uchar dat)
{
RS=1;
RW=0;
E=1;
P2=dat;
delay(200);
E=0;
}
void init_lcd()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void write_str(uchar x,uchar y,uchar *str)
{
uchar i;
if(y) x+=0x40;
write_com(x|0x80);
for(i=0;str[i];i++)
{
write_data(str[i]);
}
}
void main()
{
uchar humi;
uchar humi_high,humi_low;
init_lcd();
write_str(0,0,str);
while(1)
{
IIC_start();
IIC_write_byte(ADDR);
IIC_write_byte(0x00);
IIC_start();
IIC_write_byte(ADDR+1);
humi_high=IIC_read_byte();
IIC_ack();
humi_low=IIC_read_byte();
IIC_ack();
IIC_stop();
humi=(humi_high<<8)|humi_low;
humi=humi*100/1024;
write_com(0x80+0x0d);
write_data(humi/10+'0');
write_data(humi%10+'0');
write_data('%');
delay(500);
}
}
阅读全文