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

STM32多功能交通灯系统:从原理到实现

一、功能说明

本交通灯系统采用先进的stm32f103c8t6微处理器为核心控制单元。系统设置东南西北四个方向各配置两位数码管,用以精准展示5至99秒的时间范围,并且允许用户根据实际需求进行灵活调整。

在信号灯配置方面,每个方向均配备左转、直行、黄灯和红灯共计四个灯,以确保交通信号的有效传递。同时,南北方向和东西方向均安装红外对管装置,分别用于实时监测车流量,为交通管理提供重要数据支持。

此外,本系统还设置紧急按钮功能。一旦触发紧急按钮,系统将立即响应,将行车方向的所有信号灯切换为红灯状态,同时人行道方向信号灯全部转为绿灯状态,以确保紧急情况下的交通安全。紧急模式可通过再次按下紧急按钮解除。

在时间调整方面,本系统具备智能化管理能力,能够根据实时监测到的车流量数据,进行动态调整,以实现交通流的高效管理和优化。

综上所述,本交通灯系统通过严谨、稳重的设计,以及理性的管理策略,为提升道路交通安全性与通行效率提供了有力保障。

二、硬件设计

2.1 原理框图

2.2 各功能框图说明

2.2.1 MCU最小系统

1、该MCU采用了ST的STM32F103C8T6 LQFP48封装,以下是其主要特点:

核心:采用ARM® Cortex®-M3 32位RISC核心,最高频率可达72MHz。

存储器:提供64K字节的Flash存储器和20K字节的SRAM。

电源管理:支持2.0至3.6V的应用供电和I/Os,具有POR、PDR和可编程电压检测器(PVD)。

低功耗模式:包括睡眠、停止和待机模式,适合设计低功耗应用。

丰富的外设:提供两个12位ADC,三个通用16位定时器加一个PWM定时器,以及标准和高级通信接口:最多两个I2C和SPIs,三个USARTs,一个USB和一个CAN。

2、在单片机每个电源输入部分增加一个100nF的旁路电容,其主要功能包括:

a) 滤除电源上的高频噪声。

b) 储能,当负载需要瞬时电流时,电容率先为其提供电流,减小电源产生的波动。

c) 给高频信号提供最近的低阻抗回流路径,减少对其他芯片电源的干扰。

3、BOOT0和BOOT1的作用:

这两个引脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序。

用户可以通过设置BOOT1和BOOT0引脚的状态来选择在复位后的启动模式。

三种启动模式:

Flash memory启动方式(BOOT0 = 0):默认情况下,芯片从内置Flash启动。这是最常用的模式,我们通常使用JTAG或SWD模式下载程序到Flash中,重启后直接从Flash启动。

System memory启动方式(BOOT0 = 1,BOOT1 = 0):从系统存储器启动,这种模式的功能由厂家设置。系统存储器是芯片内部的特定区域,出厂时预置了一个BootLoader,用于串口下载程序到Flash中。这种模式用得较少。

SRAM启动方式(BOOT0 = 1,BOOT1 = 1):从内置SRAM启动,用于程序调试。在这种模式下,代码存储在SRAM中,适用于快速的程序调试。

4、晶振电路

晶体采用8MHz,并联22pf电容,电容与晶振一起形成一个振荡回路,其值需要与晶振的指定负载电容相匹配,以确保晶振在正确的频率下稳定工作。

1M电阻的作用

提供启动振荡:1MΩ电阻有助于晶体振荡器在上电时能够迅速启动振荡。它通过提供一个初始的反馈路径来实现这一点,尤其是在环境温度较低时,晶体振荡器可能更难启动。

增加负性阻抗:并联的1MΩ电阻可以增加电路中的负性阻抗(-R),这有助于提高电路的增益。在没有足够增益的条件下,晶体振荡器可能不会启动。

抑制噪声:这个电阻还可以起到抑制共模噪声的作用,提高系统的抗干扰能力。它有助于减少由于电源线或其他干扰源引入的噪声,从而使晶体振荡器的输出更加稳定。

减少谐波振荡:1MΩ电阻有助于消除晶体振荡器件的谐波振荡,使晶体的输出信号更加纯净和稳定。

