ARM1.2作业
实现数码管不同位显示不同的数字
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发送数据的函数
void SPI_write(unsigned char dat);
void delay_us1(unsigned int us);
#endif
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 SPI_init(void)
{RCC->MP_AHB4ENSETR |= (0x1 << 4);//MOSI PE14GPIOE->MODER &= (~(0x3 <<28));GPIOE->MODER |= (0x1 <<28);GPIOE->OTYPER &= (~(0x1 << 14));GPIOE->OSPEEDR &= (~(0X3 << 28));GPIOE->PUPDR &= (~(0X3 <<28));//MOSI PE13GPIOE->MODER &= (~(0x3 <<26));GPIOE->OSPEEDR &= (~(0x3 << 26));GPIOE->PUPDR &= (~(0x3 <<26));//MOSI PE12GPIOE->MODER &= (~(0x3 <<24));GPIOE->MODER |= (0x1 <<24);GPIOE->OTYPER &= (~(0x1 << 12));GPIOE->OSPEEDR &= (~(0X3 << 24));GPIOE->PUPDR &= (~(0X3 <<24));//MOSI PE11GPIOE->MODER &= (~(0x3 <<22));GPIOE->MODER |= (0x1 <<22);GPIOE->OTYPER &= (~(0x1 << 11));GPIOE->OSPEEDR &= (~(0X3 << 22));GPIOE->PUPDR &= (~(0X3 <<22));NSS_OUTPUT_L();//595芯片的锁存引脚拉低SCK_OUTPUT_L();//SPI的时钟线拉低
}void SPI_write(unsigned char dat)
{unsigned char i;for(i = 0;i<8;i++){if(dat & 0x01){MOSI_OUTPUT_H();//MOSI线写高}else{MOSI_OUTPUT_L();//MOSI线写低}dat >>=1;//时钟线从低电平到高电平的变化时,MOSI数据线上的数据//被写到595芯片的移位寄存器中SCK_OUTPUT_L();delay_us1(10);SCK_OUTPUT_H();delay_us1(10);}
}
main.c
#include "spi.h"extern void printf(const char *fmt,...);void delay_ms(int ms){int i,j;for(i=0;i<ms;i++)for(j=0;j<1800;j++);}//保存0-9编码的数组int num[10] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0x3E,0xE0,0xFE,0xF6};int num2[4] = {0x80,0x40,0x20,0x10};int main(void){unsigned char i;SPI_init();//si7006_init();while(1){for(i=0;i<4;i++){SPI_write(num2[i]);//发送数码管的位SPI_write(num[i]);//发送数码管的段NSS_OUTPUT_L();delay_ms(1);NSS_OUTPUT_H();//锁存的时钟从低到高的变化//将位移寄存器中的数据锁存到锁存寄存器中delay_ms(5);}}return 0;}
将温湿度数据显示到数码
main.c
#include "spi.h"#include "si7006.h"extern void printf(const char *fmt,...);void delay_ms(int ms){int i,j;for(i=0;i<ms;i++)for(j=0;j<1800;j++);}//保存0-9编码的数组int num[10] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0x3E,0xE0,0xFE,0xF6};int num2[4] = {0x80,0x40,0x20,0x10};int arr[4];unsigned short hum;short tem;int main(void){unsigned char i;SPI_init();si7006_init();while(1){tem=si7006_read_temp_data(0X40,0XE3);tem=175.72*tem/65536-46.85;hum=si7006_read_hum_data(0X40,0XE5);hum=125*hum/65536-6;arr[0]=tem/10;arr[1]=tem%10;arr[2]=hum/10;arr[3]=hum%10;for(int j=0;j<1000;j++){for(i=0;i<4;i++){SPI_write(num2[i]);//发送数码管的位SPI_write(num[arr[i]]);//发送数码管的段NSS_OUTPUT_L();delay_ms(1);NSS_OUTPUT_H();//锁存的时钟从低到高的变化//将位移寄存器中的数据锁存到锁存寄存器中}}}return 0;}

相关文章:
ARM1.2作业
实现数码管不同位显示不同的数字 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);}whi…...
【算法专题】递归算法
递归 递归1. 汉诺塔问题2. 合并两个有序链表3. 反转链表4. 两两交换链表中的节点5. Pow(x, n) --- 快速幂 递归 在解决⼀个规模为 n 的问题时,如果满足以下条件,我们可以使用递归来解决: 问题可以被划分为规模更小的子问题,并且…...
不停止业务的情况下优化 Elasticsearch Reindex
在使用 Elasticsearch 时,我们总有需要修改索引映射的时候,这时我们只能进行 _reindex。事实上,这是一个相当昂贵的操作,因为根据数据量和分片数量,完整复制一个索引可能需要几个小时。 花费的时间不是大问题,但更严重的是,它会影响生产环境的性能甚至功能。 相信大家…...
PB 按Excel动态创建对应字段
/* > Function: w_cwjk_xhyy.wf_dw_init >-------------------------------------------------------------------- > 描述: 按excel表格列名,创建对应字段,用于部分接口对应字段导出文件 >-------------------------------------------------------------------- …...
数据结构——红黑树 and B-树
红黑树 根据平衡条件第4、5两点 最短路径,都是黑色 最长路径,红黑相间 最长是最短的两倍 B-树...
Android中线程间的通信-Handler
Handler机制在Android中主要用于线程间的通信,特别是处理从子线程向主线程(UI线程)传递消息和更新界面。 Handler中的四个关键对象及其作用: Message: Message 是在线程间传递的数据载体,它包含了需要处理…...
Spring Boot Admin健康检查引起的Spring Boot服务假死
问题现象 最近在spring boot项目中引入了 spring-boot-starter-actuator 后,测试环境开始出现服务假死的现象, 且这个问题十分怪异,只在多个微服务中的简称A的这个服务中出现,其他服务都没有出现这个问题, 之所以说…...
java企业人事信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 java Web企业人事信息管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境 为TOMCAT7.0,Myeclipse8.5开发,数据库为M…...
如何通过 useMemo 和 useCallback 提升你的 React 应用性能
背景 在 React 中,useMemo 和 useCallback 这两个 hook 是我们优化应用性能的有力工具。它们会返回 memoized 版本的值或函数,只在依赖项发生变化时才进行重新计算或定义。 Hook 介绍 useMemo useMemo 的作用是返回一个 memoized 值,它接…...
ArkTS - @Prop、@Link
一、作用 Prop 装饰器 和Link装饰器都是父组件向子组件传递参数,子组件接收父组件参数的时候用的,变量前边需要加上Prop或者Link装饰器即可。(跟前端vue中父组件向子组件传递参数类似) // 子组件 Component struct SonCom {Prop…...
Python中matplotlib库的使用1
1 matplotlib库简介 matplotlib是一个数学绘图库,可以将数据通过图形的方式显示出来,也就是数据可视化。 2 matplotlib库的安装 2.1 打开cmd窗口 点击键盘的“Win”“R”键,在弹出的“运行”对话框的“打开”栏中输入“cmd”,…...
位乘积计数-蓝桥
题目链接:1.位乘积计数 - 蓝桥云课 (lanqiao.cn) 解题思路:10的5次数量级暴力居然过了,看来测试样例很水,直接1遍历到n,再用一个循环判断每位数相乘乘机是否等于m即可。 下面是c代码: #include <iost…...
HCIA-Datacom题库(自己整理分类的)——OSPF协议判断
1.路由表中某条路由信息的Proto为OSPF则此路由的优先级一定为10。√ 2.如果网络管理员没有配置骨干区域,则路由器会自动创建骨干区域? 路由表中某条路由信息的Proto为OSPF,则此路由的优先级一定为10。 当两台OSPF路由器形成2-WAY邻居关系时࿰…...
【FPGA/verilog -入门学习16】fpga状态机实现
需求: 用两段式状态机设计序列码检测机。这个序列码检测机用于检索连续输入的 1bit 数据 (每个时钟周期输入 1bit),当检测到一串“101100”的输入数据时,产生一个时钟周期的 高脉冲指示信号 状态图 //实现状态机切…...
记chrome的hackbar无法post php://input的问题
尽管hackbar支持post请求体,但是当请求体里面没有等于号的时候,无法post出去,这样如果需要使用php://input绕过waf的时候就没法做。 在开发人员工具的网络里面可以看到不使用等于号的情况下没有荷载。 之后在这里看到了解决方法,…...
相机解析驱动小记
用过了几款相机,对使用相机也有了一点心得,在此记录。 当你得到一款相机,你需要做的: 第一件事:在datasheet中阅读配置单,知道怎么配置、配置完输出来是什么。 配置输出尺寸;传输模式…...
EasyExcel判断导入时是否符合给定模板
问题描述 在做系统的导入导出模块时需要在导入时判断用户导入的表格是否符合给定的模板,该系统导入导出使用的是EasyExcel,因此在实现该功能时是基于EasyExcel的 解决方案 创建Spring Boot项目,并添加如下依赖 <dependency><group…...
BDD - Python Behave Retry 机制
BDD - Python Behave Retry 机制 引言Behave RetryBehave Retry 应用feature 文件创建 step 文件Retry运行 Behave 并生成 rerun 文件重新运行失败的场景 引言 在日常运行测试用例,有时因为环境不稳定造成一些测试用例跑失败了,如果能将这些失败的测试用…...
链 表
3_1 删除链表中的节点 Answer-将被删节点下一个val复制到待删除节点,然后将待删节点直接连接到下下一个节点即可。 学到: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) …...
一个可以用于生产环境得PHP上传函数
上传表单 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>文件上传</title> </head> <body><h1>选择要上传的文件</h1><!-- 定义一个包含文件输入字段的表单 --…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
