1.2作业

温湿度数据通过中断处理显示到数码管中

main.c

#include "spi.h"

#include"si7006.h"



int main()

{

    int i=0,j=0,m=0,n=0;

    int num[10] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0x3E,0xE0,0xFE,0xF6};

    SPI_init();

   unsigned short hum;

    short tem;

    //进行si7006的初始化

    si7006_init();

    while(1)

    {

    //读取湿度

    hum=si7006_read_hum_data(0X40,0XE5);

    //读取温度

    tem=si7006_read_temp_data(0X40,0XE3);

    //将温度数据和湿度数据按照转换公式进行转换

    hum=125*hum/65536-6;

    tem=175.72*tem/65536-46.85;

    //将获取到的数据打印到串口

     i=hum/10;

     j=hum%10;



    



    m=tem/10;

    n=tem%10;

    for(int s=0;s<5000;s++)

    {

        SPI_write(0x80);  // 发送数码管的位 

    SPI_write(num[i]);  // 发送数码管的段

     NSS_OUTPUT_L();

     delay_ms(1);

    NSS_OUTPUT_H();   // 锁存的时钟从低到高的变化

    SPI_write(0x40);  // 发送数码管的位 

    SPI_write(num[j]);  // 发送数码管的段

     NSS_OUTPUT_L();

     delay_ms(1);

    NSS_OUTPUT_H();   // 锁存的时钟从低到高的变化

        SPI_write(0x20);  // 发送数码管的位 

    SPI_write(num[m]);  // 发送数码管的段

     NSS_OUTPUT_L();

     delay_ms(1);

    NSS_OUTPUT_H();   // 锁存的时钟从低到高的变化

    SPI_write(0x10);  // 发送数码管的位 

    SPI_write(num[n]);  // 发送数码管的段

     NSS_OUTPUT_L();

     delay_ms(1);

    NSS_OUTPUT_H();   // 锁存的时钟从低到高的变化

    }

    



    }



    return 0;

}

spi.c

#include"spi.h"

void delay_us1(unsigned int us)
{
    int i,j;
    for(i=0;i<us;i++)
    {
        for(j=0;j<1;j++);
    }
}
void delay_ms(int ms)
{
    int i,j;
    for(i = 0; i < ms;i++)
        for (j = 0; j < 1800; j++);
}   
void SPI_init(void)
{
     //1.使能GPIOE时钟
    RCC->MP_AHB4ENSETR |= (0x1 << 4);
    //2.MOSI管脚PE14 设置输出的属性
    GPIOE->MODER &=(~(0x3<<28));
    GPIOE->MODER |=(0x1<<28);
    GPIOE->OTYPER |=(0x1<<14);//推挽输出
   GPIOE->OSPEEDR &= (~(0x3 << 28));
    GPIOE->PUPDR &= (~(0x3 << 28));
    //3.MISO管脚PE13 设置输入的属性
    GPIOE->MODER &=(~(0x3<<26));
    GPIOE->OSPEEDR &= (~(0x3 << 26));
    GPIOE->PUPDR &= (~(0x3 << 26));
    //4.SCK管脚PE12  设置输出的属性
    GPIOE->MODER &=(~(0x3<<24));
    GPIOE->MODER |=(0x1<<24);
    GPIOE->OTYPER &= (~(0x1 << 12));
    GPIOE->OSPEEDR &= (~(0x3 << 24));
    GPIOE->PUPDR &= (~(0x3 << 24));
    //5.RCK(NSS)管脚  设置输出的属性
    GPIOE->MODER &=(~(0x3<<22));
    GPIOE->MODER |=(0x1<<22);
    GPIOE->OTYPER &= (~(0x1 << 11));
    GPIOE->OSPEEDR &= (~(0x3 << 22));
    GPIOE->PUPDR &= (~(0x3 << 22));
    //默认PE12和PE11输出低电平,方便产生上升沿
    GPIOE->ODR |=(~(0x3<<11));
}
void SPI_write(unsigned char dat)
{
    unsigned int i;
    for(i=0;i<8;i++)
    {
        if(dat&0X01)
        {
            //输出高电平
            MOSI_OUTPUT_H();
        }
        else
        {
            //输出低电平
           MOSI_OUTPUT_L();
        }
        dat >>= 1;
        //产生上升沿
        SCK_OUTPUT_L();
        delay_us1(5);
        SCK_OUTPUT_H();
        delay_us1(5);
        }

}

spi.h

#ifndef __SPI_H__
#define __SPI_H__

#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
// MOSI对应的引脚输出高低电平的信号PE14
#define  MOSI_OUTPUT_H()    do{GPIOE->ODR |= (0x1 << 14);}while(0)
#define  MOSI_OUTPUT_L()    do{GPIOE->ODR &= (~(0x1 << 14));}while(0)

