基于51单片机蓝牙智能控制风扇-proteus仿真-源程序

news2024/11/27 6:21:38

基于51单片机蓝牙智能控制风扇-proteus仿真-源程序
一、系统方案
1、本设计采用51单片机作为主控器。
2、DS18B20采集温度值送到液晶1602显示。
3、按键设置上下限,自动模式,低于下限,风扇不启动,下限到上限之间,风扇1档,大于上限风扇2档。
4、手动模式,按键控制档位切换。
5、蓝牙模式,手机APP控制档位切换。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化

void lcd_init()//液晶初始化函数*
{
uchar a;
write_1602com(0x38);//设置液晶工作模式,意思:162行显示,57点阵,8位数据
write_1602com(0x0c);//开显示不显示光标
write_1602com(0x06);//整屏不移动,光标自动右移
write_1602com(0x01);//清显示

write_1602com(0x80);//日历显示固定符号从第一行第1个位置之后开始显示
for(a=0;a<16;a++)
{
	write_1602dat(tab1[a]);//向液晶屏写日历显示的固定符号部分
	delay(3);
}
write_1602com(0x80+0x40);//时间显示固定符号写入位置,从第2个位置后开始显示
for(a=0;a<16;a++)
{
	write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号
	delay(3);
}

}
2、液晶显示程序
void write_1602com(uchar com)//液晶写入指令函数
{
RS=0;//数据/指令选择置为指令
rw=0; //读写选择置为写
LCD1602=com;//送入数据
delay(1);
EN=1;//拉高使能端,为制造有效的下降沿做准备
delay(1);
EN=0;//en由高变低,产生下降沿,液晶执行命令
}

void write_1602dat(uchar dat)//液晶写入数据函数*
{
RS=1;//数据/指令选择置为数据
rw=0; //读写选择置为写
LCD1602=dat;//送入数据
delay(1);
EN=1; //en置高电平,为制造下降沿做准备
delay(1);
EN=0; //en由高变低,产生下降沿,液晶执行命令
}

3、按键程序
void KEY()
{
//功能键
if(SET==0)
{

	delay(10);
	if(SET==0)
	{
		Mode++;
		if(Mode==3)
		Mode=0;
	
	}
	while(SET==0)
	{
		if(Mode==0)
			{
			//	write_1602com(0x80+0x40+6);
				write_1602com(0x0c);
			}	
		else if(Mode==1)
			{
				write_1602com(0x80+0x40+4);
				write_1602com(0x0f);
			}	
		else
			{
				write_1602com(0x80+0x40+13);
				write_1602com(0x0f);
			}							
	}
}
//增加
if(ADD==0&&Mode==1)
{

	delay(10);
	if(ADD==0)	
	{
		TH++;
		if(TH>=99)	
		TH=99;
		write_1602com(0x80+0x40+3);
		write_1602dat(TH/10+0x30);
		write_1602dat(TH%10+0x30);
		write_1602com(0x80+0x40+4);	
		
	}
	while(ADD==0);
	
}
//减少
if(DEC==0&&Mode==1)
{
	
	delay(10);
	if(DEC==0)
	{
		TH--;
		if(TH==TL)	
		TH=TL+1;
		write_1602com(0x80+0x40+3);
		write_1602dat(TH/10+0x30);
		write_1602dat(TH%10+0x30);
		write_1602com(0x80+0x40+4);	
		
	}
	while(DEC==0);
}
if(ADD==0&&Mode==2)
{
	
	delay(10);
	if(ADD==0)	
	{
		TL++;
		if(TL==TH)	
		TL=TH-1;
		write_1602com(0x80+0x40+12);
		write_1602dat(TL/10+0x30);
		write_1602dat(TL%10+0x30);
		write_1602com(0x80+0x40+13);	
	
	}
	while(ADD==0);
	
}
//减少
if(DEC==0&&Mode==2)
{

	delay(10);
	if(DEC==0)
	{
		TL--;
		if(TL<=0)	
		TL=0;
		write_1602com(0x80+0x40+12);
		write_1602dat(TL/10+0x30);
		write_1602dat(TL%10+0x30);
		write_1602com(0x80+0x40+13);	
	
	}
	while(DEC==0);		
}
//增加
if(key1==0)
{

	delay(10);
	if(key1==0)	
	{
		//led=!led;
		number++;
		if(number>2) number=0;
		dangwei2 = 0;
		PWM2=1;
		TR0=0;
		pwm1(0); //控制PWM输出,进而控制电机的速度
	}
	while(key1==0);
	
}
if(key2==0)
{

	delay(10);
	if(key2==0)	
	{
		s1num++;
		if(s1num>2) s1num=0;
	}
	while(key2==0);
	
}

}
4、核心算法程序
if(number0)
{
led1=1;led2=1;
}
if(number
1)
{
led1=0;led2=1;
}
if(number2)
{
led1=1;led2=0;
}
if(number
1)
{
if(receiveData==‘1’)
{
dangwei2 = 1;

		   PWM2=0;
		   TR0=1;
		   pwm1(50); //控制PWM输出,进而控制电机的速度
			}
		 if(receiveData=='2')
			{
			    dangwei2 = 2;

		    PWM2=0;
		   TR0=1;
		  pwm1(100); //控制PWM输出,进而控制电机的速度
			}
			if(receiveData=='0')
			{
			    dangwei2 = 0;

		    PWM2=1;
		   TR0=0;
		  pwm1(0); //控制PWM输出,进而控制电机的速度
			}
		}	
	 if(number==2)
		{
			 if(s1num==1)
			{
			     dangwei2 = 1;

		   PWM2=0;
		   TR0=1;
		   pwm1(50); //控制PWM输出,进而控制电机的速度
			}
		  if(s1num==2)
			{
			    dangwei2 = 2;

		    PWM2=0;
		   TR0=1;
		  pwm1(100); //控制PWM输出,进而控制电机的速度
			}
			 if(s1num==0)
			{
			    dangwei2 = 0;

		    PWM2=1;
		   TR0=0;
		  pwm1(0); //控制PWM输出,进而控制电机的速度
			}
		}		

