【蓝桥杯—单片机】第十届省赛真题代码题解题笔记 | 省赛 | 真题 | 代码题 | 刷题 | 笔记

第十届省赛真题代码部分

  • 前言
  • 赛题代码思路笔记
    • 竞赛板配置
      • 内部振荡器频率设定
      • 键盘工作模式跳线
      • 扩展方式跳线
      • 连接频率测量功能的跳线帽
    • 建立模板
    • 明确初始状态
    • 显示功能部分
      • 频率显示界面
        • 第一部分
        • 第二部分
        • 第三部分
      • 电压显示界面
        • 第一部分
        • 第二部分
        • 第三部分
    • 按键功能部分
      • S4:“显示界面切换”按键
      • S5:“输出模式切换”按键
      • S6:“LED指示灯功能控制”按键
      • S7:“数码管显示功能控制”按键
    • LED指示灯功能部分
      • L1和L2
      • L3
      • L4
      • L5
  • 最终代码
    • User文件
      • main.c
    • Driver文件
      • Init.c
      • LED.c
      • Seg.c
      • Key.c
      • iic.c

前言

本文是对蓝桥杯第十届省赛真题的代码题做的解题笔记,只记录了代码的思路,大模板用的是B站西风老师的2024年版大模板,具体内容就不再重复记录了。

思路参考西风第十五讲内容(资料链接已经在下方给出)

https://www.bilibili.com/video/BV1TR4y1k7iz?p=23&vd_source=e2191f89c557f5ac44bb6c7aa3967c7c

关于蓝桥杯第十届省赛真题可以在官网查看(资料链接已经在下方给出)

https://www.lanqiao.cn/courses/2786/learning/?id=100643&compatibility=false

赛题代码思路笔记

竞赛板配置

根据赛题要求完成竞赛板的配置

在这里插入图片描述
在这里插入图片描述

内部振荡器频率设定

在stc中更改输入用户程序运行时的IRC频率为12MHz
在这里插入图片描述

键盘工作模式跳线

配置为BTN按键模式
在这里插入图片描述

扩展方式跳线

配置为IO模式
在这里插入图片描述

连接频率测量功能的跳线帽

建立模板

根据赛题中的硬件框图确定本赛题的框架
在这里插入图片描述
如图,在Driver文件夹里建立LED、数码管、按键、iic、onewire模块,在User文件夹中建立主函数模块(大模板参考西风老师的2024版大模板)。
在这里插入图片描述

明确初始状态

在这里插入图片描述

显示功能部分

在这里插入图片描述
在这里插入图片描述
由题可知,数码管显示一共两个界面。
可以引入一个变量Seg_Disp_Mode来标记当前显示界面,因为只有两个界面,所以可以定义为bit型而不是unsigned char型以此来节省空间。

bit Seg_Disp_Mode;     //数码管显示模式变量 0-频率显示界面 1-电压显示界面

再在信息处理函数的数码管部分中对当前显示模式进行判断。
判断完成后在各部分写入供该界面显示的代码。

if(Seg_Disp_Mode == 0)//频率显示界面{}else//电压显示界面{}

频率显示界面

在这里插入图片描述
由题目可知,数据界面由三部分组成:

  1. 第一部分为提示符部分,是数码管的第一位,在该界面下全程显示字母F。
  2. 第二部分为熄灭部分,是数码管的第2到4位,在该界面下全程熄灭。
  3. 第三部分为频率显示部分,是数码管的第5到8位,在该界面下根据实时监测的频率不同显示数字实时变动。

在Driver文件夹下的Seg模块中的显示数组中加入用于表示熄灭的0xff,表示字母,表示字母C的0xc6,表示字母P的0x8c。

code unsigned char seg_dula[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff, 0x8e,0xc1};//0-9,10-熄灭,11-F,12-U

更改主模块中对应数码管控制列表中的值来控制数码管的显示情况。

第一部分

