STM32 7-8

news2025/1/11 19:01:35

目录

ADC

AD单通道

AD多通道

DMA

DMA转运数据

DMA+AD多通道


ADC

AD单通道

AD.c

#include "stm32f10x.h"                  // Device header

/**
  * @brief  初始化AD所需要的所有设备
  * @param  无
  * @retval 无
  */
void AD_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
    
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);//配置ADCCLK为六分频
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
   
    ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1, ADC_SampleTime_55Cycles5);//配置输入通道
    //所选ADC设备,指定ADC通道,规则组序列器中的次序,指定通道采样时间(更快就选小参数,更稳定就选大参数)
   
    //初始化ADC
    ADC_InitTypeDef ADC_InitStructure;
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发转换选择

    //单通道单次转换非扫描模式    
    //单通道连续转换,非扫描模式
    
    ADC_InitStructure.ADC_NbrOfChannel = 1;//通道数目
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;//扫描转换模式
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//非连续转换模式
    //ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//连续转换模式
    ADC_Init(ADC1,&ADC_InitStructure);
    
    ADC_Cmd(ADC1,ENABLE);//开启ADC1
    
    //进行ADC校准
    ADC_ResetCalibration(ADC1);//复位校准
    while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待复位校准完成
    ADC_StartCalibration(ADC1);//开始校准
    while(ADC_GetCalibrationStatus(ADC1) == SET);//等待校准完成
    
    //ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换
}

/**
  * @brief  获取AD所得值
  * @param  无
  * @retval  转化出来的数据量最大为4095
  */
uint16_t AD_GetValue(void)
{
    ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换
    while (ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);//获取标志位状态(为Reset表示没有转换完成)
    //大约等待 (1 / 72MHz / 6) X (55.5 + 12.5) = 5.6us
    return ADC_GetConversionValue(ADC1);//调用后会自动清除EOC标志位
}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"

uint16_t ADValue;
float Voltage;

int main(void)
{
	OLED_Init();
	AD_Init();
	
    OLED_ShowString(1,1,"ADValue:");
    OLED_ShowString(2,1,"Voltage:0.00V");
	while(1)
	{
		ADValue = AD_GetValue();
        Voltage = (float)ADValue / 4095 * 3.3;
        
        OLED_ShowNum(1,9,ADValue,4);
        OLED_ShowNum(2,9,Voltage,1);//输出整数部分
        OLED_ShowNum(2,11,(uint16_t)(Voltage * 100) % 100,2);//输出小数部分
        
        Delay_ms(100);
    }
	
}

AD多通道

AD.c

#include "stm32f10x.h"                  // Device header

/**
  * @brief  初始化AD所需设备
  * @param  无
  * @retval 无
  */
void AD_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
    
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);//配置ADCCLK为六分频
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
   
    //初始化ADC
    ADC_InitTypeDef ADC_InitStructure;
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发转换选择

    //单通道单次转换非扫描模式    
    
    ADC_InitStructure.ADC_NbrOfChannel = 1;//通道数目
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;//扫描转换模式
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//非连续转换模式
    ADC_Init(ADC1,&ADC_InitStructure);
    
    ADC_Cmd(ADC1,ENABLE);//开启ADC1
    
    //进行ADC校准
    ADC_ResetCalibration(ADC1);//复位校准
    while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待复位校准完成
    ADC_StartCalibration(ADC1);//开始校准
    while(ADC_GetCalibrationStatus(ADC1) == SET);//等待校准完成
    
}

/**
*@brief  通过传入不同ADC通道,实现多通道AD,本质还是单通道
*@param  ADC_Channel:所选通道
*@retval 转化出的数据量最大为4095
  */
uint16_t AD_GetValue(uint8_t ADC_Channel)
{
     ADC_RegularChannelConfig(ADC1,ADC_Channel,1, ADC_SampleTime_55Cycles5);//配置输入通道
    //所选ADC设备,指定ADC通道,规则组序列器中的次序,指定通道采样时间(更快就选小参数,更稳定就选大参数)
   
    ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换
    while (ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);//获取标志位状态(为Reset表示没有转换完成)
    //大约等待 (1 / 72MHz / 6) X (55.5 + 12.5) = 5.6us
    return ADC_GetConversionValue(ADC1);//调用后会自动清除EOC标志位
}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"

uint16_t AD0,AD1,AD2,AD3;