四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1188442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源知识库软件xwiki在Windows下的安装

文章目录 开源知识库软件-xwiki在windows上的部署0、参考文档1、前置环境准备1.1、Windows版本及系统配置1.2、JDK11安装1.3、Tomcat9安装1.4、MySQL5.7数据库的安装 2、xwiki安装3、配置3.1、修改配置支持对文档内容进行搜索 4、问题解决4.1、附件无法上传问题4.1、附件无法下…

快速搭建开源分布式任务调度系统DolphinScheduler并远程访问

使用Docker部署开源分布式任务调度系统DolphinScheduler 文章目录 使用Docker部署开源分布式任务调度系统DolphinScheduler前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinSchedu…

如何选择一个向量数据库|Qdrant Cloud v.s. Zilliz Cloud

随着向量数据库的热度不断攀升&#xff0c;越来越多人开始关注到这一赛道&#xff0c;传统数据库和检索系统也在快速集成专门的向量检索插件方面展开角逐。Qdrant 因其易用性和用户友好的开发者文档&#xff0c;面世不久即获得关注。 Qdrant 以 Rust 语言构建&#xff0c;提供 …

如何在OpenWRT上安装SFTP并实现公网远程文件传输

文章目录 前言 1. openssh-sftp-server 安装2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我们将在OpenWRT上安装SFTP服务&#xff0c;并结合cpolar内网穿透&#xff0c;创建安全隧道映射22端口&#xff0c;实现在公网环境下远程OpenWRT SFTP&#xf…

基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. RGB与HSV色彩空间 4.2. RGB到HSV转换原理 5.算法完整程序工程 1.算法运行效果图预览 将FPGA的仿真结果导入到matlab中&#xff1a; 2.算法运行软件版本 vivado2019.2 matlab2022a …

Leetcode-394 字符串解码(不会,复习)

此题不会&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 题解思路&#xff1a;元组思想&#xff1a;数字[字符串]&#xff0c;每次遇到中括号意味着要重复数字次字符串…

conda清华源安装cuda12.1的pytorch

使用pytorch官方提供的conda command奇慢无比&#xff0c;根本装不下来&#xff08;科学的情况下也这样&#xff09; 配置一下清华源使用清华源装就好了 清华源&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ 配置方法&#xff1a;conda config --…

OpenAI 工程师平均薪酬 92.5 万美元;SpaceX 明年将每两天发射一次丨 RTE 开发者日报 Vol.81

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

【Git企业开发】第六节.配置 Git和标签管理

