做招聘的网站,建设银行网站诚聘英才,男女之间做下面哪个网站免费,网站服务器查询一、功能说明
本交通灯系统采用先进的stm32f103c8t6微处理器为核心控制单元。系统设置东南西北四个方向各配置两位数码管#xff0c;用以精准展示5至99秒的时间范围#xff0c;并且允许用户根据实际需求进行灵活调整。
在信号灯配置方面#xff0c;每个方向均配备左转、直…
一、功能说明
本交通灯系统采用先进的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 1BOOT1 0从系统存储器启动这种模式的功能由厂家设置。系统存储器是芯片内部的特定区域出厂时预置了一个BootLoader用于串口下载程序到Flash中。这种模式用得较少。
SRAM启动方式BOOT0 1BOOT1 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。
感谢各位用户点赞、分享、在看这些行为让知识得以更加广泛地传播从而让更多人受益。
请在转载作品时注明出处严禁抄袭行为。