140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

2023-12-05

资料编号:140

一:功能介绍

1、采用stm32单片机+LCD1602显示屏+独立按键+DHT11传感器+ds1302时钟+光敏传感器+蜂鸣器+LED灯,制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真;

2、通过光敏传感器采集当前的光照强度,显示到LCD1602显示屏上面;

3、通过DHT11传感器采集温湿度,并且显示到LCD1602显示屏上面;

4、通过DS1302时钟记录当前的时间,显示到LCD1602屏幕上面;

5、通过按键设置光照强度和湿度阈值,显示到LCD1602屏幕上面;

6、如果湿度大于设置阈值,蜂鸣器进行提醒可能下雨;当湿度小于等于阈值并且光照强度大于阈值,也就是晴天光照强度高的情况下,自动打开晾衣杆(LED指示灯模拟),反之关闭晾衣杆;

二:仿真演示视频+程序简要讲解:(程序有中文注释,新手容易看懂)

140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

三:设计软件介绍

本设计使用C语言编程设计,程序代码采用keil5编写,程序有中文注释,新手容易看懂,仿真采用Proteus软件进行仿真 演示视频使用的是Proteus8.9版本;资料包里有相关软件包,可自行下载安装。

四:程序打开方法

特别注意:下载资料包以后一定要先解压 !( 建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。

108a3837cbbc86163a1bd056cd1c7e68.png

5481f945895eeb5f07d9acafa7d194df.png

程序部分展示,有中文注释,新手容易看懂
//毫秒级的延时
void delay_ms(u16 time)
{    
   u16 i=0;  
   while(time--)
   {
      i=800;  //自己定义
      while(i--) ;    
   }
}
/*****************DHT11********************/
extern void DHT11_receive( int *h, int *t);
/*****************引脚配置********************/
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOC,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
  //LCD1602 管脚      
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12| GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 |GPIO_Pin_9|GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);  
  //LED
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);    
  //DHT11 
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  GPIO_Init(GPIOB, &GPIO_InitStructure);  
  //按键
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;;
  GPIO_Init(GPIOB, &GPIO_InitStructure);  
  //配置 PA0 ADC采集模式    
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  //LED
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);  


}
/* ADC配置 */
void ADC_Set(void)
{
  ADC_InitTypeDef ADC_InitStructure;//ADC结构体变量//注意在一个语句快内变量的声明要放在可执行语句的前面,否则出错,因此要放在ADC1_GPIO_Config();前面
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2工作在独立模式
  ADC_InitStructure.ADC_ScanConvMode =        DISABLE; //使能扫描
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC转换工作在连续模式
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//由软件控制转换,不使用外部触发
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//转换数据右对齐
  ADC_InitStructure.ADC_NbrOfChannel = 1;//转换通道为1
  ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC   
  ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_28Cycles5);




  
  ADC_Cmd(ADC1, ENABLE);//使能ADC1
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}


int  wendu,shidu,guangqiang;      //保存温度     湿度     光强
int  gz=70,sd=80;// 湿度设定 光强设定
u8 time_data[8];//保存时间的数组   


int nian=12,yue=34,ri=56;//保存年 月 日 
int shi=12,fen=34,miao=56;//保存 
//这里对按键进行扫描
void anjiansaomiao(void)
{
  static u8_t k1,k2,k3,k4;
  static u8_t K1Flag=0,K2Flag=0,K3Flag=0,K4Flag=0;  
  //按键扫描,获取按键状态
  k1 = GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_0);
  k2 = GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_1);
  k3 = GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_2);
  k4 = GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_3);


  //光照设定值+
  //表明按下
  if(k1 == 0)
  {
    K1Flag = 1;
  }
  else
  {
    //释放后进行响应
    if(K1Flag )
    {
      K1Flag = 0;
      gz++; 
      if(gz>99) gz=99;      
    }
  }
  //光照设定值-    
  //表明按下
  if(k2 == 0)
  {
    K2Flag = 1;      
  }
  else
  {
    //释放后进行响应
    if(K2Flag )
    {
      K2Flag = 0;
      gz--;  
        if(gz<0) gz=0;
    }
  }  
  
  
  //湿度设定值+
  //表明按下
  if(k3 == 0)
  {
    K3Flag = 1;
  }
  else
  {
    //释放后进行响应
    if(K3Flag )
    {
      K3Flag = 0;
      sd++; 
        if(sd>99) sd=99;
    }
  }
  //湿度设定值-    
  //表明按下
  if(k4 == 0)
  {
    K4Flag = 1;      
  }
  else
  {
    //释放后进行响应
    if(K4Flag)
    {
      K4Flag = 0;
      sd--;  
        if(sd<0) sd=1;
    }
  }  


    
}


