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微处理器为核心控制单元。系统设置东南西北四个方向各配置两位数码管,用以精准展示5至99秒的时间范围,并且允许用户根据实际需求进行灵活调整。 在信号灯配置方面,每个方向均配备左转、直…...
Pip换源秘籍:让你的Python包飞行起来!
在Python的包管理中,Pip是最重要的工具之一。它允许开发者从Python Package Index (PyPI)安装包,但有时由于网络问题或服务器负载过高,直接从PyPI安装包可能会非常慢。这时,更换Pip源到一个更快的镜像站点是一个常见的解决方案。本…...
Flutter TIM 项目配置
目录 1. 设计说明 2. 参考资料索引 Flutter SDK 服务端 Rest API 腾讯后台 其他 3. TIM 整体架构 第一部分:APP 端 第二部分:腾讯服务器 第三部分:三方服务 第四部分:你自己的服务器 4. TIM SDK 集成 TUIK 含 UI 集成…...
【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(8)
Hi٩(๑o๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机!带你一周内快速走进嵌入式的大门,let’s go! (8&#x…...
第5天:视图与模板进阶
第5天:视图与模板进阶 目标 掌握视图逻辑和模板渲染,包括不同类型的视图、自定义模板标签和过滤器,以及模板继承和包含的概念。 任务概览 学习函数视图和类视图的使用。编写自定义模板标签和过滤器。理解模板的继承和包含机制。 详细步骤…...
线程间通信方式(互斥(互斥锁)与同步(无名信号量、条件变量))
1通信机制:互斥与同步 线程的互斥通过线程的互斥锁完成; 线程的同步通过无名信号量或者条件变量完成。 2 互斥 2.1 何为互斥? 互斥是在多个线程在访问同一个全局变量的时候,先让这个线程争抢锁的资源,那个线程争抢…...
Android使用data uri启动activity或service
设定AndroidManifest.xml 在AndroidManifest.xml文件中,我们可以设定activity或service的data。 <!-- activity定义方式 --> <activityandroid:name".page.main.MainActivity"><intent-filter><action android:name"an…...
能理解你的意图的自动化采集工具——AI和爬虫相结合
⭐️我叫忆_恒心,一名喜欢书写博客的研究生👨🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支…...
基于SpringBoot+大数据城市景观画像可视化设计和实现
💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…...
Oracle表中的数据量达到30万条
当Oracle表中的数据量达到30万条,并且查询性能过慢时,增加索引是一个有效的优化方案。以下是一些建议来增加索引以提高查询性能: 分析查询需求: 首先,需要明确哪些查询是经常执行的,以及这些查询的WHERE子…...
【python】python学生成绩数据分析可视化(源码+数据+论文)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…...
如何定期更新系统以保护网络安全
定期更新系统保护网络安全的方法 定期更新系统是确保网络安全的关键措施之一。以下是一些有效的方法: 及时获取更新信息:用户应通过邮件订阅、官方网站、厂商渠道等途径获取最新的更新通知。此外,互联网上的安全论坛和社区也是获取相关安全资…...
华为数通——OSPF
正掩码:/24 255.255.255.0 反掩码: 255.255.255.255 -255.-255.-255.0 0.0.0.255 例如掩码:255.255.252.0 反掩码:0.0.3.255 在反掩码里面,0 bit 表示精确匹配,1…...
RedHat9 | Web服务配置与管理(Apache)
一、实验环境 1、Apache服务介绍 Apache服务,也称为Apache HTTP Server,是一个功能强大且广泛使用的Web服务器软件。 起源和背景 Apache起源于NCSA httpd服务器,经过多次修改和发展,逐渐成为世界上最流行的Web服务器软件之一。…...
API-事件监听
学习目标: 掌握事件监听 学习内容: 事件监听拓展阅读-事件监听版本 事件监听: 什么是事件? 事件是在编程时系统内发生的动作或者发生的事情。 比如用户在网页上单击一个按钮。什么是事件监听? 就是让程序检测是否有事…...
如何为自己的项目生成changelog
背景 在github上看到人家的更新日志感觉很cool,怎么能给自己项目来一套呢 环境信息 tdstdsdeMacBook-Pro demo-doc % node -v v14.18.1 tdstdsdeMacBook-Pro demo-doc % npm -v 6.14.15硬件信息 型号名称:MacBook Pro版本: 12.6.9芯片&…...
MySQL之表碎片化
文章目录 1. 前言2. InnoDB表碎片3. 清除表碎片3.1 查找碎片化严重的表3.2 清除碎片 4. 小结5. 参考 1. 前言 周一在对线上表进行数据清除时,发现一个问题,我要清除的单表大概有2500w条数据,清除数据大概在1300w条左右,清除之前通…...
碳+绿证如何能源匹配?考虑碳交易和绿证交易制度的电力批发市场能源优化程序代码!
前言 近年来,面对日益受到全社会关注的气候变化问题,国外尤其是欧美等发达国家和地区针对电力行业制定了一系列碳减排组合机制。其中,碳排放权交易(以下简称“碳交易”)和绿色电力证书交易(以下简称“绿证…...
【原创】springboot+mysql海鲜商城设计与实现
个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…...
envi5.6+SARscape560安装(CSDN_20240623)
envi和SARscape的版本必须匹配,否则有些功能不能使用。 Envi5.6安装 1. 点击安装程序. 2. 进入安装界面,点击“Next”. 3. 选择“I accept the agreement”,点击“Next”。 4. 选择安装路径,建议直接安装在默认路径下࿰…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...
高效的后台管理系统——可进行二次开发
随着互联网技术的迅猛发展,企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心,成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统,它不仅支持跨平台应用,还能提供丰富…...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...

