1.2作业

news2024/11/20 0:49:11

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

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同上

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

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

相关文章

关于我花费六千多组了台window+Linux主机

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 写在前面 我在2023年12月组了一台“洋垃圾”的主机&#xff0c;一边当做台式机使用&#xff0c;一边当做服务器使用。这个方案算是相对比较划算的方案。我开始是打算直接单做服务器使用的&#xff0c;以及内存…

【react-taro-canvas】用canvas手写一个数字、字母混合的行为验证码

用canvas手写一个数字、字母混合的行为验证码 实现效果源码 实现效果 源码 import Taro from "tarojs/taro"; import { View, Canvas, Input, Button } from "tarojs/components"; import { useState, useEffect } from "react"; // 画随机线函…

Android14之禁掉Selinux的两种方式(一百七十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

安装elasticsearch、kibana、IK分词器、扩展IK词典

安装elasticsearch、kibana、IK分词器、扩展IK词典 后面还会安装kibana&#xff0c;这个会提供可视化界面方面学习。 需要注意的是elasticsearch和kibana版本一定要一样&#xff01;&#xff01;&#xff01; 否则就像这样 elasticsearch 1、创建网络 因为我们还需要部署k…

cJSON代码解读

1、背景 cJSON用了很久&#xff0c;但是对它一直不太了解。这次向添加对long long类型的支持&#xff0c;一直出问题。因为有以前添加两位小数float的经历&#xff0c;我觉得会很轻松&#xff0c;没想到翻车了。于是有了这边文档&#xff0c;阅读了部分博主对cJSON的解析&…

安装VS Code到AWS EC2 Linux 2

文章目录 小结问题及解决参考 小结 本文记录了安装VS Code到AWS EC2 Linux 2。 问题及解决 安装VS Code到AWS EC2 Linux 2采取了以下步骤&#xff1a; 更新VS Code的YUM源&#xff1a; [ec2-userip-100-92-28-119 ~]$ sudo rpm --import https://packages.microsoft.com/k…

LOG滤波器原理探究---计算机视觉和特征检测

先来看几个滤波器公式&#xff1a; 高斯滤波器&#xff1a; G ( x , y ; σ ) 1 2 π σ 2 e − x 2 y 2 2 σ 2 G(x,y;\sigma) \frac{1}{2 \pi \sigma^2} e^{-\frac{x^2 y^2}{2\sigma^2}} G(x,y;σ)2πσ21​e−2σ2x2y2​ 图像的二阶导数&#xff1a; ∇ 2 f ∂ 2 f ∂…

案例086:基于微信小程序的影院选座系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

CTF流量分析经典例题详解

目录 入门题型 题目&#xff1a;Cephalopod(图片提取) 题目&#xff1a;特殊后门(icmp协议信息传输) 题目&#xff1a;手机热点(蓝牙传输协议obex,数据提取) 题目&#xff1a;想蹭网先解开密码(无线密码破解) 进阶题型 题目&#xff1a;抓到一只苍蝇(数据包筛选,数据提…

JAVAEE初阶相关内容第二十弹--HTTP协议

写在前&#xff1a;2024年啦&#xff01;新的一年要努力学习啦 本篇博客围绕HTTP协议&#xff0c;对HTTP协议进行了解&#xff0c;需要理解其工作过程&#xff0c;对HTTP协议格式要清楚&#xff0c;通过抓包工具进行协议分析&#xff0c;认识“方法”、“请求报头”&#xff0c…

什么是安全信息和事件管理(SIEM),有什么用处

安全信息和事件管理&#xff08;SIEM&#xff09;对于企业主动识别、管理和消除安全威胁至关重要。SIEM 解决方案采用事件关联、AI 驱动的异常检测以及机器学习驱动的用户和实体行为分析 &#xff08;UEBA&#xff09; 等机制来检测、审查和应对网络安全威胁。这些功能使 SIEM …

OpenCV图像处理——C++实现亚像素尺寸标定板边缘轮廓提取

前言 标定模板&#xff08;Calibration Target&#xff09;在机器视觉、图像测量、摄影测量以及三维重建等应用中起着重要的作用。它被用于校正相机的畸变&#xff0c;确定物理尺寸和像素之间的换算关系&#xff0c;并建立相机成像的几何模型。通过使用相机拍摄带有固定间距图…

基于simiulink的flyback反激型电路建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 Flyback反激型电路的基本原理 4.2 Flyback反激型电路的数学建模 4.3 Flyback反激型电路的仿真方法 5.完整工程文件 1.课题概述 flyback反激型电路建模与仿真。反激变换器在开关管导通时电源将电能…

IDEA2023 最新版详细图文安装教程(安装+运行测试+汉化+背景图设置)

IDEA2023 最新版详细图文安装教程 名人说&#xff1a;工欲善其事&#xff0c;必先利其器。——《论语》 作者&#xff1a;Code_流苏(CSDN) o(‐&#xff3e;▽&#xff3e;‐)o很高兴你打开了这篇博客&#xff0c;跟着教程去一步步尝试安装吧。 目录 IDEA2023 最新版详细图文安…

LiveGBS流媒体平台GB/T28181常见问题-如何配置快照目录快照存储默认目录目录如何配置

LiveGBS流媒体平台GB/T28181常见问题-如何配置快照目录快照存储默认目录目录如何配置 1、快照目录2、指定快照目录3、搭建GB28181视频直播平台 1、快照目录 部署LiveGBS后&#xff0c; 再查看通道播放后 或是 获取通道快照后&#xff0c;就会在LiveSMS部署的服务器里面存储对应…

大文件断点下载Range下载zip包显示文件损坏

问题&#xff1a;大文件下载&#xff0c;其它格式的文件及rar格式的压缩包正常下载但是 之后zip包下载后解压失败 原因分析: 1. 查看上传文件的属性值 如图&#xff0c;10.4kb是已经约去小数点的值&#xff0c;准确的大小应该是10663字节10.4130859375KB&#xff0c;所以用10.…

C#使用纯OpenCvSharp部署yolov8-pose姿态识别

【源码地址】 github地址&#xff1a;https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov8-Pose算法是一种基于深度神经网络的目标检测算法&#xff0c;用于对人体姿势进行准确检测。该算法在Yolov8的基础上引入了姿势估计模块&#xff0c;通过联合检测和姿势…

解决Android Studio The path ‘X:\XXX‘ does not belong to a directory.

目录 前言 一、问题描述 二、解决方法 前言 在移动应用开发领域&#xff0c;Android Studio作为一款功能强大的集成开发环境&#xff0c;为开发人员提供了丰富的工具和功能。然而&#xff0c;在使用Android Studio的过程中&#xff0c;有时也会遇到各种各样的问题和错误。 &…

彻底理解前端安全面试题(2)—— CSRF 攻击,跨站请求伪造攻击详解,建议收藏(含源码)

前言 前端关于网络安全看似高深莫测&#xff0c;其实来来回回就那么点东西&#xff0c;我总结一下就是 3 1 4&#xff0c;3个用字母描述的【分别是 XSS、CSRF、CORS】 一个中间人攻击。当然 CORS 同源策略是为了防止攻击的安全策略&#xff0c;其他的都是网络攻击。除了这…

以 RoCE+软件定义存储同时实现信创转型与架构升级

目前&#xff0c;不少企业数据中心使用 FC 交换机和集中式 SAN 存储&#xff08;以下简称“FC-SAN 架构”&#xff09;&#xff0c;支持核心业务系统、数据库、AI/ML 等高性能业务场景。而在开展 IT 基础架构信创转型时&#xff0c;很多用户受限于国外交换机&#xff1a;FC 交换…