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。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chat-TTS chat-tts-ui 实机部署上手测试!Ubuntu服务器实机 2070Super*2 8GB部署全流程

项目介绍 开源的项目&#xff0c;感谢各位大佬的贡献&#xff01; 官方介绍&#xff1a;一个简单的本地网页界面&#xff0c;使用ChatTTS将文字合成为语音&#xff0c;同时支持对外提供API接口。A simple native web interface that uses ChatTTS to synthesize text into spe…

科技赋能冷链园区:可视化带来全新体验

应用图扑可视化技术&#xff0c;冷链园区能够更加直观地监控和管理资源&#xff0c;优化运作流程&#xff0c;提高运营效率与服务质量。

Spring Bean详解

Spring Bean作用域 默认情况下&#xff0c;所有的 Spring Bean 都是单例的&#xff0c;也就是说在整个 Spring 应用中&#xff0c; Bean 的实例只有一个 如果我们需要创建多个实例的对象&#xff0c;那么应该将 Bean 的 scope 属性定义为 prototype&#xff0c;如果 Spring 需…

Qt Quick 教程(一)

文章目录 1.Qt Quick2.QML3.Day01 案例main.qml退出按钮&#xff0c;基于上面代码添加 4.使用Qt Design StudioQt Design Studio简介Qt Design Studio工具使用版本信息 1.Qt Quick Qt Quick 是一种现代的用户界面技术&#xff0c;将声明性用户界面设计和命令性编程逻辑分开。 …

欧拉函数的求解

欧拉函数的定义 欧拉函数的性质 性质1是性质2的特殊情况 性质1的理解&#xff1a;一个数a是质数&#xff0c;前面的数b与a的gcd一定是1 性质2的理解&#xff1a;1,2,…p,p1,p2…2p,…3p…p^k 其中以np结尾的序列重复了p^&#xff08;k-1&#xff09;次&#xff0c;每一次的循环…

华为HCIP Datacom H12-821 卷6

1.单选题 下面是一台路由器的部分配置&#xff0c;关于该部分配置描述正确的是&#xff0c;[HUAWEllJip ip-prefix plpermit 10.0.192.0 8 greater-equal 17 less-equal 18 A、10.0.192.0/8 网段内&#xff0c;掩码长度为 20 的路由会匹配到该前缀列表&#xff0c;匹配规则为…

Day55 代码随想录打卡|二叉树篇---二叉搜索树中的插入操作

题目&#xff08;leecode T701&#xff09;&#xff1a; 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值…

最新大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程

最新大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程 测试环境&#xff1a;NginxPHP7.0MySQL5.6 源码大小&#xff1a;427M 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89398733 更多资源下载&#xff1a;关注我。 前端图片&#xff…

无法远程桌面连接,无法远程桌面连接的解决方法有哪些

方案一&#xff1a;组策略编辑器禁用WDDM 策略组中没有禁用WDDM也是导致此计算机无法连接到远程计算机的原因之一&#xff0c;请您按照以下流程禁用WDDM。 步骤1. 按WinR输入gpedit.msc并按Enter键打开“本地组策略编辑器”。 步骤2. 依次点击“本地计算机策略”>“计算机…

指标管理与精益生产:制造业的双翼齐飞

在竞争激烈的制造业环境中&#xff0c;企业要想保持持续的竞争优势&#xff0c;不仅需要拥有高效的生产流程&#xff0c;更需要有科学的管理方法。指标管理系统和精益生产正是这其中的两大关键要素。本文将探讨制造业缺乏指标管理系统的弊端&#xff0c;以及指标管理和精益生产…

C语言—数据在内存中的存储

1.整数在内存中的存储 文章回顾&#xff08;C语言—操作符详解&#xff09; 整数的2进制表示方式有三种&#xff0c;即原码、反码和补码。 有符号的整数&#xff0c;三种表示方式均有符号位和数值位两部分&#xff0c;符号位都是用0表示“正”&#xff0c;用1表示“负”&…

前端页面实现【矩阵表格与列表】

实现页面&#xff1a; 1.动态表绘制&#xff08;可用于矩阵构建&#xff09; <template><div><h4><b>基于层次分析法的权重计算</b></h4><table table-layout"fixed"><thead><tr><th v-for"(_, colI…

C++ 类与对象的使用要点(超详细解析,小白必看系列)

1.面向过程和面向对象初步认识 C语言是面向过程的语言&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题 例如&#xff1a;洗衣服 C是基于对象的&#xff0c;关注的是对象&#xff0c;将一件事拆分成不同的对象&#xff0c;靠对…

WPF Prism框架搭建

WPF Prism框架搭建 1.引入Prism框架 在Nuget包管理器中搜索Prism&#xff0c;并添加到项目中 2.在项目中使用prism框架 2.1 修改app.xaml 删除项目中自带的StartupUri 修改Application节点为prism:PrismApplication 引入prism命名空间 <prism:PrismApplication x:C…

飞创直线模组厂家,为高精度运动系统提供直驱技术解决方案

飞创Faster motion是国内一家专业的直线模组厂家&#xff0c;致力于研发、设计、生产超长行程、超高速度、超高精度、超重负载以及速度平稳的单轴和多轴直线电机模组&#xff0c;为高速、高精度运动平台提供直驱技术解决方案。 飞创直线模组其生产的单轴、双轴、龙门、多轴模组…

Java面试八股之myBatis与myBatis plus的对比

myBatis与myBatis plus的对比 基础与增强&#xff1a; MyBatis 是一个成熟的Java持久层框架&#xff0c;它允许开发者通过XML文件或注解来配置SQL语句和数据库映射&#xff0c;提供了一个灵活的方式来操作数据库&#xff0c;但需要手动编写所有的SQL语句和结果集映射。 MyBa…

使用​Roboflow对YOLO数据集标注与训练及下载

一、Roboflow 介绍 一个功能丰富的在线数据标注和深度学习平台&#xff0c;它提供了从数据标注 到模型训练的一站式服务&#xff0c;yolov5到v8官方推荐的数据集查找及下载网站。 主要功能 1、在线标注数据&#xff1a;Roboflow支持在线标注图片和视频数据&#xff0c;提供多…

MySQL版本发布模型

MySQL 8.0 之后使用了新的版本控制和发布模型&#xff0c;分为两个主线&#xff1a;长期支持版&#xff08;LTS&#xff09;以及创新版。这两种版本都包含了缺陷修复和安全修复&#xff0c;都可以用于生产环境。 下图是 MySQL 的版本发布计划&#xff1a; 长期支持版 MySQL…

示例:WPF中如何不卡顿页面的情况加载大量数据

一、目的&#xff1a;在开发过程中经常会遇到一个ListBox列表里面需要加载大量数据&#xff0c;但是加载过程中会假死卡顿影响用户体验&#xff0c;或者是你的主页面加载了大量控件&#xff0c;或者切换到一个有大量元素的页面都会有这种体验&#xff0c;因为加载的都是UI元素不…

【计算机网络体系结构】计算机网络体系结构实验-DNS模拟器实验

一、DNS模拟器实验 拓扑图 1. 服务器ip 2. 服务器填写记录 3. 客户端ip以及连接到DNS服务器 4. ping测试