int main(void)
{
	OLED_Init();
	AD_Init();
	
    OLED_ShowString(1,1,"AD0:");
    OLED_ShowString(2,1,"AD1:");
    OLED_ShowString(3,1,"AD2:");
    OLED_ShowString(4,1,"AD3:");
    
	while(1)
	{
        AD0 = AD_GetValue(ADC_Channel_0);
        AD1 = AD_GetValue(ADC_Channel_1);
        AD2 = AD_GetValue(ADC_Channel_2);
        AD3 = AD_GetValue(ADC_Channel_3);
		
        OLED_ShowNum(1,5,AD0,4);
        OLED_ShowNum(2,5,AD1,4);
        OLED_ShowNum(3,5,AD2,4);
        OLED_ShowNum(4,5,AD3,4);
        
        Delay_ms(100);
    }
	
}

DMA

DMA转运数据

MyDMA.c

#include "stm32f10x.h"                  // Device header

uint16_t MyDMA_Size;

/**
  * @brief  初始化DMA
  * @param  AddrA:外设起始地址
  * @param  AddrB:存储器起始地址
  * @param  Size:传输次数
  * @retval 无
  */
void MyDMA_Init(uint32_t AddrA,uint32_t AddrB,uint16_t Size)
{
    MyDMA_Size = Size;
    
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//开启MDA1时钟
    
    DMA_InitTypeDef DMA_InitStructrue;
    DMA_InitStructrue.DMA_PeripheralBaseAddr = AddrA;//外设起始地址
    DMA_InitStructrue.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//外设数据宽度
    DMA_InitStructrue.DMA_PeripheralInc = DMA_PeripheralInc_Enable;//外设是否自增
    DMA_InitStructrue.DMA_MemoryBaseAddr = AddrB;//存储器起始地址
    DMA_InitStructrue.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte ;//存储器数据宽度
    DMA_InitStructrue.DMA_MemoryInc = DMA_MemoryInc_Enable;//存储器是否自增
    DMA_InitStructrue.DMA_DIR = DMA_DIR_PeripheralSRC;//传输方向(外设作为源头)
    DMA_InitStructrue.DMA_BufferSize = Size;//传输计数器(传输次数)
    DMA_InitStructrue.DMA_Mode = DMA_Mode_Normal;//传输模式,是否使用自动重装(转运后停止)
    DMA_InitStructrue.DMA_M2M = DMA_M2M_Enable;//选择硬件触发,还是软件触发(软件触发)
    DMA_InitStructrue.DMA_Priority = DMA_Priority_Medium;//优先级(多个通道进行配置)
    DMA_Init(DMA1_Channel1,&DMA_InitStructrue);
    
    DMA_Cmd(DMA1_Channel1,DISABLE);//不让DMA初始化后立刻转运
}

/**
  * @brief  将外设数据通过DMA写入存储器
  * @param  无
  * @retval 无
  */
void MyDMA_Transfer(void)
{
    DMA_Cmd(DMA1_Channel1,DISABLE);//为传输计数器赋值,需先失能DMA
    DMA_SetCurrDataCounter(DMA1_Channel1,MyDMA_Size);//重新给传输计数器写入值
    DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMA
    
    while(DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET);//检查DMA1通道1转换完成的标志位(完成标志位置一)
    //未完成则一直空循环等待
    DMA_ClearFlag(DMA1_FLAG_TC1);//需要手动清除标志位
}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "MyDMA.h"

uint8_t DataA[] = {0x01,0x02,0x03,0x04};
uint8_t DataB[] = {0,0,0,0};

uint8_t i;

int main(void)
{
	OLED_Init();
    MyDMA_Init((uint32_t)DataA,(uint32_t)DataB,4);//DataA 转运至 Data
    
    OLED_ShowString(1,1,"DataA");
    OLED_ShowString(3,1,"DataA");
    OLED_ShowHexNum(1,8,(uint32_t)DataA,8);
    OLED_ShowHexNum(3,8,(uint32_t)DataB,8);
    
    for(i = 0;i < 4;i++)
    {
        OLED_ShowHexNum(2,3*i+1,DataA[i],2);
    }
    for(i = 0;i < 4;i++)
    {
        OLED_ShowHexNum(4,3*i+1,DataB[i],2);
    }
    
	while(1)
	{
       DataA[0] ++;
       DataA[1] ++;
       DataA[2] ++;
       DataA[3] ++;
        
        for(i = 0;i < 4;i++)
        {
            OLED_ShowHexNum(2,3*i+1,DataA[i],2);
        }
        for(i = 0;i < 4;i++)
        {
            OLED_ShowHexNum(4,3*i+1,DataB[i],2);
        }
       
       Delay_s(1);
        
       MyDMA_Transfer();//开始转运
        
         for(i = 0;i < 4;i++)
        {
            OLED_ShowHexNum(2,3*i+1,DataA[i],2);
        }
        for(i = 0;i < 4;i++)
        {
            OLED_ShowHexNum(4,3*i+1,DataB[i],2);
        }
        
       Delay_s(1);
	}
	
}

