基于单片机的自行车智能辅助系统设计

文章目录

  • 前言
  • 资料获取
  • 设计介绍
  • 功能介绍
  • 设计程序
  • 具体实现截图
  • 目 录
  • 设计获取


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

随着科学技术与物联网的发展,推动着智能化产品逐渐从无到有再到快速发展,智能科技逐渐改变社会发展方式,过去很多无法想象的科学技术或者生活方式,现在利用先进和智能化逐一解决,而过去普通自行车智能辅助系统已经不能科学的需求。为了设计一款基于单片机自行车智能辅助系统控制器,此设计利用51系列单片机,很好设计出一款智能化自行车智能辅助控制系统的要求。
本设计的完整的系统主要包括STC系列单片机最小系统、 速度采集电路、液晶显示电路、按键电路、光照采集电路、语音播放电路、温度采集电路和电源电路等组成。
本设计软件系统采用模块设计思想,采用C语言作为程序设计语言,通过Keil C51完成程序设计,使用仿真器下载软件完成程序的烧录和在线调试。 本文中设计了各个模块运行流程图和程序运行思想。
在系统硬件和软件系统都完成后,经过相应的软硬件测试后,通过搭建实验平台,逐步验证系统功能。最后,经过实际试验,验证了本系统具有很好的实用性和稳定性。

功能介绍

该系统的电路原理图是使用Altium Designer原理图绘制软件完成的。该款软件是PORTEL公司20世纪后期研发出的一款绘制原理图软件。采用标准库应用方式,能进行网络设计,这款软件有数据处理能力很快和开源系统及three D 仿真能力,是一个32位的常用软件,可以完成大多数系统图的制作,要你看看编译器生成的汇编代码,你将能够体验到此款软件的使用非常方便的,大部分语句生系统原理图板设计和PL器件制作等工作,能制作信号层最多32个,16个信号源。此款绘图软件的特色如下所示:
(1)可以很容易的画出好几十种的原理图链接方式;
(2)强大的全局编辑功能;
(3)此款绘图软件含有很大的定则原理,在编译窗口下,可以满足在在线编译和其它编译方法;
(4)此款绘图软件含有自动铺铜性能,而且另外具有全自动铺铜功能;
(5)软件所占内存很小,而且兼容性很好的。
本设计的原理图是通过网络标号进行走线连接了,这样看起来更加清晰,不易混乱,而且查错非常简便。

本设计由STC89C52单片机电路+液晶1602显示电路+时钟DS1302显示电路+霍尔测速电路组成。
通过液晶1602实时显示时间、速度、温度和光强。

串口更新时间命令:2019032718235503 (位数必须正好)
表示:2018年03月27日18时23分55秒 周03

设计程序