// 对应595芯片的锁存引脚输出高低电平  PE11
#define  NSS_OUTPUT_H()     do{GPIOE->ODR |= (0x1 << 11);}while(0)
#define  NSS_OUTPUT_L()     do{GPIOE->ODR &= (~(0x1 << 11));}while(0)
    
// 时钟信号对应的引脚输出高低电平  PE12
#define  SCK_OUTPUT_H()     do{GPIOE->ODR |= (0x1 << 12);}while(0)
#define  SCK_OUTPUT_L()     do{GPIOE->ODR &= (~(0x1 << 12));}while(0)

/*
 * 函数功能: SPI初始化函数,推挽输出,高速,禁止上拉和下拉
 * 函数参数:无
 * 函数返回值:无
*/
void SPI_init(void);
/*
 * 函数功能:SPI发送数据的函数
 * 函数参数:dat : 要发送的数据
 * 函数返回值:无
 *
*/
void SPI_write(unsigned char dat);

void delay_us1(unsigned int us);
void delay_ms(int ms);
#endif  // __SPI_H__

数码管不同位显示不同数字---计时器

                ​​​​​​​        ​​​​​​​        ​​​​​​​

main.c

#include "spi.h"

#include"si7006.h"



int main()

{

    int i=0,j=0,m=0,n=0;

    int num[10] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0x3E,0xE0,0xFE,0xF6};

    SPI_init();

 

    while(1)

    {

    for(int s=0;s<260;s++)

    {

    SPI_write(0x80);  // 发送数码管的位 

    SPI_write(num[i]);  // 发送数码管的段

     NSS_OUTPUT_L();

     delay_ms(1);

    NSS_OUTPUT_H();   // 锁存的时钟从低到高的变化

    SPI_write(0x40);  // 发送数码管的位 

    SPI_write(num[j]);  // 发送数码管的段

     NSS_OUTPUT_L();

     delay_ms(1);

    NSS_OUTPUT_H();   // 锁存的时钟从低到高的变化

        SPI_write(0x20);  // 发送数码管的位 

    SPI_write(num[m]);  // 发送数码管的段

     NSS_OUTPUT_L();

     delay_ms(1);

    NSS_OUTPUT_H();   // 锁存的时钟从低到高的变化

    SPI_write(0x10);  // 发送数码管的位 

    SPI_write(num[n]);  // 发送数码管的段

     NSS_OUTPUT_L();

     delay_ms(1);

    NSS_OUTPUT_H();   // 锁存的时钟从低到高的变化

    }

    n++;

    if(n>9)

    {

        n=0;m++;

    }

    }



    return 0;

}

spi.c和spi.h同上

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何让自己的写的程序在阿里云一直运行

购买了阿里云服务器后&#xff0c;每次要用自己写在阿里云的服务器程序都要连接到云端 然后./运行该程序&#xff0c;而且每次一断开终端&#xff0c;该服务器就会自动停止&#xff0c;这样使用相当麻烦。那怎样才能让我们的服务器一直在云端后台运行&#xff0c;即便退出终端…

Linux第19步_安装“Ubutun交叉编译工具链”

由于Ubuntu系统使用的GCC编译器&#xff0c;编译结果是X86文件&#xff0c;只能在X86上运行&#xff0c;不能在ARM上直接运行。因此&#xff0c;还要安装一个“Ubutun交叉编译工具链”&#xff0c;才可以在ARM上运行。 arm-none-linux-gnueabi-gcc是 Codesourcery 公司&#x…

【力扣每日一题】力扣2478从链表中移除节点

题目来源 2478.从链表中移除节点 题目描述 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 示例 示例1&#xff1a; 输入&#xff1a;head [5,2,13,3,8] 输出&#xff1a;[13,8] 解释&#xff1a;需要移除的节点是 5 …

Java并发集合详解

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;在这篇博客中&#xff0c;咱们将一起深入探索Java中的并发集合。多线程编程是一个不可或缺的部分&#xff0c;它能让程序运行得更快&#xff0c;处理更多的任务。但同时&#xff0c;多线程也带来了一些挑战&…

unity编辑器Scene界面输出位置及路径

工程Asset下新建Editor文件夹&#xff1b; Editor文件夹下新建脚本LogPosition using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; public class LogPosition : EditorWindow {//最终输出的数据.static string logtext;//增…

大学生搜题软件,未来可期吗?

作为一家专注于软件开发的公司《智创有术》&#xff0c;我们致力于为客户提供创新、高效和可靠的解决方案。通过多年的经验和专业知识&#xff0c;我们已经在行业内建立了良好的声誉&#xff0c;并赢得了客户的信任和支持。 支持各种源码&#xff0c;网站搭建&#xff0c;APP&a…

32.virtual reality system concepts illustrated using OSVR

32.1 Common Space This section describes the spaces needed to support viewing and interacting with the virtual world. 本节介绍支持查看虚拟世界并与之交互所需的空间。 The spaces required for supporting viewing and interacting with a virtual world can vary …

记一次服务器被入侵的排查过程