5、复位电路

当系统上电时,电容会从0V开始充电,这会导致复位引脚短暂地处于低电平状态,从而触发复位。电容充电后,复位引脚电平逐渐上升到高电平,结束复位过程,允许微控制器开始正常工作。

2.2.2 电源电路 

 电源电路采用LDO AMS1117-3.3将+5V直流电转+3.3V直流电。该LDO具有低纹波噪声功能,确保系统的稳定性和可靠性。电路图描述如下:

USB1 - USB +5V供电接口

SW1 - 电源开关

D1 - 通过利用该器件的非线性特性,将过电压钳制到一个较低的电压值,实现对后级电路的保护。

U1 - LDO,将+5V转为+3.3V

C1/C2/C3/C4 - 主要用于滤除由电源输出的直流电压中所含的杂波和噪声,并将其平滑处理为一个稳定的直流电压输出

R1 - 限流电阻

LED1 - 电源指示灯

2.2.3 按键电路

按键电路采用点触按键,当用户按下按键时,电路会检测到按键的接触,并产生低电平信号,从而触发相应的操作。电路图描述如下:

SW2/SW3/SW4/SW5 - 点触按键,点触按键的工作原理:按钮与触点机械作用,按下按钮,弹簧收缩,触点接触导电条,电路接通;松开按钮,弹簧恢复原状,触点离开导电条,电路断开。 

2.2.4 红外对管检测电路 

红外发射二极管(LED)不断发射红外光束,红外检测二极管(PD)接收来自LED的红外光束,当LED发出的红外光束命中目标物体时,部分红外光束会被物体反射回给PD。不同的反射强度输出的电压大小不同。

LM339 是一个内部集成了四路比较器的集成电路。比较器有两个输入端和一个输出端。其中,一个输入端称为同输入端(用“+”号表示),另一个称为反相输入端(用“-”表示)。当“+”端电压高于“-”端电压时,输出正电源电压;反之,输出负电源电压。

单片机通过监测OUT1和OUT2输出的电平信号,以精确判断是否有车辆通行。在车辆经过时,红外光线被有效反射,导致OUT输出低电平状态。此外,红外检测的灵敏度可经由调整R29和R30之间的分压比例来进行精确控制。

2.2.5 交通灯电路 

 交通灯电路采用普通的5mm发光二极管加上限流电阻组成。

2.2.6 OLED显示电路

采用0.96寸OLED显示屏以展示交通灯车流量信息,同时,在设置交通灯时间的过程中,也运用OLED实现人机交互功能。

2.2.7 数码管显示电路

数码管的驱动方式采用了GN1640T驱动芯片,而东南西北四个方向则均选用了0.36英寸共阴双八红色数码管,以实现倒计时时间的精准显示。

 三、软件设计

在主函数中,首先进行外设的初始化操作。随后,在while循环中,app_handle()函数负责处理交通灯和车流量的相关工作。同时,key_handle()函数则专注于处理与按键相关的操作。另外,oled_handle()函数则负责处理人机界面的交互功能。

 3.1 app_handle()

app_handle()函数进行交通灯信号的处理和数码管的显示,交通信号灯一个循环结束后会进行车流量的比较计算,然后重新更新东西和南北的交通灯通行时间。

traffic_light_handle()主要对交通灯的状态进行处理。

