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

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

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

相关文章

关于GitHub的git推送命令时报错密码授权失败问题

参考文章&#xff1a;https://cloud.tencent.com/developer/article/2362326?areaId106001 问题描述 当新建GitHub仓库后&#xff0c;通过git clone xxxx&#xff0c;命令克隆仓库到本地&#xff0c;想要提交修改内容&#xff0c;此时会报错443链接远程仓库失败&#xff0c;解…

JavaScript 基础二part1.运算符

JavaScript 基础二 1.1 赋值运算符1.2 一元运算符自增运算符的用法&#xff1a;例题 1.3 比较运算符不同类型间的比较严格相等对 null 和 undefined 进行比较 1.4 逻辑运算符例题 1.5 运算符优先级 1.1 赋值运算符 赋值运算符&#xff1a;对变量进行赋值的运算符 已经学过的赋…

二蛋赠书十三期:《一书读懂物联网》

前言 大家好&#xff01;我是二蛋&#xff0c;一个热爱技术、乐于分享的工程师。在过去的几年里&#xff0c;我一直通过各种渠道与大家分享技术知识和经验。我深知&#xff0c;每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此&#xff0c;我非常感激大家一直…

promise.prototype.finally重写和兼容火狐低版本浏览器

一、finally()方法用于指定不管 Promise 对象最后状态如何&#xff0c;都会执行的操作。该方法是 ES2018 引入标准的 let promise new Promise() promise .then(result > {}) .catch(error > {}) .finally(() > {})finally方法的回调函数不接受任何参数;finally方法…

前端框架中的状态管理(State Management)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

《MySQL系列-InnoDB引擎02》InnoDB存储引擎介绍

文章目录 第二章 InnoDB存储引擎1 InnoDB存储引擎概述2 InnoDB存储引擎的版本3 InnoDB体系架构3.1 后台线程3.2 内存 4 Checkpoint技术5 Master Thread 工作方式5.1 InnoDB 1.0.x版本之前的Master Thread5.2 InnoDB 1.2.x版本之前的Master Thread5.3 InnoDB 1.2.x版本的Master …

简易机器学习笔记(四)初识卷积神经网络

前言 第一次写卷积神经网络&#xff0c;也是照着paddlepaddle的官方文档抄&#xff0c;这里简单讲解一下心得。 首先我们要知道之前写的那些东西都是什么&#xff0c;之前写的我们称之为简单神经网络&#xff0c;也就是简单一层连接输出和输出&#xff0c;通过前向计算和逆向…

Jenkins的Transfers路径怎么配置,解决Transfers配置不生效的问题

Transfers配置: 1.配置Source files: 要填写jar包的相对路径,从当前项目工作空间的根目录开始,看看我的工作空间你就懂了 !如图 我填的是 parent/build/libs/parent-1.0.0.jar,即不要 fdw1/ 的前缀 2.配置Remote directory: 远程目标文件夹,也就是你jar包要放到远程…

leetcode第206题反转链表❤

一&#xff1a;题目&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网…

CanFestival结合Android来完成canopen通信

1.准备开发环境 安装Android Studio和NDK后&#xff0c;需要在Android Studio中创建一个新的NDK项目&#xff0c;并且在项目目录下创建一个jni目录来放置NDK代码。 配置CAN总线接口硬件需要根据具体的硬件要求进行&#xff0c;常见的方法包括使用串口或USB连接CAN总线接口&…

How to transfer spice model to spectre model

https://community.cadence.com/cadence_technology_forums/f/custom-ic-design/14736/how-to-transfer-spice-model-to-spectre-model

UE5 VR版增强输入初体验 官方模板学习

问题 我们传统的输入方式&#xff0c;是通过编辑器设置输入操作映射&#xff0c;然后BindAction和BindAxis绑定 这边插播一条增强输入知识点&#xff0c;参考知乎大佬文章 和增强输入的VR模板教学&#xff1a;如何使用VR模板在UE5中使用增强输入系统_哔哩哔哩_bilibili 实践操…