当前位置: 首页 > news >正文

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路抢答器加记分

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 首先有三个按键 分别为开始 暂停 复位&#xff0c;然后八个选手按键&#xff0c;开机显示四条杠&#xff0c;然后按一号选手按键&#xff0c;数码管显示&#xff13;&#xff10;&#xff0c;这…...

ubuntu多版本安装gcc

1.ubuntu安装gcc 9.3.1 $ sudo apt update $ sudo apt install gcc-9 g-9 二、配置GCC版本 安装完成后&#xff0c;需要使用update-alternatives命令来配置GCC版本。这个命令允许系统在多个安装的版本之间进行选择 1.添加GCC 9.3.1到update-alternatives管理 $ sudo update-a…...

异步处理优化:多线程线程池与消息队列的选择与应用

目录 一、异步处理方式引入 &#xff08;一&#xff09;异步业务识别 &#xff08;二&#xff09;明确异步处理方式 二、多线程线程池&#xff08;Thread Pool&#xff09; &#xff08;一&#xff09;工作原理 &#xff08;二&#xff09;直面优缺点和适用场景 1.需要快…...

音视频技术扫盲之预测编码的基本原理探究

预测编码是一种数据压缩技术&#xff0c;广泛应用于图像、视频和音频编码等领域。其基本原理是利用数据的相关性&#xff0c;通过对当前数据的预测和实际值与预测值之间的差值进行编码&#xff0c;从而实现数据压缩的目的。 一、预测编码的基本概念 预测编码主要包括预测器和…...

计算机毕业设计SpringCloud+大模型微服务高考志愿填报推荐系统 高考大数据 SparkML机器学习 深度学习 人工智能 Python爬虫 知识图谱

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

AIGC训练效率与模型优化的深入探讨

文章目录 1.AIGC概述2.AIGC模型训练效率的重要性3.模型优化的概念与目标4.模型优化策略4.1 学习率调节4.2 模型架构选择4.3 数据预处理与增强4.4 正则化技术4.5 量化与剪枝 5.代码示例6.结论 人工智能领域的发展&#xff0c;人工智能生成内容&#xff08; AIGC&#xff09;越来…...

《深入浅出HTTPS》读书笔记(13):块密码算法之迭代模式(续)

CTR模式 每次迭代运算的时候要生成一个密钥流&#xff08;keystream&#xff09;。 各个密钥流之间是有关系的&#xff0c;最简单的方式就是密钥流不断递增&#xff0c;所以才叫作计数器模式。 ◎在处理迭代之前&#xff0c;先生成每个密钥流&#xff0c;有n个数据块&#xff0…...

定时任务删除MongoDB历史数据

前言 MongoDB数据过多&#xff0c;导致存储成本飙升&#xff0c;为了降低成本&#xff0c;需要将历史数据删除。 删除逻辑 添加配置文件控制删除逻辑 syncconfig:deleteMongoConfig:#同步状态&#xff0c;true同步&#xff0c;false不同步syncStatus: true#删除数据的时间&…...

Simulink的SIL软件在环测试

以基于模型的设计&#xff08;MBD&#xff09;的软件开发时&#xff0c;需要进行SIL&#xff08;软件在环测试&#xff09;。SIL测试就是在PC上验证模型是否与代码功能一致。在项目开展中&#xff0c;用在需要将控制器生成移植到硬件前&#xff0c;把控制器的模块生成代码&…...

你能穿过迷雾看清一切吗

很多事情的真相有谁知道&#xff1f; 我和家里人被看不见的攻击攻击和操控&#xff0c;失控和无助状态被假鬼录制&#xff0c;然后安排某些不知道整个实际情况和真相的人去听&#xff0c;间接歪曲了整件事情。 各种高科技配合和各种脑功能操控伤害是一般人想都想不到的&#…...

8 设计模式之简单工厂模式

设计模式是软件开发中的一套通用解决方案&#xff0c;而简单工厂模式则是最基础、最常用的一种创建型模式。在这篇博客中&#xff0c;我将为大家详细介绍简单工厂模式的概念、优缺点&#xff0c;以及通过一个饮料制作的案例&#xff0c;帮助大家更好地理解和应用这种模式。 一、…...