#include "main.h"
/*-----------------------------------------------名称:IIC协议 PCF8591 AD/DA转换内容:使用4路AD中的4路检测外部模拟量输入
------------------------------------------------*/  
#define AddWr 0x90   //写数据地址 
#define AddRd 0x91   //读数据地址
extern bit ack;
/*------------------------------------------------读AD转值程序
输入参数 Chl 表示需要转换的通道,范围从0-3
返回值范围0-255
------------------------------------------------*/
unsigned char ReadADC(unsigned char Chl)
{unsigned char Val;Start_I2c();               //启动总线SendByte(AddWr);             //发送器件地址if(ack==0)return(0);SendByte(Chl);            //发送器件子地址if(ack==0)return(0);Start_I2c();SendByte(AddRd);if(ack==0)return(0);Val=RcvByte();NoAck_I2c();                 //发送非应位Stop_I2c();                  //结束总线return(Val);
}
/*------------------------------------------------写入DA转换数值
输入参数:dat 表示需要转换的DA数值,范围是0-255
------------------------------------------------*/
/*bit WriteDAC(unsigned char dat)
{Start_I2c();               //启动总线SendByte(AddWr);             //发送器件地址if(ack==0)return(0);SendByte(0x40);            //发送器件子地址if(ack==0)return(0);SendByte(dat);             //发送数据if(ack==0)return(0);Stop_I2c();  
}*/sbit key_set = P3^5;
sbit key_LED = P3^6;
sbit key_BEEP = P3^7;
sbit LED1 = P2^4;
sbit LED2 = P2^3;sbit music1 = P1^0;
sbit music2 = P1^1;
sbit music3 = P1^2;
sbit music4 = P1^3;
sbit music5 = P1^4;char state = 0;
char i;
#define CIRCLE  180   //宏定义 车轮的周长(这个要根据实际的车轮进行设置)
sbit Signal = P2^2;   //这里的Signal表示的是霍尔传感器的信号引脚 
unsigned int PluNum = 0; //脉冲数
bit dealSuduFlag =0;	 //处理速度标志
uint speed = 0 ;  //定义速度变量 
uint length = 0 ;//定义路程变量
uint time_20ms,time_2m;
uchar light_data;
int Temp_data;
uchar Speed_Limit = 25;
unsigned char xdata dis0[16];//定义显示区域临时存储数组
unsigned char uart_i =0;	  //串口计数
unsigned char ReadTimeFlag= 0;//读取时间标志
unsigned char night_flag= 0;//读取时间标志
unsigned char off_flag= 0;//读取时间标志
unsigned char SetFlag =0;	//时间设置标志
unsigned char time_buf2[17];   //时间暂存
unsigned char dis_time_buf[16] = {0};/*------------------------------------------------定时器初始化子程序
------------------------------------------------*/
void ConfigTimer0()
{TMOD &= 0xF0;   //清零T0的控制位TMOD |= 0x01;   //配置T0为模式1TH0=(65536-10000)/256;		  //重新赋值 10msTL0=(65536-10000)%256;ET0 = 1;        //使能T0中断TR0 = 1;        //启动T0EA = 1;
}
/*------------------------------------------------定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 
{TH0=(65536-20000)/256;		  //重新赋值 20msTL0=(65536-20000)%256;time_20ms++;if(time_20ms%30==0)	   //定时读取时间标志{if(state==0){	ReadTimeFlag=1; }}if(time_20ms==100)	 //定时处理速度{dealSuduFlag =1;  //处理速度标志置位time_20ms =0;if((night_flag==1)&&(speed==0))time_2m++;else time_2m = 0;if(time_2m == 60){time_2m=0;if((night_flag==1)&&(speed==0))off_flag =1;elseoff_flag = 0;}	}}
/*------------------------------------------------显示子程序
------------------------------------------------*/
void Display()
{if(state==0){			LcdShowStr(3, 0, "Temp:");        //Temperature显示到液晶屏上LCD_set_position(8,0);	LCD_WriteData(0X30+TN/10);LCD_WriteData(0X30+TN%10);LCD_WriteData('.');	LCD_WriteData(0X30+TD);LCD_WriteData(0XDF);//显示°LCD_WriteData('C');	 LcdShowStr(3, 1, "Light:");        //light intensity显示到液晶屏上LCD_set_position(9,1);		 LCD_WriteData(0X30+light_data/100);LCD_WriteData(0X30+light_data%100/10);LCD_WriteData(0X30+light_data%10);LcdShowStr(12, 1, "Lux"); }if(state==1){LCD_WriteCom(0x02 + 0x80);     //表示第一行LCD_WriteData(2 + 0X30);LCD_WriteData(0 + 0X30);LCD_WriteData(dis_time_buf[2] + 0X30);    //年LCD_WriteData(dis_time_buf[3] + 0X30);LCD_WriteData('/');LCD_WriteData(dis_time_buf[4] + 0X30);    //月LCD_WriteData(dis_time_buf[5] + 0X30);LCD_WriteData('/');LCD_WriteData(dis_time_buf[6] + 0X30);    //日LCD_WriteData(dis_time_buf[7] + 0X30);LCD_WriteData(' ');LCD_WriteData(dis_time_buf[14] + 0X30);    //星期LCD_WriteCom(0x44 + 0x80);    //表示第二行LCD_WriteData(dis_time_buf[8] + 0X30);    //时LCD_WriteData(dis_time_buf[9] + 0X30);LCD_WriteData(':');LCD_WriteData(dis_time_buf[10] + 0X30);    //分LCD_WriteData(dis_time_buf[11] + 0X30);LCD_WriteData(':');LCD_WriteData(dis_time_buf[12] + 0X30);   //秒LCD_WriteData(dis_time_buf[13] + 0X30);}if(state==2){//第一行,显示速度LcdShowStr(2,0,"Speed:"); //设定液晶的写入位置为第一行第一格LCD_WriteData(speed/100 +0x30);        //显示速度的整数部分LCD_WriteData('.');LCD_WriteData(speed%100/10 +0x30);   //显示速度的小数第一位LCD_WriteData(speed%10 +0x30);   //显示速度的小数第二位LCD_WriteData('m');LCD_WriteData('/');LCD_WriteData('s');//第二行,显示里程LcdShowStr(2,1,"Length:");  //设定液晶的写入位置为第二行第一格LCD_WriteData(length/10000+0x30);    //显示里程的万位LCD_WriteData(length%10000/1000+0x30);    //显示里程的千位LCD_WriteData(length%1000/100+0x30);    //显示里程的百位LCD_WriteData(length%100/10+0x30);    //显示里程的十位LCD_WriteData(length%10+0x30);    //显示里程的个位LCD_WriteData('m');}		}
/*------------------------------------------------按键控制子程序
------------------------------------------------*/
void ScanContrl()
{if(!key_set){delayms(10);if(!key_set) {state++;LCD_WriteCom(0x01);while(!key_set);if(state>2)state=0;}}if(!key_LED){delayms(10);				if(!key_LED) {music2 = 0;}while(!key_LED);music2 = 1;	}if(!key_BEEP){delayms(10);				if(!key_BEEP) {LED1 = ~LED1;LED2 = ~LED2;if(LED1==1)music3 = 1;elsemusic3 = 0;}while(!key_BEEP);music3 = 1;	}}/*------------------------------------------------数据读取子程序
------------------------------------------------*/
void ReadData()
{/****************第一路AD**********************/for(i=0;i<5;i++)		  //连续读5次,输入通道后多读几次,取最后一次值,以便读出稳定值light_data = 255-ReadADC(0);		  //采集第一路AD值 0-255light_data = light_data*250/255;if(light_data<30)night_flag = 1;else night_flag = 0;/****************第二路路AD**********************///for(i=0;i<5;i++)		  //连续读5次,输入通道后多读几次,取最后一次值,以便读出稳定值//	 = 255-ReadADC(1);		  //采集第二路AD值 0-255/****************第三路AD**********************///for(i=0;i<5;i++)		  //连续读5次,输入通道后多读几次,取最后一次值,以便读出稳定值//num=ReadADC(2);		  //采集第三路AD值 0-255/****************第四路AD**********************///for(i=0;i<5;i++)		  //连续读5次,输入通道后多读几次,取最后一次值,以便读出稳定值//num=ReadADC(3);		  //采集第四路AD值 0-255ReadTemp();if(1) //定时读取ds1302 定时时间到 则标志位置1,处理过时间参数标志位清零{ReadTimeFlag=0;  //标志位清零Ds1302_Read_Time();//读取时间参数dis_time_buf[0] = (time_buf[0] >> 4);    //年   dis_time_buf[1] = (time_buf[0] & 0x0f);dis_time_buf[2] = (time_buf[1] >> 4);   dis_time_buf[3] = (time_buf[1] & 0x0f);dis_time_buf[4] = (time_buf[2] >> 4);    //月  dis_time_buf[5] = (time_buf[2] & 0x0f);dis_time_buf[6] = (time_buf[3] >> 4);    //日   dis_time_buf[7] = (time_buf[3] & 0x0f);dis_time_buf[14] = (time_buf[7] & 0x07); //星期//第2行显示  dis_time_buf[8] = (time_buf[4] >> 4);    //时   dis_time_buf[9] = (time_buf[4]& 0x0f);   dis_time_buf[10] = (time_buf[5] >> 4);   //分   dis_time_buf[11] = (time_buf[5] & 0x0f);   dis_time_buf[12] = (time_buf[6] >> 4);   //秒   dis_time_buf[13] = (time_buf[6] & 0x0f);}
}/*------------------------------------------------响应子程序
------------------------------------------------*/
void WarnBuzzer()
{if(length > 0){if(length %5000 == 0)music5 = 0; else music5 = 1;}else  music5 = 1;if(speed>800)music4 = 0;	elsemusic4 = 1;	if(night_flag){	if(speed>0){off_flag=0;LED1 = 0;LED2 = 0;}if(off_flag==1){	LED1 = 1;LED2 = 1;}}else 	{LED1 = 1;LED2 = 1;}
}void UART_Init(void)
{SCON  = 0x50;		        // SCON: 模式 1, 8-bit UART, 使能接收  TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHzTL1 = TH1;  TR1   = 1;                  // TR1:  timer 1 打开                         EA    = 1;                  //打开总中断ES    = 1;                  //打开串口中断
}void uartSendByte(unsigned char dat)
{unsigned char time_out;time_out=0x00;SBUF = dat;			  //将数据放入SBUF中while((!TI)&&(time_out<100))  //检测是否发送出去{time_out++;delayus(10);}	//未发送出去 进行短暂延时TI = 0;						//清除ti标志
}void uartSendStr(unsigned char *s,unsigned char length)
{unsigned char NUM;NUM=0x00;while(NUM<length)	//发送长度对比{uartSendByte(*s);  //放松单字节数据s++;		  //指针++NUM++;		  //下一个++}
}
void UART_SER (void) interrupt 4 	//串行中断服务程序
{unsigned char uart_buf;if(RI)                        //判断是接收中断产生{RI=0;                      //标志位清零uart_buf=SBUF;                 //读入缓冲区的值time_buf2[uart_i]=uart_buf&0x0F;uart_i++;if(uart_i>=16)                  //连续接收16个字符信息{uart_i=0;SetFlag=1;               //接收完成标志位置1}SBUF = uart_buf; //把接收到的值再发回电脑端}if(TI)  //如果是发送标志位,清零TI=0;
} 
/*------------------------------------------------主程序
------------------------------------------------*/
void main()
{	music1 = 0;InitLcd();//初始化液晶函数//Init_DS18B20();Ds1302_Init();ConfigTimer0();UART_Init();LcdShowStr(0, 0, "    Welcome    ");	  LcdShowStr(0, 1, " Bicycle System");delayms(3000);delayms(3000);LCD_WriteCom(0x01);uartSendStr("ready ok !",10);music1 = 1;while(1){if(SetFlag==1)     //如果接收到串口信息则更新时钟{for(i=0;i<8;i++){time_buf1[i]=time_buf2[2*i]*10+time_buf2[2*i+1];//数据整合,如2个数 1和5整合成15}Ds1302_Write_Time();//接收更新的时间然后写入ds1302SetFlag=0;          //时钟信息更新后标志位清零}	if(Signal){delayms(10);				if(Signal) {PluNum++;length +=  CIRCLE/100.0 ; //路程加一个车轮周期}while(Signal);	}if(dealSuduFlag == 1){speed=(uint)(CIRCLE *PluNum/2.0);	//m/sPluNum=0;dealSuduFlag=0;}ReadData();//读取传感器数据ScanContrl();//按键控制Display(); 	 //数据显示WarnBuzzer();//蜂鸣器报警}
}

具体实现截图

请添加图片描述

请添加图片描述
请添加图片描述

目 录

第1章 绪论 3
1.1本文研究背景和意义 3
1.2自行车智能辅助控制系统发展趋势 3
1.3本文研究内容 4
第2章 控制系统总体方案设计 5
2.1控制系统功能分析 5
2.2单片机芯片的选择 5
第3章 系统的硬件平台设计 6
3.1系统总体框架设计 6
3.2控制中心电路设计 6
3.2.1最小系统电路设计 6
3.2.2电源转换电路 7
3.3主要信号采集与处理电路设计 8
3.3.1霍尔测试电路设计 8
3.3.2按键电路设计 9
3.3.3 语音播放电路设计 9
3.3.4光照采集电路设计 10
3.3.5温度测量电路设计 11
3.3.6 LCD1602显示电路设计 12
3.3.7时钟电路设计 13
3.4系统总体电路设计 13
第4章 系统软件平台设计 15
4.1开发环境软件介绍 15
4.1.1 Keil简介 15
4.1.2程序在Keil中的调试 15
4.2主程序设计 16
4.3主要系统信号采集与处理程序设计 16
4.3.1 LCD1602程序设计 16
4.3.2按键检测程序设计 17
4.3.3光照强度采集程序设计 18
4.3.4温度传感器程序设计 19
第5章 硬件组装与调试 21
5.1元器件的选择与测量 21
5.2元件的焊接与组装 21
5.3电路的调试 22
5.3.1 调试方法 22
5.3.2 调试步骤 22
第6章 总结 24
致 谢 25
参考文献 26

设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

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

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

相关文章

构建数据分析模型,及时回传各系统监控监测数据进行分析反馈响应的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。增…

[论文精读]Towards Deeper Graph Neural Networks

论文网址&#xff1a;Towards Deeper Graph Neural Networks | Proceedings of the 26th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和…

在云渲染中3D工程文件安全性怎么样?

在云渲染中&#xff0c;3D工程文件的安全性是用户最关心的问题之一。随着企业对数据保护意识的增强&#xff0c;云渲染平台采取了严格的安全措施和加密技术&#xff0c;以确保用户数据的安全性和隐私性。 云渲染平台为了保障用户数据的安全&#xff0c;采取了多层次的安全措施。…

ROS机器人书的一些思考

思考 写一本书不难&#xff0c;写一本有价值的书很难&#xff0c;在语言大模型如此发展的今天写一本有价值的书&#xff0c;难上加难。 如何能让学生或读者发自内心的渴望打开一本书&#xff0c;尤其是在这个数字媒体技术如此发达的时代。 这个问题从一开始从事相关工作到如…

解决shop-vite项目打包被限制问题

本人网上找了一个好看的项目 shio-vite 项目源码 &#xff0c;并通过其他方式获取到源码&#xff0c;但是打包出现了以下问题。 问题图片一&#xff1a; 问题图片二&#xff1a; 问题图片三&#xff1a; 需要code和解决方式私可以留言哈

如何使用gewechat开发微信机器人

随着人工智能和自动化技术的快速发展&#xff0c;微信机器人已经成为越来越多人的选择。它们可以帮助我们自动回复消息、管理群组、发送定时消息等&#xff0c;极大地提高了我们的工作效率。而GeWe框架&#xff0c;作为一款开源的微信机器人框架&#xff0c;为开发者提供了便捷…

基于SpringBoot+Vue的垃圾分类回收管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

ChatGPT 推出“Auto”自动模式:智能匹配你的需求

OpenAI 最近为 ChatGPT 带来了一项新功能——“Auto”自动模式&#xff0c;这一更新让所有用户无论使用哪种设备都能享受到更加个性化的体验。简单来说&#xff0c;当你选择 Auto 模式后&#xff0c;ChatGPT 会根据你输入的提示词复杂程度&#xff0c;自动为你挑选最适合的AI模…

【WRF运行第三期】服务器上运行WRF模型(官网案例-Hurricane Matthew)

【WRF运行第三期】运行WRF模型&#xff08;官网案例-Hurricane Matthew&#xff09; 官网案例-Hurricane Matthew介绍0 创建DATA文件夹1 WPS预处理1.1 解压GRIB数据&#xff08;ungrib.exe&#xff09;1.1.1 解压GRIB数据---GFS&#xff08;Matthew案例研究数据&#xff09;1.1…

Gartner:中国企业利用GenAI提高生产力的三大策略

作者&#xff1a;Gartner高级首席分析师 雷丝、Gartner 研究总监 闫斌、Gartner高级研究总监 张桐 随着生成式人工智能&#xff08;GenAI&#xff09;风靡全球&#xff0c;大多数企业都希望利用人工智能&#xff08;AI&#xff09;技术进行创新&#xff0c;以收获更多的业务成果…

“AI+Security”系列第3期(二):AI赋能自动化渗透测试

近日&#xff0c;“AI Security” 系列第 3 期&#xff1a;AI 安全智能体&#xff0c;重塑安全团队工作范式技术沙龙活动正式举行。该活动由安全极客、Wisemodel 社区、InForSec 网络安全研究国际学术论坛和海升集团联合主办&#xff0c;吸引了线上与线下千余名观众参与。 在…

LLM大语言模型算法特训,带你转型AI大语言模型算法工程师

LLM&#xff08;大语言模型&#xff09;是指大型的语言模型&#xff0c;如GPT&#xff08;Generative Pre-trained Transformer&#xff09;系列模型。以下是《LLM大语言模型算法特训&#xff0c;带你转型AI大语言模型算法工程师》课程可能包含的内容&#xff1a; 1.深入理解大…

【算法思想·二叉树】最近公共祖先问题

本文参考labuladong算法笔记[拓展&#xff1a;最近公共祖先系列解题框架 | labuladong 的算法笔记] 0、引言 如果说笔试的时候经常遇到各种动归回溯这类稍有难度的题目&#xff0c;那么面试会倾向于一些比较经典的问题&#xff0c;难度不算大&#xff0c;而且也比较实用。 本…

分享一个vue+spring的前后端项目

管理员页面 用户界面 后面的一部分 后端代码

守护企业资产安全:企业微信群禁止互加好友操作指南!

为了防止其他公司的人员混入发起私聊&#xff0c;导致客户资源流失&#xff0c;禁止互加好友十分重要。而软件自带群防骚扰功能&#xff0c;设置好相关规则后&#xff0c;群内成员触发规则会被踢出群聊。 进入工作台-点击更多-选择客户群-选择防骚扰-选择配制企业成员防骚扰规…

spring 代码执行(CVE-2018-1273)

&#xff08;1&#xff09;填写注册信息&#xff0c;burp抓包 &#xff08;2&#xff09;添加poc username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/zcc")]&password&repeatedPassword &#xff08;3&…

2024 Python3.10 系统入门+进阶(十五):文件及目录操作

目录 一、文件IO操作1.1 创建或打开文件1.2 读取文件1.2.1 按行读取1.2.2 多行读取1.2.3 完整读取 1.3 写入文件1.3.1 写入字符串1.3.2 写入序列 1.4 上下文管理1.4.1 with语句的使用1.4.2 上下文管理器(拓展----可以学了面向对象之后再回来看) 1.5 文件的遍历 二、os.path模块…

力扣题解1014

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述&#xff08;中等&#xff09;&#xff1a; 最佳观光组合 给你一个正整数数组 values&#xff0c;其中 values[i] 表示第 i 个观光景点的评分&#xff0c;并且两个景点 i 和 j 之间的 距离…

Bytebase 2.23.0 - 支持 Entra (Azure AD) 用户/组同步

&#x1f680; 新功能 支持从 Entra ID&#xff08;前 Azure AD&#xff09;同步用户和群组。 支持 CockroachDB。 支持项目级别的默认备份设置&#xff0c;包含自动启用和跳过错误选项。 SQL 编辑器支持实时语法检查。 支持配置密码限制策略。 &#x1f514; 重大变更 分类…

torch.nn系列函数学习 --- Conv2d函数

该函数的官方文档&#xff1a; https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue, padding_modezeros, deviceNone, dtypeNone)…