基于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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

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

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

相关文章

开发知识点-PHP从小白到拍簧片

从小白到拍簧片 位异或运算(^ )引用符号(&)strlen() 函数base64_encode预定义 $_POST 变量session_start($array);操作符php 命令set_time_limit(7200)isset()PHP 命名空间(namespace)new 实例化类extends 继承 一个类使用另一个类方法error_reporti…

长短期神经网络LSTM的博文分类,长短期神经网络的原理分析

目录 背影 摘要 代码和数据下载:长短期神经网络LSTM的博文分类,长短期神经网络微博博文分类(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88498278 LSTM的基本定义 LSTM实现的步骤 长短期神经网络LSTM的博文分类,长短期神经网络微…

shell脚本使用sudo命令如何避免输入密码

在shell脚本中,可以通过sudo命令的-S选项和echo命令的管道符号结合使用,避免在执行sudo命令时输入密码。具体步骤如下: 在脚本中需要使用sudo命令的地方,加上-S选项,例如: sudo -S command在执行脚本时&…

手机常识:手机卡丢了该怎么补办?三大运营商的补卡攻略来了!

相信很多朋友都有过手机卡丢失的情况,那么手机卡丢失之后,我们该怎么补办呢?目前来讲,线上线下都可以进行流量卡补办,具体的补卡攻略小编给你放在下面了。 ​ 为了方便大家了解,小编把三大运营商的补卡方法…

OpenCV C++ 图像处理实战 ——《基于NCC多角度多目标匹配》

OpenCV C++ 图像处理实战 ——《基于NCC多角度多目标匹配》 一、结果演示二、NCC模板匹配2.1、OpenCV matchTemplate2.2、多角度2.3、多目标2.4、NMS非极大值抑制三、代码实现3.1 制作模板3.1 单目标匹配3.1.1 模板图像旋转3.1.2 旋转目标坐标3.2 多目标匹配3.2.1 制作模板3.2.…

清华软院2024届推免拟录取名单

名单 直博生 硕士生 分析 清华软院2024届共录取推免硕士生68人,其中 专硕085405软件工程 59人,学硕083500软件工程9人;推免直博生 15人 和贵系相比难度要低很多哦! 欢迎关注我的公众号 “程序员小风学长”,会定期进…

一、Hadoop初始化配置(final+ubuntu保姆级教程)

1、配置虚拟机 三台虚拟机,分别为node1、node2、node3,内存分别为4G、2G、2G,现存最好为(>40G),如下: 2、修改主机名 分别打开三台虚拟机,root用户输入一下命令: no…

Android 13.0 启动app时设置密码锁

1.前言 在13.0的系统产品开发中,对于限制某些app的启动的功能中,在项目中的需求是在点击app启动的时候,根据包名设置密码锁,当输入正确的密码的时候来启动这个app,否则 就不能启动这个app,达到限制使用app的目的,这就需要在app启动的时候,检测app的包名,然后在app启动…

随笔--解决ubuntu虚拟环境的依赖问题

文章目录 问题一:在conda虚拟环境中报错ImportError: libcupti.so.11.7:cannot open shared object file: No such file or directory解决步骤问题二: RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling cublasSgemmStridedBatched( …

使用R语言构建HTTP爬虫:IP管理与策略

目录 摘要 一、HTTP爬虫与IP管理概述 二、使用R语言进行IP管理 三、爬虫的伦理与合规性 四、注意事项 结论 摘要 本文深入探讨了使用R语言构建HTTP爬虫时如何有效管理IP地址。由于网络爬虫高频、大量的请求可能导致IP被封禁,因此合理的IP管理策略显得尤为重要…

odoo16 one2many字段的 domain

最近在odoo project模块的基础上做二开,给task表加了一个版本字段version_id,然后重写了 project表的Task_ids, 并且增加了一个domain,结果折腾了大半天才搞定 写法1 这也是最初的写法: version_id fields.Many2one("hx.p…

2023-11-06 LeetCode每日一题(最大单词长度乘积)

2023-11-06每日一题 一、题目编号 318. 最大单词长度乘积二、题目链接 点击跳转到题目位置 三、题目描述 给你一个字符串数组 words ,找出并返回 length(words[i]) * length(words[j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个…

如何在 Unbuntu 下安装配置 Apache Zookeeper

简介 Zookeeper 是 apache 基金组织下的项目,项目用于简单的监控和管理一组服务,通过简单的接口就可以集中协调一组服务,如配置管理,信息同步,命名,分布式协调。 准备工作 Ubuntu 23.04 或者 20.04访问…

ubuntu挂载共享目录的方法

ubuntu挂载共享目录的方法 安装NFS配置NFS 安装NFS sudo apt-get install nfs-kernel-server配置NFS 创建work共享目录:(本人将此文件放在桌面)sudo mkdir worksudo gedit /etc/exports添加: /home/zynq/Desktop/work *(rw,sync,no_root_squash,no_subtree_check)运行以下命…

Pycharm-community-2021版安装和配置

一、下载Pycharm-community-2021 1.从官网下载pycharm-community Pycharm 版本官网 二、安装PyCharm 1.打开下载完成的安装包,点击Next 2.安装PyCharm到其他位置,点击Next 3.一定把更新PATH变量勾上,可以创建桌面快捷方式,创建关联,最后…

C++ 信息学奥赛 2046:【例5.15】替换字母

#include<cstdio> #include<iostream> using namespace std; int main() { char st[200];char A,B; int n0;while((st[n]getchar())!\n); //将原文存放在字符数组st中,并且要注意上述的最后分号 Agetchar();getchar();Bgetchar(); //读取A和B&#xff0c;中间get…

【漏洞复现】weblogic-10.3.6-‘wls-wsat‘-XMLDecoder反序列化(CVE-2017-10271)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描nacsweblogicScanner3、漏洞验证 说明内容漏洞编号CVE-2017-10271漏洞名称Weblogic < 10.3.…

Linux C/C++下抓包分析mysql流量(协议解析)

MySQL通信协议是一个有状态的协议&#xff0c;主要用于MySQL客户端与服务器之间的通信。这个协议在MySQL客户端连接器&#xff08;如Connector/C、Connector/J等&#xff09;、MySQL Proxy以及主从复制中都有实现。 该协议的特性包括&#xff1a;支持SSL、压缩和认证等功能。 …

django REST框架- Django-ninja

Django 是我学习的最早的web框架&#xff0c;大概在2014年&#xff0c;当时选他原因也很简单就是网上资料比较丰富&#xff0c;自然是遇到问题更容易找答案&#xff0c;直到 2018年真正开始拿django做项目&#xff0c;才对他有了更全面的了解。他是一个入门有门槛&#xff0c;学…

后端接口接收对象和文件集合,formdata传递数组对象

0 问题 后端接口需要接收前端传递过来的对象和文件集合&#xff1b;对象中存在数组对象 1 前端和后端 前端只能使用formdata来传递参数&#xff0c;后端不使用RequestBody注解 2 formdata传递数组对象 2.1 多个参数对象数组 addForm: {contactInfo: [{contactPerson: ,…