//中断优先级配置
void NVICConfig(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;    
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);


  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;    
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;        //中断源:[15:10],位于“stm32f10x.h”中
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级:1
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;        //子优先级:1
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           //使能中断通道
  NVIC_Init(&NVIC_InitStructure);
}


void Display(void)
{
  char xxx=0,yyy=0;
  //T1 温度
  WrByte1602(0,0,'T'); //.
  WrByte1602(0,1,'='); //.    
  WrByte1602(0,2,AsciiCode[wendu%100/10]);
  WrByte1602(0,3,AsciiCode[wendu%10]);
  WrByte1602(0,4,' ');  
  //T2 湿度
  WrByte1602(0,5,'H'); //.
  WrByte1602(0,6,'='); //.    
  WrByte1602(0,7,AsciiCode[shidu%100/10]);
  WrByte1602(0,8,AsciiCode[shidu%10]);
  WrByte1602(0,9,' ');    
  //T3 光强
  WrByte1602(0,10,'G'); //.
  WrByte1602(0,11,'='); //.    
  WrByte1602(0,12,AsciiCode[guangqiang%1000/100]);  
  WrByte1602(0,13,AsciiCode[guangqiang%100/10]);
  WrByte1602(0,14,AsciiCode[guangqiang%10]);
  WrByte1602(0,15,' ');

:仿真文件(采用Prot e us打开)

71e6a1c34c9e393be04bdf64ce1c318a.png

4d9c22c10cdf6da22d90861b8a3798ac.png

81fac20b269ff2474e8ce411acbf70ae.png

六:资料清单展示(文件中包含的相关资料)

c69635091af067388947941bf8ac6d72.png

资料分享下载链接(可点击) ​​​​​​​

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序 的相关文章

  • Tektronix泰克示波器

    一 what s the oscilloscope ref https www tek com cn blog what is an oscilloscope 二 基础知识 1 带宽 100Mhz 采样率 2 5GS s 1GS s指的是采
  • 第一节:安装

    Node js 命令行的TypeScript编译器可以使用Node js包来安装 安装 npm install g typescript 编译 tsc helloworld ts 由于 无法直接运行TypeScript 所以会将 ts文件
  • 【网络安全】网络安全概念及重要性

    网络安全的定义 网络安全 顾名思义 是指在网络环境中 保护数据和系统免受各种威胁 确保网络服务正常运行 防止网络攻击 防止数据被窃取或篡改 保证网络的可用性 机密性和完整性 简单来说 就是我们要保护我们的网络和网络中的信息不受到不应有的侵害
  • VIM中替换光标所在行文字内容

    s old new g 将光标所在行的所有的old字符替换为new字符 n s old new g 从第n行开始到文件尾 将每一行中的old字符替换为new字符

随机推荐

  • 机器人制作开源方案 | 校园餐具回收分类机器人

    作者 梁桥 吴振宇 凌福海 李清轩 姜晓敏 单位 华北科技学院 指导老师 韩红利 张伟杰 1 场景调研 1 1 项目实施目的 受新冠病毒引起的影响 人们生产生活发生了巨大的改变 现处于疫情防控常态化阶段 为应对点状爆发 减少人员接触 目前在
  • 134-基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真+源程序...

    资料编号 134 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 ds1302时钟 DHT11温湿度 电机 蜂鸣器 制作一个基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真 2 通过DH
  • 迁移学习方法在多媒体数据分析中的应用案例

    随着多媒体数据的快速增长 如何从这些数据中提取有用的信息已成为一个重要的问题 传统的机器学习方法需要大量的标注数据进行训练 但是在实际应用中 标注数据往往很难获取 迁移学习方法可以通过利用已有的知识来解决这个问题 从而在少量标注数据的情况下
  • 2023-12-03-解决libxkbcommon库编译完后图像界面不能使用键盘

    layout post 使用的布局 不需要改 title Ubuntu修复 标题 subtitle 解决libxkbcommon库编译完图形界面不能使用键盘 副标题 date 2023 12 03 时间 author BY ThreeSto
  • 4.OpenResty系列之Nginx负载均衡

    1 负载均衡配置 上篇文章中 代理仅仅指向一个服务器 但是 网站在实际运营过程中 大部分都是以集群的方式运行 这时需要使用负载均衡来分流 nginx 也可以实现简单的负载均衡功能 假设这样一个应用场景 将应用部署在 192 168 1 11
  • 非线性降维方法在高维数据可视化中的应用

    随着数据科学和机器学习的快速发展 我们面临着越来越多的高维数据 高维数据的可视化是理解和分析数据的重要手段之一 然而 传统的可视化方法在高维数据上往往无法有效展示数据的内在结构 为了解决这个问题 非线性降维方法应运而生 本文将探讨非线性降维
  • Android轮播图的画廊效果

    目录 效果图 介绍 使用 导入依赖 自定义属性 xml文件 活动代码 本文仿写百词斩 写在了碎片里 本文使用的是仿写魅族Banner的第三方库 链接在文章末尾 效果图 画廊效果 介绍 在Android中 轮播图的画廊效果通常是指一种类似于画
  • JUnit单元测试

    几乎全是基于JUnit4的 毕竟idea里面默认就是JUnit4 要是有基于JUnit5的会额外标出 框架介绍 1 是一个开源的java语言单元测试框架 2 特点 使用断言 Assertion 测试期望结果 方便组织运行测试 查看测试结果
  • 2023 年,网络安全领域有哪些令人印象深刻的大事件?

    一 美国医疗设备巨头遭到网络攻击 100万人敏感信息被泄露 医疗设备制造商ZOLL表示 1月份的一次网络攻击暴露了超过100万人的敏感信息 在提供给缅因州总检察长的文件中表明 事件始于1月28日 当时他们在其内部网络上 检测到异常活动 可能
  • Python Rich模块:打造绚丽多彩的命令行界面

    概要 在Python编程领域 命令行界面是开发者经常接触的环境之一 然而 传统的命令行界面通常只能呈现简单的文本信息 难以展现丰富的数据和交互效果 幸运的是 有一款名为Rich的Python模块 它能够让我们在命令行界面中创建出绚丽多彩的图
  • 无尘车间装修设计方案

    无尘车间是工业生产中非常重要的一个环节 它能够提供高度洁净的生产环境 保证产品在生产过程中的质量和安全性 因此 无尘车间的装修设计方案对于其使用效果和性能具有至关重要的影响 SICOLAB喜格 将详细介绍无尘车间的装修设计方案 包括设计原则
  • 苍穹分页查询

    controller 员工分页查询 employeeDTO return GetMapping page ApiOperation 员工分页查询 public Result
  • 基于知识图谱的推荐系统设计与优化

    随着互联网的快速发展 推荐系统在各个领域中扮演着重要的角色 然而 传统的推荐系统往往只基于用户行为数据进行推荐 忽略了用户的兴趣和需求之间的关联 为了解决这个问题 基于知识图谱的推荐系统应运而生 本文将探讨基于知识图谱的推荐系统的设计与优化
  • 扩展Spring MVC框架的消息转换器

    扩展Spring MVC框架的消息转换器 param Override protected void extendMessageConverters List
  • nodejs+vue+elementui咖啡商城销售系统qi99g

    现如今 咖啡在线销售是商业贸易中的一条非常重要的途径 可以把其从传统的实体模式中解放中来 网上销售可以为消费者提供巨大的便利 通过咖啡在线销售这个平台 可以使用户足不出户就可以了解现今的咖啡信息 为用户提供了极大的方便 咖啡在线销售的主要功
  • 怎么把视频字幕提取成文本?亲测好用的方法分享

    你是否曾经遇到过这样的问题 想要提取视频中的字幕 却不知道该如何操作 别担心 现在有一些视频字幕提取软件 它们可以帮助我们轻松地提取视频中的字幕 无论是英文还是中文 视频字幕提取软件都可以准确地提取出视频中的字幕文本 并保存为文本文件或复制
  • 视频转文字的app哪个好用?亲测好用的软件分享

    想象一下 当你在观看视频讲座或教学资料时 你希望把老师讲解的重点内容记录下来 以便后续的回顾和整理 但是手动输入文字真的是太麻烦了 这时 视频转文字软件就派上了用场 你只需简单地将视频上传到软件中 它会立即将视频中的对话或讲解转化为文字形式
  • C#8.0本质论第十五章--支持标准查询操作的集合接口

    C 8 0本质论第十五章 支持标准查询操作的集合接口 集合在C 3 0中通过称为语言集成查询 Language Integrated Query LINQ 的一套编程API进行了大刀阔斧的改革 通过一系列扩展方法和Lambda表达式 LIN
  • 大数相乘,限制:不可用 BigInt

    大数相乘 限制 不可用 BigInt 大数相乘 限制 不可用 BigInt 例如 输入 a 11111111111111111111 b 22222222222222222222 返回 246913580246913580241975308
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器