1.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发送数据的函数* 函数参数: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)
{RCC->MP_AHB4ENSETR |= (0x1 << 4);// MOSI    PE14 GPIOE->MODER &= (~(0x3 << 28));GPIOE->MODER |= (0x1 << 28);GPIOE->OTYPER &= (~(0x1 << 14));GPIOE->OSPEEDR &= (~(0x3 << 28));GPIOE->PUPDR &= (~(0x3 << 28));// MISO    PE13GPIOE->MODER &= (~(0x3 << 26));GPIOE->OSPEEDR &= (~(0x3 << 26));GPIOE->PUPDR &= (~(0x3 << 26));// SCK     PE12 GPIOE->MODER &= (~(0x3 << 24));GPIOE->MODER |= (0x1 << 24);GPIOE->OTYPER &= (~(0x1 << 12));GPIOE->OSPEEDR &= (~(0x3 << 24));GPIOE->PUPDR &= (~(0x3 << 24));// NSS     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();   // SCK拉低delay_us1(1);SCK_OUTPUT_H();   // SCK拉高delay_us1(10);}}

mian.c

#include "spi.h"#include "si7006.h"#include "key_it.h"void delay_mas(unsigned int ms){for(int i=0;i<ms;i++){for(int j=0;j<1800;j++);}}int math[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0x3E,0xE0,0xFE,0xF6};unsigned short hum,tem;int main(){key1_it_config();SPI_init();si7006_init();while(1){hum=si7006_read_hum_data(0x40,0xE5);hum=125*hum/65536-6;int hum_m=hum/10;int hum_l=hum%10;tem=si7006_read_temp_data(0x40,0xE3);tem=175.72*tem/65536-46.85;int tem_m=tem/10;int tem_l=tem%10;for(int i=0;i<10000;i++){SPI_write(0x80);SPI_write(math[hum_m]);NSS_OUTPUT_L();delay_us1(10);NSS_OUTPUT_H();delay_us1(10);SPI_write(0x40);SPI_write(math[hum_l]);NSS_OUTPUT_L();delay_us1(10);NSS_OUTPUT_H();delay_us1(10);SPI_write(0x20);SPI_write(math[tem_m]);NSS_OUTPUT_L();delay_us1(10);NSS_OUTPUT_H();delay_us1(10);SPI_write(0x10);SPI_write(math[tem_l]);NSS_OUTPUT_L();delay_us1(10);NSS_OUTPUT_H();delay_us1(10);}}return 0;}

 j结果:

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

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

相关文章

嵌入式ARM作业5

作业要求&#xff1a;实现数码管不同位显示不同的数字 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 PE14 GPIOE…

SpringIOC之support模块ConversionServiceFactoryBean

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

揭秘计算机内部通信:探秘数据、地址与控制信号的奥秘

引言 在我们前面的讲解中&#xff0c;我们详细了解了计算机系统的核心组件&#xff0c;包括CPU、内存和磁盘。然而&#xff0c;总线在这个体系中同样至关重要。总线是计算机内部各部件间通信的桥梁&#xff0c;涉及数据、地址和控制信号的传输。在接下来的内容中&#xff0c;我…

JMeter 接口测试,一文详细讲解如何使用

1、获取 API 信息 API的方法&#xff1a;GET API的URL&#xff1a; https://api.seniverse.com/v3/weather/now.json API的参数&#xff1a; 请求参数&#xff1a; language 参数值范围&#xff1a; zh-Hans 简体中文 zh-Hant 繁体中文 en 英文 ja 日语 de 德语 fr …

使用网站,如何保护信息和数据不会被泄露?

在生活中&#xff0c;网站的作用越来越重要。 一方面网站是获取各种信息最常用的途径之一&#xff0c;它们可以提供实时的新闻、评论、分析、数据、指南等&#xff0c;让人们更轻松地了解世界和获取所需的知识。 同时是现代商业的关键组成部分之一&#xff0c;它们可以为企业…

将Qt窗口停靠在Maya界面中

问题描述&#xff1a; 将PySide2/PyQt工具的窗口停靠在Maya的界面中 解决方法&#xff1a; from PySide2 import QtCore, QtGui, QtWidgetsfrom maya.app.general.mayaMixin import MayaQWidgetDockableMixinclass MainWindow(MayaQWidgetDockableMixin, QtWidgets.QMainWind…

ChatGPT 进行 SEO的使用技巧

搜索引擎优化 (SEO) 是使网站对搜索引擎友好的一种不断发展的实践。 自搜索引擎和新兴技术的发展以来&#xff0c;它从未保持不变。 最近发布的 ChatGPT 是一种人工智能对话工具&#xff0c;似乎在搜索引擎优化方面有很好的应用。 从创建吸引人的标题到只需一个简短的提示就可…

普中STM32-PZ6806L开发板(HAL库函数实现-USART2 中断接收)

简介 实现USART2 的 中断接收&#xff0c; 发送数据。电路原理图 USART2接线 原理图USART2 在主芯片引脚 实物图 其他知识 APIs stm32f1xx_hal_uart.h /* 堵塞发送, pData是发送数据, Size发送数据大小, Timeout是超时时间 */ HAL_StatusTypeDef HAL_UART_Transmit(UAR…

Head First Design Patterns - 装饰者模式

什么是装饰者模式 装饰者模式动态地将额外责任附加到对象上。对于拓展功能&#xff0c;装饰者提供子类化的弹性替代方案。 --《Head First Design Patterns》中的定义 为什么会有装饰者模式 根据上述定义&#xff0c;简单来说&#xff0c;装饰者模式就是对原有的类&#xff0c…

MySql篇——MySql使用常见问题及解决办法

这里汇总MySql使用常见问题及解决办法&#xff0c;会持续更新。 问题1.ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。 含义&#xff1a;你设置的密码不符合当前的密码等级。 可使用 SHOW VARIABLES LIKE validate_password%; 查看…

20个Laravel教程资源助你快速入门和进阶

Laravel多年来一直是PHP应用程序开发的摇滚明星&#xff0c;这是有充分理由的。庞大的生态系统、活跃的社区、强大的就业市场、成功的初创公司——它拥有一切让采用新技术变得值得的东西。 如果你想学习Laravel&#xff0c;你不需要更进一步。通过浏览本指南&#xff0c;您可以…

第四课:早期的编程方式、编程语言发展史、编程基础-语句和函数、算法入门、数据结构、阿兰图灵及软件工程

第四课&#xff1a;早期的编程方式、编程语言发展史、编程基础-语句和函数、算法入门、数据结构、阿兰图灵及软件工程 第十章&#xff1a;早期的编程方式1、早期&#xff0c;程序如何进入计算机2、早期计算机的编程3、现代计算机基础结构——冯诺依曼计算机 第十一章&#xff1…