第十六届蓝桥杯单片机组省赛(第一套)
看到很多人在问第十六届蓝桥杯单片机难不难,以及实现多少功能可以获得省一。
- 先介绍下我的作答情况吧,选择题只对一题,程序题的求连续两次距离差值没有考虑负数的情况,其他功能都实现了,成绩是福建省省一第一页,感谢4T老爷手下留情。
- 至于第十六届蓝桥杯单片机组的难度呢?我认为比十五届难(主要难在阅读能力与排坑能力),比十四届简单(毕竟十四届是真神)。
- 以下代码仅供参考,不能保证完全正确。
附件:第十六届蓝桥杯单片机组省赛第一次
一、模板搭建
本题的页面流转要实现四个页面,并且参数设置时参数是不生效的,所以在进入参数设置时要再定义一个新的变量去代替原来的参数进行修改,退出参数设置时再保存修改后的值。
至此,可以先搭建以下模板:
- main.c
#include <STC15F2K60S2.H>
#include "ds18b20.h"
#include "wave.h"
#include "init.h"
#include "led.h"
#include "key.h"
#include "seg.h"
#include "iic.h"typedef unsigned char u8;
typedef unsigned int u16;/*按键*/
idata u8 keyVal,keyDown,keyUp,keyOld;
/*数码管*/
idata u8 segPos;
pdata u8 segBuf[8] = {10,10,10,10,10,10,10,10};
idata u8 segMode; //0-环境 1-运动 2-参数 3-统计
/*指示灯*/
pdata u8 ucLed[8] = {0,0,0,0,0,0,0,0};
/*温度*/
idata u8 tem; //环境温度
/*AD*/
idata u8 light; //光敏电阻放大10倍
/*超声波*/
idata u8 distance; //距离数据(1s采集1次)
/*参数*/
idata u8 keySlow;
idata u8 segSlow;
idata u8 iicSlow;
idata u8 temSlow;
idata u8 waveSlow;
idata u8 setDis[2] = {30,30}; //温度参数/距离参数控制值
idata u8 setCtr[2] = {30,30}; //温度参数/距离参数改变值
idata bit setCtrMode; //温度参数/距离参数改变值索引void keyProc()
{if(keySlow) return;keySlow = 1;keyVal = keyDisp();keyDown = keyVal & ~keyOld;keyUp = ~keyVal & keyOld;keyOld = keyVal;switch(keyDown){case 4:if(++segMode == 4)segMode = 0;//退出参数设置时保存修改值if(segMode == 3){setCtrMode = 0;setDis[0] = setCtr[0];setDis[1] = setCtr[1];}break;case 5://参数设置子页面切换if(segMode == 2)setCtrMode = !setCtrMode;break;case 8://参数加 30~80 break;case 9://参数加 30~80 break;}
}void segProc()
{if(segSlow) return;segSlow = 1;switch(segMode){case 0://...break;case 1://...break;case 2://...break;case 3://...break;}
}void ledProc()
{
}void iicProc()
{if(iicSlow) return;iicSlow = 1;light = lightRead() / 51.0 * 10;
}void waveProc()
{if(waveSlow) return;waveSlow = 1;distancee = waveGet();
}void temProc()
{if(temSlow) return;temSlow = 1;tem = temRead();
}void Timer0_Init(void) //1毫秒@12.000MHz
{AUXR &= 0x7F; //定时器时钟12T模式TMOD &= 0xF0; //设置定时器模式TL0 = 0x18; //设置定时初始值TH0 = 0xFC; //设置定时初始值TF0 = 0; //清除TF0标志TR0 = 1; //定时器0开始计时ET0 = 1; //使能定时器0中断EA = 1;
}void Timer0_Isr(void) interrupt 1
{if(++keySlow == 10) keySlow = 0;if(++segSlow == 90) keySlow = 0;if(++waveSlow == 160) keySlow = 0;if(++iicSlow == 160) keySlow = 0;if(++temSlow == 160) keySlow = 0;if(++segPos == 8) segPos = 0;segDisp(segPos, segBuf[segPos]);ledDisp(ucLed);
}void main()
{systemInit();//系统初始化waveInit();temRead();Timer0_Init();while(1){ledProc();keyProc();segProc();iicProc();temProc();waveProc();}
}
二、环境状态页面
环境状态页面需要处理光强等级,光强等级是通过光敏电阻电压值转换的。
只需在iicProc()
中简单处理即可:
这边为了节省空间,我使用了unsigned char
变量来接收光敏电阻电压值,在接收时将其放大10倍,后续转换时都要放大十倍再进行转换。
void iicProc()
{if(iicSlow) return;iicSlow = 1;light = lightRead() / 51.0 * 10;//放大10倍/*光照强度转化*/if(light < 5) //光照等级4:V<0.5->v*10<5lightLevel = 4;else if(light < 20) //光照等级3:V<2->v*10<20lightLevel = 3;else if(light < 30) //光照等级2:V<3->v*10<30lightLevel = 2;else //光照等级1:V>=3lightLevel = 1;
}
void segProc()
{if(segSlow) return;segSlow = 1;switch(segMode){case 0:segBuf[0] = 11; //CsegBuf[1] = tem / 10; segBuf[2] = tem % 10; segBuf[4] = 10; segBuf[5] = 10; segBuf[6] = 12; //nsegBuf[7] = lightLevel; break;}
}
三、运动检测页面
运动检测页面应该是本题最难的一个页面了,当然这个页面的分数肯定是最多的,因为超声波影响了LED和继电器,一个细节没实现好会导致连坐丢分。
运动状态这张图可以帮助理解题意,上电2s内不读取距离数据,直到第2s开始读取第一次距离数据,这个时候运动状态是肯定发生变化了的,所以要锁住运动状态(锁住期间,就算测量距离从12cm变到6cm,运动状态仍然保持第2s的运动状态,直到第5s时才更新运动状态),并且距离数据的测量是有时间间隔的,每1s才测量一次距离数据。
同时还要注意,两次测量数据的差值是要考虑小的数据减大的数据的,这边可以用signed char
型变量定义数据差值,也可以用abs
,我认为是在相减时先判断哪个数据比较大,然后用大的减小的这种方法比较简单。
要实现的功能很多,碰到这种复杂功能实现,最稳妥的方法就是先实现小功能,再去改进。
1.上电两秒不采集距离数据
上电时,计数变量开始计时两秒,计时期间不进入数据读取(直接return退出),直到两秒是将标志位赋值为1,开始进行数据采集。
idata bit distanceLock; //刚上电2s时不采集距离数据
idata u16 time2s; //计时2svoid waveProc()
{if(waveSlow) return;waveSlow = 1;//上电未满2s直接退出距离处理函数if(!distanceLock)return;
}void Timer0_Isr(void) interrupt 1
{//上电计时2sif(!distanceLock){if(++time2s == 2000)distanceLock = 1;}
}
2.数据采集以一秒为间隔
idata bit distanceFlag; //距离数据1s采集1次标志位
idata u16 time1s; //计时变量,1s采集1次数据
idata bit close; //接近判定标志位void waveProc()
{//采集数据if(!distanceFlag)//保证1s采集1次距离{ distance = waveGet();close = distance < setDis[1]; //距离值低于距离参数触发接近判定distanceFlag = 1;}
}void Timer0_Isr(void) interrupt 1
{//1s采集1次数据if(distanceFlag){if(++time1s == 1000){time1s = 0;distanceFlag = 0;}}
}
3.求相邻两次数据的差值
idata u8 distance; //距离数据(1s采集1次)
idata u8 distanceLast; //上一次的距离数据
idata u8 diff; //两次距离的差值
void waveProc()
{//...//采集数据if(!distanceFlag)//保证1s采集1次距离{ distance = waveGet();diff = (distance>distanceLast) ? distance-distanceLast : distanceLast-distance;distanceLast = distance;}
}
4.运动状态转换
idata u8 distanceMode = 1;//运动状态(根据diff来判断)
void waveProc()
{//采集数据if(!distanceFlag)//保证1s采集1次距离{ distance = waveGet();close = distance < setDis[1]; //距离值低于距离参数触发接近判定distanceFlag = 1;diff = (distance>distanceLast) ? distance-distanceLast : distanceLast-distance;distanceLast = distance;//差值转换运动状态if(diff < 5) //静止(L1)distanceMode = 1;else if(diff < 10)//徘徊(L2)distanceMode = 2;else //运动(L3)distanceMode = 3;}
}
5.运动状态发生变化时锁定运动状态
idata u8 distanceLastMode;//上一次的运动状态
idata bit distanceModeLock;//运动状态锁定
idata u16 time3s;//锁定状态时计时3svoid waveProc()
{if(waveSlow) return;waveSlow = 1;//上电未满2s直接退出距离处理函数if(!distanceLock)return;//采集数据if(!distanceFlag)//保证1s采集1次距离{ distance = waveGet();close = distance < setDis[1]; //距离值低于距离参数触发接近判定distanceFlag = 1;//状态锁定时不判断运动状态变化if(!distanceModeLock){diff = (distance>distanceLast) ? distance-distanceLast : distanceLast-distance;distanceLast = distance;//差值转换运动状态if(diff < 5) //静止(L1)distanceMode = 1;else if(diff < 10)//徘徊(L2)distanceMode = 2;else //运动(L3)distanceMode = 3;//两次运动状态不同时锁定运动状态if(distanceLastMode != distanceMode)distanceModeLock = 1;distanceLastMode = distanceMode;//更新运动状态}}
}void Timer0_Isr(void) interrupt 1
{//状态锁定计时3sif(distanceModeLock){if(++time3s == 3000){time3s = 0;distanceModeLock = 0;}}
}
void segProc()
{if(segSlow) return;segSlow = 1;switch(segMode){case 0://... break;case 1:segBuf[0] = 13; //LsegBuf[1] = distanceMode; segBuf[2] = 10; segBuf[5] = distance / 100 ? distance / 100 : 0;segBuf[6] = distance / 10 % 10;segBuf[7] = distance % 10; break;}
}
四、参数设置、统计数据页面
当温度高于温度参数,测距数据小于距离参数时,继电器吸合,否则断开,统计数据页面记录的是继电器吸合的次数。
1.keyProc()
void keyProc()
{if(keySlow) return;keySlow = 1;keyVal = keyDisp();keyDown = keyVal & ~keyOld;keyUp = ~keyVal & keyOld;keyOld = keyVal;switch(keyDown){case 4:if(++segMode == 4)segMode = 0;if(segMode == 3){setCtrMode = 0;setDis[0] = setCtr[0];setDis[1] = setCtr[1];}break;case 5:if(segMode == 2)setCtrMode = !setCtrMode;break;case 8://参数加 30~80 if(segMode == 2){if(!setCtrMode)//温度+1{if(++setCtr[0] == 81)setCtr[0] = 80;}else//距离+5{setCtr[1] += 5;if(setCtr[1] == 85)setCtr[1] = 80;}} break;case 9://参数加 30~80 if(segMode == 2){if(!setCtrMode)//温度-1{if(--setCtr[0] == 19)setCtr[0] = 20;}else//距离-5{setCtr[1] -= 5;if(setCtr[1] == 15)setCtr[1] = 20;}} break;}
}
2.segProc()
void segProc()
{if(segSlow) return;segSlow = 1;switch(segMode){case 2:segBuf[0] = 14; //PsegBuf[1] = !setCtrMode ? 11 : 13; //C/L segBuf[2] = 10; segBuf[5] = 10;segBuf[6] = setCtr[setCtrMode] / 10;segBuf[7] = setCtr[setCtrMode] % 10; break;case 3:segBuf[0] = 12; //nsegBuf[1] = 11; //CsegBuf[4] = relayCount / 1000 ? relayCount / 1000 : 10; segBuf[5] = (segBuf[4]==10&&relayCount/100%10==0) ? 10 : relayCount/100%10;segBuf[6] = (segBuf[5]==10&&relayCount/10%10==0) ? 10 : relayCount/10%10;segBuf[7] = relayCount % 10; break;}
}
五、LED、继电器
1.继电器
idata u16 relayCount; //继电器吸合次数
idata bit relayHasCount;//继电器吸合一次只计数一次
void ledProc()
{//上电未满2s直接退出led处理函数if(!distanceLock)return;//继电器temHigFlag = (tem > setDis[0]);if(temHigFlag && close && !relayHasCount){relayDisp(1);relayCount++;relayHasCount = 1;//继电器吸合已经计数了}if(!temHigFlag || !close){relayDisp(0);relayHasCount = 0;//重置计数标志位}
}
2.LED
/*指示灯*/
pdata u8 ucLed[8] = {0,0,0,0,0,0,0,0};
idata u8 time100ms; //计时100msL8闪烁
idata bit ledFlash; //L8闪烁标志位void ledProc()
{//L1~L4if(close){switch(lightLevel){case 1:ucLed[0] = 1;ucLed[1] = ucLed[2] = ucLed[3] = 0;break;case 2:ucLed[0] = ucLed[1] = 1;ucLed[2] = ucLed[3] = 0;break;case 3:ucLed[0] = ucLed[1] = ucLed[2] = 1;ucLed[3] = 0;break;case 4:ucLed[0] = ucLed[1] = ucLed[2] = ucLed[3] = 1;break;}}elseucLed[0] = ucLed[1] = ucLed[2] = ucLed[3] = 0;//L8if(distanceMode == 1)ucLed[7] = 0;else if(distanceMode == 2)ucLed[7] = 1;else ucLed[7] = ledFlash;
}void Timer0_Isr(void) interrupt 1
{//L8闪烁if(distanceMode == 3){if(++time100ms == 100){time100ms = 0;ledFlash = !ledFlash;}}else{time100ms = 0;ledFlash = 0;}
}
六、双按键功能处理
1.底层修改
按键8和按键9在同一列,判断按键8是否按下判断的是P33引脚的是否为0,判断按键9是否按下判断的是P32引脚是否为0,所以两个按键同时按下就是P33引脚和P32引脚同时为0,根据这个理论可以修改按键底层。
- key.c
#include "key.h"unsigned char keyDisp()
{unsigned char temp = 0;P44 = 0;P42 = 1;P35 = 1;P34 = 1;if(P33 == 0) temp = 4;if(P32 == 0) temp = 5;P44 = 1;P42 = 0;P35 = 1;P34 = 1;if(P33 == 0) temp = 8;if(P32 == 0) temp = 9;if(!P32 && !P33) temp = 89;return temp;
}
2.main.c调用
idata bit keyPressFlag;//双按键同时按下标志位
idata u16 time2000ms; //双按键长按2s计时
void keyProc()
{if(keySlow) return;keySlow = 1;keyVal = keyDisp();keyDown = keyVal & ~keyOld;keyUp = ~keyVal & keyOld;keyOld = keyVal;//双按键处理if(keyDown == 89 && segMode == 3)keyPressFlag = 1;if(time2000ms == 2001) //长按超过2s{relayCount = 0;keyPressFlag = 0;time2000ms = 0;}if(keyUp == 89){keyPressFlag = 0;time2000ms = 0;}
}void Timer0_Isr(void) interrupt 1
{//双按键长按2sif(keyPressFlag){if(++time2000ms >= 2000)time2000ms = 2001;}
}
相关文章:
第十六届蓝桥杯单片机组省赛(第一套)
看到很多人在问第十六届蓝桥杯单片机难不难,以及实现多少功能可以获得省一。 先介绍下我的作答情况吧,选择题只对一题,程序题的求连续两次距离差值没有考虑负数的情况,其他功能都实现了,成绩是福建省省一第一页&#x…...
使用python写多文件#inlcude
使用下面的程序可以将当前文件夹下面的.c文件的写入main.h文件,我这里是将自己的基于标准库stm32初始化io文件为例。 import osbase ["#ifndef main_H","#define main_H\n","#endif" ]includes set() for file in os.listdir():if…...
深度学习中保存最优模型的实践与探索:以食物图像分类为例
深度学习中保存最优模型的实践与探索:以食物图像分类为例 在深度学习的模型训练过程中,训练一个性能良好的模型往往需要耗费大量的时间和计算资源。而保存最优模型不仅可以避免重复训练,还能方便后续使用和部署。本文将结合食物图像分类的代…...
OpenCv实战笔记(2)基于opencv和qt对图像进行灰度化 → 降噪 → 边缘检测预处理及显示
一、实现效果 二、应用场景 这三步是经典的 “灰度化 → 降噪 → 边缘检测” 预处理流程,常用于: 计算机视觉任务(如物体识别、特征提取)。 图像分析(如文档扫描、车牌识别)。 减少后续算法的计算复杂度&a…...
个人文章不设置vip
今天没登录打开自己文章,发现自己读自己文章还要充值。就感觉很扯。 继而去查看个人的历史文章,发现很多被标注为高质量的文章设置成了VIP文章。 如果仅有一两篇,还可能是本人手滑误设置,这么多就解释不通了。 (大概有…...
【聚类分析】基于copula的风光联合场景生成与缩减
目录 1 主要内容 风光出力场景生成方法 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序方法复现《融合风光出力场景生成的多能互补微网系统优化配置》风光出力场景生成部分,目前大多数研究的是不计风光出力之间的相关性影响,但是地理位置相近…...
CSDN积分详解(介绍、获取、用途)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 积分**一、积分类型及用途****二、积分获取途…...
运维--计划任务
计划任务分为一次性和循环性的计划任务 1.date的用法 date 月日时分年 eg:date 100118222023 date:查看时间和日期、修改时间和日期 获取当前日期:date +%F F:日期 获取当前时间:date +%H:%M:%S H:时 M:分 S:秒 获取周几: date +%w w:周 …...
AVL树(2):
我们之前讲AVL树,我们讲到了旋转,然后讲了左单旋和右单旋。 但是我们这里的单旋产生的条件都是纯粹的一边比较高, 我们看上面这个图片,当我们插入新的结点导致一边的子树比较高的时候,我们必须是存粹的一边高…...
架构思维:异构数据的同步一致性方案
文章目录 一、引言二、全景架构回顾三、潜在问题问题1:Binlog 延迟——理想 vs 实际问题2:Binlog 格式解析问题3:高可靠消费1. 串行 ACK 消费2. 并行消费+乱序风险3. 解决方案 问题4:缓存数据结构设计1. Key–Value 冗…...
nginx 正反向代理和nginx正则
目录 一. 正向代理 1. 编译安装Nginx 2. 配置正向代理 二. 反向代理 1. 配置nginx七层代理 2. 配置nginx四层代理 三. Nginx 缓存 1. 缓存功能的核心原理和缓存类型 2. 代理缓存功能设置 四. Nginx rewrite和正则 1. Nginx正则 2. nginx location 3. Rewrite …...
SAM-Decoding_ 后缀自动机助力大模型推理加速!
SAM-Decoding: 后缀自动机助力大模型推理加速! 大语言模型(LLMs)的推理效率一直是研究热点。本文介绍的SAM-Decoding方法,借助后缀自动机(Suffix Automaton,SAM)实现推测解码,在提升…...
使用Scrapy构建高效网络爬虫:从入门到数据导出全流程
在数据驱动的时代,网络爬虫已成为获取公开信息的核心工具。本文将带您通过Scrapy框架完成一个实战项目,涵盖从零搭建爬虫到多格式数据导出的完整流程,并深入解析Scrapy的Feed Exports功能。 一、项目背景与目标 我们将爬取书籍网站ÿ…...
Docker安装Gitblit(图文教程)
本章教程,使用Docker安装部署Gitblit。 一、Gitblit简介 Gitblit 是一个基于 Java 的 Git 仓库管理工具,主要用于在局域网或小型团队环境中搭建私有 Git 服务器。它提供了一个简单易用的 Web 界面,用于浏览代码、管理仓库和用户权限等。 二、拉取镜像 sudo docker pull git…...
SpringBoot的汽车商城后台管理系统源码开发实现
概述 汽车商城后台管理系统专为汽车4S店和经销商设计,提供全面的汽车管理系统解决方案。 主要内容 1. 核心功能模块 系统提供以下主要功能: 销售管理:记录销售信息,跟踪交易进度客户管理:维护客户…...
组合模式(Composite Pattern)
非常棒!你现在进入了结构型设计模式中最典型的「树形结构」设计模式 —— 组合模式(Composite Pattern)。 我将通过简明解释 清晰代码 类图演示,一步步帮你理解它。 🧠 一句话定义 组合模式允许你将对象组合成树形结…...
Java捕获InterruptedException异常后,会自动清空中断状态
InterruptedException异常一般是在一个线程处于等待(像Thread.sleep()、Object.wait()、Thread.join()等方法)状态时被另一个线程调用interrupt()方法中断而抛出的。一旦捕获到InterruptedException,Java 会自动清除该线程的中断状态。 以下…...
HTML04:图像标签
图像标签 常见的图像标签 JPGGIFPNGBMP <img src"路径" alt"名称" title"悬停名称" width"高" height"宽"/><!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…...
供应链算法整理(二)--- 智能补货
供应链业务的目标价值是:优化货品的供给、销售提供支撑,以降低成本,提高时效、收益,最终提升用户体验。基于目标价值,整体的算法模块分为:智能选品、智能预测、品仓铺货、智能补货、智能调拨、仓网路由、快…...
【毕设通关】——Word交叉引用
📖 前言:在论文中,我们经常会在文段贴图片时,写“如图x所示”的内容,如果每次都手动写数字,那么当需要在前面内容插入图片时,后续更新会很繁琐,这时就需要交叉引用功能。 ǵ…...
java技术总监简历模板
模板信息 简历范文名称:java技术总监简历模板,所属行业:其他 | 职位,模板编号:XDNUTA 专业的个人简历模板,逻辑清晰,排版简洁美观,让你的个人简历显得更专业,找到好工作…...
视频编解码学习三之显示器
整理自:显示器_百度百科,触摸屏_百度百科,百度安全验证 分为阴极射线管显示器(CRT),等离子显示器PDP,液晶显示器LCD 液晶显示器的组成。一般来说,液晶显示器由以下几个部分组成: […...
【人工智能】大模型安全的深度剖析:DeepSeek漏洞分析与防护实践
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大语言模型(LLM)的广泛应用,其安全性问题日益凸显。DeepSeek作为中国领先的开源AI模型,以低成本和高性能著称,但近期暴露的数据库…...
架构思维:使用懒加载架构实现高性能读服务
文章目录 一、引言二、读服务的功能性需求三、两大基本设计原则1. 架构尽量不要分层2. 代码尽可能简单 四、实战方案:懒加载架构及其四大挑战五、改进思路六、总结与思考题 一、引言 在任何后台系统设计中,「读多写少」的业务场景占据主流:浏…...
【AI提示词】黑天鹅模型专家
提示说明 详细解释黑天鹅模型的理论背景、定义、分类及其在不同领域的应用。 提示词 # Role: 黑天鹅模型专家## Profile - language: 中文 - description: 详细解释黑天鹅模型的理论背景、定义、分类及其在不同领域的应用 - background: 黑天鹅模型是尼尔斯莫尔提出的理论&a…...
pip安装包时网络不畅,替换国内PyPI镜像源
1、PyPI 镜像源 1.1、定义 PyPI 镜像源是对 Python Package Index(PyPI)官方仓库的复制。 PyPI 是 Python 社区中最大的软件包仓库,存储着大量的 Python 包,供开发者们下载和使用。 然而,由于 PyPI 服务器位于国外&a…...
TS 类型推论
应用场景: 1.变量初始化 仅声明不初始化无法推断是什么类型,必须手动添加类型注解 2.决定函数返回值 根据函数体内的运算可以推断出返回值的类型 函数参数的类型声明建议一定要手写...
Java基于SaaS模式多租户ERP系统源码
目录 一、系统概述 二、开发环境 三、系统功能介绍 一、系统概述 ERP,全称 Enterprise Resource Planning 即企业资源计划。是一种集成化的管理软件系统,它通过信息技术手段,将企业的各个业务流程和资源管理进行整合,以提高企业…...
PHP的include和require
文章目录 环境require和includerequire VS includerequire(include) VS require_once(include_once)路径问题当前工作目录对相对路径的影响题外话总结其它 参考 环境 Windows 11 专业版XAMPP v3.3.0 PHP 8.2.12Apache 2.4.58 VSC…...
日本人工智能发展全景观察:从技术革新到社会重构的深度解析
一、日本IT产业演进与AI技术崛起的历史脉络 1.1 信息化时代的奠基(1990-2010) 日本IT产业的腾飞始于"信息高速公路计划"的实施。1994年NTT推出全球首个商用光纤网络,至2005年实现全国光纤覆盖率突破80%。这一时期培育出富士通、N…...
什么是DGI数据治理框架?
DGI数据治理框架是由数据治理研究所(Data Governance Institute, DGI)提出的一套系统性方法论,旨在帮助企业或组织建立有效的数据治理体系,确保数据资产的高质量管理、合规使用和价值释放。以下是关于DGI数据治理框架的核心内容&a…...
[硬件电路-12]:LD激光器与DFB激光器功能概述、管脚定义、功能比较
一、LD激光器(普通半导体激光器)功能 核心功能: LD激光器通过半导体材料的电子-空穴复合实现受激辐射,将电能直接转换为高相干性激光,是光电子系统的核心光源。 基础光发射功能 工作原理:正向偏置电流注入…...
升级 CUDA Toolkit 12.9 与 cuDNN 9.9.0 后验证指南:功能与虚拟环境检测
#工作记录 在 NVIDIA 发布 CUDA Toolkit 12.9 与 cuDNN 9.9.0 后,开发者纷纷选择升级以获取新特性和性能提升。 CUDA Toolkit 12.9 与 cuDNN 9.9.0 发布,带来全新特性与优化-CSDN博客 然而,升级完成并不意味着大功告成,确认升级后…...
湖仓一体架构解析:如何平衡数据灵活性与分析性能?
一、什么是湖仓一体架构?解决哪些核心问题? 在数据爆炸的时代,企业面临着如何高效处理和分析海量数据的挑战。传统架构难以同时满足灵活性和性能需求,湖仓一体架构应运而生。 传统数据架构的局限 数据湖(存储各类原…...
56、【OS】【Nuttx】编码规范解读(四)
背景 接之前 blog 53、【OS】【Nuttx】编码规范解读(一) 54、【OS】【Nuttx】编码规范解读(二) 55、【OS】【Nuttx】编码规范解读(三) 分析了行宽格式,注释要求,花括号风格等&#…...
MySQL基础关键_007_DQL 练习
目 录 一、题目 二、答案(不唯一) 1.查询每个部门薪资最高的员工信息 2.查询每个部门高于平均薪水的员工信息 3. 查询每个部门平均薪资等级 4.查询部门中所有员工薪资等级的平均等级 5.不用分组函数 max 查询最高薪资 6.查询平均薪资最高的部门编…...
气泡图、桑基图的绘制
1、气泡图 使用气泡图分析某一年中国同欧洲各国之间的贸易情况。 气泡图分析的三个维度: • 进口额:横轴 • 出口额:纵轴 • 进出口总额:气泡大小 数据来源:链接: 国家统计局数据 数据概览(进出口总额&…...
数据库Mysql_联合查询
或许自己的不完美才是最完美的地方,那些让自己感到不安的瑕疵,最终都会变成自己的特色。 ----------陳長生. 1.介绍 1.1.为什么要进行联合查询 在数据设计的时候,由于范式的需求,会被分为多个表,但是当我们要查询数据…...
数字孪生:解码智慧城市的 “数字神经系统”
当城市规模以惊人速度扩张,传统管理模式在交通拥堵、能源浪费、应急响应滞后等问题面前渐显乏力。数字孪生技术正以 “数字镜像” 重构城市运作逻辑,为智慧城市装上一套高效、智能的 “数字神经系统”。通过将物理世界的城市映射到虚拟空间,实…...
开源项目:optimum-quanto库介绍
项目地址:https://github.com/huggingface/optimum-quanto 官网介绍:https://huggingface.co/blog/quanto-introduction 量化是一种技术,通过使用低精度数据类型(如 8 位整数 (int8))而不是通常…...
C++学习:六个月从基础到就业——C++11/14:lambda表达式
C学习:六个月从基础到就业——C11/14:lambda表达式 本文是我C学习之旅系列的第四十篇技术文章,也是第三阶段"现代C特性"的第二篇,主要介绍C11/14中引入的lambda表达式。查看完整系列目录了解更多内容。 引言 Lambda表达…...
cesium基础设置
在上节新建的程序中,我们会看到有一行小字: 原因为我们没有输入token,想要让这行小字消失的方法很简单,前往cesium的官网注册账号申请token.然后在App.vue中如下方式添加token 保存后即可发现小字消失. 如果连logo都想去掉呢? 在源代码中,我们初始化了一个viwer,即查看器窗口…...
一些好玩的东西
🚀 终极挑战:用 curl 玩《星球大战》 telnet towel.blinkenlights.nl # 其实不是 curl,但太经典了! 效果:在终端播放 ASCII 版《星球大战》电影!(如果 telnet 不可用,可以试…...
ActiveMQ 与其他 MQ 的对比分析:Kafka/RocketMQ 的选型参考(二)
ActiveMQ、Kafka 和 RocketMQ 详细对比 性能对比 在性能方面,Kafka 和 RocketMQ 通常在高吞吐量场景下表现出色,而 ActiveMQ 则相对较弱。根据相关测试数据表明,Kafka 在处理大规模日志数据时,单机吞吐量可以达到每秒数十万条甚…...
HTML学习笔记(7)
一、什么是jQuery jQuery 是一个 JavaScript 库。他实现了JavaScript的一些功能,并封装起来,对外提供接口。 例子实现一个点击消失的功能,用JavaScript实现 <!DOCTYPE html> <html lang"en"> <head><meta …...
Jenkis安装、配置及账号权限分配保姆级教程
Jenkis安装、配置及账号权限分配保姆级教程 安装Jenkins下载Jenkins启动Jenkins配置Jenkins入门Jenkins配置配置中文配置前端自动化任务流新建任务拉取代码打包上传云服务并运行配置后端自动化任务流新建任务拉取代码打包上传云服务并运行账号权限分配创建用户分配视图权限安装…...
面向对象编程(Object-Oriented Programming, OOP)是什么?
李升伟 编译 简介 如果你已经接触过软件开发领域的话,你肯定听说过"面向对象编程"(Object-Oriented Programming, OOP)这个术语。但你知道什么是OOP吗?为什么它如此重要?在这篇文章中我们将深入解析OOP的基…...
Hotspot分析(1):单细胞转录组识别信息基因(和基因模块)
这一期我们介绍一个常见的,高分文章引用很高的一个单细胞转录组分析工具Hotspot,它可针对单细胞转录组数据识别有意义基因或者基因module,类似于聚类模块。所谓的”informative "的基因是那些在给定度量中相邻的细胞之间以相似的方式表达…...
从图文到声纹:DeepSeek 多模态技术的深度解析与实战应用
目录 一、引言二、DeepSeek 技术基础2.1 架构与原理2.2 多模态能力概述 三、文本与图像关联应用3.1 图文跨模态对齐技术3.1.1 技术原理3.1.2 DeepSeek 的独特方法 3.2 图像生成与文本描述3.2.1 应用案例3.2.2 技术实现 3.3 多模态检索系统中的应用3.3.1 系统搭建流程3.3.2 实际…...
cuDNN 9.9.0 便捷安装-Windows
#工作记录 从 CUDA12.6.3 和 cuDNN9.6.0 版本起,开启了使用 exe 安装包直接进行安装升级的支持模式,彻底改变了以往那种繁琐的安装流程。 在这两个版本之前,开发者在安装 CUDA 和 cuDNN 时,不得不手动下载 cuDNN 压缩包…...