起因 阿里云安全中心报告了告警信息&#xff0c;同时手机短信、邮件、电话也接收到了来自阿里云的风险通知&#xff0c;感觉这方面阿里云还是不错。 排查及解决过程 这条wget指令究竟是怎么被运行的 我无法定位到攻击人员是通过什么样的方式让我的java程序执行了wget这条指…

转后端一年半双非本科Java无实习进大厂,给双非朋友经验分享

背景介绍 B站有详细视频&#xff0c;同名搜索即可。 今天文章想分享的是我踩过的坑以及那些做的是值得大家参考。 有需要就加V&#xff1a; zhazhagao_ 进了快手(如果你觉得不是大厂那就不是!)&#xff1a; 真双非本科: 安徽某双非无实习: 因为编程语言问题,去过之后发现不喜欢…

Java中请求生成唯一追溯TraceId

Java中请求生成唯一追溯TraceId 一&#xff1a;背景 因为是微服务架构,平常日志太多,看日志不太好查,所以想要从一整个链路当中获取一个唯一标识,比较好定位问题&#xff0c; 原理就是从gateway网关将标识传递到下游,下游服务拿到这个标识,响应结束后将traceId反向写入响应体…

C# Onnx Chinese CLIP 通过一句话从图库中搜出来符合要求的图片

目录 效果 生成图片特征 查找踢足球的人 测试图片 模型信息 image_model.onnx text_model.onnx 项目 代码 Form1.cs Clip.cs 下载 C# Onnx Chinese CLIP 通过一句话从图库中搜出来符合要求的图片 效果 生成图片特征 查找踢足球的人 测试图片 模型信息 image_mod…

RFM会员价值度模型

模型基本原理 会员价值度用来评估用户的价值情况&#xff0c;是区分会员价值的重要模型和参考依据&#xff0c;也是衡量不同营销效果的关键指标。 价值度模型一般基于交易行为产生&#xff0c;衡量的是有实体转化价值的行为。常用的价值度模型是RFM RFM模型是根据会员 最近…

如何在 Windows 上从电脑硬盘恢复照片

如今&#xff0c;随着相机设备的普及&#xff0c;您可以轻松地一次拍摄一堆照片&#xff0c;将它们传输到硬盘上&#xff0c;然后再拍摄更多照片。但是&#xff0c;如果您的所有照片意外丢失在驱动器中怎么办&#xff1f;你能恢复它们吗&#xff1f; 在本指南中&#xff0c;我…

配置文件的创建和部署

配置描述文件&#xff08;Configuration Profiles&#xff09;的格式为xml&#xff0c;其提供了一个非常容易的方式去给电脑、移动设备或用户定义一些设置或限制&#xff0c;你可以使用Jamf Pro去创建这样的配置文件。 &#xff08;配置文件的负载&#xff09; 有关配置文件的配…

Spring——Spring AOP1(代理模式Proxy)

代理&#xff08;Proxy&#xff09;模式 1.创建工程 2.代理&#xff08;Proxy&#xff09;模式介绍 作用&#xff1a;通过代理可以控制访问某个对象的方法&#xff0c;在调用这个方法前做前置处理&#xff0c;调用这个方法后做后置处理。&#xff08;即&#xff1a; AOP的微观…

Postman 并发测试入门指南:如何模拟用户并发请求?

背景介绍 最近&#xff0c;我们发起了一个在线图书管理系统的项目。我负责的一个关键模块包括三个主要后台接口&#xff1a; 实现对books数据的检索。实施对likes数据的获取。通过collections端点访问数据。 应对高流量的挑战 在设计并部署接口时&#xff0c;我们不可避免地…

Anaconda安装教程及注意事项

一、Anaconda简介 Anaconda是一个大数据处理、科学计算领域的Python发行版。它包含了众多流行的开源软件和库&#xff0c;如NumPy、SciPy、Matplotlib、Pandas等&#xff0c;并同时提供了一个方便的打包、分发和管理这些工具的工具集合&#xff0c;如conda和pip等。Anaconda还提…

Service Weaver:Google开源基于分布式应用程序开发的框架,重新定义微服务边界

大家好&#xff0c;我是萧楚河&#xff0c;公众号&#xff1a;golang面试经典讲解&#xff0c;感谢关注&#xff0c;一起学习一起成长。一、前言 今年6月&#xff0c;一群谷歌员工&#xff08;由谷歌软件工程师Michael Whittaker领导&#xff09;发表了一篇名为“Towards Mode…

transforms图像增强(一)

一、数据增强 数据增强&#xff08;Data Augmentation&#xff09;是一种常用的数据预处理技术&#xff0c;通过对训练集进行各种变换和扩增操作&#xff0c;可以增加训练数据的多样性和丰富性&#xff0c;从而提高模型的泛化能力。 数据增强的目的是通过对训练集中的图像进行…

如何在Ubuntu安装SVN服务并结合cpolar实现公网TCP地址远程访问本地服务

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…