ARMday9

实现数码管不同位显示不同的数字

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);#endif  // __SPI_H__

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)
{//1.使能GPIOE时钟RCC->MP_AHB4ENSETR |= 0X10;//2.MOSI管脚PE14 设置输出的属性GPIOE->MODER &=(~(0X3<<28));//设置PE14输出GPIOE->MODER |= (0X1<<28);//设置PE10为推挽输出GPIOE->OTYPER &=(~(0x1<<14));//PE10为低速输出GPIOE->OSPEEDR &= (~(0x3<<28));//设置无上拉下拉GPIOE->PUPDR &= (~(0x3<<28));//3.MISO管脚PE13 设置输入的属性GPIOE->MODER &=(~(0X3<<26));//设置PE14输入//4.SCK管脚PE12  设置输出的属性GPIOE->MODER &=(~(0X3<<24));//设置PE14输出GPIOE->MODER |= (0X1<<24);//设置PE10为推挽输出GPIOE->OTYPER &=(~(0x1<<12));//PE10为低速输出GPIOE->OSPEEDR &= (~(0x3<<24));//设置无上拉下拉GPIOE->PUPDR &= (~(0x3<<24));//5.RCK(NSS)管脚  设置输出的属性GPIOE->MODER &=(~(0X3<<22));//设置PE14输出GPIOE->MODER |= (0X1<<22);//设置PE10为推挽输出GPIOE->OTYPER &=(~(0x1<<11));//PE10为低速输出GPIOE->OSPEEDR &= (~(0x3<<22));//设置无上拉下拉GPIOE->PUPDR &= (~(0x3<<22));//默认PE12和PE11输出低电平,方便产生上升沿NSS_OUTPUT_L();SCK_OUTPUT_L();
}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(1000);SCK_OUTPUT_H();delay_us1(1000);}}

main.c

#include "spi.h"// 保存0-9编码的数组int num[10] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6};int main(){SPI_init();while (1){int M=0;for (int i = 0; i < 10; i++){SPI_write(0x80>>M);   // 控制位M++;if(M>3){M=0;}SPI_write(num[i]); // 控制段// NSS管脚有一个上升沿的输出,将移位寄存器的数据下沉,并行输出NSS_OUTPUT_L();delay_us1(100);NSS_OUTPUT_H();delay_us1(500000);}}return 0;}

运行结果

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

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

相关文章

MySQL的安装网络配置

目录 一. MySQL5.7的安装 二. MySQL8.0的安装 三. 配置网络访问 思维导图 一. MySQL5.7的安装 1. 解压 2. 将my.ini文件放入到解压文件中 3. 编辑my.ini文件&#xff0c;将路径改为当前路径 4. 进到bin目录下&#xff0c;以管理员身份打开cmd命令窗口 5. 安装MySQL服务 my…

Spring Boot 整合 AOP 实现接口切面日志

Spring Boot 整合 AOP 实现接口切面日志 什么是 AOP&#xff1f; AOP&#xff08;Aspect-Oriented Programming&#xff09;是一种编程范式&#xff0c;它允许开发人员将横切关注点&#xff08;如日志记录、性能统计、安全性等&#xff09;从主要业务逻辑中分离出来&#xff…

5233D误码测试仪

5233D误码测试仪 数字通信测量仪器 5233D误码测试仪主要用于数字光收发模块的误码性能测试。采用可更换接口板设计&#xff0c;可支持多种数字光收发模块&#xff0c;包括CFP、CFP2、CFP4、CFP8、CSFP、CXP、CXP2、DSFP、QSFP、QSFP、QSFP28、SFP、SFP、SFP28、XFP等。5233D误…

SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose

目录 一&#xff1a;Dockerfile自定义镜像 1. 镜像结构 2. Dockerfile语法 3. 构建Java项目 二&#xff1a; Docker-Compose 1. 初识DockerCompose 2. 部署微服务集群 前些天突然发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

【Java 21 新特性】顺序集合(Sequenced Collections)

1 摘要 引入新的接口表示具有定义的遇到顺序的集合。每个这样的集合都有一个明确定义的第一个元素、第二个元素&#xff0c;依此类推&#xff0c;直到最后一个元素。提供统一的API来访问它的第一个和最后一个元素&#xff0c;并以相反的顺序处理它的元素。 "生活只能向后…

企业签名分发对移动应用开发者有什么影响

企业签名分发是移动应用开发者在应用程序发布前测试、内部分发和特定的受众群体分发等方面比较常用的一种工具。那对于应用商城分发有啥区别&#xff0c;下面简单的探讨一下。 独立分发能力 通过企业签名分发开发者可以自己决定应用程序的发布时间和方式&#xff0c;不用受应用…

使用Wireshark进行网络流量分析

目录 Wireshark是什么&#xff1f; 数据包筛选 筛选指定ip 使用逻辑运算符筛选 HTTP模式过滤 端口筛选 协议筛选 包长度筛选 数据包搜索 数据流分析 数据包导出 Wireshark是什么&#xff1f; 通过Wireshark&#xff0c;我们可以捕获和分析网络数据包&#xff0c;查看…

项目管理流程指南:分解阶段

项目管理流程是项目管理始终不变的一个方面&#xff0c;尤其在瀑布式方法中。 项目管理协会&#xff08;PMI&#xff09;将这一流程定义为五个不同的阶段&#xff1a;启动、计划、执行、监控和收尾。这五个阶段已在全球范围内得到广泛认可和接受。下面来了解如何完成每个阶段&…

学生数据可视化与分析工具 vue3+flask实现

目录 一、技术栈亮点 二、功能特点 三、应用场景 四、结语 学生数据可视化与分析工具介绍 在当今的教育领域&#xff0c;数据驱动的决策正变得越来越重要。为了满足学校、教师和学生对于数据深度洞察的需求&#xff0c;我们推出了一款基于Vue3和Flask编写的学生数据可视化…

牛客周赛 Round 26 解题报告 | 珂学家 | 0-1 BFS + 状态机DP

前言 整体评价 T3是一道0-1 BFS题, 这样时间复杂度可以控制在O(n*m), 也可以用优先队列。 T4这类题型&#xff0c;在牛客Round周赛系列出现好多次了&#xff0c;要么状态机DP&#xff0c;要么容斥&#xff0c;如果n很大&#xff0c;就用矩阵幂优化。 欢迎关注 珂朵莉 牛客周…

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

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

学Python到底能干什么?看这里就知道

学Python到底能干什么&#xff1f;看这里就知道 | Python是一种代表简单主义思想的语言&#xff0c;极其容易上手&#xff0c;并且功能非常强大&#xff0c;这也是我的第二计算机语言。 个人可以使用Python去做哪些事呢&#xff1f; ✅办公自动化场景&#xff1a; 每天要处理…