毕设项目 单片机智能宠物屋(AT89C51、DS18B20、LCD1602、电机)

一、电路设计

此电路由AT89C51、LCD1602液晶屏、DS18B20温度模块和电机等组成得智能宠物屋。

实现功能:

1.按键按下实现电机转动模拟投放食物。

2.当温度大于30°电风扇打开,并声音报警。

3.当亮度低于100勒克斯,打开电灯。

二、运行结果

三、部分代码

#include
#include "DHT11.h"
#include "lcd1602.h"
#include "ADC0832.h"

sbit led=P3^7;		//LED
sbit key=P3^0;		//按键
sbit speak=P3^1;  	//喇叭
sbit motor=P3^2;	//通风
sbit motor2=P3^3;	//喂食

//主函数
void main()
{
	TMOD|=0X11;//定时器设置
	TH0=0X3C;
	TL0=0XB0;	
	ET0=1;
	TR0=1;
	EA=1;		
	init_1602();
	speak = 0;
	motor2 = 0;
	
	while(1)
	{
		// 按键喂食
		if(!key)
		{
			delay(100);
			if(!key)
			{
				motor2=1;
				delay_ms(1000);
				motor2=0;	
			}
		}

		//温度报警
		if(wen > 30)
		{
			// 
			speak = 0;
			delay_ms(800);
			speak = 1;
			delay_ms(800);
			speak = 0;

			motor = 0;
		}
		else
		{
			motor = 1;
		}

		// 光照亮度
		if(guang < 100)
		{
			 led = 1;
		}
		else
		{
			 led = 0;
		}
	}
}

项目获取:

https://gitee.com/feifei1122/simulation-project

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现atc89c51单片机ds18b20温度传感器LCD1602显示温度,你需要进行如下步骤: 1. 确保你有一个atc89c51单片机ds18b20温度传感器以及LCD1602液晶显示屏。 2. 连接ds18b20温度传感器到atc89c51单片机,你需要将ds18b20的VCC引脚连接到atc89c51单片机的5V电源引脚,GND引脚连接到atc89c51单片机的GND引脚,DQ引脚连接到atc89c51单片机的任意一个IO引脚。 3. 编写atc89c51单片机的程序,读取ds18b20温度传感器的数据并将其显示在LCD1602液晶屏幕上。以下是一个简单的示例程序: ```c #include <reg52.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define uchar unsigned char #define uint unsigned int #define DS18B20_IO P3_7 uchar TH, TL; // 温度存储变量 // DS18B20相关函数 uchar Init_DS18B20(void); void Write_DS18B20(uchar dat); uchar Read_DS18B20(void); void Read_Temperature(void); // LCD1602液晶显示屏相关函数 void delay(uchar ms); void LCD_Write_Cmd(uchar cmd); void LCD_Write_Data(uchar dat); void LCD_Init(void); void LCD_Show_String(uchar x, uchar y, uchar *str); void LCD_Show_Temperature(uchar x, uchar y); void main() { // 初始化ds18b20温度传感器 Init_DS18B20(); // 初始化LCD1602液晶显示屏 LCD_Init(); while (1) { // 读取温度数据 Read_Temperature(); // 显示温度数据到LCD1602液晶显示屏 LCD_Show_Temperature(0, 0); } } // 初始化DS18B20 uchar Init_DS18B20(void) { uchar flag; // 复位DS18B20 DS18B20_IO = 0; delay(500); DS18B20_IO = 1; delay(60); // 判断DS18B20是否存在 flag = DS18B20_IO; delay(500); // 返回DS18B20存在标志 return flag; } // 向DS18B20写入一个字节的数据 void Write_DS18B20(uchar dat) { uchar i; for (i = 0; i < 8; i++) { DS18B20_IO = 0; DS18B20_IO = dat & 0x01; delay(5); DS18B20_IO = 1; dat >>= 1; } } // 从DS18B20读取一个字节的数据 uchar Read_DS18B20(void) { uchar i, dat = 0; for (i = 0; i < 8; i++) { DS18B20_IO = 0; dat >>= 1; DS18B20_IO = 1; if (DS18B20_IO) { dat |= 0x80; } delay(5); } return dat; } // 读取温度数据 void Read_Temperature(void) { uchar TL, TH; // 初始化DS18B20 Init_DS18B20(); // 发送跳过ROM指令 Write_DS18B20(0xCC); // 发送温度转换指令 Write_DS18B20(0x44); // 等待转换完成 while (!Read_DS18B20()); // 初始化DS18B20 Init_DS18B20(); // 发送跳过ROM指令 Write_DS18B20(0xCC); // 发送读取温度指令 Write_DS18B20(0xBE); // 读取温度值 TL = Read_DS18B20(); TH = Read_DS18B20(); // 计算温度值 TL >>= 4; TH >>= 4; TH <<= 4; TH |= TL & 0x0F; TH <<= 1; // 存储温度值 TL = Read_DS18B20(); TH |= Read_DS18B20() << 8; // 存储温度值到全局变量中 TL >>= 4; TH |= TL << 8; TH >>= 1; } // 延时函数,延时ms毫秒 void delay(uchar ms) { uint i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 110; j++); } } // 向LCD1602写入命令 void LCD_Write_Cmd(uchar cmd) { P2 &= 0x0F; P2 |= cmd & 0xF0; P2 &= 0xFC; P2 |= 0x01; delay(1); P2 &= 0xFE; delay(5); } // 向LCD1602写入数据 void LCD_Write_Data(uchar dat) { P2 &= 0x0F; P2 |= dat & 0xF0; P2 |= 0x04; P2 &= 0xFD; P2 |= 0x01; delay(1); P2 &= 0xFE; delay(5); } // 初始化LCD1602液晶显示屏 void LCD_Init(void) { LCD_Write_Cmd(0x38); LCD_Write_Cmd(0x0C); LCD_Write_Cmd(0x06); LCD_Write_Cmd(0x01); } // 在LCD1602液晶显示屏上显示字符串 void LCD_Show_String(uchar x, uchar y, uchar *str) { uchar i; if (y == 0) { LCD_Write_Cmd(0x80 + x); } else { LCD_Write_Cmd(0xC0 + x); } for (i = 0; str[i] != '\0'; i++) { LCD_Write_Data(str[i]); } } // 在LCD1602液晶显示屏上显示温度值 void LCD_Show_Temperature(uchar x, uchar y) { uchar buf[16]; sprintf(buf, "Temperature: %d.%dC", TH >> 4, TH & 0x0F); LCD_Show_String(x, y, buf); } ``` 4. 上传程序到atc89c51单片机,并将ds18b20温度传感器和LCD1602液晶屏幕连接到atc89c51单片机。 5. 启动atc89c51单片机,你应该能够看到LCD1602液晶屏幕上显示温度值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值