53 基于单片机的8路抢答器加记分
目录
一、主要功能
二、硬件资源
三、程序编程
四、实现现象
一、主要功能
首先有三个按键 分别为开始 暂停 复位,然后八个选手按键,开机显示四条杠,然后按一号选手按键,数码管显示30,这时候二号选手按键是加时间,三号宣誓减时间,这个是抢答倒计时,再按一次一号选手按键,数码管显示30是答题倒计时时间,同样二号和三号按键可以加减时间,然后再按1号按键,此时进入计分时刻,此时数码管是显示是1-00,然后2号键和3号键加减分数,此时数码管显示四条杠,此时按开始键,数码管开始抢答倒计时,此时比如1号按键按下,直接跳到答题倒计时,此时数码管显示1-30,这个30比如就是答题时间,开始倒计时,之前得抢答最后五秒内没人按就蜂鸣器报警,这个答题也是如此,然后答题30秒倒计时完后,,按复位键再按开始建可以重新开始抢答。还有一个违规抢答的功能 就是如果主持人没按开始,选手按抢答了会报警
二、硬件资源
基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。
三、程序编程
#include<reg51.h>
#include<intrins.h>
sbit smg1=P2^4; //定义数码管第一位
sbit smg2=P2^6; //定义数码管第二位
sbit smg3=P2^7; //定义数码管第三位
sbit smg4=P2^5;sbit keyks=P2^2; //定义开始按键
sbit keytz=P2^1; //定义停止按键
sbit keyqc=P2^0; //定义清除按键sbit key1=P1^4; //定义1号抢答选手
sbit key2=P1^5; //定义2号抢答选手
sbit key3=P1^6; //定义3号抢答选手
sbit key4=P1^7; //定义4号抢答选手
sbit key5=P3^4; //定义5号抢答选手
sbit key6=P3^5; //定义6号抢答选手
sbit key7=P3^6; //定义7号抢答选手
sbit key8=P3^7; //定义8号抢答选手
sbit spk=P1^0; //定义蜂鸣器
static int djs=30,djs2=30,djs3=30,js=0,xh=1,fs1,fs2,fs3,fs4,fs5,fs6,fs7,fs8; //djs和bt是初始倒计时时间,可修改
int fs[8];
unsigned char flag=0,flag1=0,flag2=0,flag3=0;
//int table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int table[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7,0x80};void delayms(int x) //延时函数
{
char i;
while(x--){for(i=500;i>0;i--); }
}void djsxsjf()
{int b1,b2;b1=fs[xh]/10;b2=fs[xh]%10; // 将倒计时时间分成高低位P0=table[b1];smg2=0;delayms(3);smg2=1; //显示十位数字P0=table[b2];smg3=0;delayms(3); //显示个位数字smg3=1;P0=0x80;smg4=0;delayms(3); //显示个位数字smg4=1;P0=table[xh];smg1=0;delayms(3); //显示个位数字smg1=1;
}void djsxs200()
{int b1,b2;b1=djs2/10;b2=djs2%10; // 将倒计时时间分成高低位P0=table[b1];smg2=0;delayms(3);smg2=1; //显示十位数字P0=table[b2];smg3=0;delayms(3); //显示个位数字smg3=1;
}void djsxs() //显示倒计时函数
{ int b1,b2;b1=djs/10;b2=djs%10; // 将倒计时时间分成高低位P0=table[b1];smg2=0;delayms(3);smg2=1; //显示十位数字P0=table[b2];smg3=0;delayms(3); //显示个位数字smg3=1;
}
void djsxs30() //第二位数码管显示-{P0=0x80; //第二位数码管smg4=0;delayms(3);smg4=1;}
void djsxs22() { P0=0x80;smg1=0;delayms(3);smg1=1;//第一位数码管显示-P0=0x80; //第二位数码管smg4=0;delayms(3);smg4=1;P0=0x80;smg2=0;delayms(3); //第三位数码管显示-smg2=1;P0=0x80;smg3=0;delayms(3);smg3=1; //第四位数码管显示-
}void djsxs1(){P0=table[1];smg1=0;delayms(3);smg1=1; //第一位数码管显示1}
void djsxs2(){P0=table[2];smg1=0;delayms(3);smg1=1; //第一位数码管显示2}
void djsxs3(){P0=table[3];smg1=0;delayms(3);smg1=1; //第一位数码管显示3}
void djsxs4(){P0=table[4];smg1=0;delayms(3);smg1=1; //第一位数码管显示4}
void djsxs5(){P0=table[5];smg1=0;delayms(3);smg1=1; //第一位数码管显示5}
void djsxs6(){P0=table[6];smg1=0;delayms(3);smg1=1; //第一位数码管显示6}
void djsxs7(){P0=table[7];smg1=0;delayms(3);smg1=1; //第一位数码管显示7
}
void djsxs8(){P0=table[8];smg1=0;delayms(3);smg1=1; //第一位数码管显示8}
void main()
{
int djs1=30;
Timer0_init(); //初始化定时器中断
spk=1; //蜂鸣器不响
djs=30; //倒计时赋值
djs1=30;
while(1)
{LOOP1: djs=djs1;djs2=djs3;
djsxs22(); //LOOP1是标号,显示 - --if(key1==0) //在定时器运行状态下,key1==0 则说明1号选手按下按键{delayms(3);if(key1==0){ flag3 = 1;flag1++;if(flag1>3){flag1=0;}while(!key1); //去除按键抖动后,重新在判断,是否确实按下djs=30;djs2=30;while(1){TR0=0; //定时器停止if(flag1==1){djsxs(); }if(flag1 == 2){djsxs200();//答题}if(flag1 == 3){djsxsjf();//记分}if(key2==0) //复位按下按下{ delayms(8); //去除抖动if(key2==0) //再次判断是否按下复位按键{do{ while(!key2); //如果按下复位键,则回到- --状态delayms(5);}while(key2!=1);if(flag1 == 1){djs++;djs1=djs;}if(flag1 == 2){djs2++;djs3=djs2;}if(flag1 == 3){switch(xh){case 1:fs1++;fs[1]=fs1;break;case 2:fs2++;fs[2]=fs2;break;case 3:fs3++;fs[3]=fs3;break;case 4:fs4++;fs[4]=fs4;break;case 5:fs5++;fs[5]=fs5;break;case 6:fs6++;fs[6]=fs6;break;case 7:fs7++;fs[7]=fs7;break;case 8:fs8++;fs[8]=fs8;break;}}}}if(key3==0) //复位按下按下{ delayms(8); //去除抖动if(key3==0) //再次判断是否按下复位按键{ do{while(!key3); //如果按下复位键,则回到- --状态delayms(5); }while(key3!=1);if(flag1 == 1){djs--;djs1=djs;}if(flag1 == 2){djs2--;djs3=djs2;}if(flag1 == 3){switch(xh){case 1:fs1--;fs[1]=fs1;break;case 2:fs2--;fs[2]=fs2;break;case 3:fs3--;fs[3]=fs3;break;case 4:fs4--;fs[4]=fs4;break;case 5:fs5--;fs[5]=fs5;break;case 6:fs6--;fs[6]=fs6;break;case 7:fs7--;fs[7]=fs7;break;case 8:fs8--;fs[8]=fs8;break;}}}}if(key1==0) //复位按下按下{ delayms(3); //去除抖动if(key1==0) //再次判断是否按下复位按键{ flag1++;if(flag1>3){flag1 = 0;}while(!key1); //如果按下复位键,则回到- --状态if(flag1 == 0){goto LOOP1; //goto语句,回到loop1表号处}}} }}}if(keyks==0){ delayms(3); //去除按键抖动if(keyks==0){ flag3 = 1;flag2++;while(!keyks); //以上表示按下开始按键 TR0=1; //启动定时器 开始倒计时while(1){if(flag2>2){flag2 = 1;}if(flag2 == 1){djsxs();}if(flag2 == 2){djsxs200();}if(keytz==0){delayms(3); //此处表示出去抖动, 以后不一一标出if(keytz==0){ while(!keytz); //以上表示按下停止按键后 {TR0=0; //定时器停止flag=0;//spk=1;}}}if(keyks==0){delayms(3);if(keyks==0){ while(!keyks); //以上表示按下清楚按键后 TR0=1; //定时器启动}}
/***************************以下是八个选手抢答,key1表示1号选手,依次类推,注释只写第一位选手,其他和第一个完全一致,************************************/if((key1==0)&&(TR0==1)) //在定时器运行状态下,key1==0 则说明1号选手按下按键{ spk=0; //蜂鸣器响delayms(3);if(key1==0){ while(!key1); //去除按键抖动后,重新在判断,是否确实按下{xh = 1;flag2=2;spk=1; //蜂鸣器不响flag=0;//清0最后五秒响蜂鸣器}while(1){djsxs1(); //显示选手编号djsxs30(); //第二位数码管显示djsxs200(); //显示剩余倒计时时间if(djs2<=5) {flag=1; }if(djs2==0) //当倒计时时间等于0后,需要按清楚键恢复{flag=0;spk=1;goto LOOP1; } if(keyqc==0){ delayms(3); //去除抖动if(keyqc==0){ while(!keyqc); //如果按下清楚键,则回到- --状态goto LOOP1; //goto语句,回到loop1表号处}} }}}if((key2==0)&&(TR0==1)){ spk=0;delayms(3);if(key2==0){ while(!key2);{xh = 2;flag2=2;spk=1;flag=0;//清0最后五秒响蜂鸣器}while(1){djsxs2();djsxs30(); //第二位数码管显示-djsxs200(); //显示剩余倒计时时间if(djs2<=5) {flag=1; }if(djs2==0) //当倒计时时间等于0后,需要按清楚键恢复{flag=0;spk=1;goto LOOP1; } if(keyqc==0){ delayms(3);if(keyqc==0){ while(!keyqc);goto LOOP1; }} }}}if((key3==0)&&(TR0==1)){ spk=0;delayms(3);if(key3==0){ while(!key3);{xh = 3;flag2=2;spk=1;flag=0;//清0最后五秒响蜂鸣器}while(1){djsxs3();djsxs30(); //第二位数码管显示-djsxs200(); //显示剩余倒计时时间if(djs2<=5) {flag=1; }if(djs2==0) //当倒计时时间等于0后,需要按清楚键恢复{flag=0;spk=1;goto LOOP1; } if(keyqc==0){ delayms(3);if(keyqc==0){ while(!keyqc);goto LOOP1; }} }}}if((key4==0)&&(TR0==1)){ spk=0;delayms(3);if(key4==0){ while(!key4);{xh = 4;flag2=2;spk=1;flag=0;//清0最后五秒响蜂鸣器}while(1){djsxs4();djsxs30(); //第二位数码管显示-djsxs200(); //显示剩余倒计时时间if(djs2<=5) {flag=1; }if(djs2==0) //当倒计时时间等于0后,需要按清楚键恢复{flag=0;spk=1;goto LOOP1; } if(keyqc==0){ delayms(3);if(keyqc==0){ while(!keyqc);goto LOOP1; }} }}}if((key5==0)&&(TR0==1)){ spk=0;delayms(3);if(key5==0){ while(!key5);{xh = 5;flag2=2;spk=1;flag=0;//清0最后五秒响蜂鸣器}while(1){djsxs5();djsxs30(); //第二位数码管显示-djsxs200(); //显示剩余倒计时时间if(djs2<=5) {flag=1; }if(djs2==0) //当倒计时时间等于0后,需要按清楚键恢复{flag=0;spk=1;goto LOOP1; } if(keyqc==0){ delayms(3);if(keyqc==0){ while(!keyqc);goto LOOP1; }} }}}if((key6==0)&&(TR0==1)){ spk=0;delayms(3);if(key6==0){ while(!key6);{xh = 6;flag2=2;spk=1;flag=0;//清0最后五秒响蜂鸣器}while(1){djsxs6();djsxs30(); //第二位数码管显示-djsxs200(); //显示剩余倒计时时间if(djs2<=5) {flag=1; }if(djs2==0) //当倒计时时间等于0后,需要按清楚键恢复{flag=0;spk=1;goto LOOP1; } if(keyqc==0){ delayms(3);if(keyqc==0){ while(!keyqc);goto LOOP1; }} }}}if((key7==0)&&(TR0==1)){ spk=0;delayms(3);if(key7==0){ while(!key7);{xh = 7;flag2=2;spk=1;flag=0;//清0最后五秒响蜂鸣器}while(1){djsxs7();djsxs30(); //第二位数码管显示-djsxs200(); //显示剩余倒计时时间if(djs2<=5) {flag=1; }if(djs2==0) //当倒计时时间等于0后,需要按清楚键恢复{flag=0;spk=1;goto LOOP1; } if(keyqc==0){ delayms(3);if(keyqc==0){ while(!keyqc);goto LOOP1; }} }}}if((key8==0)&&(TR0==1)){ spk=0;delayms(3);if(key8==0){ while(!key8);{xh = 8;flag2=2;spk=1;flag=0;//清0最后五秒响蜂鸣器}while(1){djsxs8();djsxs30(); //第二位数码管显示-djsxs200(); //显示剩余倒计时时间if(djs2<=5) {flag=1; }if(djs2==0) //当倒计时时间等于0后,需要按清楚键恢复{flag=0;spk=1;goto LOOP1; } if(keyqc==0){ delayms(3);if(keyqc==0){ while(!keyqc);goto LOOP1; }} }}} if(djs<=5) {flag=1; }//spk=0; //到倒计时小于5是,蜂鸣器响if(djs==0) //当倒计时时间等于0后,需要按清楚键恢复{flag=0;spk=1;while(1){if(keyqc==0){ delayms(3);if(keyqc==0){ while(!keyqc);spk=1; goto LOOP1; }}}} }}}if(flag3 == 0){if(key2==0){delayms(3);if(key2 == 0){spk = 0;while(!key2);}}if(key3==0){delayms(3);if(key3 == 0){spk = 0;while(!key3);}}if(key4==0){delayms(3);if(key4 == 0){spk = 0;while(!key4);}}if(key5==0){delayms(3);if(key5 == 0){spk = 0;while(!key5);}}if(key6==0){delayms(3);if(key6 == 0){spk = 0;while(!key6);}}if(key7==0){delayms(3);if(key7 == 0){spk = 0;while(!key7);}}if(key8==0){delayms(3);if(key8 == 0){spk = 0;while(!key8);}}}}}
四、实现现象
具体动态效果看B站演示视频:
基于单片机的8路抢答器加记分_哔哩哔哩_bilibili
全部资料(源程序、仿真文件、安装包、原理图、演示视频):
链接: https://pan.baidu.com/s/1bYm0-YgFOqER36jrQ_xpTQ?pwd=49kj 提取码: 49kj
相关文章:
53 基于单片机的8路抢答器加记分
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 首先有三个按键 分别为开始 暂停 复位,然后八个选手按键,开机显示四条杠,然后按一号选手按键,数码管显示30,这…...
ubuntu多版本安装gcc
1.ubuntu安装gcc 9.3.1 $ sudo apt update $ sudo apt install gcc-9 g-9 二、配置GCC版本 安装完成后,需要使用update-alternatives命令来配置GCC版本。这个命令允许系统在多个安装的版本之间进行选择 1.添加GCC 9.3.1到update-alternatives管理 $ sudo update-a…...
异步处理优化:多线程线程池与消息队列的选择与应用
目录 一、异步处理方式引入 (一)异步业务识别 (二)明确异步处理方式 二、多线程线程池(Thread Pool) (一)工作原理 (二)直面优缺点和适用场景 1.需要快…...
音视频技术扫盲之预测编码的基本原理探究
预测编码是一种数据压缩技术,广泛应用于图像、视频和音频编码等领域。其基本原理是利用数据的相关性,通过对当前数据的预测和实际值与预测值之间的差值进行编码,从而实现数据压缩的目的。 一、预测编码的基本概念 预测编码主要包括预测器和…...
计算机毕业设计SpringCloud+大模型微服务高考志愿填报推荐系统 高考大数据 SparkML机器学习 深度学习 人工智能 Python爬虫 知识图谱
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
AIGC训练效率与模型优化的深入探讨
文章目录 1.AIGC概述2.AIGC模型训练效率的重要性3.模型优化的概念与目标4.模型优化策略4.1 学习率调节4.2 模型架构选择4.3 数据预处理与增强4.4 正则化技术4.5 量化与剪枝 5.代码示例6.结论 人工智能领域的发展,人工智能生成内容( AIGC)越来…...
《深入浅出HTTPS》读书笔记(13):块密码算法之迭代模式(续)
CTR模式 每次迭代运算的时候要生成一个密钥流(keystream)。 各个密钥流之间是有关系的,最简单的方式就是密钥流不断递增,所以才叫作计数器模式。 ◎在处理迭代之前,先生成每个密钥流,有n个数据块࿰…...
定时任务删除MongoDB历史数据
前言 MongoDB数据过多,导致存储成本飙升,为了降低成本,需要将历史数据删除。 删除逻辑 添加配置文件控制删除逻辑 syncconfig:deleteMongoConfig:#同步状态,true同步,false不同步syncStatus: true#删除数据的时间&…...
Simulink的SIL软件在环测试
以基于模型的设计(MBD)的软件开发时,需要进行SIL(软件在环测试)。SIL测试就是在PC上验证模型是否与代码功能一致。在项目开展中,用在需要将控制器生成移植到硬件前,把控制器的模块生成代码&…...
你能穿过迷雾看清一切吗
很多事情的真相有谁知道? 我和家里人被看不见的攻击攻击和操控,失控和无助状态被假鬼录制,然后安排某些不知道整个实际情况和真相的人去听,间接歪曲了整件事情。 各种高科技配合和各种脑功能操控伤害是一般人想都想不到的&#…...
8 设计模式之简单工厂模式
设计模式是软件开发中的一套通用解决方案,而简单工厂模式则是最基础、最常用的一种创建型模式。在这篇博客中,我将为大家详细介绍简单工厂模式的概念、优缺点,以及通过一个饮料制作的案例,帮助大家更好地理解和应用这种模式。 一、…...
一步一步写线程之十六线程的安全退出之一理论分析
一、多线程的开发 多线程的开发,在实际场景中几乎是无法避开的。即使是前端看似没有使用线程,其实在底层的框架中也使用了线程进行了支撑。至少到现在,不管是协程还是其它什么新的编程方式,仍然无法撼动线程的主流地位。 多线程的…...
《Learn Three.js》学习(4) 材质
前言: 材质为scene中物体的皮肤,有着不同的特性和视觉效果。 材质的共有属性: 基础属性: 融合属性: 融合决定了我们渲染的颜色如何与它们后面的颜色交互 高级属性: 与WebGL内部有关 简单材质࿱…...
【QNX+Android虚拟化方案】128 - QNX 侧触摸屏驱动解析
【QNX+Android虚拟化方案】128 - QNX 侧触摸屏驱动解析 一、QNX 侧触摸屏配置基于原生纯净代码,自学总结 纯技术分享,不会也不敢涉项目、不泄密、不传播代码文档!!! 本文禁止转载分享 !!! 汇总链接:《【QNX+Android虚拟化方案】00 - 系列文章链接汇总》 本文链接:《【…...
Oracle SCN与时间戳的映射关系
目录 一、基本概述 二、相关操作 三、参考文档 一、基本概述 Oracle 数据库中的 SYS.SMON_SCN_TIME 表是一个关键的内部表,主要用于记录过去时间段中SCN与具体的时间戳之间的映射关系。这种映射关系可以帮助用户将 SCN 值转换为可读性更强的时间戳,从而…...
量化交易系统开发-实时行情自动化交易-8.2.发明者FMZ平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于发明者FMZ平台介绍。 发明…...
HBU深度学习作业9
1. 实现SRN (1)使用Numpy实现SRN import numpy as npinputs np.array([[1., 1.],[1., 1.],[2., 2.]]) # 初始化输入序列 print(inputs is , inputs)state_t np.zeros(2, ) # 初始化存储器 print(state_t is , state_t)w1, w2, w3, w4, w5, w6, w7, …...
关于otter监控告警使用
一、背景 近期在使用otter完成单机房单向同步时,常常遇到channel假死的情况,导致Pipeline同步停止,系统表数据同步停止,影响生产环境用户数据查询相关的功能,虽然事后能够通过停channel后再启用channel重新启用…...
复合查询和内外连接
文章目录 1. 简单查询2. 多表查询2.1 显示雇员名、雇员工资以及所在部门的名字2.2 显示部门号为10的部门名,员工名和工资2.3 显示各个员工的姓名,工资,及工资级别 3. 自连接4. 子查询4.1 where后的子查询4.1.1 单行子查询4.1.2 多行子查询 (i…...
动态规划【C++优质版】
(本文未经作者书面允许,禁止以任何形式传播(包括但不限于转载,翻译……)如需引用 请标注原作者) Intro: 动态规划是一种用于解决优化问题的算法策略。在 C 中,它主要用于处理那些具…...
柔性芯片:实现万物互联的催化剂
物联网 (IoT) 市场已经非常成熟,麦肯锡预测,物联网将再创高峰,到 2030 年将达到 12.5 万亿美元的估值。然而,万物互联 (IoE) 的愿景尚未实现,即由数十亿台智能互联设备组成,提供大规模洞察和效率。 究竟是…...
【分布式】分布式事务
目录 1、事务的发展 2、本地事务 (1)如何保障原子性和持久性? (2)如何保障隔离性? 2、全局事务 (1)XA事务的两段式提交 (2)XA事务的三段式提交…...
nacos安装部署
nacos安装部署 1.安装nacos 1.安装nacos nacos的安装很简单下载后解压启动即可,但是在启动前请确保jdk环境正常; 1.首先我们要下载nacos安装包:可以到官网下载,注意我这里使用的是2.1.0版本; 2.下载完成后࿰…...
git 上传代码时报错
在上传代码时,显示无法上传 PS E:\JavaWeb\vue3-project> git push To https://gitee.com/evening-breeze-2003/vue3.git! [rejected] master -> master (non-fast-forward) error: failed to push some refs to https://gitee.com/evening-breeze-20…...
【C++】数字位数提取:从个位到十位的深入分析与理论拓展
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯第一题:提取个位数解法代码解法分析代码优化拓展思考:取模运算的普适性 💯第二题:提取十位数题目解读与思路分析方法一&…...
数据结构--二叉树的创建和遍历
目录 引入 定义 性质 二叉树的创建 迭代法 注意事项: 递归法 注意事项: 二叉树的遍历 深度优先 广度优先 先序遍历(前序遍历) 中序遍历 后序遍历 层序遍历 查找树结构中是否存在某数值 方法一: 方法…...
CEF127 编译指南 Linux篇 - 安装Git和Python(三)
1. 引言 在前面的文章中,我们已经完成了基础开发工具的安装和配置。接下来,我们需要安装两个同样重要的工具:Git 和 Python。这两个工具在 CEF 的编译过程中扮演着关键角色。Git 负责管理和获取源代码,而 Python 则用于运行各种编…...
计算机网络的类型
目录 按覆盖范围分类 个人区域网(PAN) 局域网(LAN) 城域网(MAN) 4. 广域网(WAN) 按使用场景和性质分类 公网(全球网络) 外网 内网(私有网…...
Web入门(学习笔记)
Web入门 文章目录 Web入门SpringSpringBootWeb入门HTTP协议HTTP-概述HTTP特点 HTTP-请求协议HTTP-请求数据格式 HTTP-响应协议响应状态码 HTTP-协议解析 Web服务器-TomcatWeb服务器简介基本使用Tomcat文件夹目录解析常见问题Tomcat部署项目 入门程序解析**内嵌的Tomcat服务器**…...
mind+自定义库编写注意事项
在mind图形化命令编写中,main.ts 文件是通过图形化编程工具生成 C 代码,然后将生成的 C 代码上传到 Arduino Uno 上执行。 这些由main.ts定义的图形化代码通过生成的代码,需要包含调用arduinoc/libraries文件夹的*.h和*.cpp文件&#…...
jQuery零基础入门速通(上)
大家好,我是小黄。 在前端开发的世界里,jQuery以其简洁的语法和强大的功能,一直是许多开发者手中的利器。它不仅简化了HTML文档遍历和操作、事件处理、动画以及Ajax交互,还极大地提高了开发效率。本文将带你走进jQuery的世界&…...
计算机网络-Wireshark探索IPv4
使用工具 Wiresharkcurl(MacOS)traceroute: This lab uses “traceroute” to find the router level path from your computer to a remote Internet host. traceroute is a standard command-line utility for discovering the Internet paths that your computer uses. It i…...
【05】Selenium+Python 两种文件上传方式(AutoIt)
上传文件的两种方式 一、input标签上传文件 可以用send_keys方法直接上传文件 示例代码 input标签上传文件import time from selenium import webdriver from chromedriver_py import binary_path # this will get you the path variable from selenium.webdriver.common.by i…...
《构建 C++分布式计算框架:赋能人工智能模型并行训练》
在人工智能迅猛发展的今天,模型训练所需的计算资源呈指数级增长。为了高效地支持人工智能模型在多节点、多 GPU/CPU 集群上的并行训练,基于 C构建分布式计算框架成为了关键之举。 一、分布式计算框架的核心意义 随着人工智能模型复杂度的不断攀升&…...
分支定价算法Branch and price
分支定价算法是进阶版的列生成算法,是用来专门求解整数规划问题的。 目录 1.整数规划与线性规划的关系 2.限制主问题(RLMP)求得整数解 3.B&P用法:以VRPTW为例 列生成是求解线性规划问题的算法,通过不断往限制主…...
【信息系统项目管理师】第5章:信息系统工程 考点梳理
文章目录 5.1 软件工程5.1.1 架构设计1、软件架构风格2、软件架构评估 5.1.2 需求分析1、需求的层次2、需求过程(重点)3、UML事务、关系和视图4、面向对象分析 5.1.3 软件设计1、结构化设计2、面向对象设计3、设计模式 5.1.4 软件实现1、软件配置管理2、…...
kdump调试分析(适用于麒麟,ubuntu等OS)
1. kdump基本原理 1.1 内核崩溃处理机制 当 Linux 系统内核发生崩溃时,通常会触发 panic,系统停止正常运行。Kdump 在这种情况下: 使用一个备用的内核(称为 crash kernel)来启动最小化的环境。从崩溃的主内核中复制内存内容(转储文件)。将转储文件保存到预定义的存储位…...
Ubuntu在NVME硬盘使用Systemback安装记录
问题 使用Systemback重装系统找不到NVME硬盘。 0.使用Systemback制作iso后,制作启动盘 1.插入启动盘进入live mode模式 2.安装gparted sudo apt-get update sudo apt-get install gparted3.使用gparted对待分区硬盘进行分区 gparted按照你希望的分区方式分区即…...
C++多态的实现原理
【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 1、类的继承 子类对象在创建时会首先调用父类的构造函数 父类构造函数执行结束后,执行子类的构造函数 当父类的构造函数有参数时,需要在子类的初始化列表中显式调用 Child(int i) : …...
com.github.gavlyukovskiy依赖是做什么的呢?
p6spy-spring-boot-starter 是一个Spring Boot的starter,用于集成P6Spy库。P6Spy是一个开源的数据库连接池代理工具,它可以拦截和记录所有的SQL语句及其执行时间,从而帮助开发者进行SQL性能分析和调试。 功能概述 SQL日志记录: P…...
QChart数据可视化
目录 一、QChart基本介绍 1.1 QChart基本概念与用途 1.2 主要类的介绍 1.2.1 QChartView类 1.2.2 QChart类 1.2.3QAbstractSeries类 1.2.4 QAbstractAxis类 1.2.5 QLegendMarker 二、与图表交互 1. 动态绘制数据 2. 深入数据 3. 缩放和滚动 4. 鼠标悬停 三、主题 …...
离线安装 Docker-IO:详细步骤指南
离线安装 Docker-IO:详细步骤指南 一、准备工作1.1 下载 Docker 离线安装包1.2 准备安装环境1.3 配置防火墙和 SELinux(可选)二、上传和解压离线安装包2.1 上传安装包2.2 解压安装包三、安装 Docker-IO3.1 移动 Docker 文件到系统目录3.2 配置 Docker 服务3.3 赋予服务文件执…...
梯度爆炸与消失
梯度爆炸和梯度消失 一、概念解析 (一)梯度爆炸 定义 在深度神经网络训练的反向传播过程中,梯度爆炸是指梯度的值过大的现象。这会使模型的参数更新出现异常。 产生原因 深层网络与链式法则:深度神经网络按链式法则计算某层权重…...
动捕 动作捕捉学习笔记
2024.11.28 实时动作捕捉 ThreeDPoseTracker VRMLiveViewer 实现虚拟主播跳舞自由_哔哩哔哩_bilibili blender 手工操作,不能渲染到原视频 【快速有效】三分钟学会,通过blender把网上视频武术动作捕捉绑定到3D角色上,需要使用Auto-rig Pro(ARP…...
spark3.x之后时间格式数据偶发报错org.apache.spark.SparkUpgradeException
3.x之后如果你去处理2.x生成的时间字符串数据,很容易遇到一个问题 Error operating ExecuteStatement: org.apache.spark.SparkUpgradeException: You may get a different result due to the upgrading of Spark 3.0: Fail to parse 20200725__cb90fcc3_8006_46…...
计算机网络(二)
ip地址:11010010:01011110:00100100:00010100 子网掩码:11111111:11111111:11111111:11000000 and :11010010:01011110:00100100:00000000 210.94.36.0的下一站为R1 因为255为11111111 192为ÿ…...
如何在Spark中使用gbdt模型分布式预测
这目录 1 训练gbdt模型2 第三方包python环境打包3 Spark中使用gbdt模型3.1 spark配置文件3.2 主函数main.py 4 spark任务提交 1 训练gbdt模型 我们可以基于lightgbm快速的训练一个gbdt模型,训练相对比较简单,只要把训练样本处理好,几行代码可…...
llamaindex实战-ChatEngine-ReAct Agent模式
概述 ReAct 是一种基于Agent的聊天模式,构建在数据查询引擎之上。对于每次聊天交互,代理都会进入一个 ReAct 循环: 首先决定是否使用查询引擎工具并提出适当的输入 (可选)使用查询引擎工具并观察其输出 决定是否重复…...
关于音频 DSP 的接口种类以及其应用场景介绍
在音频系统中,DSP(数字信号处理器)扮演着重要角色,通常会通过不同的接口与音频系统中的其他组件(如功放、扬声器、音频源等)进行连接。以汽车应用场景为例,以下是一些常见的接口类型分类及其介绍…...
DLL中的inline static成员变量:Windows开发中的常见陷阱
在Windows平台进行C开发时,DLL(动态链接库)是一个非常重要的概念。它让我们能够实现代码的模块化和动态加载,提高了程序的灵活性和维护性。然而,当我们在DLL中使用C17引入的inline static成员变量时,可能会…...