当前位置: 首页 > news >正文

基于STC15单片机温度光照蓝牙传输-proteus仿真-源程序

一、系统方案
本设计采用STC15单片机作为主控器,液晶1602显示,DS18B20采集温度,光敏电阻采集光照、按键设置温度上下限,测量温度小于下限,启动加热,测量温度大于上限,启动降温。
在这里插入图片描述
二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
uint count=0;
uint16 TempPhoto;
uint8 strPhoto[6];
uint wendu=0;
P3M0 = 0x00;
P3M1 = 0x00;
lcd_init(); //LCD1602初始化
delay_ms(10); //初始化后延时
DisplayListChar(0, 0, table1); //在LCD1602屏第一行显示table1内容
DisplayListChar(0, 1, table2); //在LCD1602屏第二行显示table2内容

InitADC();

InitUart(); //初始化串口
2、液晶显示程序
/**************************************
功能描述:LCD1602写命令函数
入口参数int8 com
返回值:无
***************************************/
void lcd_wcom(uint8 com)
{
lcd1602_rs=0; //选择指令寄存器
lcd1602_rw=0; //选择写
P0=com; //把命令字送入P0
delay_ms(1); //延时一小会儿,让1602准备接收数据
lcd1602_en=1; //使能线电平变化,命令送入1602的8位数据口
lcd1602_en=0;
}

/**************************************
功能描述:LCD1602写数据函数
入口参数:uint8 dat
返回值:无
***************************************/
void lcd_wdat(uint8 dat)
{
lcd1602_rs=1; //选择数据寄存器
lcd1602_rw=0; //选择写
P0=dat; //把要显示的数据送入P0
delay_ms(1); //延时一小会儿,让1602准备接收数据
lcd1602_en=1; //使能线电平变化,数据送入1602的8位数据口
lcd1602_en=0;
}

/**************************************
功能描述:LCD1602初始化函数
入口参数:无
返回值:无
**************************************/
void lcd_init(void)
{
lcd_wcom(0x38); //8位数据,双列,5
7字形
lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁
lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位
lcd_wcom(0x01); //清屏
}