void traffic_light_handle(void)
{switch(step){case 0: //东西直行EW_STRAIGHT_RED_LED      	= LOW;	//东西直行红灯EW_STRAIGHT_GREEN_LED   	= HIGH;	//东西直行绿灯EW_STRAIGHT_YELLOW_LED   	= LOW;	//东西直行黄灯EW_LEFT_GREEN_LED			= LOW;	//东西左转绿灯EW_SIDEWALK_GREEN_LED      	= LOW;	//东西人行道绿灯EW_SIDEWALK_RED_LED      	= HIGH;	//东西人行道红灯NS_STRAIGHT_RED_LED      	= HIGH;	//南北直行红灯NS_STRAIGHT_GREEN_LED   	= LOW;	//南北直行绿灯NS_STRAIGHT_YELLOW_LED   	= LOW;	//南北直行黄灯NS_LEFT_GREEN_LED			= LOW;	//南北左转绿灯NS_SIDEWALK_GREEN_LED      	= HIGH;	//南北人行道绿灯NS_SIDEWALK_RED_LED      	= LOW;	//南北人行道红灯break;case 1://东西黄灯 EW_STRAIGHT_RED_LED      	= LOW;	//东西直行红灯EW_STRAIGHT_GREEN_LED   	= LOW;	//东西直行绿灯EW_STRAIGHT_YELLOW_LED   	= HIGH;	//东西直行黄灯EW_LEFT_GREEN_LED			= LOW;	//东西左转绿灯EW_SIDEWALK_GREEN_LED      	= LOW;	//东西人行道绿灯EW_SIDEWALK_RED_LED      	= HIGH;	//东西人行道红灯NS_STRAIGHT_RED_LED      	= HIGH;	//南北直行红灯NS_STRAIGHT_GREEN_LED   	= LOW;	//南北直行绿灯NS_STRAIGHT_YELLOW_LED   	= LOW;	//南北直行黄灯NS_LEFT_GREEN_LED			= LOW;	//南北左转绿灯NS_SIDEWALK_GREEN_LED      	= HIGH;	//南北人行道绿灯NS_SIDEWALK_RED_LED      	= LOW;	//南北人行道红灯	break;case 2://东西左转 EW_STRAIGHT_RED_LED      	= LOW;	//东西直行红灯EW_STRAIGHT_GREEN_LED   	= LOW;	//东西直行绿灯EW_STRAIGHT_YELLOW_LED   	= LOW;	//东西直行黄灯EW_LEFT_GREEN_LED			= HIGH;	//东西左转绿灯EW_SIDEWALK_GREEN_LED      	= LOW;	//东西人行道绿灯EW_SIDEWALK_RED_LED      	= HIGH;	//东西人行道红灯NS_STRAIGHT_RED_LED      	= HIGH;	//南北直行红灯NS_STRAIGHT_GREEN_LED   	= LOW;	//南北直行绿灯NS_STRAIGHT_YELLOW_LED   	= LOW;	//南北直行黄灯NS_LEFT_GREEN_LED			= LOW;	//南北左转绿灯NS_SIDEWALK_GREEN_LED      	= HIGH;	//南北人行道绿灯NS_SIDEWALK_RED_LED      	= LOW;	//南北人行道红灯	break;case 3://南北直行EW_STRAIGHT_RED_LED      	= HIGH;	//东西直行红灯EW_STRAIGHT_GREEN_LED   	= LOW;	//东西直行绿灯EW_STRAIGHT_YELLOW_LED   	= LOW;	//东西直行黄灯EW_LEFT_GREEN_LED			= LOW;	//东西左转绿灯EW_SIDEWALK_GREEN_LED      	= HIGH;	//东西人行道绿灯EW_SIDEWALK_RED_LED      	= LOW;	//东西人行道红灯NS_STRAIGHT_RED_LED      	= LOW;	//南北直行红灯NS_STRAIGHT_GREEN_LED   	= HIGH;	//南北直行绿灯NS_STRAIGHT_YELLOW_LED   	= LOW;	//南北直行黄灯NS_LEFT_GREEN_LED			= LOW;	//南北左转绿灯NS_SIDEWALK_GREEN_LED      	= LOW;	//南北人行道绿灯NS_SIDEWALK_RED_LED      	= HIGH;	//南北人行道红灯break;case 4://南北黄灯EW_STRAIGHT_RED_LED      	= HIGH;	//东西直行红灯EW_STRAIGHT_GREEN_LED   	= LOW;	//东西直行绿灯EW_STRAIGHT_YELLOW_LED   	= LOW;	//东西直行黄灯EW_LEFT_GREEN_LED			= LOW;	//东西左转绿灯EW_SIDEWALK_GREEN_LED      	= HIGH;	//东西人行道绿灯EW_SIDEWALK_RED_LED      	= LOW;	//东西人行道红灯NS_STRAIGHT_RED_LED      	= LOW;	//南北直行红灯NS_STRAIGHT_GREEN_LED   	= LOW;	//南北直行绿灯NS_STRAIGHT_YELLOW_LED   	= HIGH;	//南北直行黄灯NS_LEFT_GREEN_LED			= LOW;	//南北左转绿灯NS_SIDEWALK_GREEN_LED      	= LOW;	//南北人行道绿灯NS_SIDEWALK_RED_LED      	= HIGH;	//南北人行道红灯break;case 5://南北左转EW_STRAIGHT_RED_LED      	= HIGH;	//东西直行红灯EW_STRAIGHT_GREEN_LED   	= LOW;	//东西直行绿灯EW_STRAIGHT_YELLOW_LED   	= LOW;	//东西直行黄灯EW_LEFT_GREEN_LED			= LOW;	//东西左转绿灯EW_SIDEWALK_GREEN_LED      	= HIGH;	//东西人行道绿灯EW_SIDEWALK_RED_LED      	= LOW;	//东西人行道红灯NS_STRAIGHT_RED_LED      	= LOW;	//南北直行红灯NS_STRAIGHT_GREEN_LED   	= LOW;	//南北直行绿灯NS_STRAIGHT_YELLOW_LED   	= LOW;	//南北直行黄灯NS_LEFT_GREEN_LED			= HIGH;	//南北左转绿灯NS_SIDEWALK_GREEN_LED      	= LOW;	//南北人行道绿灯NS_SIDEWALK_RED_LED      	= HIGH;	//南北人行道红灯break;default: break;}			
}

3.2 key_handle() 

key_handle() 主要对交通灯通行时间进行调整。

void key_handle(void)
{if(flag_get(&key_flag,KEY4_PRESS_FLAG)){flag_clr(&key_flag,KEY4_PRESS_FLAG);set_num++;if(set_num > 2) set_num = 1;TIM_Cmd(TIM3, DISABLE);  //失能TIM3if(set_num == 1){inverse_oled_show_string(0,0,"SET EW:",8);oled_show_num(80,0,ew_time,2,8);}else{oled_show_string(0,0,"SET EW:",8);oled_show_num(80,0,ew_time,2,8);}if(set_num == 2){inverse_oled_show_string(1,2,"SET NS:",8);oled_show_num(80,2,ns_time,2,8);}else{oled_show_string(1,2,"SET NS:",8);oled_show_num(80,2,ns_time,2,8);}		}	else if(flag_get(&key_flag,KEY5_PRESS_FLAG)){flag_clr(&key_flag,KEY5_PRESS_FLAG);if(set_num == 1) {if(ew_time < MAX_TIME) ew_time++;}else if(set_num == 2) {if(ns_time < MAX_TIME) ns_time++;}oled_show_num(80,0,ew_time,2,8);oled_show_num(80,2,ns_time,2,8);}		else if(flag_get(&key_flag,KEY3_PRESS_FLAG)){flag_clr(&key_flag,KEY3_PRESS_FLAG);if(set_num == 1) {if(ew_time > MIN_TIME) ew_time--;}else if(set_num == 2) {if(ns_time > MIN_TIME) ns_time--;}oled_show_num(80,0,ew_time,2,8);oled_show_num(80,2,ns_time,2,8);}		else if(flag_get(&key_flag,KEY2_PRESS_FLAG)){flag_clr(&key_flag,KEY2_PRESS_FLAG);set_num = 0;step = 0;current_ew_time = ew_time;current_ns_time = ew_time + STRAIGHT_YELLOW_TIME_NUM + LEFT_GREEN_TIME_NUM;;oled_clear();TIM_Cmd(TIM3, ENABLE);  //使能TIM3}	if(flag_get(&key_flag,KEY1_PRESS_FLAG)){flag_clr(&key_flag,KEY1_PRESS_FLAG);if(stop_flag){stop_flag = 0;TIM_Cmd(TIM3, ENABLE);  //失能TIM3}else{stop_flag = 1;EW_STRAIGHT_RED_LED      	= HIGH;	//东西直行红灯EW_STRAIGHT_GREEN_LED   	= LOW;	//东西直行绿灯EW_STRAIGHT_YELLOW_LED   	= LOW;	//东西直行黄灯EW_LEFT_GREEN_LED			= LOW;	//东西左转绿灯EW_SIDEWALK_GREEN_LED      	= LOW;	//东西人行道绿灯EW_SIDEWALK_RED_LED      	= HIGH;	//东西人行道红灯NS_STRAIGHT_RED_LED      	= HIGH;	//南北直行红灯NS_STRAIGHT_GREEN_LED   	= LOW;	//南北直行绿灯NS_STRAIGHT_YELLOW_LED   	= LOW;	//南北直行黄灯NS_LEFT_GREEN_LED			= LOW;	//南北左转绿灯NS_SIDEWALK_GREEN_LED      	= LOW;	//南北人行道绿灯NS_SIDEWALK_RED_LED      	= HIGH;	//南北人行道红灯TIM_Cmd(TIM3, DISABLE);  //失能TIM3}}	
}

 3.3 oled_handle() 

OLED主要显示车流量信息和设置交通灯通行时间时进行人机信息交互。

四、实物演示

交通灯通行时间演示

交通灯通行时间演示

车流量检测演示

车流量检测演示

倒计时时间设置演示

倒计时时间设置演示

五、技术交流

如果您有更好的建议或者在阅读过程中遇到任何问题或疑虑,欢迎加我QQ ,一起探讨技术问题,我的QQ号是986571840,加的时候请注明CSDN。

感谢各位用户点赞、分享、在看,这些行为让知识得以更加广泛地传播,从而让更多人受益。

请在转载作品时注明出处,严禁抄袭行为。

相关文章:

STM32多功能交通灯系统:从原理到实现

一、功能说明 本交通灯系统采用先进的stm32f103c8t6微处理器为核心控制单元。系统设置东南西北四个方向各配置两位数码管&#xff0c;用以精准展示5至99秒的时间范围&#xff0c;并且允许用户根据实际需求进行灵活调整。 在信号灯配置方面&#xff0c;每个方向均配备左转、直…...

Pip换源秘籍:让你的Python包飞行起来!

在Python的包管理中&#xff0c;Pip是最重要的工具之一。它允许开发者从Python Package Index (PyPI)安装包&#xff0c;但有时由于网络问题或服务器负载过高&#xff0c;直接从PyPI安装包可能会非常慢。这时&#xff0c;更换Pip源到一个更快的镜像站点是一个常见的解决方案。本…...

Flutter TIM 项目配置

目录 1. 设计说明 2. 参考资料索引 Flutter SDK 服务端 Rest API 腾讯后台 其他 3. TIM 整体架构 第一部分&#xff1a;APP 端 第二部分&#xff1a;腾讯服务器 第三部分&#xff1a;三方服务 第四部分&#xff1a;你自己的服务器 4. TIM SDK 集成 TUIK 含 UI 集成…...

【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(8)

Hi٩(๑o๑)۶, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机&#xff01;带你一周内快速走进嵌入式的大门&#xff0c;let’s go&#xff01; &#xff08;8&#x…...

第5天:视图与模板进阶

第5天&#xff1a;视图与模板进阶 目标 掌握视图逻辑和模板渲染&#xff0c;包括不同类型的视图、自定义模板标签和过滤器&#xff0c;以及模板继承和包含的概念。 任务概览 学习函数视图和类视图的使用。编写自定义模板标签和过滤器。理解模板的继承和包含机制。 详细步骤…...

线程间通信方式(互斥(互斥锁)与同步(无名信号量、条件变量))

1通信机制&#xff1a;互斥与同步 线程的互斥通过线程的互斥锁完成&#xff1b; 线程的同步通过无名信号量或者条件变量完成。 2 互斥 2.1 何为互斥&#xff1f; 互斥是在多个线程在访问同一个全局变量的时候&#xff0c;先让这个线程争抢锁的资源&#xff0c;那个线程争抢…...

Android使用data uri启动activity或service

设定AndroidManifest.xml 在AndroidManifest.xml文件中&#xff0c;我们可以设定activity或service的data。 <!-- activity定义方式 --> <activityandroid:name".page.main.MainActivity"><intent-filter><action android:name"an…...

能理解你的意图的自动化采集工具——AI和爬虫相结合

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…...

基于SpringBoot+大数据城市景观画像可视化设计和实现

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…...

Oracle表中的数据量达到30万条

当Oracle表中的数据量达到30万条&#xff0c;并且查询性能过慢时&#xff0c;增加索引是一个有效的优化方案。以下是一些建议来增加索引以提高查询性能&#xff1a; 分析查询需求&#xff1a; 首先&#xff0c;需要明确哪些查询是经常执行的&#xff0c;以及这些查询的WHERE子…...

【python】python学生成绩数据分析可视化(源码+数据+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…...

如何定期更新系统以保护网络安全

定期更新系统保护网络安全的方法 定期更新系统是确保网络安全的关键措施之一。以下是一些有效的方法&#xff1a; 及时获取更新信息&#xff1a;用户应通过邮件订阅、官方网站、厂商渠道等途径获取最新的更新通知。此外&#xff0c;互联网上的安全论坛和社区也是获取相关安全资…...

华为数通——OSPF

正掩码&#xff1a;/24 255.255.255.0 反掩码&#xff1a; 255.255.255.255 -255.-255.-255.0 0.0.0.255 例如掩码&#xff1a;255.255.252.0 反掩码&#xff1a;0.0.3.255 在反掩码里面&#xff0c;0 bit 表示精确匹配&#xff0c;1…...

RedHat9 | Web服务配置与管理(Apache)

一、实验环境 1、Apache服务介绍 Apache服务&#xff0c;也称为Apache HTTP Server&#xff0c;是一个功能强大且广泛使用的Web服务器软件。 起源和背景 Apache起源于NCSA httpd服务器&#xff0c;经过多次修改和发展&#xff0c;逐渐成为世界上最流行的Web服务器软件之一。…...

API-事件监听

学习目标&#xff1a; 掌握事件监听 学习内容&#xff1a; 事件监听拓展阅读-事件监听版本 事件监听&#xff1a; 什么是事件&#xff1f; 事件是在编程时系统内发生的动作或者发生的事情。 比如用户在网页上单击一个按钮。什么是事件监听&#xff1f; 就是让程序检测是否有事…...

如何为自己的项目生成changelog

背景 在github上看到人家的更新日志感觉很cool&#xff0c;怎么能给自己项目来一套呢 环境信息 tdstdsdeMacBook-Pro demo-doc % node -v v14.18.1 tdstdsdeMacBook-Pro demo-doc % npm -v 6.14.15硬件信息 型号名称&#xff1a;MacBook Pro版本&#xff1a; 12.6.9芯片&…...

MySQL之表碎片化

文章目录 1. 前言2. InnoDB表碎片3. 清除表碎片3.1 查找碎片化严重的表3.2 清除碎片 4. 小结5. 参考 1. 前言 周一在对线上表进行数据清除时&#xff0c;发现一个问题&#xff0c;我要清除的单表大概有2500w条数据&#xff0c;清除数据大概在1300w条左右&#xff0c;清除之前通…...

碳+绿证如何能源匹配?考虑碳交易和绿证交易制度的电力批发市场能源优化程序代码!

前言 近年来&#xff0c;面对日益受到全社会关注的气候变化问题&#xff0c;国外尤其是欧美等发达国家和地区针对电力行业制定了一系列碳减排组合机制。其中&#xff0c;碳排放权交易&#xff08;以下简称“碳交易”&#xff09;和绿色电力证书交易&#xff08;以下简称“绿证…...

【原创】springboot+mysql海鲜商城设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…...

envi5.6+SARscape560安装(CSDN_20240623)

envi和SARscape的版本必须匹配&#xff0c;否则有些功能不能使用。 Envi5.6安装 1. 点击安装程序. 2. 进入安装界面&#xff0c;点击“Next”. 3. 选择“I accept the agreement”&#xff0c;点击“Next”。 4. 选择安装路径&#xff0c;建议直接安装在默认路径下&#xff0…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...