文章目录 前言一、配置 Git 1.1 忽略特殊文件 1.2 给命令配置别名二、标签管理 2.1 理解标签 2.2 创建标签 2.3 操作标签 总结 前言 一、配置 Git 1.1 忽略特殊文件 在日常开发中&#xff0c;我们有些文件不想或者不应该提交到远端&#xff0c;…

HGHAC4.2.1开启DCS Failsafe Mode的步骤

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.8 文档用途 本文档用于介绍hghac4.2.1版本开启dcs failsafe mode的步骤及验证方法 详细信息 一、新增功能说明 Hghac4.2.1封装自patroni3.…

嵌入式养成计划-51----ARM--ARM汇编指令--内存读写指令--程序状态寄存器传输指令--软中断指令--混合编程

一百二十七、内存读写指令 通过内存读写指令可以实现向内存中写入指定数据或者读取指定内存地址的数据 127.1 单寄存器内存读写指令 将一个寄存器中的数值写入到内存&#xff0c;或者从内存中读取数据放在某一个指定寄存器中 127.1.1 指令码和功能 1. 向内存中写&#xff…

求极限问题:x趋于0时的等价替换及其适用条件、洛必达法

x趋于0时的等价替换及其适用条件 等价无穷小的定义&#xff1a; 若 lim ⁡ β α 1 \lim\dfrac{\beta}{\alpha}1 limαβ​1&#xff0c;则 β \beta β 与 α \alpha α 是等价无穷下的&#xff0c;记作 α ∼ β \alpha \sim \beta α∼β. 即当两个函数相比取极限&…

数据结构与算法(Java版) | 万字详解算法的时间复杂度

下面我们用一个问题来引出算法的时间复杂度这一概念。 该问题是&#xff0c;怎么去衡量一个程序&#xff08;或者算法&#xff09;的执行时间呢&#xff1f;就拿我们刚刚讲的排序算法来说&#xff0c;排序算法这么多&#xff0c;你又如何知晓哪一个排序算法执行的时间谁长谁短…

【ElasticSearch系列-07】ES的开发场景和索引分片的设置及优化

ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Quer…

如何制作产品图册?教你一招,轻松制作

制作产品图册是许多企业都会做的一项工作&#xff0c;它可以帮助企业更好地展示自己的产品&#xff0c;提高品牌形象和销售业绩。但是&#xff0c;如何制作一本高质量的产品图册呢&#xff1f;今天&#xff0c;我就来分享一些实用的技巧和方法&#xff0c;帮助你轻松制作一本精…

java实现前后端分离文件下载

前言&#xff0c;这里用的是springbootvue前后端分离 首先我们把需要下载的文件放入到resource目录下面 RestController RequestMapping("/excelDown") Slf4j public class InvestExcelDownController {//下载模板PostMapping("/download")public void dow…

SOME/IP 协议介绍(三)参数和数据结构的序列化

参数和数据结构的序列化 序列化是基于接口规范定义的参数列表。为了允许服务接口的迁移&#xff0c;反序列化&#xff0c;代码应忽略附加在先前已知的参数列表末尾的参数&#xff1b;也就是说&#xff0c;忽略在用于生成或参数化反序列化代码的接口规范中未定义的参数。 接口…

java动态设置注解值

描述&#xff1a;在运行时根据需求更改注解中的值 一、步骤 1.定义类 public class CadreListQueryDTO extends CadreBaseQueryDTO {/*** 出国事由*/QueryField(field "A21.a2114",type QueryField.LIKE)private String a2114; }2.定义方法进行动态设置 /*** 动…

Maven 从入门到精通

目录 一. 前言 二. Maven 下载与安装 2.1. 下载 2.2. 安装 三. Maven 核心概念 3.1. POM 3.2. 约定的目录结构 3.3. 坐标 3.4. 依赖管理 3.4.1. 直接依赖和间接依赖 3.4.2. 依赖的排除 3.4.3. 统一的版本管理 3.4.4. 依赖范围 3.5. 仓库 3.6. 生命周期/插件/目标…

去中心化数据云项目Oort主网即将上线

备受期待的去中心化数据云项目Oort&#xff0c;今日已通过官方X账号官宣&#xff0c;将于纽约时间11月27日正式上线主网Olympus Protocol。届时&#xff0c;用户也能够通过Oort的Ale Wallet钱包和开发者API使用主网&#xff0c;并可通过OORT浏览器查询交易和合约&#xff0c;开…