DMA+AD多通道

AD.c

#include "stm32f10x.h"                  // Device header

uint16_t AD_Value[4];

/**
  * @brief  初始化AD以及DMA
  * @param  无
  * @retval 无
  */
void AD_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//开启MDA1时钟
    
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);//配置ADCCLK为六分频
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
     ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1, ADC_SampleTime_55Cycles5);//配置输入通道
     ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2, ADC_SampleTime_55Cycles5);//配置输入通道
     ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3, ADC_SampleTime_55Cycles5);//配置输入通道
     ADC_RegularChannelConfig(ADC1,ADC_Channel_3,4, ADC_SampleTime_55Cycles5);//配置输入通道
    //所选ADC设备,指定ADC通道,规则组序列器中的次序,指定通道采样时间(更快就选小参数,更稳定就选大参数)
   
    //初始化ADC
    ADC_InitTypeDef ADC_InitStructure;
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发转换选择

    //ADC扫描模式+数据转运 
    //ADC连续扫描+DMA循环转运
    
    ADC_InitStructure.ADC_NbrOfChannel = 4;//通道数目
    ADC_InitStructure.ADC_ScanConvMode = ENABLE;//扫描转换模式(设置为扫描模式)
    //ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//是否为连续模式
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    ADC_Init(ADC1,&ADC_InitStructure);
    
    //配置DMA
    DMA_InitTypeDef DMA_InitStructrue;
    DMA_InitStructrue.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;//外设起始地址
    DMA_InitStructrue.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设数据宽度(16位)
    DMA_InitStructrue.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设是否自增(始终转运同一位置数据)
    DMA_InitStructrue.DMA_MemoryBaseAddr =  (uint32_t)AD_Value;//存储器起始地址
    DMA_InitStructrue.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//存储器数据宽度
    DMA_InitStructrue.DMA_MemoryInc = DMA_MemoryInc_Enable;//存储器是否自增
    DMA_InitStructrue.DMA_DIR = DMA_DIR_PeripheralSRC;//传输方向(外设作为源头)
    DMA_InitStructrue.DMA_BufferSize = 4;//传输计数器(传输次数)
    //DMA_InitStructrue.DMA_Mode = DMA_Mode_Normal;//传输模式,是否使用自动重装(转运后停止)
    DMA_InitStructrue.DMA_Mode = DMA_Mode_Circular;//循环模式
    DMA_InitStructrue.DMA_M2M = DMA_M2M_Disable;//选择硬件触发,还是软件触发(硬件触发)
    DMA_InitStructrue.DMA_Priority = DMA_Priority_Medium;//优先级(多个通道进行配置)
    DMA_Init(DMA1_Channel1,&DMA_InitStructrue);//这里的通道必须使用DMA1_Channel1,详情查表
    
    DMA_Cmd(DMA1_Channel1,ENABLE);//让DMA初始化后立刻转运
    
    ADC_DMACmd(ADC1,ENABLE);//开启ADC触发DMA信号
    
    ADC_Cmd(ADC1,ENABLE);//开启ADC1
    
    //进行ADC校准
    ADC_ResetCalibration(ADC1);//复位校准
    while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待复位校准完成
    ADC_StartCalibration(ADC1);//开始校准
    while(ADC_GetCalibrationStatus(ADC1) == SET);//等待校准完成
    
    ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换
}

/**
*@brief  通过传入不同ADC通道,实现多通道AD,本质还是单通道
*@param  ADC_Channel:所选通道
*@retval 转化出的数据量最大为4095
  */
//void AD_GetValue(void)
//{
//    DMA_Cmd(DMA1_Channel1,DISABLE);//为传输计数器赋值,需先失能DMA
//    DMA_SetCurrDataCounter(DMA1_Channel1,4);//重新给传输计数器写入值
//    DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMA
//    
//    //ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换
//    
//    while(DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET);//检查DMA1通道1转换完成的标志位(完成标志位置一)
//    //未完成则一直空循环等待
//    DMA_ClearFlag(DMA1_FLAG_TC1);//需要手动清除标志位
//}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"

