交通灯控制程序
- 格式:doc
- 大小:151.00 KB
- 文档页数:26
交通信号灯控制操作规程交通信号灯是城市交通管理的重要设施之一,在道路交通中发挥着重要的指引和控制作用。
为了确保交通信号灯的有效运行,需要遵循一定的操作规程。
下面是交通信号灯控制操作规程的一些要点,共计1200字。
一、信号灯基本知识1. 了解交通信号灯的基本运行原理和指示含义。
红灯表示停止,黄灯表示准备停止或准备行驶,绿灯表示行驶。
2. 了解不同道路交叉口信号灯组的设置和指示方式。
包括直行、左转、右转等各种情况。
二、遵循信号灯的指示1. 在信号灯绿灯亮起时,可行驶。
遇到黄灯时,可以继续通行,但要有预案准备停车。
2. 在红灯亮起时,必须停车等待。
不能闯红灯。
3. 在左转专用道上,必须遵守专用道的信号指示。
当左转专用灯亮起时,可以行驶;当红灯时,必须停车等待。
4. 在右转专用道上,必须遵守专用道的信号指示。
当右转专用灯亮起时,可以行驶;当红灯时,可以右转弯行驶。
三、注意特殊情况1. 当交通信号灯故障时,应按交通警察的指挥行驶。
遇到无信号灯的交叉口时,应按右侧让行原则行驶。
2. 切勿盲目追逐绿灯,要时刻注意交通状况,确保自身和他人的安全。
3. 当红灯亮起时,若发现交叉口堵塞,应及时停车等待,确保通畅。
四、遵守道路交通规则1. 切勿酒驾、超速、闯红灯等违反交通法规的行为。
2. 遵守道路交通标志和交通标线的规定。
3. 保持车距,避免危险超车,注意行人、非机动车的通行。
五、应用交通信号灯规范交通1. 交通信号灯是交通行为规范的重要手段之一,要提高对信号灯的重视。
在日常驾车中,要严格按照信号灯的指示行驶。
2. 在车辆通行过程中,要合理利用信号灯,保持通行秩序。
不得盲目冲进交叉口,避免堵塞。
3. 特别要注意和礼让行人,确保行人安全通过路口。
六、积极配合交通信号灯的控制1. 在平时交通不繁忙的情况下,遇到红灯时,不要试图通过闯红灯来提前通行。
要保持耐心等待,以确保自身和他人的安全。
2. 当信号灯黄灯亮起时,应适时减速停车,不能盲目冲过。
交通信号灯的PLC控制1 设计任务和要求1.1用PLC控制交通灯信号,示意图如下:1.2交通灯流程如下:1、南北红灯亮并保持15秒,同时东西绿灯亮,但保持10秒,到10秒时东西绿灯闪亮3次(每周期1秒)后熄灭;继而东西黄灯亮,并保持2秒,到2秒后,东西黄灯熄灭,东西红灯亮,同时南北红灯熄灭和南北绿灯亮。
2、东西红灯亮并保持10秒。
同时南北绿灯亮,但保持5秒,到5秒时南北绿灯闪亮3次(每周期1秒)后熄灭;继而南北黄灯亮,并保持2秒,到2秒后,南北黄灯熄灭,南北红灯亮,同时东西红灯熄灭和东西绿灯亮,循环执行。
3、有白天/夜间操作开关、运行/停止开关、紧急操作开关1号和2号,其功能如下:1)白天/夜间操作转换开关在“白天”位置时,按上述时序正常运行,在“夜间”位置时两边均只有黄灯闪烁。
运行开关在接通电源时,方可切换白天/黑夜开关。
2)开关在“运行”位置,系统启动,在“停止”位置,系统关闭。
3)当有特殊情况(如事故)需要某一方向绿灯一直亮时,则应用紧急操作开关实现此功能,例如:1号开关=“1”时,南北方向绿灯一直亮,东西方向红灯一直亮;2号开关=“1”时,东西方向绿灯一直亮,南北方向红灯一直亮;若关闭紧急开关,则恢复正常工作。
2 硬件设计2.1 PLC 选型FX1N系列是功能很强大的微型PLC,并且能增加特殊功能模块或扩展板,通信和数据链接功能选项使得FX1N在体积、通信和特殊功能模块和能源控制等重要的应用方面非常完美,主机点数14/24/40/60,分为晶体管输出/继电器输出,交流电源/直流电源,可扩展到128点,8000步存储容量,并且可以连接多种扩展模块,特殊功能模块,最大可扩展到多达128I/O点,定位和脉冲输出功能:一个PLC单元中每相能同时输出2点100KHz脉冲,PLC配备有7条特殊的定位指令,包括零返回、绝对或相对地址表达方式及特殊脉冲输出控制,通过扩展板连接显示模块或模拟量,扩展输入输出点数,可以使用扩展板增加模拟电位器,输入输出点数增加,并且能安装显示模块FX1N-5DM,能监控和编辑定时器、计数器和数据寄存器,还能通过FX1N-2AD-BD,FX1N-1DA-BD实现模拟量输入,输出,通过连接扩展板或特殊适配器能实现多种通信和数据链接,通过FX2N-16CCL及FX2N-32CCL,可充当CC-LINK主站或从站。
交通信号灯控制详细操作说明一、操作面板示意图:三、修改多时段程序的步骤:在基本步骤6中按下“功能1”,根据你的需要重复“修改程序的基本步骤”2-5;设定时钟的应从早上到晚上,共有十个时段可以设定。
四、修改程序中的特定数字:1、设定左转时间[ 0 2·0 2 ]是转入二相位的特定数字2、设定直行时间[ 0 3·0 3 ]是转入黄闪的特定数字;3、设定时钟时间[ 2·3 5 9 ]是退出修改的特定数字;五、手动:在正常工作状态下按“功能2”键即进入手动工作状态,按相应键即对干线左转、支线左转、干线直行、支线直行的手动控制,再按“功能2”键返回正常工作状态。
六、恢复出厂设置及24小时连续工作设置:如遇到不明原因的控制器故障请恢复出厂设置复位,按住“功能2”键再开电源,听毕“啼”音后即恢复出厂设置。
自动1(自动2)设置如下:详细产品功能及参数JD-400LED交通信号灯一.技术参数:1.外壳防护等级IP44,显示器的光学、色度和安全性能指标均达到GB14887的要求。
2.亮度:≥350cd,可视距离:≥400M,可视角:≥60°。
3.色度:红色 630nm,黄色590nm,绿色505nm。
4.控制方式:与控制器同步,工作方式:连续。
输入电压:交流220V±10%,消耗功率峰值:<15W。
二. 产品特点:1.使用寿命长达5万小时,维修工作量小。
2.本产品发光亮度高,是普通灯泡亮度的4倍以上,可视距离在400以外。
3.节约能源,灯盘使用低压安全电源DJS-3通用型双色真绿倒计时显示器一.技术参数:1、外壳防护等级IP44,外形尺寸:830×630×230mm。
2、显示器的光学、色度和安全性能指标均达到GB14887的要求3、可视距离:≥400m,视角:>30°,亮度:≥250cd最大显示数字:99。
4、色度:红色 630nm,绿色505nm。
自动交通灯系统
(一)自动交通灯系统示意图
(二)控制要求
1. 上电运行时系统处于停止状态。
2. 按钮start/stop可实现系统启动/停止控制。
方案1 :南北红灯亮20秒,东西绿灯亮15秒后闪亮了3 次(3秒)后,东西黄灯亮4秒后转为:东西红灯亮20秒;南北绿灯亮15秒后闪亮3次(3秒)后灭;南北黄灯亮4秒后循环.
方案2:南北红灯亮10秒,东西绿灯亮5秒后闪亮了3 次(3秒)后,东西黄灯亮2秒后转为:东西红灯亮10秒;南北绿灯亮5秒后闪亮3次(3秒)后灭;南北黄灯亮2秒后循环.
方案3:南北和东西黄灯同时亮闪亮5秒1次.
(三)I/O配置
输入
启动/停止按钮X0~X1
东西红灯 Y0 东西黄灯 Y1 东西绿灯 Y2
南北红灯Y3 南北黄灯 Y4 南北绿灯 Y5
(四)设计要求
理解动作过程,列写I/O配置表,画出硬件电路图,编写梯形图程序,进行系统调试。
程序设计如下:
(1)自动交通灯原流程图
(4)硬件电路图
(5)梯形图程序。
附录1、程序设计与分析本程序主要有复位程序、中断程序、延迟程序、显示电路程序、LED 灯控制程序、定时器工作程序和键盘扫描程序组成,具体分析如下:#include<AT89X52.h> //将AT89X52.h头文件包含到主程序#define uint unsigned int //变量类型宏定义#define uchar unsigned char//定义数据口#define data_bus P0#define shu 5//定义全局变量char sn_num0=30,ew_num0=20; //开始南北、东西干道初始值分别为30s、20schar sn_num,ew_num;uchar a=0,num=0,i=0,j=0,k=0;bit b=0; //定义位标志bit c=0;bit d=~d;bit v=1;sbit sn_h=P2^7; //定义数码管的位选口sbit sn_l=P2^6;sbit ew_h=P2^5;sbit ew_l=P2^4;//定义led灯口sbit n_red=P1^2;sbit n_yellow=P1^1;sbit n_green=P1^0;sbit s_red=P1^6;sbit s_yellow=P1^7;sbit s_green=P2^0;sbit e_red=P1^3;sbit e_yellow=P1^4;sbit e_green=P1^5;sbit w_red=P2^3;sbit w_yellow=P2^2;sbit w_green=P2^1;sbit k1=P3^2; //定义键****uchar code num_table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定义显示段码uchar code num_table1[]={ 0x00,0x71}; //“0X00”表示什么都不显示,“0X71”显示FF/***********************延时子函数************************/void delay(uint t){uint i,j;for(i=t;i>0;i--)for(j=120;j>0;j--);}/**************************定时器1初始化函数***************************/void timer0_init(bit t){TMOD=0x01; //定时器0工作在方式1TH0=0x3c; //赋初值TL0=0xb0;EA=1; //开总中断ET0=1; //允许定时器0中断TR0=t; //为‘1’启动定时器0}/**************************定时器1中断函数*****************************/void timer0() interrupt 1{TH0=0x3c; //重复初值 (50ms)TL0=0xb0;num++;if(num==10){ d=~d;if(sn_num<=shu||ew_num<=shu){c=~c;}}if(num==20) //定时1秒(20*50ms){c=~c;d=~d; //c取反用于黄灯和数码管闪烁if(b==0){sn_num--; //南北通行时间减1if(sn_num<0){b=1;sn_num=sn_num0;}{ew_num--; //东西通行时间减1if(ew_num<0){b=0;ew_num=ew_num0;}}num=0;}}/***********************显示函数************************/void display(char sn_n,char ew_n){uchar i;for(i=0;i<4;i++){switch(i){case 0:if(a==0){data_bus=num_table[sn_n/10];} //数码管1显示南北通行时间的十位 else if(a==1){data_bus=num_table[sn_n/10]; //数码管1显示南北通行时间的个位}else if(a==2){data_bus=num_table1[0]; // 数码管1不显示}else{if(c==0)data_bus=num_table1[1]; //数码管1显示Felsedata_bus=num_table1[0];}ew_h=0; //关其他的三个数码管ew_l=0;sn_l=0;sn_h=1;//开数码管1break;case 1:if(a==0){data_bus=num_table[sn_n%10];} //数码管2显示南北通行时间的个位 else if(a==1){{data_bus=num_table1[0];}else{if(c==0)data_bus=num_table1[1];elsedata_bus=num_table1[0];}ew_h=0;ew_l=0;sn_h=0;sn_l=1;break;case 2:if(a==0){data_bus=num_table[ew_n/10];} //数码管3显示东西通行时间的十位 else if(a==1){data_bus=num_table1[0];}else if(a==2){data_bus=num_table[ew_n/10];}else{if(c==0)data_bus=num_table1[1];elsedata_bus=num_table1[0];}sn_h=0;sn_l=0;ew_l=0;ew_h=1;break;case 3:if(a==0){data_bus=num_table[ew_n%10];} //数码管4显示东西通行时间的个位 else if(a==1){data_bus=num_table1[0];}else if(a==2){data_bus=num_table[ew_n%10];if(c==0)data_bus=num_table1[1];elsedata_bus=num_table1[0];}sn_h=0;sn_l=0;ew_h=0;ew_l=1;break;}delay(3);}}/***********************键盘扫描函数************************/void keyscan(){if(k1==0){delay(10); //键盘消抖if(k1==0){TR0=0; //关定时器0v=0; //标志位v赋0,v为0时K2K3实现时间的加减功能i++;if(i>2){v=1; //标志位v赋1,v为1时K2K3实现强制南北、强制东西、紧急、夜间功能TR0=1; //开定时器0i=0;sn_num=sn_num0; //存储调节好的时间供调节返回后立即从设定好的值执行 ew_num=ew_num0;}switch(i) //选择显示模式{case 0:a=0;break;case 1:a=1;break;case 2:a=2;break;default:break;}}}if(k2==0){delay(10);if(k2==0){if(v==0){if(a==1) //通行时间加{sn_num0++;if(sn_num0>99)sn_num0=99;}if(a==2){ew_num0++;if(ew_num0>99)ew_num0=99;}}if(v==1) //进入禁止南北、禁止东西通行模式 {j++;if(j==0)a=0;else if(j==1)a=3;else if(j==2)a=4;else{a=0;j=0;sn_num=sn_num0;ew_num=ew_num0;}}}while(k2==0);delay(10);}if(k3==0){if(v==0){if(a==1) //通行时间加{sn_num0--;if(sn_num0<0)sn_num0=0;}if(a==2){ew_num0--;if(ew_num0<0)ew_num0=0;}}if(v==1) //进入紧急、夜间通行模式{k++;if(k==0)a=0;else if(k==1)a=5;else if(k==2)a=6;else{a=0;k=0;sn_num=sn_num0;ew_num=ew_num0;}}}while(k3==0);delay(10);}}/***********************led控制函数************************/void cotrol_led() //第一状态,南北干道路绿灯亮,东西干道红灯亮{s_red=1;n_red=1;e_yellow=1; //关东西黄灯w_yellow=1;e_green=1; //关东西绿灯w_green=1;n_green=0; //开南北绿灯s_green=0;if(sn_num>shu) //时间大于shu时{s_yellow=1; //关南北黄灯n_yellow=1;e_red=0; //开东西红灯w_red=0;}if(sn_num<=hu) // 第二状态,当sn_num =4s时,南北干道绿灯灭,黄灯每隔一秒亮一次,至零为止{n_green=1; //关南北绿灯s_green=1;if(c==1) //南北黄灯闪烁{s_yellow=1;n_yellow=1;}else{s_yellow=0;n_yellow=0;}}display(sn_num,sn_num);//显示南北通行时间}if(b==1) //第三状态,南北干道路红灯亮,东西干道绿灯亮{e_red=1;s_green=1;e_green=0;w_green=0;if(ew_num>shu){e_yellow=1;w_yellow=1;s_red=0;n_red=0;}if(ew_num<=shu) //第四状态,当ew_num =4s时,东西干道绿灯灭,黄灯每隔一秒亮一次,至零为止{e_green=1;w_green=1;if(c==1){e_yellow=1;w_yellow=1;}else{e_yellow=0;w_yellow=0;}}display(ew_num,ew_num); //显示东西通行时间}}else{if(a==1){n_red=1; //设定时间时关闭所有灯n_yellow=1;n_green=1;e_yellow=1;e_green=1;w_red=1;w_yellow=1;w_green=1;display(sn_num0,sn_num0); //显示设定的南北时间}if(a==2){n_red=1; //设定时间时关闭所有灯n_yellow=1;n_green=1;s_red=1;s_yellow=1;s_green=1;e_red=1;e_yellow=1;e_green=1;w_red=1;w_yellow=1;w_green=1;display(ew_num0,ew_num0); //显示设定的东西时间}if(a==3) //南北禁止模式下南北红灯亮,东西绿灯亮 {n_red=0;n_yellow=1;n_green=1;s_red=0;s_yellow=1;s_green=1;e_red=1;e_yellow=1;e_green=0;display(sn_num,sn_num); //显示FF}if(a==4) //东西禁止模式下南北绿灯亮,东西红灯亮 {n_red=1;n_yellow=1;n_green=0;s_red=1;s_yellow=1;s_green=0;e_red=0;e_yellow=1;e_green=1;w_red=0;w_yellow=1;w_green=1;display(ew_num,ew_num); //显示FF}if(a==5) //紧急模式下东西南北红灯亮{n_red=0;n_yellow=1;n_green=1;s_red=0;s_yellow=1;s_green=1;e_red=0;e_yellow=1;e_green=1;w_red=0;w_yellow=1;w_green=1;display(ew_num,ew_num); //显示FF}if(a==6) //夜间模式下东西南北绿灯亮{if(d==1){n_red=1;n_yellow=1;n_green=1;s_red=1;s_yellow=1;s_green=1;e_red=1;e_yellow= 1;e_green=1;w_red=1;w_yellow=1;w_green=1;}else{ n_yellow=0;s_yellow=0;e_yellow=0;w_yellow=0;}display(ew_num,ew_num); //显示FF}}}/***********************主函数************************/ void main(){sn_num=sn_num0; //赋设定好的时间ew_num=ew_num0;timer0_init(1); //启动定时器0while(1) //主循环{keyscan(); //键盘扫描cotrol_led(); //LED灯控制}}2、操作说明南北每次通行时间设为30秒、东西每次通行间为20秒,时间按K1可设置修改。
DSP原理及C程序开发交通灯综合控制实验及程序代码一、实验目的◇熟悉使用ICETECK-F2812-A评估板控制ICETECK-CTR上交通灯的方法◇掌握TMS320F2812DSP定时器的使用和编程◇掌握TMS320F2812DSP外中断的使用和编程二、实验要求1、交通灯控制要求◇交通灯分红黄绿三色,东、南、西、北各一组◇计时显示:8*8点阵显示两位计数◇正常交通控制信号顺序①南北绿灯:东西红灯(20s)②南北绿灯闪烁③南北黄灯④南北红灯,东西黄灯⑤东西绿灯(20s)⑥东西绿灯闪烁⑦东西黄灯⑧返回1循环控制◇紧急情况处理①当任意方向通行剩余时间多于10s,将时间给为10s②正常变换到四面红灯(20s)③直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)2、交通灯模拟利用ICETECK-CTR上的一组发光二极管(共12只,分为东西南北四组、红黄绿三色)的亮灭实现交通信号的模拟;3、计时显示利用ICETEK-CTR上的发光二极管显示阵列模拟显示4、计时利用TMS320F2812DSP片上定时器,定时产生时钟计数,再利用此计数对应具体时间5、紧急情况利用ICETECK-CTR上键盘产生外中断,中断正常信号顺序,模拟突发情况6、程序设计由于控制是由不同的各种状态按顺序发生的,可采用状态机控制方法来实现、◇首先列举所有可能发生的状态◇然后将这些状态编号,按顺序产生这些状态;状态延续的时间用程序控制◇对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成三、实验步骤1.实验准备(1)连接实验设备:(2)连接实验箱附带的键盘的PS2插头到ICETEK-CTR的“键盘接口”P8。
(3)将ICETEK-CTR板的供电电源开关拨动到“开”的位置。
2.设置Code Composer Studio3.3在硬件仿真(Emulator)方式下运行。
3.启动Code Composer Studio 3.3,选择菜单Debug→Connect ; Debug→Reset CPU。
python仿真控制交通信号灯的编程程序在现代城市交通中,交通信号灯起着至关重要的作用,它们通过控制车辆流量和行人通行,维持道路交通的有序进行。
而为了合理优化交通信号灯的控制,提升交通效率,减少拥堵现象的发生,人们开始采用编程仿真的方式来控制交通信号灯。
本文将介绍使用Python编程语言实现的仿真控制交通信号灯的程序。
一、仿真环境搭建在开始编写交通信号灯控制程序之前,我们首先需要搭建一个合适的仿真环境。
在Python中,我们可以使用第三方库SimPy来创建一个简单而强大的仿真环境。
1. 确保已安装SimPy库SimPy是一个基于事件驱动的仿真框架,可以用来构建离散事件仿真模型。
我们可以通过在命令行中输入以下命令来安装SimPy库:```pip install simpy```2. 创建仿真环境接下来,我们可以使用以下代码来创建一个基本的仿真环境,并设置仿真时间:```pythonimport simpy# 创建仿真环境env = simpy.Environment()# 设置仿真时间SIMULATION_TIME = 100env.run(until=SIMULATION_TIME)```二、车辆和交通信号灯的建模在搭建好仿真环境之后,我们需要对车辆和交通信号灯进行建模。
在这个简化的模型中,我们假设只有一条单向道路,并且车辆和信号灯的到达时间和行为都是随机的。
1. 车辆的建模我们可以使用SimPy的`Process`类来表示车辆。
每个车辆都是一个独立的进程,并在仿真环境中按照特定的规则运行。
以下是一个简化的车辆建模示例:```pythonclass Car(simpy.Process):def __init__(self, env):super().__init__(env)self.env = envdef run(self):while True:# 车辆行驶的时间travel_time = random.randint(5, 20)yield self.env.timeout(travel_time)# 车辆到达信号灯print(f"Car arrives at traffic light at time {self.env.now}")# 等待信号灯绿灯yield self.env.process(self.wait_for_green_light())# 车辆通过信号灯print(f"Car passes through traffic light at time {self.env.now}") def wait_for_green_light(self):# 信号灯状态检查while True:if GREEN_LIGHT:breakyield self.env.timeout(1)```在上面的代码中,我们通过`yield`语句来模拟车辆的行驶时间和等待信号灯的过程。
交通灯程序/*********************************************************** 十字路口交通灯控制 C 程序***********************************************************/#include <reg51.h>#define uchar unsigned char#define uint unsigned int/*****定义控制位*******************************************/sbit Time_Show_LED2=P2^5; //Time_Show_LED2(直行时间显示)控制位sbit Time_Show_LED1=P2^4; //Time_Show_LED1(直行时间显示)控制位sbit EW_LED2=P2^3; //EW_LED2控制位sbit EW_LED1=P2^2; //EW_LED1控制位sbit SN_LED2=P2^1; //SN_LED2控制位sbit SN_LED1=P2^0; //SN_LED1控制位sbit SN_Yellow=P1^6; //SN黄灯sbit EW_Yellow=P1^2; //EW黄灯sbit EW_ManGreen=P3^0; //EW人行道绿灯sbit SN_ManGreen=P3^1; //SN人行道绿灯sbit Special_LED=P2^6; //交通特殊指示灯sbit Busy_LED=P2^7; //交通繁忙指示灯sbit Nomor_Button=P3^5; //交通正常按键sbit Busy_Btton=P3^6; //交通繁忙按键sbit Special_Btton=P3^7; //交通特殊按键sbit EW_ManRed=P3^3; //EW人行道红灯sbit SN_ManRed=P3^4; //SN人行道红灯bit Flag_SN_Yellow; //SN黄灯标志位bit Flag_EW_Yellow; //EW黄灯标志位char Time_EW; //东西方向倒计时单元char Time_SN; //南北方向倒计时单元uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化赋值,正常模式uchar EW1=60,SN1=40,EWL1=19,SNL1=19; //用于存放修改值的变量uchar codetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0-9段选码uchar code S[8]={0x28,0x48,0x18,0x48,0x82,0x84,0x81,0x84};//交通信号灯控制代码/**********************延时子程序**************************/void Delay(uchar a){uchar i;i=a;while(i--){;}}/*****************显示子函数******************************/ void Display(void){uchar h,l;h=Time_EW/10;l=Time_EW%10;P0=table[l];EW_LED2=1; //点亮EW_LED2Delay(2);EW_LED2=0; //熄灭EW_LED2P0=table[h];EW_LED1=1; //点亮EW_LED1Delay(2);EW_LED1=0;h=Time_SN/10;l=Time_SN%10;P0=table[l];SN_LED2=1; //点亮SN_LED2Delay(2);SN_LED2=0;P0=table[h];SN_LED1=1; //点亮SN_LED1Delay(2);SN_LED1=0;h= EW1/10;l= EW1%10;P0=table[l];Time_Show_LED1=1; //点亮Time_Show_LED1Delay(2);Time_Show_LED1=0;P0=table[h];Time_Show_LED2=1; //点亮Time_Show_LED2Delay(2);Time_Show_LED2=0;}/**********************外部0中断服务程序******************/void INT0_srv(void)interrupt 0 using 1{EX0=0; //关中断if(Nomor_Button==0) //测试按键是否按下,按下为正常状态 {EW1=60;SN1=40;EWL1=19;SNL1=19;Busy_LED=0; //关繁忙信号灯Special_LED =0; //关特殊信号灯}if(Busy_Btton==0) //测试按键是否按下,按下为繁忙状态 {EW1=45;SN1=30;EWL1=14;SNL1=14;Special_LED=0; //关特殊信号灯Busy_LED=1; //开繁忙信号灯}if(Special_Btton==0)//测试按键是否按下,按下为特殊状态 {EW1=75;SN1=55;EWL1=19;SNL1=19;Busy_LED=0; //关繁忙信号灯Special_LED =1;//开特殊信号灯}EX0=1; //开中断}/**********************T0中断服务程序*******************/ void timer0(void)interrupt 1 using 1{static uchar count;TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==10){if(Flag_SN_Yellow==1) //测试南北黄灯标志位{SN_Yellow=~SN_Yellow;}if(Flag_EW_Yellow==1) //测试东西黄灯标志位{EW_Yellow=~EW_Yellow;}}if(count==20){Time_EW--;Time_SN--;if(Flag_SN_Yellow==1) //测试南北黄灯标志位{SN_Yellow=~SN_Yellow;}if(Flag_EW_Yellow==1) //测试东西黄灯标志位{EW_Yellow=~EW_Yellow;}count=0;}}/*********************主程序开始***********************/ void main(void){Busy_LED=0;Special_LED=0;IT0=1; //INT0负跳变触发TMOD=0x01; //定时器工作于方式1TH0=(65536-50000)/256; //定时器赋初值TL0=(65536-50000)%256;EA=1; //CPU开中断总允许ET0=1; //开定时中断EX0=1; //开外部INTO中断TR0=1; //启动定时while(1){/*******S0状态**********/SN_ManRed=0;SN_ManGreen=1; //SN人行道通行EW_ManRed=1; //EW人行道禁止EW_ManGreen=0;Flag_EW_Yellow=0; //EW关黄灯显示信号Time_EW=EW;Time_SN=SN;while(Time_SN>=5){P1=S[0]; //SN绿灯,EW红灯Display();}/*******S1状态**********/P1=0x00;while(Time_SN>=0){Flag_SN_Yellow=1; //SN开黄灯信号位P1=P1|0x08; //保持EW红灯Display();}/*******S2状态**********/SN_ManRed=1; //SN人行道禁止SN_ManGreen=0;EW_ManRed=1; //EW人行道禁止EW_ManGreen=0;Flag_SN_Yellow=0; //SN关黄灯显示信号Time_SN=SNL;while(Time_SN>=5){P1=S[2]; //SN左拐绿灯亮,EW红灯Display();}/*******S3状态**********/P1=0x00;while(Time_SN>=0){Flag_SN_Yellow=1; //SN开黄灯信号位P1=P1|0x08; //保持EW红灯Display();}/***********赋值*********/EW=EW1;SN=SN1;EWL=EWL1;SNL=SNL1;/*******S4状态**********/SN_ManRed=1; //SN人行道禁止SN_ManGreen=0;EW_ManRed=0;EW_ManGreen=1; //EW人行道通行Flag_SN_Yellow=0; //SN关黄灯显示信号Time_EW=SN;Time_SN=EW;while(Time_EW>=5){P1=S[4]; //EW通行,SN红灯Display();}/*******S5状态**********/P1=0X00;while(Time_EW>=0){Flag_EW_Yellow=1;//EW开黄灯信号位P1=P1|0x80; //保持SN红灯Display();}/*******S6状态**********/SN_ManRed=1; //SN人行道禁止SN_ManGreen=0;EW_ManRed=1; //EW人行道禁止EW_ManGreen=0;Flag_EW_Yellow=0;//EW关黄灯显示信号Time_EW=EWL;while(Time_EW>=5){P1=S[6]; //EW左拐绿灯亮,SN红灯Display();}/*******S7状态**********/P1=0X00;while(Time_EW>=0){Flag_EW_Yellow=1; //EN开黄灯信号位P1=P1|0x80; //保持SN红灯Display();}/***********赋值********/EW=EW1;SN=SN1;EWL=EWL1;SNL=SNL1;}}。
单片机控制交通灯程序代码第一篇:单片机控制交通灯程序代码毕业设计程序源代码ORG 0000H;主程序的入口地址LJMP MAIN;跳转到主程序的开始处ORG 0003H;外部中断0的中断程序入口地址ORG 000BH;定时器0的中断程序入口地址LJMP T0_INT;跳转到中断服务程序处ORG 0013H;外部中断1的中断程序入口地址MAIN : MOV SP,#50HMOV IE,#8EH;CPU开中断,允许T0中断,T1中断和外部中断1中断MOV TMOD,#51H;设置T1为计数方式,T0为定时方式,且都工作于模式1 MOV TH1,#00H;T1计数器清零MOV TL1,#00HSETB TR1;启动T1计时器SETB EX1;允许INT1中断SETB IT1;选择边沿触发方式MOV DPTR ,#0003HMOV A, #80H;给8255赋初值,8255工作于方式0MOVX @DPTR, A AGAIN: JB P3.1,N0;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1 则跳转MOV A,P1JB P1.7,RED;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间MOV R0,#00H;R0清零MOV R0,A;存入东西方向绿灯初始时间MOV R3,ALCALL DISP1LCALL DELAYAJMP AGAIN RED:MOV A,P1ANL A,#7FH;P1.7置0MOV R7,#00H;R7清零MOV R7,A;存入东西方向红灯初始时间MOV R3,ALCALL DISP1LCALL DELAYAJMP AGAIN毕业设计;------------N0:SETB TR0;启动T0计时器MOV 76H,R7;红灯时间存入76H N00:MOV A,76H;东西方向禁止,南北方向通行MOV R3,AMOV DPTR,#0000H;置8255A口,东西方向红灯亮,南北方向绿灯亮MOV A,#0DDHMOVX @DPTR, A N01:JB P2.0,B0 N02:SETB P3.0CJNE R3,#00H,N01;比较R3中的值是否为0,不为0转到当前指令处执行;------黄灯闪烁5秒程序------N1:SETB P3.0MOV R3,#05HMOV DPTR,#0000H;置8255A口,东西,南北方向黄灯亮MOV A,#0D4HMOVX @DPTR,A N11:MOV R4,#00H N12:CJNE R4,#7DH,$;黄灯持续亮0.5秒N13:MOV DPTR,#0000H;置8255A口,南北方向黄灯灭MOV A,#0DDHMOVX @DPTR,A N14:MOV R4,#00HCJNE R4,#7DH,$;黄灯持续灭0.5秒CJNE R3,#00H,N1;闪烁时间达5秒则退出;-----------------------------N2:MOV R7,#00HMOV A,R0;东西通行,南北禁止MOV R3,AMOV DPTR,#0000H;置8255A口,东西方向绿灯亮,南北方向红灯亮MOV A,#0EBHMOVX @DPTR,A N21:JB P2.0,T03N22:CJNE R3,#00H,N21;------黄灯闪烁5秒程序------N3:MOV R3,#05HMOV DPTR,#0000H;置8255A口,东西,南北方向黄灯亮毕业设计MOV A,#0E2HMOVX @DPTR,A N31:MOV R4,#00HCJNE R4,#7DH,$;黄灯持续亮0.5秒N32:MOV DPTR,#0000H;置8255A口,南北方向黄灯灭MOV A,#0EBHMOVX @DPTR,A N33:MOV R4,#00HCJNE R4,#7DH,$;黄灯持续灭0.5秒CJNE R3,#00H,N3;闪烁时间达5秒则退出SJMP N00;------闯红灯报警程序------B0:MOV R2,#03H;报警持续时间3秒 B01:MOV A,R3JZ N1;若倒计时完毕,不再报警CLR P3.0;报警CJNE R2,#00H,B01;判断3秒是否结束SJMP N02;------1秒延时子程序-------N7:RETI T0_INT:MOV TL0,#9AH;给定时器T0送定时10ms的初值MOV TH0,#0F1HINC R4INC R5CJNE R5,#0FAH,T01;判断延时是否够一秒,不够则调用显示子程序MOV R5,#00H;R5清零DEC R3;倒计时初值减一DEC R2;报警初值减一 T01:ACALL DISP;调用显示子程序RETI;中断返回;------显示子程序------DISP: JNB P2.4,T02 DISP1:MOV B,#0AHMOV A,R3;R3中值二转十显示转换DIV ABMOV 79H,AMOV 7AH,B DIS:MOV A,79H;显示十位毕业设计MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0F7HMOVX @DPTR,ALCALL DELAY DS2:MOV A,7AH;显示个位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0FBHMOVX @DPTR,ARET;------东西方向车流量检测程序------T03: MOV A,R3SUBB A,#00H;若绿灯倒计时完毕,不再检测车流量JZN3JB P2.0,T03INC R7CJNE R7,#64H,E1MOV R7,#00H;中断到100次则清零 E1:SJMP N22;------东西方向车流量显示程序------T02: MOV B,#0AH MOVA,R7;R7中值二转十显示转换DIV ABMOV 79H,AMOV 7AH,B DIS3: MOV A,79H;显示十位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001H毕业设计MOV A,#0F7HMOVX @DPTR,ALCALL DELAY DS4:MOV A,7AH;显示个位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0FBHMOVX @DPTR,ALJMP N7;------延时4MS子程序----------DELAY: MOV R1,#0AH LOOP: MOV R6,#64HNOP LOOP1: DJNZ R6,LOOP1DJNZ R1,LOOPRET;------字符表------TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND第二篇:单片机实现交通灯控制智能交通灯设计与实现基于单片机的智能交通灯控制系统的设计与实现,系统能够根据十字路口双车道车流量的情况控制交通讯号灯按特定的规律变化。
1引言 (2)1.1编写目的 (2)1.2背景 (2)1.3定义 (2)1.4参考资料 (2)2总体设计 (2)2.1需求规定 (2)2.2运行环境 (2)2.3基本设计概念和处理流程 (3)2.4结构 (3)2.5功能器求与程序的关系 (3)2.6人工处理过程 (3)2.7尚未问决的问题 (3)3接口设计 (3)3.1用户接口 (3)3.2外部接口 (3)3.3内部接口 (4)4运行设计 (4)4.1运行模块组合 (4)4.2运行控制 (4)4.3运行时间 (4)5系统数据结构设计 (4)5.1逻辑结构设计要点 (4)5.2物理结构设计要点 (4)5.3数据结构与程序的关系 (4)6系统出错处理设计 (5)6.1出错信息 (5)6.2补救措施 (5)6.3系统维护设计 (5)概要设计说明书1引言1.1编写目的创建一个可供日常交通灯使用的程序,目标读者为交通灯控制人员。
1.2背景说明:a.交通路口复杂交通信号灯的设计b.任务提出者,开发者:陈磊用户:交通指挥系统设计环境:使用Verilog HDL语言进行设计使用Quartus 2编程环境进行开发。
1.3定义ORDER 选择信号ROAD 亮灯控制信号EN5 5秒延时使能信号LIN5 5秒延时终止信号EN25 25秒延时使能信号LIN25 25秒延时终止信号RST 系统复位信号CLK 系统时钟信号1.4参考资料Verilog HDL数字系统设计与应用2总体设计2.1需求规定输入项目:CLK 系统时钟信号RST 系统复位信号输出项目:ROAD 亮灯控制信号,ROAD=00,红灯亮;ROAD=01,黄灯亮;ROAD=10,绿灯亮;ROAD=11,黄灯亮。
处理要求:根据ORDER的不同值,使相应的灯发亮。
2.2运行环境运行环境:。
Quartus II 9.02.3基本设计概念和处理流程2.4结构ORDER 选择某一灯的选择变量ROAD 控制某一灯亮的控制变量2.5功能器求与程序的关系2.6人工处理过程人工输入ORDER的值,根据ORDER的不同值,相应的灯变亮2.7尚未问决的问题创建一个稳定的时钟源3接口设计3.1用户接口light(red,amber,green,0,order)ORDER为控制变量,由它决定让哪一盏灯发亮。
ROAD=100,则红灯亮;ROAD=010,则绿灯亮;ROAD=001,则黄灯亮;3.2外部接口CLK 外部时钟源信号RST 计时程序使能信号ROAD 控制哪一盏灯发亮的信号3.3内部接口根据ORDER的不同取值,在下面这段程序中,case(order)0: beginroad='b100;en25<=1; en5<=0;if(lin25==1) order<=1;end1: beginroad='b010;en25<=0; en5<=1;if(lin5==1) order<=2;end2: beginroad='b001;en25<=1; en5<=0;if(lin25==1) order<=3;end3: beginroad='b010;en25<=0; en5<=1;if(lin5==1) order<=0;endendcase4运行设计4.1运行模块组合ORDER=0时,ROAD=100,调用模块TIMER25,红灯亮ORDER=1时,ROAD=010,调用模块TIMER5,黄灯亮ORDER=2时,ROAD=001,调用模块TIMER25,绿灯亮ORDER=3时,ROAD=010,调用模块TIMER5,黄灯亮4.2运行控制ORDER=0时,ROAD=100,调用模块TIMER25,红灯亮ORDER=1时,ROAD=010,调用模块TIMER5,黄灯亮ORDER=2时,ROAD=001,调用模块TIMER25,绿灯亮ORDER=3时,ROAD=010,调用模块TIMER5,黄灯亮4.3运行时间运行模块将始终占用CPU5系统数据结构设计5.1逻辑结构设计要点ORDER 选择变量用于选择让哪一盏灯亮ROAD=100,则红灯亮;ROAD=010,则绿灯亮;ROAD=001,则黄灯亮;5.2物理结构设计要点ORDER 2位寄存器变量每次存取要存取全部2位ROAD 3位寄存器变量,每次存取要存取全部3位5.3数据结构与程序的关系ORDER 2位寄存器变量每次存取要存取全部2位ROAD 3位寄存器变量,每次存取要存取全部3位6系统出错处理设计6.1出错信息1.系统开始运行时RST!=0,即系统没有复位,即开始运行,此时会导致出错。
2.系统时钟工作不正常,各个时钟上升沿的间隔不相等,在此情况下延时程序会工作不正常,使延时时间延长或缩短。
6.2补救措施故障1:使RST初始时为0,过一段时间后再将RST置1。
故障2:寻找一个工作稳定的时钟源作为系统的时钟源。
6.3系统维护设计1.系统开始运行时RST!=0,即系统没有复位,即开始运行,此时会导致出错。
2.系统时钟工作不正常,各个时钟上升沿的间隔不相等,在此情况下延时程序会工作不正常,使延时时间延长或缩短。
设计需求说明书2任务概述22.1目标 (2)2.2用户的特点 (3)2.3假定和约束 (3)3需求规定33.1对功能的规定 (3)3.2对性能的规定 (3)3.2.1精度 (3)3.2.2时间特性要求 (3)3.2.3灵活性 (4)3.3输人输出要求 (4)3.4数据管理能力要求 (4)3.5故障处理要求 (4)3.6其他专门要求 (5)4运行环境规定54.1设备 (5)4.2支持软件 (5)4.3接口 (5)4.4控制 (5)需求分析说明书的编写提示2任务概述2.1目标该项目开发的意图是为了设计一个可供日常指挥交通使用的交通灯程序,应用目标是用来控制各种交通灯的运行,可以作用在各种类型的交通灯上。
该项目的代码主要是我根据书上已有的一部分资料,再加上自己在网上搜索得到的一些代码,将两者综合以后写出来的|2.2用户的特点该项目的应用对象—交通灯的主要特点如下:1.任意时刻只能有一只灯(红、黄或绿灯)亮。
2.任意时刻必须有一只灯亮,不能三盏灯全是灭的。
3.任一只灯亮了一定时限后必须熄灭,不能一直亮着。
操作人员特点:交通灯一般都是根据程序自动运行的,因此,无操作人员。
维护人员特点:在机房维护交通灯控制程序的人员一般都是学习过编程控制原理的,因此,他们可以看懂程序如何控制交通灯运行的。
本课题预期使用频度:此交通灯控制程序属于24小时全天候运行类型的。
2.3假定和约束预期开发期限:10周。
经费限制:不需要经费。
order=00红灯亮order=01黄灯亮order=10绿灯亮order=11黄灯亮3.2对性能的规定3.2.1精度根据变量ORDER的值,即可使相应的灯变亮,不会出现差错。
3.2.2时间特性要求说明对于该项目的时间特性要求,如对:a.响应时间:根据设定的ORDER的值,立即跳转到相应状态。
b.更新处理时间:必须等待TIMER5或TIMER25延时结束以后,才能进行更新c.数据的转换和传送时间:ORDER设定好以后,立即进行转换,无延迟。
d.解题时间:立即转换,没有延迟。
3.2.3灵活性a.操作方式上的变化:没有影响b.运行环境的变化:没有影响c.同其他系统的接口的变化:没有影响d.精度和有效时限的变化:没有影响e.计划的变化或改进:没有影响3.3输人输出要求输入项:ORDER:2位寄存器型变量,取值范围从00到11。
CLK:时钟源信号RST:延时程序使能信号输出项:ROAD:3位寄存器型变量,取值为100、010或0013.4数据管理能力要求需要管理的文卷个数为三个,一个是交通灯控制程序,一个是25秒程序,另一个是5秒延时程序,两个文卷的大小均在300k以内。
3.5故障处理要求1.系统开始运行时RST!=0,即系统没有复位,即开始运行,此时会导致出错。
2.系统时钟工作不正常,各个时钟上升沿的间隔不相等,在此情况下延时程序会工作不正常,使延时时间延长或缩短。
3.6其他专门要求要有一个稳定的时钟源,这样才能保证某一灯亮后,等待5秒或25秒以后,按照程序的设定,使下一盏灯变亮。
4运行环境规定4.1设备a.处理器型号为8086,内存容量100MBb.外存容量100MB、联机方式、存储格式为二进制文件、设备的型号为ACEX1K;c.输入及输出设备的型号为ACEX1K,联机方式;d.数据通信设备的型号为ACEX1K,数量1只;e.无功能键;4.2支持软件支持软件:Quartus II 9.04.3接口串口通信协议。
4.4控制根据ORDER的值不同,使不同的灯发亮,所以控制信号即为ORDER。
ORDER的值由计算机自动进行变换。
详细设计说明书2所设计系统的结构 (2)3模块1(标识符)设计说明 (2)3.1模块描述 (3)3.2功能 (3)3.3性能 (3)3.4输人项 (3)3.5输出项 (3)3.6算法 (3)3.7流程逻辑 (3)3.8接口 (3)3.9存储分配 (4)3.10注释设计 (4)3.11限制条件 (4)3.12测试计划 (4)3.13尚未解决的问题 (4)4模块2(标识符)设计说明 (4)详细设计说明书2所设计系统的结构3模块1(标识符)设计说明3.1模块描述根据ORDER的不同值选择让不同的灯发亮,如果ORDER=00,则红灯亮;如果ORDER=01,则黄灯亮;如果ORDER=10,则绿灯亮;如果ORDER=11,则黄灯亮。
程序常驻内存,不可重入,是顺序处理。
3.2功能该系统功能如下:1.系统启动,各项复位2.红灯亮,延时25秒3.黄灯亮,延时5秒4.绿灯亮,延时25秒5.黄灯亮,延时5秒6.返回2继续运行3.3性能程序设计好以后,在运行期间,未发生出错的情况。
3.4输人项CLK 系统时钟信号RST 系统复位信号3.5输出项ROAD 亮灯控制信号,ROAD=00,红灯亮;ROAD=01,黄灯亮;ROAD=10,绿灯亮;ROAD=11,黄灯亮。
3.6算法本程序使用一个CASE(ORDER)多重选择结构,根据ORDER的不同值,ROAD被赋给不同的值,具体设置如下所示:ORDER=00 红灯亮ORDER=01 黄灯亮ORDER=10 绿灯亮ORDER=11 黄灯亮3.7流程逻辑3.8接口3.9TIMER25模块:20%的存储空间3.10注释设计ORDER 选择信号ROAD 亮灯控制信号EN5 5秒延时使能信号LIN5 5秒延时终止信号EN25 25秒延时使能信号LIN25 25秒延时终止信号RST 系统复位信号CLK 系统时钟信号3.11限制条件必须要有一个稳定的时钟源,否则可能导致程序运行不正常。