标识部分对应的数码管为第一位,更改主模块中对应数码管控制列表Seg_Buf中第一位对应的数,使其对应上Seg模块中的显示数组中的字母F。

Seg_Buf[0] = 11;//F
第二部分

熄灭部分,是数码管的第2到4位,全程为熄灭状态,在创建主函数中的Seg_Buf列表时其中的元素已经置为对应Seg模块中的显示数组中的熄灭,所以不要再做额外的更改。

第三部分

关于实时频率部分,模板已经给出,不再赘述。
在数码管中显示,只需要对实时频率数据进行取余和取整操作即可。

Seg_Buf[3] = Freq / 10000 % 10;
Seg_Buf[4] = Freq / 1000 % 10;
Seg_Buf[5] = Freq / 100 % 10;
Seg_Buf[6] = Freq / 10 % 10;
Seg_Buf[7] = Freq  % 10;

在这里插入图片描述
除此以外,仍需要注意的是,显示数据高位为0时,做熄灭处理。
设置一个循环,对频率显示部分进行逐位获取,该位为0是熄灭处理,直到获取到第一个非零数据时,不再熄灭。
按照上面的思路,当获取的频率值为0时,数码管全部熄灭,不行。要让频率部分最小也能显示一位,那就直接跳过最后一位,只获取前7位。

unsigned char i=3;while(Seg_Buf[i] == 0){Seg_Buf[i] = 10;	if(++i ==7) break;}

电压显示界面

在这里插入图片描述
在这里插入图片描述

由题目可知,参数设置界面由三部分组成:

  1. 第一部分为标识部分,是数码管的第1位,在该界面下全程显示字母U。
  2. 第二部分为熄灭部分,是数码管的第2到5位,在该界面下全程熄灭。
  3. 第三部分为电压显示部分,是数码管的第6到8位。
第一部分

标识部分对应的数码管为第一位,更改主模块中对应数码管控制列表Seg_Buf中第一位对应的数,使其对应上Seg模块中的显示数组中的字母P。

Seg_Buf[0] = 12;//U
第二部分

在上一个界面中第4到8位数码管点亮,在此界面中,第6到8位数码管点亮。为了避免界面切换时第4位和第5位数码管仍处于点亮状态,可以直接对第4位和第5位数码管进行操作。

Seg_Buf[3] = 10;
Seg_Buf[4] = 10;
第三部分

建立一个变量Voltage存储获取的实时电压数据。

float Voltage;        //实时电压数据

电压值为模拟量,显示值为数字量,调用AD转换相关函数读取对应位置的电压值。
需要注意的是,AD读取出来的是以255为长度量化的电压值,所以需要进行转换。将0-255的范围转算成0-5的范围,需要除以51。

Voltage = Ad_Read(0x43) / 51.0;

显示数据是小数点前有一位数的两位小数。
实时电压数据存储在float型的Voltage中,小数前只有一位,将Voltage强制类型转换成unsigned char型可以直接取出。
unsigned char型的Voltage小数点后的数直接被抹去,要取出小数点后的数,可以将float型的Voltage转换成unsigned int型,再进行乘除的运算依次取出需要用的位置的数。

Seg_Buf[5] = (unsigned char)Voltage;
Seg_Buf[6] = (unsigned int)(Voltage * 100) /10 % 10;
Seg_Buf[7] = (unsigned int)(Voltage * 100)% 10;

小数点在Seg_Point对应位置为1时点亮,Seg_Disp_Mode在1时要求小数点点亮,所以可以直接用Seg_Disp_Mode给Seg_Point对应位置赋值。

Seg_Point[5] = Seg_Disp_Mode;

按键功能部分

在这里插入图片描述
在大模板主模块的按键处理函数中,用Key_Down判断按键按下的值。因为题目中按键涉及到4、5、6、7,所以可以添加一个switch对当前按下的按键进行一个判断。
判断完成后在各部分写入供该按键需要实现的功能的代码即可。