一步一步写线程之十六线程的安全退出之一理论分析

一、多线程的开发 多线程的开发&#xff0c;在实际场景中几乎是无法避开的。即使是前端看似没有使用线程&#xff0c;其实在底层的框架中也使用了线程进行了支撑。至少到现在&#xff0c;不管是协程还是其它什么新的编程方式&#xff0c;仍然无法撼动线程的主流地位。 多线程的…...

《Learn Three.js》学习(4) 材质

前言&#xff1a; 材质为scene中物体的皮肤&#xff0c;有着不同的特性和视觉效果。 材质的共有属性&#xff1a; 基础属性&#xff1a; 融合属性&#xff1a; 融合决定了我们渲染的颜色如何与它们后面的颜色交互 高级属性&#xff1a; 与WebGL内部有关 简单材质&#xff1…...

【QNX+Android虚拟化方案】128 - QNX 侧触摸屏驱动解析

【QNX+Android虚拟化方案】128 - QNX 侧触摸屏驱动解析 一、QNX 侧触摸屏配置基于原生纯净代码,自学总结 纯技术分享,不会也不敢涉项目、不泄密、不传播代码文档!!! 本文禁止转载分享 !!! 汇总链接:《【QNX+Android虚拟化方案】00 - 系列文章链接汇总》 本文链接:《【…...

Oracle SCN与时间戳的映射关系

目录 一、基本概述 二、相关操作 三、参考文档 一、基本概述 Oracle 数据库中的 SYS.SMON_SCN_TIME 表是一个关键的内部表&#xff0c;主要用于记录过去时间段中SCN与具体的时间戳之间的映射关系。这种映射关系可以帮助用户将 SCN 值转换为可读性更强的时间戳&#xff0c;从而…...

量化交易系统开发-实时行情自动化交易-8.2.发明者FMZ平台

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来会对于发明者FMZ平台介绍。 发明…...

HBU深度学习作业9

1. 实现SRN &#xff08;1&#xff09;使用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完成单机房单向同步时&#xff0c;常常遇到channel假死的情况&#xff0c;导致Pipeline同步停止&#xff0c;系统表数据同步停止&#xff0c;影响生产环境用户数据查询相关的功能&#xff0c;虽然事后能够通过停channel后再启用channel重新启用…...

复合查询和内外连接

文章目录 1. 简单查询2. 多表查询2.1 显示雇员名、雇员工资以及所在部门的名字2.2 显示部门号为10的部门名&#xff0c;员工名和工资2.3 显示各个员工的姓名&#xff0c;工资&#xff0c;及工资级别 3. 自连接4. 子查询4.1 where后的子查询4.1.1 单行子查询4.1.2 多行子查询 (i…...

动态规划【C++优质版】

&#xff08;本文未经作者书面允许&#xff0c;禁止以任何形式传播&#xff08;包括但不限于转载&#xff0c;翻译……&#xff09;如需引用 请标注原作者&#xff09; Intro&#xff1a; 动态规划是一种用于解决优化问题的算法策略。在 C 中&#xff0c;它主要用于处理那些具…...

柔性芯片:实现万物互联的催化剂

物联网 (IoT) 市场已经非常成熟&#xff0c;麦肯锡预测&#xff0c;物联网将再创高峰&#xff0c;到 2030 年将达到 12.5 万亿美元的估值。然而&#xff0c;万物互联 (IoE) 的愿景尚未实现&#xff0c;即由数十亿台智能互联设备组成&#xff0c;提供大规模洞察和效率。 究竟是…...

【分布式】分布式事务

目录 1、事务的发展 2、本地事务 &#xff08;1&#xff09;如何保障原子性和持久性&#xff1f; &#xff08;2&#xff09;如何保障隔离性&#xff1f; 2、全局事务 &#xff08;1&#xff09;XA事务的两段式提交 &#xff08;2&#xff09;XA事务的三段式提交…...

nacos安装部署