int main(void)
{
	OLED_Init();
	AD_Init();
	
    OLED_ShowString(1,1,"AD0:");
    OLED_ShowString(2,1,"AD1:");
    OLED_ShowString(3,1,"AD2:");
    OLED_ShowString(4,1,"AD3:");
    
	while(1)
	{
        //AD_GetValue();
        
        OLED_ShowNum(1,5,AD_Value[0],4);
        OLED_ShowNum(2,5,AD_Value[1],4);
        OLED_ShowNum(3,5,AD_Value[2],4);
        OLED_ShowNum(4,5,AD_Value[3],4);
        
        Delay_ms(100);
    }
	
}

7

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

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

相关文章

视觉slam十四讲学习笔记(四)相机与图像

理解理解针孔相机的模型、内参与径向畸变参数。理解一个空间点是如何投影到相机成像平面的。掌握OpenCV的图像存储与表达方式。学会基本的摄像头标定方法。 目录 前言 一、相机模型 1 针孔相机模型 2 畸变 单目相机的成像过程 3 双目相机模型 4 RGB-D 相机模型 二、图像…

【数据结构】链表OJ面试题4《返回链表入环的第一个结点》(题库+解析)

1.前言 前五题在这http://t.csdnimg.cn/UeggB 后三题在这http://t.csdnimg.cn/gbohQ 给定一个链表&#xff0c;判断链表中是否有环。http://t.csdnimg.cn/Rcdyc 记录每天的刷题&#xff0c;继续坚持&#xff01; 2.OJ题目训练 10. 给定一个链表&#xff0c;返回链表开始…

[缓存] - 1.缓存共性问题

1. 缓存的作用 为什么需要缓存呢&#xff1f;缓存主要解决两个问题&#xff0c;一个是提高应用程序的性能&#xff0c;降低请求响应的延时&#xff1b;一个是提高应用程序的并发性。 1.1 高并发 一般来说&#xff0c; 如果 10Wqps&#xff0c;或者20Wqps &#xff0c;可使用分布…

【JavaEE】_HTTP请求与响应

目录 1. HTTP协议 1.1 HTTP简介 1.2 Fiddler 2. HTTP请求 2.1 首行 2.2 请求头&#xff08;header&#xff09; 2.3 空行 2.4 正文&#xff08;body&#xff09; 3. HTTP响应 3.1 首行 3.2 响应头&#xff08;header&#xff09; 3.3 空行 3.4 正文&#xff08;bo…

如何在Django中使用分布式定时任务并结合消息队列

如何在Django中使用分布式定时任务并结合消息队列 如何在Django中使用分布式定时任务并结合消息队列项目背景与意义实现步骤1. 安装Celery和Django-celery-beat2. 配置Celery3. 配置Django-celery-beat4. 定义定时任务5. 启动Celery worker 和 beat6. Celery 指令7. 对接消息队…

精读Relational Embedding for Few-Shot Classification (ICCV 2021)

Relational Embedding for Few-Shot Classification (ICCV 2021) 一、摘要 该研究提出了一种针对少样本分类问题的新方法&#xff0c;通过元学习策略来学习“观察什么”和“在哪里关注”。这种方法依赖于两个关键模块&#xff1a;自相关表示&#xff08;SCR&#xff09;和交叉…

HDFS的超级用户

一. 解释原因 HDFS(Hadoop Distributed File System)和linux文件系统管理一样&#xff0c;也是存在权限控制的。 但是很不一样的是&#xff0c; 在Linux文件系统中&#xff0c;超级用户Superuser是root而在HDFS中&#xff0c;超级用户Superuser是启动了namenode的用户&#x…

软考 系统分析师系列知识点之信息系统战略规划方法(10)

接前一篇文章&#xff1a;软考 系统分析师系列知识点之信息系统战略规划方法&#xff08;9&#xff09; 所属章节&#xff1a; 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 7.4.6 战略栅格法 战略栅格&#xff08;Strategic Grid&#xff0c;SG&#xff09;法是…

【QT+QGIS跨平台编译】之四十:【gsl+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、GSL介绍二、GSL下载三、文件分析四、pro文件五、编译实践一、GSL介绍 GSL(GNU Scientific Library)是一个开源的数值计算库,用于提供一系列常用的数学函数和算法。它为科学计算和数据分析提供了高效、可靠的工具。 GSL库提供了丰富的功能,包括数值积分、数值…

