数字温度计

本文介绍了一项使用STM32F103C8T6微控制器通过RTC读取内部时钟,并结合AHT20传感器获取温度和湿度,通过OLED显示屏显示的实验。实验涵盖了STM32的RTC配置、SPI/I2C接口操作、串口通信、AHT20传感器通信以及OLED显示控制等多个方面,旨在提升对嵌入式系统时钟管理、数据采集和显示能力的理解。
摘要由CSDN通过智能技术生成

一.实验内容:

阅读资料了解 STM32F103的RTC(实时时钟)原理,使用带SPI或IIC接口的OLED屏显模块实现以下功能:

1) 读取STM32F103C8T6 内部的时钟(年月日时分秒),日历(星期x),1秒周期,通过串口输出到PC上位机,;

2) 读取AHT20的温度和湿度,通过OLED,把年月份时分秒、日历和实时温度、湿度显示出来,2秒周期。

二.实验目的:

1) 理解并配置 STM32F103C8T6 的 RTC (实时时钟) 模块,实现对内部时钟的读取和日历信息的获取。

2) 了解并配置 SPI/I2C 接口,连接并操作 OLED 屏显模块,实现时间、日期、温度和湿度的显示。

3) 使用串口通信将 STM32F103C8T6 的内部时钟信息传输到 PC 上位机上,以便进一步分析和处理。

4) 了解并配置 AHT20 温湿度传感器的通信接口,实现温度和湿度的读取。

5) 掌握数据处理和显示控制的技巧,将获取到的时间、日期、温度和湿度信息在 OLED 屏显模块上进行实时显示。

三.实验具体步骤:

温度传感器

OLED显示屏——SSD1360

OLED是一种采用自发光原理的显示技术,在高对比度、响应速度快和低功耗等方面具有优势。SSD1306是一种常用的OLED控制芯片,主控器可以通过其提供的I2C或SPI接口与之通信。SSD1306支持多种分辨率设置和颜色显示,并具有一些特殊功能,例如显示缓冲区、屏幕翻转和亮度调节等。OLED广泛应用于便携设备、智能穿戴设备、电子产品、工业控制、车载显示等领域。

STM32F103C8T6

STM32F103C8T6属于STM32F1系列,其采用了ARM Cortex-M3内核,拥有最高72MHz的工作频率。该芯片提供了64KB的闪存和20KB的SRAM,并配备了丰富的外设资源,包括通用定时器、PWM输出、多种通信接口等。此外,它还具备大量的GPIO引脚,为用户提供了灵活的连接能力。STM32F103C8T6的供电电压范围为2.V至3.6V,可在-40℃至+85℃的工作温度范围内正常运行。由于其性能和价格的平衡,该芯片在嵌入式系统、物联网、工业控制以及自动化等领域得到了广泛应用。

软件设计:

     先初始化STM32微控制器、AHT20传感器和SSD1306 OLED显示屏,建立它们之间的通信连接。然后利用STM32微控制器读取AHT20传感器的温度和湿度数据。再使用STM32内部时钟或外部时钟模块,获取当前时间。对获取到的温度、湿度和时间数据进行处理,以确保数据的准确性和可用性。最后将处理后的数据通过SSD1306 OLED显示屏实时展示,包括时间、温度和湿度信息。 通过循环结构,持续更新和刷新显示的数据,以确保数据保持实时性。

      通过这样的硬件和软件设计,我们能够实现STM32微控制器与OLED显示屏协同工作,呈现实时的时间、温度和湿度信息。这个设计旨在帮助用户便捷获取环境信息,实现实时监测和调整。同时,展示了STM32微控制器和OLED显示屏的强大功能和灵活性,为用户提供了一个实用而易于操作的解决方案。

实验代码:

AHT20代码:

/*******************************************/
/*@????:??????????          */
/*@??:?????????                */
/*@??:V1.2                              */
/*******************************************/
//#include "main.h" 
#include "AHT20.h" 
#include "gpio.h"
#include "i2c.h"


void Delay_N10us(uint32_t t)//????
{
  uint32_t k;

   while(t--)
  {
    for (k = 0; k < 2; k++);//110
  }
}

void SensorDelay_us(uint32_t t)//????
{
        
    for(t = t-2; t>0; t--)
    {
        Delay_N10us(1);
    }
}

void Delay_4us(void)        //????
{    
    Delay_N10us(1);
    Delay_N10us(1);
    Delay_N10us(1);
    Delay_N10us(1);
}
void Delay_5us(void)        //????
{    
    Delay_N10us(1);
    Delay_N10us(1);
    Delay_N10us(1);
    Delay_N10us(1);
    Delay_N10us(1);

}

void Delay_1ms(uint32_t t)        //????
{
   while(t--)
  {
    SensorDelay_us(1000);//??1ms
  }
}


//void AHT20_Clock_Init(void)        //????
//{
//    RCC_APB2PeriphClockCmd(CC_APB2Periph_GPIOB,ENABLE);
//}

void SDA_Pin_Output_High(void)   //?PB7????? , ???????, PB7??I2C?SDA
{
    GPIO_InitTypeDef  GPIO_InitStruct;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//????
    GPIO_InitStruct.Pin = GPIO_PIN_7;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOB

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值