nacos安装部署 1.安装nacos 1.安装nacos nacos的安装很简单下载后解压启动即可&#xff0c;但是在启动前请确保jdk环境正常&#xff1b; 1.首先我们要下载nacos安装包&#xff1a;可以到官网下载&#xff0c;注意我这里使用的是2.1.0版本&#xff1b; 2.下载完成后&#xff0…...

git 上传代码时报错

在上传代码时&#xff0c;显示无法上传 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++】数字位数提取:从个位到十位的深入分析与理论拓展

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;第一题&#xff1a;提取个位数解法代码解法分析代码优化拓展思考&#xff1a;取模运算的普适性 &#x1f4af;第二题&#xff1a;提取十位数题目解读与思路分析方法一&…...

数据结构--二叉树的创建和遍历

目录 引入 定义 性质 二叉树的创建 迭代法 注意事项&#xff1a; 递归法 注意事项&#xff1a; 二叉树的遍历 深度优先 广度优先 先序遍历&#xff08;前序遍历&#xff09; 中序遍历 后序遍历 层序遍历 查找树结构中是否存在某数值 方法一&#xff1a; 方法…...

CEF127 编译指南 Linux篇 - 安装Git和Python(三)

1. 引言 在前面的文章中&#xff0c;我们已经完成了基础开发工具的安装和配置。接下来&#xff0c;我们需要安装两个同样重要的工具&#xff1a;Git 和 Python。这两个工具在 CEF 的编译过程中扮演着关键角色。Git 负责管理和获取源代码&#xff0c;而 Python 则用于运行各种编…...

计算机网络的类型

目录 按覆盖范围分类 个人区域网&#xff08;PAN&#xff09; 局域网&#xff08;LAN&#xff09; 城域网&#xff08;MAN&#xff09; 4. 广域网&#xff08;WAN&#xff09; 按使用场景和性质分类 公网&#xff08;全球网络&#xff09; 外网 内网&#xff08;私有网…...

Web入门(学习笔记)

Web入门 文章目录 Web入门SpringSpringBootWeb入门HTTP协议HTTP-概述HTTP特点 HTTP-请求协议HTTP-请求数据格式 HTTP-响应协议响应状态码 HTTP-协议解析 Web服务器-TomcatWeb服务器简介基本使用Tomcat文件夹目录解析常见问题Tomcat部署项目 入门程序解析**内嵌的Tomcat服务器**…...

mind+自定义库编写注意事项

在mind图形化命令编写中&#xff0c;main.ts 文件是通过图形化编程工具生成 C 代码&#xff0c;然后将生成的 C 代码上传到 Arduino Uno 上执行。 这些由main.ts定义的图形化代码通过生成的代码&#xff0c;需要包含调用arduinoc/libraries文件夹的*.h和*.cpp文件&#…...

jQuery零基础入门速通(上)

大家好&#xff0c;我是小黄。 在前端开发的世界里&#xff0c;jQuery以其简洁的语法和强大的功能&#xff0c;一直是许多开发者手中的利器。它不仅简化了HTML文档遍历和操作、事件处理、动画以及Ajax交互&#xff0c;还极大地提高了开发效率。本文将带你走进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++分布式计算框架:赋能人工智能模型并行训练》

在人工智能迅猛发展的今天&#xff0c;模型训练所需的计算资源呈指数级增长。为了高效地支持人工智能模型在多节点、多 GPU/CPU 集群上的并行训练&#xff0c;基于 C构建分布式计算框架成为了关键之举。 一、分布式计算框架的核心意义 随着人工智能模型复杂度的不断攀升&…...

分支定价算法Branch and price

分支定价算法是进阶版的列生成算法&#xff0c;是用来专门求解整数规划问题的。 目录 1.整数规划与线性规划的关系 2.限制主问题&#xff08;RLMP&#xff09;求得整数解 3.B&P用法&#xff1a;以VRPTW为例 列生成是求解线性规划问题的算法&#xff0c;通过不断往限制主…...

【信息系统项目管理师】第5章:信息系统工程 考点梳理