3、按键程序
void keyscan() //按键扫描
{
if(K10) //功能键
{
delayms(5);
if(K1
0)
{
keyflag_1++; //键一按下,标志位加1
if(keyflag_1>3) keyflag_1=0;
lcd_init();
if( keyflag_10)
{
DisplayListChar(0, 0, table1); //在LCD1602屏第一行显示table1内容
DisplayListChar(0, 1, table2); //在LCD1602屏第二行显示table2内容
}
if( keyflag_1
1)
{
DisplayListChar(0, 0, " SET TEMP HIGH");

			} if(	keyflag_1==2){DisplayListChar(0, 0, " SET TEMP LOW");                } while(!K1);}	
}if(keyflag_1!=0)
{			if(K2==0)	//限值加键{		delayms(5);     //按键消除抖动判断if(K2==0){if(keyflag_1==1)   //进入设置模式 {max++;if(max==100) max=0;             }if(keyflag_1==2)   //进入设置模式 {min++;if(min==100) min=0;             }while(!K2);	 	//松手检测}} if(K3==0)		  //限值减键{delayms(5);     //按键消除抖动判断if(K3==0){if(keyflag_1==1)	//进入设置模式 {max--;if(max==0) max=99;             }if(keyflag_1==2)	//进入设置模式 {min--;if(min==0) min=99;             }while(!K3);	//松手检测}} 										
}	

}
/***
4、核心算法程序
int main(void)
{
uint count=0;
uint16 TempPhoto;
uint8 strPhoto[6];
uint wendu=0;
P3M0 = 0x00;
P3M1 = 0x00;
lcd_init(); //LCD1602初始化
delay_ms(10); //初始化后延时
DisplayListChar(0, 0, table1); //在LCD1602屏第一行显示table1内容
DisplayListChar(0, 1, table2); //在LCD1602屏第二行显示table2内容

InitADC();

InitUart(); //初始化串口
Init_DS18B20();

while (1)
{	     keyscan();if(keyflag_1==0){count++;if(count>10)//读取温度值{

wendu=ReadTemperature();
count=0;
}
Disp_Temperature(wendu) ;
memset(strPhoto, 0, sizeof(strPhoto)); //strTemp数组清零
TempPhoto =GetADCResultint(1); //实时读取P1.1通道的AD转换结果
TempPhoto=TempPhoto5.020/1023;

	   strPhoto[0] = TempPhoto/1000+48;             //千位strPhoto[1] = (TempPhoto%1000)/100+48;        //百位strPhoto[2] = (TempPhoto%1000)%100/10+48;        //十位strPhoto[3] = (TempPhoto%10)+48;        //个位//在LCD1602上显示DisplayOneChar(6, 0, strPhoto[0]);         //在LCD1602屏第二行显示千位值  DisplayOneChar(7,0, strPhoto[1]);         //在LCD1602屏第二行显示百位值  DisplayOneChar(8, 0, strPhoto[2]);         //在LCD1602屏第二行显示十位值  DisplayOneChar(9, 0, strPhoto[3]);         //在LCD1602屏第二行显示个位值  DisplayOneChar(10,0,'l');  DisplayOneChar(11,0,'u');  DisplayOneChar(12,0,'x');  }if(keyflag_1==1){DisplayOneChar(6, 1, max/100+0x30);         //在LCD1602屏第二行显示百位值  DisplayOneChar(7,1, max%100/10+0x30);         //在LCD1602屏第二行显示十位值  DisplayOneChar(8, 1, max%10+0x30);         //在LCD1602屏第二行显示个位值  }if(keyflag_1==2){DisplayOneChar(6, 1, min/100+0x30);         //在LCD1602屏第二行显示百位值  DisplayOneChar(7,1, min%100/10+0x30);         //在LCD1602屏第二行显示十位值  DisplayOneChar(8, 1, min%10+0x30);         //在LCD1602屏第二行显示个位值  }SendString("guangz:");SendData( strPhoto[0]);//显示湿度值SendData( strPhoto[1]);SendData( strPhoto[2]);SendData( strPhoto[3]);SendData( 'l');SendData( 'u');SendData( 'x');SendData( 0x0d);SendData( 0x0a);}

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

相关文章:

基于STC15单片机温度光照蓝牙传输-proteus仿真-源程序

一、系统方案 本设计采用STC15单片机作为主控器,液晶1602显示,DS18B20采集温度,光敏电阻采集光照、按键设置温度上下限,测量温度小于下限,启动加热,测量温度大于上限,启动降温。 二、硬件设计 …...

Jmter接口网站压力测试工具

首先下载Jmeter 官方地址:Apache JMeter - Apache JMeter™ 安装Jmeter 把下载的文件进行解压,产生如下目录: 打开bin文件夹下的jmeter.bat文件及进入程序的主界面窗体jmeter.log是日志文件。 主意:需要配置java环境。 jmter创…...

7.2 创建和销毁条件变量

方法 pthread_cond_init(condition, attr) pthread_cond_destroy(condition) pthread_condattr_init(attr) pthread_condattr_destroy(attr) 用法 条件变量的类型为pthread_cond_t,必须在使用之前初始化。有如下两种方法来初始化条件变量: 声明时初…...

九凌网络:谷歌seo优化和外贸建站的五大优势

九凌网络是专注于谷歌SEO和外贸网站建设技术研发的技术型公司。九凌网络为外贸企业提供优质的外贸建站和谷歌优化服务,目前全国合作过的外贸企业超过8000家,覆盖全国12个省,超过60个地级市,在运营的谷歌seo优化客户300多家&#x…...

【vue3/echarts】vue3中使用echarts/饼图/双轴双数据柱状图

npm下载echarts 引入使用 <script> import Box from "/components/box.vue"; import { onMounted } from vue; import { init } from echarts; export default {components: {Box: Box},setup() {onMounted(() > {// 饼图const charEle document.getElem…...

【左程云算法全讲4】比较器和堆

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于左程云算法课程进行的&#xff0c;每个知识点的修正和深入主要参考…...

【计算机组成与设计】Chisel取指和指令译码设计

本次试验分为三个部分&#xff1a; 目录 设计译码电路 设计寄存器文件 实现一个32个字的指令存储器 设计译码电路 输入位32bit的一个机器字&#xff0c;按照课本MIPS 指令格式&#xff0c;完成add、sub、lw、sw指令译码&#xff0c;其他指令一律译码成nop指令。输入信号名…...

「Verilog学习笔记」位拆分与运算

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 1、寄存器的位是可以分开单独运算的&#xff0c;并不是一个输入就一定是一个数据&#xff0c;在很多情况下&#xff0c;一个输入既包括数据又包括地址等其他有效信息 2、需…...

protobufjs实现protobuf序列化与反序列化

系列文章目录 websocket训练地址:https://www.qiulianmao.com,正在搭建中 基础-websocket逆向基础-http拦截基础-websocket拦截基础-base64编码与解码基础-python实现protobuf序列化与反序列化基础-前端js实现protobuf序列化与反序列化基础-protobufjs实现protobuf序列化与反…...

el-select多选以tag展示时,超过显示长度以...省略号显示,且在一行展示

效果&#xff1a; 代码&#xff1a; <span>系统词典维度&#xff1a;</span><el-selectv-model"dNum"placeholder"请选择"multiplecollapse-tags //设置collapse-tags属性将它们合并为一段文字size"small"style"width:160p…...

计算机网络第4章-通用转发和SDN

引子&#xff1a; 在前面&#xff0c;我们将基于目的地转发的特征总结为两个步骤&#xff1a; 查找目的IP地址&#xff08;匹配&#xff09;&#xff0c;然后将分组发送到有特定输出端口的交换结构&#xff08;“动作”&#xff09;。 但是这种转发特征会带来许多问题&#…...

DDD技术方案落地实践 | 京东云技术团队

1. 引言 从接触领域驱动设计的初学阶段&#xff0c;到实现一个旧系统改造到DDD模型&#xff0c;再到按DDD规范落地的3个的项目。对于领域驱动模型设计研发&#xff0c;从开始的各种疑惑到吸收各种先进的理念&#xff0c;目前在技术实施这一块已经基本比较成熟。在既往经验中总…...

MySQL 案例:update set 和 and 的坑

问题描述 最近碰到到一个奇怪的问题&#xff0c;update 语句执行没有报错&#xff0c;但是没有更新数据&#xff0c;具体有问题的语句类似于如下形式&#xff1a; update test.stu set cname 0 and math 90 and his 80 where id 100; 复制 原因分析 直观上看&#xff…...

VSCode remote-ssh 连接远端服务器失败

系统 Mac os Intel处理器 描述 该问题在上午时还没有&#xff0c;下午突然毫无征兆的发生&#xff0c;当时没有更新vscode&#xff0c;没有更新插件。 分析 网上对于该问题的答案多是说磁盘空间不够vscode不能下载相应插件&#xff0c;我所遇到的并不是这种情况。报的错误多是…...

通达信动量线MTM指标原理详解及MTM底背离选股公式

MTM指标&#xff08;动量线指标&#xff09;用于衡量价格的动量和趋势&#xff0c;以判断未来价格的变化。计算方法很简单&#xff0c;用当前价格减去一段时间&#xff08;通常为12日&#xff09;前的价格&#xff0c;计算得到的差值的正负和大小&#xff0c;可以判断可能的趋势…...

汇编-DUP操作符

DUP操作符使用整数表达式作为计数器&#xff0c; 为多个数据项分配存储空间。 在为字符串或数组分配存储空间时&#xff0c;这个操作符尤其有用&#xff0c;并且可以使用初始化或非初始化数据&#xff1a; .data BYTE 20 DUP(0) ;20个字节&#xff0c;都等于0 BYTE 20 …...

2311C++抽象工厂

1,为啥需要工厂设计模式?工厂设计模式可解决什么问题? 先看一下示例,多态示例. #include <iostream> using namespace std; class Shape { public:Shape() { }virtual void drawShape(){cout << "base draw shape" << endl;} }; class Rectang…...

Lavarel定时任务的使用

系统为window 执行命令(执行一次命令只会根据当前时间运行一次定时任务) php artisan schedule:run创建一个任务类(在Jobs文件夹下面) <?phpnamespace App\Jobs;use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Contract…...

Java开发者的网络安全指南(二)

目录 一、加密和数据保护 二、身份验证和授权 三、Web应用程序安全 四、安全编码实践 五、网络防火墙和入侵检测系统 六、日志和监视 七、漏洞管理 八、安全教育和培训 九、结论 介绍&#xff1a; 简要说明网络安全的重要性和为什么Java开发者需要关注它。 一、加密…...

Python基础学习016__UnitTest

# UnitTest是python自带的一个单元测试框架,不需要额外安装 # 也是自动化脚本执行框架,使用UnitTest来管理,运行多个框架 # 为什么使用:能够组织多个用例去执行.提供了丰富的断言方法,能够生成测试报告 # 核心要素: # Testcase:测试用例:这个测试用例是UnitTest的组成部分,不是…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...