当前位置: 首页 > 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的组成部分,不是…...

飞书远程控机:OpenClaw配置全攻略

本文详细介绍如何通过 OpenClaw 工具对接飞书开放平台&#xff0c;配置智能机器人实现 Windows 电脑的远程控制。主要内容涵盖文件管理和程序启动等核心功能的实现方法&#xff0c;并提供完整的配置指南与常见问题解决方案。 一、使用前提说明 1. 系统要求 仅适用于 Windows…...

3大实战秘籍:揭秘raylib如何让游戏开发像搭积木一样简单

3大实战秘籍&#xff1a;揭秘raylib如何让游戏开发像搭积木一样简单 【免费下载链接】raylib A simple and easy-to-use library to enjoy videogames programming 项目地址: https://gitcode.com/GitHub_Trending/ra/raylib 你是否曾经被复杂的游戏引擎配置搞得焦头烂额…...

LVGL多页面开发避坑:用内部Timer替代轮询,解决页面切换时的内存踩踏问题

LVGL多页面开发中的内存安全实践&#xff1a;用Timer机制替代轮询的工程解决方案 在嵌入式UI开发中&#xff0c;LVGL因其轻量级和跨平台特性成为热门选择。但当项目复杂度提升到多页面交互时&#xff0c;开发者往往会遇到一个棘手问题&#xff1a;如何在频繁切换页面的同时保证…...

全球无障碍宣传日:iOS 26 辅助功能大升级,这些实用小功能你用过吗?

辅助功能发展与升级很多人对辅助功能的印象还停留在 "小白点"&#xff0c;但随着 iPhone 进入全面屏时代&#xff0c;它逐渐变得陌生。实际上&#xff0c;Apple 每年都会为其增添功能&#xff0c;方便身体有障人士使用 iPhone。而且&#xff0c;这些功能不仅惠及有障…...

告别杂乱!用FileMenu Tools 8.4.2一键清理Windows 11右键菜单(附隐藏技巧)

Windows 11右键菜单精简指南&#xff1a;用FileMenu Tools打造高效工作流每次在文件上点击右键时&#xff0c;那个缓慢弹出的冗长菜单是否让你感到烦躁&#xff1f;随着安装的软件越来越多&#xff0c;Windows的右键菜单往往会变得臃肿不堪&#xff0c;严重影响工作效率。今天&…...

基于Cynthion逆向USB协议,为DP100电源开发Linux控制软件

1. 项目概述&#xff1a;用Cynthion嗅探USB&#xff0c;为DP100电源打造Linux软件作为一名长期在Linux环境下折腾硬件和嵌入式开发的爱好者&#xff0c;我经常遇到一个头疼的问题&#xff1a;很多不错的桌面小设备&#xff0c;比如电源、示波器、逻辑分析仪&#xff0c;它们的官…...

如何利用开源工具Unlock-Music解决音乐平台加密格式兼容问题

如何利用开源工具Unlock-Music解决音乐平台加密格式兼容问题 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: https://gi…...

qobuz-dl终极实战指南:专业无损音乐下载工具架构解析与高效应用

qobuz-dl终极实战指南&#xff1a;专业无损音乐下载工具架构解析与高效应用 【免费下载链接】qobuz-dl A complete Lossless and Hi-Res music downloader for Qobuz 项目地址: https://gitcode.com/gh_mirrors/qo/qobuz-dl 在数字音乐时代&#xff0c;追求极致音质的音…...

星露谷物语SMAPI模组加载器:从新手到专家的完整使用指南

星露谷物语SMAPI模组加载器&#xff1a;从新手到专家的完整使用指南 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 星露谷物语SMAPI模组加载器是官方推荐的模组API&#xff0c;它为玩家和开发者提供…...

MNE-Python 第9天学习笔记:源定位基础

一、什么是源定位&#xff1f; 1.1 通俗理解 到目前为止&#xff0c;我们分析的是"头皮上的脑电"&#xff1a;头皮电极 → 记录头皮表面的电位↓这就像在地球表面测量地震波我们想知道的是&#xff1a;震源在哪里&#xff1f;多深&#xff1f;源定位 从头皮电位反推…...