文章目录 5.1 软件工程5.1.1 架构设计1、软件架构风格2、软件架构评估 5.1.2 需求分析1、需求的层次2、需求过程&#xff08;重点&#xff09;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后&#xff0c;制作启动盘 1.插入启动盘进入live mode模式 2.安装gparted sudo apt-get update sudo apt-get install gparted3.使用gparted对待分区硬盘进行分区 gparted按照你希望的分区方式分区即…...

C++多态的实现原理

【欢迎关注编码小哥&#xff0c;学习更多实用的编程方法和技巧】 1、类的继承 子类对象在创建时会首先调用父类的构造函数 父类构造函数执行结束后&#xff0c;执行子类的构造函数 当父类的构造函数有参数时&#xff0c;需要在子类的初始化列表中显式调用 Child(int i) : …...

com.github.gavlyukovskiy依赖是做什么的呢?

p6spy-spring-boot-starter 是一个Spring Boot的starter&#xff0c;用于集成P6Spy库。P6Spy是一个开源的数据库连接池代理工具&#xff0c;它可以拦截和记录所有的SQL语句及其执行时间&#xff0c;从而帮助开发者进行SQL性能分析和调试。 功能概述 SQL日志记录&#xff1a; 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 赋予服务文件执…...

梯度爆炸与消失

梯度爆炸和梯度消失 一、概念解析 &#xff08;一&#xff09;梯度爆炸 定义 在深度神经网络训练的反向传播过程中&#xff0c;梯度爆炸是指梯度的值过大的现象。这会使模型的参数更新出现异常。 产生原因 深层网络与链式法则&#xff1a;深度神经网络按链式法则计算某层权重…...

动捕 动作捕捉学习笔记

2024.11.28 实时动作捕捉 ThreeDPoseTracker VRMLiveViewer 实现虚拟主播跳舞自由_哔哩哔哩_bilibili blender 手工操作&#xff0c;不能渲染到原视频 【快速有效】三分钟学会&#xff0c;通过blender把网上视频武术动作捕捉绑定到3D角色上,需要使用Auto-rig Pro(ARP&#xf…...

spark3.x之后时间格式数据偶发报错org.apache.spark.SparkUpgradeException

3.x之后如果你去处理2.x生成的时间字符串数据&#xff0c;很容易遇到一个问题 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地址&#xff1a;11010010&#xff1a;01011110:00100100:00010100 子网掩码:11111111:11111111:11111111:11000000 and &#xff1a;11010010&#xff1a;01011110&#xff1a;00100100&#xff1a;00000000 210.94.36.0的下一站为R1 因为255为11111111 192为&#xff…...

如何在Spark中使用gbdt模型分布式预测

这目录 1 训练gbdt模型2 第三方包python环境打包3 Spark中使用gbdt模型3.1 spark配置文件3.2 主函数main.py 4 spark任务提交 1 训练gbdt模型 我们可以基于lightgbm快速的训练一个gbdt模型&#xff0c;训练相对比较简单&#xff0c;只要把训练样本处理好&#xff0c;几行代码可…...

llamaindex实战-ChatEngine-ReAct Agent模式

概述 ReAct 是一种基于Agent的聊天模式&#xff0c;构建在数据查询引擎之上。对于每次聊天交互&#xff0c;代理都会进入一个 ReAct 循环&#xff1a; 首先决定是否使用查询引擎工具并提出适当的输入 &#xff08;可选&#xff09;使用查询引擎工具并观察其输出 决定是否重复…...

关于音频 DSP 的接口种类以及其应用场景介绍

在音频系统中&#xff0c;DSP&#xff08;数字信号处理器&#xff09;扮演着重要角色&#xff0c;通常会通过不同的接口与音频系统中的其他组件&#xff08;如功放、扬声器、音频源等&#xff09;进行连接。以汽车应用场景为例&#xff0c;以下是一些常见的接口类型分类及其介绍…...

DLL中的inline static成员变量:Windows开发中的常见陷阱

在Windows平台进行C开发时&#xff0c;DLL&#xff08;动态链接库&#xff09;是一个非常重要的概念。它让我们能够实现代码的模块化和动态加载&#xff0c;提高了程序的灵活性和维护性。然而&#xff0c;当我们在DLL中使用C17引入的inline static成员变量时&#xff0c;可能会…...