NLP_GPT到ChatGPT

文章目录 介绍小结 介绍 从初代 GPT 到GPT-3&#xff0c;主要经历了下面几个关键时刻。 GPT&#xff1a;2018 年&#xff0c;OpenAl发布了这款基于Transformer架构的预训练语言模型&#xff0c;其参数数量为1.17亿(117M)。GPT运用单向自回归方法生成文本&#xff0c;先预训练大…

qt“五彩斑斓“ opengl

本篇文章我们来描述一下opengl相关知识 我们先看一下opengl渲染的效果 很漂亮&#xff1f; 那下面就来介绍一下这么漂亮的opengl OpenGL&#xff08;Open Graphics Library&#xff09;是一个跨平台的图形编程接口&#xff0c;用于渲染2D和3D图形。它提供了一系列函数和数据结…

Hive——动态分区导致的小文件问题

目录 0 问题现象 1 问题解决 解决方案一&#xff1a;调整动态分区数 方案一弊端&#xff1a;小文件剧增 解决方案二&#xff1a;distribute by 方案二弊端&#xff1a;数据倾斜 解决方案三&#xff1a;distribute by命令 2 思考 3 小结 0 问题现象 现象&#xff1a;…

【教学类-19-05】20240214《ABAB式-规律黏贴18格-手工纸15*15CM》(中班)

背景需求 利用15*15CM手工纸制作AB色块手环&#xff08;手工纸自带色彩&#xff09; 素材准备 代码展示 作者&#xff1a;阿夏 时间&#xff1a;2024年2月14日 名称&#xff1a;正方形数字卡片AB图案 _ 华光彩云_CNKI A的位置有图案 18格 import xlwt import xlrd import os …

kali无线渗透之wps加密模式和破解12

WPS(Wi-Fi Protected Setup&#xff0c;Wi-Fi保护设置)是由Wi-Fi联盟推出的全新Wi-Fi安全防护设定标准。该标准推出的主要原因是为了解决长久以来无线网络加密认证设定的步骤过于繁杂之弊病&#xff0c;使用者往往会因为步骤太过麻烦&#xff0c;以致干脆不做任何加密安全设定&…

CTFshow web(php文件上传155-158)

web155 老样子&#xff0c;还是那个后端检测。 知识点&#xff1a; auto_append_file 是 PHP 配置选项之一&#xff0c;在 PHP 脚本执行结束后自动追加执行指定的文件。 当 auto_append_file 配置被设置为一个文件路径时&#xff0c;PHP 将在执行完脚本文件的所有代码后&…

python分离字符串 2022年12月青少年电子学会等级考试 中小学生python编程等级考试二级真题答案解析

目录 python分离字符串 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python分离字符串 2022年12月 python编程等级考试级编程题 一、题目要…

华为机考入门python3--(14)牛客14-字符串排序

分类&#xff1a;列表、排序 知识点&#xff1a; 字典序排序 sorted(my_list) 题目来自【牛客】 def sort_strings_by_lex_order(strings): # 使用内置的sorted函数进行排序&#xff0c;默认是按照字典序排序 sorted_strings sorted(strings) # 返回排序后的字符串列…

Imgui(2) | macOS 绘制 CPU 占用率曲线

Imgui(2) | macOS 绘制 CPU 占用率曲线 文章目录 Imgui(2) | macOS 绘制 CPU 占用率曲线0. 简介1. 绘制曲线 - 以正弦函数为例1.1 基于 sf::RectangleShape 的渲染 - 不好看&#xff0c;效率低1.2 基于 sf::VertexArray 的绘制 2. 获取和绘制所有 CPU 的占用率2.1 测试程序 - 用…

idm下载路径在哪 idm下载保存路径怎么设置 IDM下载器 internetdownloadmanager官方版下载 网络加速器

春节&#xff08;Spring Festival&#xff09;&#xff0c;是中国最隆重最富有特色的传统节日之一。春节期间我们与一家人团聚在一起&#xff0c;其乐融融。2024年春晚已经接近尾声了&#xff0c;很多人已经踏上了返程的路上。在部分地区&#xff0c;如春晚直播过程中或者网络高…

AJAXJSON入门篇

AJAX&JSON 概念&#xff1a;AJAX(Asynchronous JavaScript And XML):异步的JavaScript和XML AJAX作用&#xff1a; 与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据 使用了AJAX和服务器进行通信&#xff0c;就可以使用H…