void Key_Proc()
{if (Key_Flag)return;Key_Flag = 1;							  // 设置标志位,防止重复进入Key_Val = Key_Read();					  // 读取按键值Key_Down = Key_Val & (Key_Old ^ Key_Val); // 检测下降沿Key_Up = ~Key_Val & (Key_Old ^ Key_Val);  // 检测上升沿Key_Old = Key_Val;						  // 更新按键状态switch(Key_Down){case 4:break;case 5:break;case 6:break;case 7:break;}

S4:“显示界面切换”按键

在这里插入图片描述
该按键按下后实现了界面的切换。
在显示功能部分,我们已经定义了一个变量Seg_Disp_Mode来标记当前显示的界面,当Seg_Disp_Mode为0时是数据界面,为1时是参数设置界面。
因为变量Seg_Disp_Mode是bit型数据,只在0和1之间变换,所以可以直接用异或来运算。

Seg_Disp_Mode ^= 1;

S5:“输出模式切换”按键

在这里插入图片描述
该按键按下后实现了输出模式的切换。
由题可知,输出模式只有两个,可以定义一个bit型的变量来标记当前输出模式。

bit OutPut_Mode;      //输出模式 0-固定电压 1-变化电压

和S4的Seg_Disp_Mode的变换类似,按下按键后OutPut_Mode只在0和1之间变换,可以直接用异或来运算。

OutPut_Mode ^= 1;

再定义一个float型变量存储输出电压值。

float Voltage_Output;  //输出电压

S6:“LED指示灯功能控制”按键

在这里插入图片描述

该按键按下后实现了LED指示灯的开关。
只有可和关两个功能,可以定义一个bit型的变量Led_Enable_Flag来标记当前状态。

bit Led_Enable_Flag = 1;     //指示灯功能控制标志 1-点亮 0-熄灭

按键按下后Led_Enable_Flag在0和1之间切换,可以直接用异或运算。

Led_Enable_Flag ^= 1;

在调用LED显示相关的函数时,添加前置条件。

if(Led_Enable_Flag == 1) Led_Disp(Slow_Down % 8, ucLed[Slow_Down % 8]);							   // 更新LED显示
else Led_Disp(Slow_Down % 8,0);

S7:“数码管显示功能控制”按键

在这里插入图片描述

S7与S6类似,不再赘述。

bit Seg_Enable_Flag = 1;      //数码管功能控制标志 1-点亮 0-熄灭
Seg_Enable_Flag ^= 1;
if(Seg_Enable_Flag == 1) Seg_Disp(Slow_Down % 8, Seg_Buf[Slow_Down % 8], Seg_Point[Slow_Down % 8]); // 更新数码管显示
else Seg_Disp(Slow_Down % 8, 10, 0);

LED指示灯功能部分

在这里插入图片描述

L1和L2

在这里插入图片描述
L1和L2的点亮状态和当前处于电压测试还是频率测试相关。在显示功能部分,我们已经给这两个显示界面一个变量Seg_Disp_Mode来标记(Seg_Disp_Mode为0是频率显示界面,为1时是电压显示界面)。
所以,当Seg_Disp_Mode为0是L1熄灭,L2点亮;Seg_Disp_Mode为1是L1点亮,L2熄灭。
且L1和L2互斥,不存在两个同时点亮的情况。
可以建立一个循环,对Led显示数据存放数组ucLed中的0位(L1)和1位(L2)进行扫描。
由题目得,当Seg_Disp_Mode为0时,要求ucLed[0]为0,ucLed[1]为1;当Seg_Disp_Mode为1时,要求ucLed[0]为1,ucLed[1]为0。可知,Seg_Disp_Mode和ucLed(在0-1的范围内)索引值相等时,置0;反之置为1。
根据上述建立条件判断和赋值语句。

unsigned char i;for(i=0;i<2;i++) ucLed[i] = (i != Seg_Disp_Mode);

L3

在这里插入图片描述
L3点亮(ucLed[2]为1)的条件只有两个,即实时电压值(Voltage) 大于等于1.5且小于等于2.5 或 大于等于3.5 时。
根据条件写出条件判断语句((Voltage >= 1.5 && Voltage < 2.5) || (Voltage >= 3.5)),当逻辑为真时,给ucLed[2]赋值为1,点亮L3。

ucLed[2] = ((Voltage >= 1.5 && Voltage < 2.5) || (Voltage >= 3.5));

L4

在这里插入图片描述
与L3类似,不再赘述。

ucLed[3] = ((Freq >= 1000 && Freq < 5000) || (Freq >= 10000));

L5

在这里插入图片描述
L5与输出模式(OutPut_Mode)相关。
当输出固定电压(OutPut_Mode为0)时,L5熄灭(ucLed[4]为0);当输出实时电压(OutPut_Mode为1)时,L5点亮(ucLed[4]为1)。

ucLed[4] = OutPut_Mode;

最终代码

User文件

main.c

/*头文件声明区域*/
#include <STC15F2K60S2.H>
#include "Init.h"
#include "Key.h"
#include "Seg.h"
#include "Led.h"
#include "iic.h"/*变量声明区域*/
unsigned char Key_Val,Key_Down,Key_Up,Key_Old;
unsigned char Seg_Buf[8] = {10, 10, 10, 10, 10, 10, 10, 10}; // 数码管显示数据
unsigned char Seg_Point[8] = {0, 0, 0, 0, 0, 0, 0, 0};		 // 数码管小数点数据
unsigned char Seg_Pos;										 // 数码管扫描位置
unsigned char ucLed[8] = {0, 0, 0, 0, 0, 0, 0, 0};			 // LED显示数据
unsigned int Slow_Down;										 // 减速计数器
bit Seg_Flag, Key_Flag;										 // 数码管和按键的标志位
unsigned int Time_1s;										 // 1秒钟计数器
unsigned int Freq;											 // 频率计算变量
bit Seg_Disp_Mode;     //数码管显示模式变量 0-频率显示界面 1-电压显示界面
float Voltage;        //实时电压数据
bit OutPut_Mode;      //输出模式 0-固定电压 1-变化电压
float Voltage_Output;  //输出电压
bit Seg_Enable_Flag = 1;      //数码管功能控制标志 1-点亮 0-熄灭
bit Led_Enable_Flag = 1;     //指示灯功能控制标志 1-点亮 0-熄灭/*按键处理函数*/
void Key_Proc()
{if (Key_Flag)return;Key_Flag = 1;							  // 设置标志位,防止重复进入Key_Val = Key_Read();					  // 读取按键值Key_Down = Key_Val & (Key_Old ^ Key_Val); // 检测下降沿Key_Up = ~Key_Val & (Key_Old ^ Key_Val);  // 检测上升沿Key_Old = Key_Val;						  // 更新按键状态switch(Key_Down){case 4:Seg_Disp_Mode ^= 1;break;case 5:OutPut_Mode ^= 1;break;case 6:Led_Enable_Flag ^= 1;break;case 7:Seg_Enable_Flag ^= 1;break;}
}/* 信息处理函数 */
void Seg_Proc()
{unsigned char i=3;if (Seg_Flag)return;Seg_Flag = 1; // 设置标志位Voltage = Ad_Read(0x43) / 51.0;if(OutPut_Mode == 0) Voltage_Output = 2;else Voltage_Output = Voltage;Seg_Point[5] = Seg_Disp_Mode;if(Seg_Disp_Mode == 0)//频率显示界面{Seg_Buf[0] = 11;//FSeg_Buf[3] = Freq / 10000 % 10;Seg_Buf[4] = Freq / 1000 % 10;Seg_Buf[5] = Freq / 100 % 10;Seg_Buf[6] = Freq / 10 % 10;Seg_Buf[7] = Freq  % 10;while(Seg_Buf[i] == 0){Seg_Buf[i] = 10;if(++i ==7) break;}}else//电压显示界面{Seg_Buf[0] = 12;//USeg_Buf[3] = 10;Seg_Buf[4] = 10;Seg_Buf[5] = (unsigned char)Voltage;Seg_Buf[6] = (unsigned int)(Voltage * 100) /10 % 10;Seg_Buf[7] = (unsigned int)(Voltage * 100)% 10; }
}/* 其他显示函数 */
void Led_Proc() 
{unsigned char i;/*DA转换*/Da_Write(Voltage_Output * 51);/*LED相关*/for(i=0;i<2;i++) ucLed[i] = (i != Seg_Disp_Mode);ucLed[2] = ((Voltage >= 1.5 && Voltage < 2.5) || (Voltage >= 3.5));ucLed[3] = ((Freq >= 1000 && Freq < 5000) || (Freq >= 10000));ucLed[4] = OutPut_Mode;
}/* 定时器0初始化函数 */
void Timer0_Init(void)
{AUXR &= 0x7F; // 设置定时器时钟12T模式TMOD &= 0xF0; // 设置定时器模式为16位定时器TMOD |= 0x05;TL0 = 0; // 设置定时器初始值TH0 = 0; // 设置定时器初始值TF0 = 0; // 清除TF0标志位TR0 = 1; // 启动定时器
}/* 定时器1初始化函数 */
void Timer1_Init(void)
{AUXR &= 0xBF; // 设置定时器时钟12T模式TMOD &= 0x0F; // 设置定时器模式为16位定时器TL1 = 0x18;	  // 设置定时器初始值TH1 = 0xFC;	  // 设置定时器初始值TF1 = 0;	  // 清除TF1标志位TR1 = 1;	  // 启动定时器ET1 = 1;	  // 使能定时器1中断EA = 1;		  // 开启全局中断
}/* 定时器1中断服务函数 */
void Timer1_Isr(void) interrupt 3
{/*数码管400ms的减速*/if (++Slow_Down == 400) {Seg_Flag = Slow_Down = 0; // 更新数码管显示标志位}/*按键10ms的减速*/if (Slow_Down % 10 == 0){Key_Flag = 0; // 更新按键处理标志位}/*1s的计数*/if (++Time_1s == 1000)  {Time_1s = 0;		   // 重置1秒钟计数器Freq = TH0 << 8 | TL0; // 计算频率TH0 = 0;			   // 重置定时器0的值TL0 = 0;}/*信息处理*/if(Seg_Enable_Flag == 1) Seg_Disp(Slow_Down % 8, Seg_Buf[Slow_Down % 8], Seg_Point[Slow_Down % 8]); // 更新数码管显示else Seg_Disp(Slow_Down % 8, 10, 0);if(Led_Enable_Flag == 1) Led_Disp(Slow_Down % 8, ucLed[Slow_Down % 8]);							   // 更新LED显示else Led_Disp(Slow_Down % 8,0);
}/* 主函数 */
// 系统初始化,设置定时器和串口,然后进入主循环。
void main()
{Sys_Init();	// 系统初始化Timer1_Init();	// 初始化定时器1Timer0_Init();while (1){Key_Proc();	 // 处理按键Seg_Proc();	 // 更新数码管显示Led_Proc();	 // 更新LED显示}
}

Driver文件

Init.c

#include "init.h"void Sys_Init()
{P0 = 0xff;P2 = P2 & 0x1f | 0x80;P2 &= 0x1f;P0 = 0x00;P2 = P2 & 0x1f | 0xA0;P2 &= 0x1f;
}

LED.c

#include "LED.h"void LED_Disp(unsigned char addr,enable)
{static unsigned char temp = 0x00;static unsigned char temp_old = 0xff;if(enable) temp |= 0x01 << addr;else temp &= ~(0x01 << addr);if(temp != temp_old){P0 = ~temp;P2 = P2 & 0x1f | 0x80;P2 &= 0x1f;temp_old = temp;}
}

Seg.c

#include "Seg.h"code unsigned char seg_dula[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x88,0xc6,0x8c};//0-9为数字,10为熄灭,11为A,12为C,13为P
code unsigned char seg_wela[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};void Seg_Disp(unsigned char wela,dula,point)
{P0 = 0xff;P2 = P2 & 0x1f | 0xe0;P2 &= 0x1f;P0 = seg_wela[wela];P2 = P2 & 0x1f | 0xc0;P2 &= 0x1f;P0 = seg_dula[dula];if(point) P0 &= 0x7f;P2 = P2 & 0x1f | 0xe0;P2 &= 0x1f;
}

Key.c

#include "Key.h"unsigned char Key_Read()
{unsigned char temp = 0;P44 = 0;P42 = 1;P35 = 1;P34 = 1;if(P30 == 0) temp = 7;if(P31 == 0) temp = 6;if(P32 == 0) temp = 5;if(P33 == 0) temp = 4;P44 = 1;P42 = 0;P35 = 1;P34 = 1;if(P30 == 0) temp = 11;if(P31 == 0) temp = 10;if(P32 == 0) temp = 9;if(P33 == 0) temp = 8;P44 = 1;P42 = 1;P35 = 0;P34 = 1;if(P30 == 0) temp = 15;if(P31 == 0) temp = 14;if(P32 == 0) temp = 13;if(P33 == 0) temp = 12;P44 = 1;P42 = 1;P35 = 1;P34 = 0;if(P30 == 0) temp = 19;if(P31 == 0) temp = 18;if(P32 == 0) temp = 17;if(P33 == 0) temp = 16;return temp;
}

iic.c

#include "iic.h"
#include "intrins.h"
#define DELAY_TIME 10
sbit scl = P2 ^ 0;
sbit sda = P2 ^ 1;//
static void I2C_Delay(unsigned char n)
{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();} while (n--);
}//
void I2CStart(void)
{sda = 1;scl = 1;I2C_Delay(DELAY_TIME);sda = 0;I2C_Delay(DELAY_TIME);scl = 0;
}//
void I2CStop(void)
{sda = 0;scl = 1;I2C_Delay(DELAY_TIME);sda = 1;I2C_Delay(DELAY_TIME);
}//
void I2CSendByte(unsigned char byt)
{unsigned char i;for (i = 0; i < 8; i++){scl = 0;I2C_Delay(DELAY_TIME);if (byt & 0x80){sda = 1;}else{sda = 0;}I2C_Delay(DELAY_TIME);scl = 1;byt <<= 1;I2C_Delay(DELAY_TIME);}scl = 0;
}//
unsigned char I2CReceiveByte(void)
{unsigned char da;unsigned char i;for (i = 0; i < 8; i++){scl = 1;I2C_Delay(DELAY_TIME);da <<= 1;if (sda)da |= 0x01;scl = 0;I2C_Delay(DELAY_TIME);}return da;
}//
unsigned char I2CWaitAck(void)
{unsigned char ackbit;scl = 1;I2C_Delay(DELAY_TIME);ackbit = sda;scl = 0;I2C_Delay(DELAY_TIME);return ackbit;
}//
void I2CSendAck(unsigned char ackbit)
{scl = 0;sda = ackbit;I2C_Delay(DELAY_TIME);scl = 1;I2C_Delay(DELAY_TIME);scl = 0;sda = 1;I2C_Delay(DELAY_TIME);
}unsigned char Ad_Read(unsigned char addr)
{unsigned char temp;I2CStart();I2CSendByte(0x90);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();I2CStart();I2CSendByte(0x91);I2CWaitAck();temp = I2CReceiveByte();I2CSendAck(1);I2CStop();return temp;
}void Da_Write(unsigned char dat)
{I2CStart();I2CSendByte(0x90);I2CWaitAck();I2CSendByte(0x41);I2CWaitAck();I2CSendByte(dat);I2CWaitAck();I2CStop();
}

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

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

相关文章

使用DeepSeek的技巧笔记

来源&#xff1a;新年逼自己一把&#xff0c;学会使用DeepSeek R1_哔哩哔哩_bilibili 前言 对于DeepSeek而言&#xff0c;我们不再需要那么多的提示词技巧&#xff0c;但还是要有两个注意点&#xff1a;你需要理解大语言模型的工作原理与局限,这能帮助你更好的知道AI可完成任务…

Apache SeaTunnel 整体架构运行原理

概述 SeaTunnel 缘起 数据集成在现代企业的数据治理和决策支持中扮演着至关重要的角色。随着数据源的多样化和数据量的迅速增长及业务需求的快速变化&#xff0c;企业需要具备强大的数据集成能力来高效地处理数据。SeaTunnel通过其高度可扩展和灵活的架构&#xff0c;帮助企业…

1-kafka服务端之延时操作前传--时间轮

文章目录 背景时间轮层级时间轮时间轮降级kafka中的时间轮kafka如何进行时间轮运行 背景 Kafka中存在大量的延时操作&#xff0c;比如延时生产、延时拉取和延时删除等。Kafka并没有使用JDK自带的Timer或DelayQueue来实现延时的功能&#xff0c;而是基于时间轮的概念自定义实现…

【Ubuntu】ARM交叉编译开发环境解决“没有那个文件或目录”问题

【Ubuntu】ARM交叉编译开发环境解决“没有那个文件或目录”问题 零、起因 最近在使用Ubuntu虚拟机编译ARM程序&#xff0c;解压ARM的GCC后想要启动&#xff0c;报“没有那个文件或目录”&#xff0c;但是文件确实存在&#xff0c;环境配置也检查过了没问题&#xff0c;本文记…

[含文档+PPT+源码等]精品大数据项目-Django基于大数据实现的心血管疾病分析系统

大数据项目-Django基于大数据实现的心血管疾病分析系统背景可以从以下几个方面进行阐述&#xff1a; 一、项目背景与意义 1. 心血管疾病现状 心血管疾病是当前全球面临的主要健康挑战之一&#xff0c;其高发病率、高致残率和高死亡率严重威胁着人类的生命健康。根据权威机构…

科技赋能数字内容体验的核心技术探索

内容概要 在数字化时代&#xff0c;科技的迅猛发展为我们的生活和工作带来了深刻的变革。数字内容体验已经成为人们获取信息和娱乐的重要途径&#xff0c;而这背后的技术支持则扮演着至关重要的角色。尤其是在人工智能、虚拟现实和区块链等新兴技术的推动下&#xff0c;数字内…

【权重小技巧(3) 】权重替换—训练 A 模型去替换 B 模型中的对应权重

系列文章目录 【权重小技巧(1)】.pt文件无法打开或乱码&#xff1f;如何查看.pt文件的具体内容&#xff1f;【权重小技巧(2)】模型权重文件总结: .bin、.safetensors、.pt的保存、加载方法一览本文则总结权重的结构化读取和替换方法&#xff0c;以实现在框架 1 中训练后的部分…

VSCode中使用EmmyLua插件对Unity的tolua断点调试

一.VSCode中搜索安装EmmyLua插件 二.创建和编辑launch.json文件 初始的launch.json是这样的 手动编辑加上一段内容如下图所示&#xff1a; 三.启动调试模式&#xff0c;并选择附加的进程

k8sollama部署deepseek-R1模型,内网无坑

这是目录 linux下载ollama模型文件下载到本地,打包迁移到k8s等无网络环境使用下载打包ollama镜像非k8s环境使用k8s部署访问方式非ollama运行deepseek模型linux下载ollama 下载后可存放其他服务器 curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linu…

2025年Android NDK超全版本下载地址

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

通信易懂唠唠SOME/IP——SOME/IP-SD服务发现阶段和应答行为

一 SOME/IP-SD服务发现阶划分 服务发现应该包含3个阶段 1.1 Initial Wait Phase初始等待阶段 初始等待阶段的作用 初始等待阶段是服务发现过程中的一个阶段。在这个阶段&#xff0c;服务发现模块等待服务实例的相关条件满足&#xff0c;以便继续后续的发现和注册过程。 对…

1. Kubernetes组成及常用命令

Pods(k8s最小操作单元)ReplicaSet & Label(k8s副本集和标签)Deployments(声明式配置)Services(服务)k8s常用命令Kubernetes(简称K8s)是一个开源的容器编排系统,用于自动化应用程序的部署、扩展和管理。自2014年发布以来,K8s迅速成为容器编排领域的行业标准,被…

Vue全流程--Vue2组件的理解第二部分

组件命名规则 好的命名规则可以省去很多不必要的麻烦&#xff0c;这个好习惯还是要养成的 一个单词组成&#xff1a; 第一种写法(首字母小写)&#xff1a;school 第二种写法(首字母大写)&#xff1a;School 多个单词组成&#xff1a; 第一种写法(kebab-case命名)&#xf…

【OS】AUTOSAR架构下的Interrupt详解(上篇)

目录 前言 正文 1.中断概念分析 1.1 中断处理API 1.2 中断级别 1.3 中断向量表 1.4 二类中断的嵌套 1.4.1概述 1.4.2激活 1.5一类中断 1.5.1一类中断的实现 1.5.2一类中断的嵌套 1.5.3在StartOS之前的1类ISR 1.5.4使用1类中断时的注意事项 1.6中断源的初始化 1.…

红包雨项目前端部分

创建项目 pnpm i -g vue/cli vue create red_pakage pnpm i sass sass-locader -D pnpm i --save normalize.css pnpm i --save-dev postcss-px-to-viewportpnpm i vantlatest-v2 -S pnpm i babel-plugin-import -Dhttps://vant.pro/vant/v2/#/zh-CN/<van-button click&…

深入理解k8s中的容器存储接口(CSI)

CSI出现的原因 K8s原生支持一些存储类型的PV&#xff0c;像iSCSI、NFS等。但这种方式让K8s代码与三方存储厂商代码紧密相连&#xff0c;带来不少麻烦。比如更改存储代码就得更新K8s组件&#xff0c;成本高&#xff1b;存储代码的bug还会影响K8s稳定性&#xff1b;K8s社区维护和…

DeepSeek回答禅宗三重境界重构交易认知

人都是活在各自心境里&#xff0c;有些话通过语言去交流&#xff0c;还是要回归自己心境内在的&#xff0c;而不是靠外在映射到股票和技术方法&#xff1b;比如说明天市场阶段是不修复不接力节点&#xff0c;这就是最高视角看整个市场&#xff0c;还有哪一句话能概括&#xff1…

简单说一下CAP理论和Base理论

CAP理论 什么是CAP 一致性 可用性 分区容错性&#xff1a;系统如果不能再时限内达成数据一致性&#xff0c;就说明发生了分区的情况 然后当前操作在C和A之间做出选择 例如我的网络出现问题了&#xff0c;但是我们的系统不能因为网络问题就直接崩溃 只要我们的分布式系统没…

13.PPT:诺贝尔奖【28】

目录 NO1234 NO567 NO8/9/10 NO11/12 NO1234 设计→变体→字体→自定义字体 SmartArt超链接新增加节 NO567 版式删除图片中的白色背景&#xff1a;选中图片→格式→删除背景→拖拉整个图片→保留更改插入→图表→散点图 &#xff1a;图表图例、网格线、坐标轴和图表标题…

RabbitMQ的安装

1、官网地址 下载地址&#xff1a;Installing RabbitMQ | RabbitMQhttp://www.rabbitmq.com/download.htmlhttp://www.rabbitmq.com/download.html RabbitMQ Documentation | RabbitMQhttps://www.rabbitmq.com/docshttps://www.rabbitmq.com/docs 2、Windows上安装 2.1 安装…