模拟交通灯程序
LED模拟交通灯实验实训报告
LED模拟交通灯实验实训报告实验报告:LED模拟交通灯实训1.实验目的本实验旨在通过搭建一个LED模拟交通灯电路,了解LED的使用原理和掌握LED的亮灭控制方法,同时培养学生的实际动手能力和问题解决能力。
2.实验原理LED即发光二极管,是一种能够将电能转化为光能的器件。
它通过直流电流的作用下,在两个半导体材料之间产生电子的跃迁并发出光效果。
模拟交通灯一般由红、黄、绿三种颜色的灯组成,分别代表停、等待和通行三种状态。
在电路中,通过对LED正、负极的控制,可以使LED达到闪烁或亮灭的效果。
3.实验器材- Arduino开发板-面包板-LED灯(红、黄、绿各一个)-杜邦线-220欧姆电阻(3个)4.实验步骤(1)将Arduino开发板与面包板相连。
(2)使用杜邦线将三个LED灯插入面包板上。
(3)将每个LED的一个端口连接到Arduino上的数字输出口。
(4)通过220欧姆电阻的插入,将每个LED的另一个端口与地板(GND)连接。
(5)通过Arduino开发环境编写程序,实现交通灯的闪烁或亮灭效果。
(6)将Arduino开发板与电脑相连,将程序上传至Arduino。
(7)通过Arduino的电源供电,观察LED的亮灭效果。
5.实验结果实验中搭建了一个模拟交通灯电路,通过Arduino控制LED的亮灭效果。
实验结果如下:-红灯亮5秒,绿灯灭;-红灯灭,黄灯亮3秒;-绿灯亮5秒,黄灯灭;-绿灯灭,红灯亮5秒。
6.实验分析本实验通过搭建一个LED模拟交通灯电路,实现了交通灯亮灭的效果,通过Arduino编程控制灯的状态以达到交通灯运行的效果。
实验结果符合预期。
在实验过程中,需要注意以下问题:(1)正确连接LED灯和电阻,确保电流能够正确流过LED灯,避免LED损坏。
(2)编写程序时,需要注意正确选择数字输出口和对应的LED灯,以避免控制错误。
7.实验总结通过本次实验,我了解了LED的使用原理和掌握了LED的亮灭控制方法。
模拟交通灯控制代码
//功能:模拟交通灯控制C51参考程序具体实现功能:1、正常时信号灯控制:(1)初始状态东西南北全为红灯(5s);(2)东西绿灯、南北红灯(10s);(3)东西绿灯闪烁3次,南北红灯;(4)东西黄灯、南北红灯(2s);(5)东西红灯、南北绿灯(10s);(6)东西红灯,南北绿灯闪烁3次;(7)东西红灯,南北黄灯(2s);(8)转(2)。
2、特殊情况下,东西方向绿灯放行(5s)3、紧急情况下,如有急救车通过时,东西和南北两个方向的交通灯全为红灯(10s),急救车通过后恢复正常信号。
紧急情况优先级高于特殊情况。
4、其他提高部分:实现智能交通灯控制(略,自行考虑并编写)(1)各路口红绿灯点亮时间可调整;(2)数码管显示各路口的点亮时间并作每秒减“1”操作;(3)左转灯设计。
(4)自己设想一些特殊情况并加以处理。
分析:按键S1、S2模拟紧急情况和特殊情况的发生,当S1、S2为高电平(不按按键)时,表示正常情况。
当S1为低电平(按下按键)时,表示紧急情况,将S1信号接至INT0脚(P3.2)即可实现外部中断0的中断申请。
当S2为低电平(按下按键)时,表示特殊情况,将S2信号接至INT1脚(P3.3)即可实现外部中断1的中断申请。
程序设计:由上述流程图,程序需要多个不同延时时间,2s、5s、10s等,假定信号灯闪烁时亮灭时间各为0.5s,则可将0.5s延时作为基本的延时时间。
#include <reg51.h>unsigned char t0, t1; //定义全局变量,用来保存延时时间循环次数//函数名:delay0_5s1//函数功能:用T1的方式1编制0.5秒延时程序,假定系统采用12MHz晶振,定// 时器1、工作方式1定时50ms,再循环10次即可定时到0.5秒//形式参数:无//返回值:无void delay0_5s1( ){for(t0=0;t0<0x0a;t0++) // 采用全局变量t0作为循环控制变量{TH1=0x3c; // 设置定时器初值TL1=0xb0;TR1=1; // 启动T1while(!TF1); // 查询计数是否溢出,即定时50ms时间到,TF1=1TF1=0; // 50ms定时时间到,将定时器溢出标志位TF1清零}}//函数名:delay_t1//函数功能:实现0~127.5秒的延时//形式参数:unsigned char t;// 延时时间为0.5秒×t(0~255)//返回值:无void delay_t1(unsigned char t){for(t1=0;t1<t;t1++) // 采用全局变量t0作为循环控制变量delay0_5s1();}//函数:int_0//函数功能:外部中断0中断函数,紧急情况处理,当CPU响应外部中断0的中断请求时,// 自动执行该函数,实现两个方向红灯同时亮10秒//形式参数:无//返回值:无void int_0( ) interrupt 0 // 紧急情况中断{unsigned char i,j,k,l,m;i=P1; // 保护现场,暂存P1口、t0、t1、TH1、TH0j=t0;k=t1;l=TH1;m=TL1;P1=0xdb; // 两个方向都是红灯delay_t1(20); // 延时10秒P1=i; // 恢复现场,恢复进入中断前P1口、t0、t1、TH1、TH0t0=j;t1=k;TH1=l;TL1=m;}//函数:int_1//函数功能:外部中断1中断函数,特殊情况处理,当CPU响应外部中断1的中断请求时,// 自动执行该函数,实现东西方向放行5秒//形式参数:无//返回值:无void int_1( ) interrupt 2 // 特殊情况中断{unsigned char i,j,k,l,m;EA=0; //关中断i=P1; // 保护现场,暂存P1口、t0、t1、TH1、TH0j=t0;k=t1;l=TH1;m=TH0;EA=1; // 开中断P1=0xf3; // 东西方向放行delay_t1(10); // 延时5秒EA=0; // 关中断P1=i; // 恢复现场,恢复进入中断前P1口、t0、t1、TH1、TH0t0=j;t1=k;TH1=l;TH0=m;EA=1; //开中断}void main( ) //主函数{unsigned char k;TMOD=0x10; // T1工作在方式1EA=1; // 开放总中断允许位EX0=1; // 开外部中断0中断允许位IT0=1; // 设置外部中断0为下降沿触发EX1=1; // 开外部中断1中断允许位IT1=1; // 设置外部中断1为下降沿触发P1=0xdb; // 两个方向都是红灯delay_t1(10); // 延时5秒while(1){P1=0xf3; // A绿灯,B红灯,延时10秒delay_t1(20);for(k=0;k<3;k++) // A绿灯闪烁3次{P1=0xf3;delay0_5s1(); // 延时0.5秒P1=0xfb;delay0_5s1(); // 延时0.5秒}P1=0xeb; // A黄灯,B红灯,延时2秒delay_t1(4);P1=0xde; // A红灯,B绿灯,延时10秒delay_t1(20);for(k=0;k<3;k++) // B绿灯闪烁3次{P1=0xde;delay0_5s1(); // 延时0.5秒P1=0xdf;delay0_5s1(); // 延时0.5秒}P1=0xdd; // A红灯,B黄灯,延时2秒delay_t1(4);}}。
led模拟交通灯单片机课程设计
LED模拟交通灯单片机课程设计一、引言在现代社会中,交通灯作为城市道路交通管理的关键设施,起着至关重要的作用。
而LED模拟交通灯单片机课程设计,则是一项具有实际应用意义的课程设计。
通过该课程设计,可以帮助学生们更好地理解单片机的工作原理,同时也可以锻炼他们的动手能力和解决实际问题的能力。
在本文中,将对LED模拟交通灯单片机课程设计进行全面评估,并为读者呈现一篇有价值的文章。
二、课程设计内容1. LED模拟交通灯基本原理LED模拟交通灯是利用LED灯泡来模拟真实交通灯的工作原理。
通过控制LED的亮灭状态和颜色变化,可以实现交通灯信号的模拟效果。
学生们需要先了解LED原理和工作方式,然后才能进行相关的课程设计。
2. 单片机控制LED模拟交通灯在课程设计中,学生们需要利用单片机来控制LED模拟交通灯的亮灭和颜色变化。
他们需要学习单片机的基本原理和编程知识,然后才能够进行具体的设计和实现。
3. 课程设计要求和流程在课程设计中,学生们需要按照一定的要求和流程来完成LED模拟交通灯的设计。
他们需要进行需求分析、功能设计、硬件连接、程序编写、调试测试等工作,最终完成一个符合要求的LED模拟交通灯设计。
三、课程设计价值1. 培养学生的动手能力LED模拟交通灯单片机课程设计可以帮助学生们培养动手能力。
通过实际操作硬件和编写程序,可以让他们更好地理解课堂理论知识,同时也可以提高他们的动手能力和实际操作能力。
2. 提高学生的解决问题能力在课程设计中,学生们需要解决各种问题,比如硬件连接问题、程序编写问题、调试测试问题等。
这些问题的解决过程可以帮助他们提高解决实际问题的能力,培养他们的创新思维和解决问题的能力。
3. 培养学生的团队合作精神在课程设计中,学生们通常需要分组合作来完成任务。
通过团队合作,可以培养学生的团队合作精神,增强他们的交流和沟通能力,培养他们的团队协作意识。
四、个人观点和总结LED模拟交通灯单片机课程设计是一项具有实际应用意义的课程设计,它可以帮助学生们更好地理解单片机的工作原理,同时也可以锻炼他们的动手能力和解决实际问题的能力。
8255交通灯模拟实验
实验一(2) 8255交通灯模拟实验1、实验要求: 编写程序,以8255的PA 口作为输出口,控制4个双色LED 灯(可发红、绿、黄光),模拟十字路口交通灯管理。
2、实验目的:(1)学习I /0口扩展方法;掌握8255的工作原理以及编程方法,了解软件与硬件的调试技术。
(2)学习模拟交通灯控制方法;(3)学习双色LED 灯的使用;3.8255的工作原理:8255有三个8位的并行口,端口既可以编程为普通I/O 口,也可以编程为选通I/O 口和双向传输口。
8255为总线兼容型,可以与CPU 的总线直接接口。
其中,口地址取决于片选CS 和A1、A0。
选择如下:8255方式字选择:工作方式字特征位本实验中8255编程为PB口、PC口、PA口均输出,根据8255状态控制字选择方法。
8255控制字应为80H。
4.实验器材:(1)G2010+实验平台 1台(2)G6W仿真器1台(3)连线若干根(4)8255芯片1片(5)G2002—8086板 l块5.接线方案:6、实验说明:(1) 把G2002—8086板上的8255的片选CS5孔连“译码器”的YC2(0A000H)孔。
因8255片选信号为0A000H,所以,A口为0A000H、口为0A001H、C口为0A002H、命令口为0A003H。
(2) 因为本实验是模拟交通灯控制实验,所以要先了解实际交通灯的变化规律。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1南北绿灯通车,东西红灯。
过一段时间转状态2,南北绿灯闪几次转亮黄灯,东西仍然红灯,延时儿秒。
再转状态3,东西绿灯通车,南北红灯。
过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。
最后循环至状态1。
(3)双色LED是由一个红灯LED管芯和一个绿色LED管芯封装在一起,公用负端。
当红色端加高电平,绿色正端加低电平,红灯亮;当红色端加低电平,绿色正端加高电干,绿灯亮;两端都加高电平时,黄灯亮。
交通灯程序
交通灯程序简介本文档将介绍一个基于Arduino的交通灯程序。
这个程序可以模拟一个交叉路口的交通灯控制系统,通过控制红绿灯的亮灭来实现交通的有序进行。
硬件准备在运行本程序之前,你需要准备以下硬件设备:1.Arduino控制板2.交通灯模块3.杜邦线(用于连接Arduino和交通灯模块)程序结构本程序的结构如下所示:// 引入交通灯控制库#include <TrafficLight.h>// 定义交通灯引脚const int redPin = 13;const int yellowPin = 12;const int greenPin = 11;// 创建交通灯对象TrafficLight trafficLight(redPin, yellowPin, gree nPin);void setup() {// 初始化交通灯trafficLight.init();}void loop() {// 交通灯切换到红灯trafficLight.turnRed();delay(5000); // 停留5秒钟// 交通灯切换到绿灯trafficLight.turnGreen();delay(10000); // 停留10秒钟// 交通灯切换到黄灯trafficLight.turnYellow();delay(2000); // 停留2秒钟}使用说明硬件连接1.将Arduino控制板连接到电脑并打开Arduino开发环境。
2.将交通灯模块的红灯引脚连接到Arduino的13号引脚。
3.将交通灯模块的黄灯引脚连接到Arduino的12号引脚。
4.将交通灯模块的绿灯引脚连接到Arduino的11号引脚。
程序上传1.在Arduino开发环境中打开本程序。
2.选择正确的Arduino控制板和端口。
3.点击“上传”按钮将程序上传到Arduino控制板。
查看结果上传完成后,你可以观察交通灯模块的亮灭来判断交通灯的状态。
模拟交通信号灯程序
ORG 0000HLJMP MAIN;~~~~~~~~~~~~~~~~~数字显示代码~~~~~~~~~~~~~~~~TAB: DB 3FH,6H,5BH,4FH,66H,6DH,7DH,7H,7FH,6FH;*主程序*ORG 0300HMAIN: MOV 25H,#120 ; 南北通行时间120s,存到25H 单元MOV 26H,#30 ; 东西通行时间30s,存到26H 单元MOV IE,#8FH ; 开中断;~~~~~~~~~~~~~~~~~~南北绿灯东西红灯~~~~~~~~~~~~~~~~~~GREEN: MOV R1,25H ; 为南北方向显示时间做准备LOOP1: MOV 20H,R1 ; 南北通行时间120秒(25H)=120MOV P2,#5EH ; 点亮南北绿灯东西红灯MOV 21H,R1 ; 为东西方向显示时间做准备LCALL DISPLAY1 ; 显示通行所剩时间,其中有0.5秒延时LCALL DISPLAY1 ; 再次显示以便数码管不闪,且再延时0.5秒以便凑够一秒DJNZ R1,LOOP1 ; 判断秒是否已完,若未完则从新循环显示、延时;~~~~~~~~~~~~~~~~南北黄灯闪东西红灯~~~~~~~~~~~~~~~~~~~YELLOW: MOV R2,#3 ; 黄灯闪亮3秒LOOP2: MOV P2,#5DH ; 点亮黄灯MOV 22H,R2 ; 为显示时间做准备LCALL DISPLAY2 ; 黄灯闪亮剩时显示,其中延时0.5秒MOV P2,#5FH ; 熄灭黄灯LCALL DISPLAY2 ; 显时,且再延时0.5秒以便凑够1秒DJNZ R2,LOOP2 ; 判断3秒是否已完,若未完则重新闪灭、延时和显示;~~~~~~~~~~~~~~~~~~~~南北红灯东西绿灯~~~~~~~~~~~~~~~~~~RED : MOV R3,26H ; 东西通行30秒(26H)=30, LOOP3: MOV P2,#33H ; 点亮南北红灯东西绿灯MOV 24H,R3 ; 为东西方向显示时间做准备MOV 23H,R3 ; 为南北方向显示时间做准备LCALL DISPLAY3 ; 时间显示,其中有0.5秒延时LCALL DISPLAY3 ; 凑够1秒时间DJNZ R3,LOOP3 ; 判断30秒是否已完;~~~~~~~~~~~~~~~~~~~南北红灯东西黄灯闪~~~~~~~~~~~~~~~~~~~~~YELLOW2: MOV R2,#3 ; 转入黄灯闪亮3秒LOOP4: MOV 22H,R2 ; 为显示做准备MOV P2,#2BH ; 点亮南北红灯东西黄灯LCALL DISPLAY2 ; 显示时间,并延时0.5秒MOV P2,#7BH ; 点亮南北红灯关闭东西黄灯LCALL DISPLAY2 ; 显时,且再延时0.5秒以便凑够1秒DJNZ R2,LOOP4 ; 判断3秒是否到,若未到继续闪,灭东西黄灯LJMP GREEN ; 主程序到此完;~~~~~~~~~~~~~~~延时子程序~~~~~~~~~~~~~~~~~~~~~DELAY1:MOV TMOD,#10H ; 利用C/T方式1延时5msMOV TH1, #0ECH ; 计数初值装入定时器MOV TL1, #78HSETB TR1 ; 定时器开始运行LOOP5: JBC TF1,LOOP6 ; 检测计数是否溢出SJMP LOOP5 ; 未溢出继续计数LOOP6: MOV TH1, #0ECH ; 重装初值MOV TL1, #78HRET;~~~~~~~~~~~~~~~~~南北通行剩余时间显示子程序~~~~~~~~~~~~~~~~~DISPLAY1: MOV P0,#0 ; 熄灭数码管MOV R7,#17 ; 以下调用六次5毫秒延时程序,循环17次PLAY1: MOV A,20H ; 南北方向要显示时间移到寄存器AMOV DPTR,#TAB ; 要显示的数字代码首地址移入DPTRMOV B,#100DIV AB ; 要显示的时间与100相除,求出百位及余数(十位和个位)MOVC A,@A+DPTR ; 找到百位的显示代码MOV P1,#11111101B ; 选择南北数码管百位片MOV P0,A ; 送出百位显示代码LCALL DELAY1 ; 延时5ms以点亮数码管MOV A,B ; 把十位和个位数移到寄存器AMOV B,#10DIV AB ; 要显示的时间与10相除,求出十位和个位MOVC A,@A+DPTR ; 找到十位数显示代码MOV P1,#10111111B ; 选择南北数码管十位片MOV P0,A ; 送出十位数显示代码LCALL DELAY1 ; 延时5ms以点亮数码管MOV A,B ; 把个位数移到寄存器AMOVC A,@A+DPTR ; 找到个位数显示代码MOV P1,#01111111B ; 选择南北数码管个位片MOV P0,A ; 送出个位数显示代码LCALL DELAY1 ; 延时5ms以点亮数码管MOV A,21H ; 东西方向要显示时间移到寄存器AMOV DPTR,#TAB ; 要显示的数字代码表首地址MOV B,#100DIV AB ; 要显示的时间与100相除,求出百位及余数(十位和个位)MOVC A,@A+DPTR ; 找到百位的显示代码MOV P1,#11111110B ; 选择东西数码管的百位片MOV P0,A ; 送出百位显示代码LCALL DELAY1 ; 延时5ms以点亮数码管MOV A,B ; 把十位和个位数移到寄存器AMOV B,#10;DIV AB ; 要显示的时间与10相除,求出十位和个位MOVC A,@A+DPTR ; 找到十位数显示代码MOV P1,#11111011B ; 选择东西数码管十位片MOV P0,A ; 送出十位数显示代码LCALL DELAY1 ; 延时5ms以点亮数码管MOV A,B ; 把个位数移到寄存器AMOVC A,@A+DPTR ; 找到个位的显示代码MOV P1,#11110111B ; 选择东西数码管的个位片MOV P0,A ; 送出个位显示码LCALL DELAY1 ; 延时5ms以点亮数码管DJNZ R7,PLAY1 ; 是否已循环25次JNB P1.5,DECR ; 跳转至主干道减少六十秒子程RET;~~~~~~~~~~~~~~~~黄灯闪烁剩余时间显示子程序~~~~~~~~~~~~~~~~~~~DISPLAY2: MOV P0,#0 ; 熄灭数码管MOV R7,#50 ; 以下调用两次五毫秒延时程序,循环50次PLAY2: MOV A,22H ; 要显示的时间移到寄存器AMOV DPTR,#TAB ; 要显示的数字代码表首地址MOV B,#10求出十位和个位MOVC A,@A+DPTR ; 找到十位的显示代码MOV P1,#10111011B ; 选择南北数码管十位片和东西数码管十位片MOV P0,A ; 送出十位显示代码LCALL DELAY1 ; 延时5ms以点亮数码管MOV P1,#01110111B ; 选择东西南北数码管个位片MOV A,B ; 把个位数移到寄存器AMOVC A,@A+DPTR ; 找到个位数显示代码MOV P0,A ; 送出个位数显示代码LCALL DELAY1 ; 延时5ms点亮数码管DJNZ R7,PLAY2RET;~~~~~~~~~~~~~东西通行剩余时间显示子程序~~~~~~~~~~~~~~~DISPLAY3: MOV P0,#0 ; 熄灭数码管MOV R7,#25 ; 以下调用4次调用延时程序,循环25次PLAY3: MOV A,23H ; 要南北方向显示的时间移到寄存器AMOV DPTR,#TAB ; 要显示的数字代码表首地址MOV B,#10出十位和个位数MOVC A,@A+DPTR ; 找到十位的显示代码MOV P1,#10111111B ; 选择南北数码管十位片MOV P0,A ; 送出十位显示代码LCALL DELAY1 ; 延时5ms以点亮数码管MOV A,B ; 把个位数移到寄存器AMOVC A,@A+DPTR ; 找到个位数显示代码MOV P1,#01111111B ; 选择南北道数码管个位片MOV P0,A ; 送出个位数显示代码LCALL DELAY1 ; 延时5ms以点亮数码管MOV A,24H ; 要东西方向显示的时间移到寄存器AMOV B,#10DIV AB ; 要显示的时间与10相除,求出十位和个位MOVC A,@A+DPTR ; 找到十位的显示代码MOV P1,#11111011B ;选择东西数码管十位片MOV P0,A ; 送出十位显示代码LCALL DELAY1 ; 延时5ms以点亮数码管MOV A,B ; 把个位数移到寄存器AMOVC A,@A+DPTR ; 找到个位数显示代码MOV P1,#11110111B ;选择东西数码管个位片MOV P0,A ; 送出个位显示代码LCALL DELAY1 ; 延时5ms以点亮数码管DJNZ R7,PLAY3RET;~~~~~~~~~~~~~减少六十秒子程序~~~~~~~~~~~~~DECR: CJNE R1,#60, NEXT ; 显示时间与六十秒进行比较NOP ; 等于六十秒无动作NEXT: JC S ; 大于等于六十秒(c=0),向下执行,否则(c=1)返回MOV R1,#60;MOV 20H,R1;MOV 21H,R1;S: RETEND。
红绿灯模拟系统
红绿灯模拟系统红绿灯模拟系统:前面板:模拟的十字路口红绿灯和两条人行横道。
程序框图:1·本程序主要用到平铺式顺序结构和层叠式顺序结构顺序执行程序语句,用真假常量来控制灯亮与不亮。
2·本程序好用到了while循环和for循环。
3·本程序依照国家交通法规定来执行的。
4·本程序的难点就在于各个路口和人行横道在时域上的协调,以确保安全畅通的通行!说明:一·人行横道1,2红灯禁止行人通行通道A---允许左转,右转,禁止直行。
通道B---允许左转,右转,禁止直行。
通道C---允许右转,禁止左转,直行。
通道D---允许右转,禁止左转,直行。
一过程共15秒=13秒+3秒闪烁提示。
二·人行横道1绿灯允许行人通行,人行横道2红灯通道A---允许直行,右转,禁止左转。
通道B---允许直行,禁止右转,左转。
通道C---允许右转,禁止左转,直行。
通道D---禁止左转,右转,直行。
二过程共10秒。
三·人行横道1黄灯闪烁提醒行人将要禁止行人通行了,人行横道2红灯通道A---允许直行,右转,禁止左转。
通道B---允许直行,禁止右转,左转。
通道C---允许右转,禁止左转,直行。
通道D---禁止左转,右转,直行。
三过程共3秒四·人行横道1,2红灯禁止行人通行。
通道C---允许左转,右转,禁止直行。
通道D---允许左转,右转,禁止直行。
通道A---允许右转,禁止左转,直行。
通道B---允许右转,禁止左转,直行。
四过程共15秒=13秒+3秒闪烁提示。
五·人行横道2绿灯允许行人通行,人行横道1红灯通道C---允许直行,右转,禁止左转。
通道D---允许直行,禁止右转,左转。
通道B---允许右转,禁止左转,直行。
通道A---禁止左转,右转,直行。
五过程共10秒。
六·人行横道2黄灯闪烁提醒行人将要禁止行人通行了,人行横道1红灯通道C---允许直行,右转,禁止左转。
简易交通灯报告(附源程序——汇编语言)
题目:简易交通灯一、设计目的利用TDN微机原理试验箱及单元电路,实现对一道路交通灯的控制。
当通过车辆计数达到50时,绿灯灭,红灯亮,同时数码块倒计时若干秒(此次设计中设为9秒)。
此时,车辆停止,行人可以通过。
二、参加人员及分工李——试验报告霍——调试程序洪——编写程序三、技术要求1、设计完成交通灯的电路2、采用TDN试验箱上的8255、8259、8253完成3、程序设计中采用软件延时四、试验器材TDN-MD86/51实验箱一台,8253一片,8255一片,8259一片,数码管一组,发光二极管一组。
五、设计和调试环境TDN-MD86/51教学试验系统六、题目分析、工作原理、设计思想题目分析我们所做的交通灯是控制单路口处车辆和行人的通过及停止的简易交通灯。
因此需要两个灯和一块用于显示倒计时的数码块来控制车辆和行人的通行、停留问题。
其中两个灯分为红绿色,主要根据两只灯的亮灭情况来控制车辆,当红灯灭绿灯亮的时候车辆可以通过,而红灯亮绿灯灭时车辆就要停止通行。
数码块用于显示倒计时的时间以控制人,当倒计时开始时人通行,倒计时结束后行人就要等待。
根据题目分析得出以下设计思想及工作原理:设计思想在一开始启动交通灯时设置为红灯灭绿灯亮,让车辆先通行,行人等待,当通过50辆车后,红绿灯都同时灭然后红灯亮绿灯灭且数码快开始倒计时,此时为行人通行时间。
然后当数码块倒计时到0时行人通行的时间结束。
转而红灯灭绿灯亮又改为车辆通行时间。
红绿灯和数码块如此反复工作就构成的交通灯。
工作原理通过向8259写入程序来控制其他器件的工作。
在程序一开始写入中断向量和各芯片的控制方式字,以确保发生中断是正确的响应中断及芯片正确的工作状态。
接下来的程序就是控制8255和8253,8255选择工作方式1,A、B、C、口都做基本的输入输出。
通过8255A 口先让红灯灭绿灯亮。
8253选择工作方式2:计数停止中断,通过8253对车辆的计数达到50辆车是就发出中断请求。
单片机红绿灯程序完整版2篇
单片机红绿灯程序完整版2篇第一篇:单片机红绿灯程序完整版(上)单片机红绿灯是一个经典的实验案例,它展示了单片机在控制和管理车辆行驶过程中的应用。
通过编写程序,我们可以模拟交通信号灯的运行,实现流畅和安全的交通流。
在这篇文章中,我将详细介绍单片机红绿灯程序的完整版,并向读者提供逐步实现该程序的指南。
我将从前期准备开始,包括所需材料和工具的概述,然后进入程序编写和单片机烧录的具体步骤。
最后,我将展示运行红绿灯程序的效果。
首先,让我们看一下所需的材料和工具。
为了完成这个项目,你将需要一块单片机开发板(如Arduino Uno),几个LED灯(红色、黄色和绿色),杜邦线,以及一台电脑。
需要特别注意的是,开发板和电脑之间需要通过USB线连接,以便将程序烧录到开发板中。
在准备好所有材料后,我们可以开始编写红绿灯程序。
我们将使用C语言来编写程序,并使用Arduino IDE作为代码编辑器。
首先,打开IDE并创建一个新的工程。
然后在代码编辑窗口中输入相关代码。
程序的主要逻辑是模拟交通信号灯的运行。
我们将交替点亮红、黄、绿三个LED灯,并设置不同的时间间隔来模拟红绿灯的变化。
例如,可以将红灯亮5秒钟,黄灯亮2秒钟,绿灯亮5秒钟。
然后,程序将循环执行这个过程,以实现连续的红绿灯变化。
在编写完程序后,我们需要将其烧录到单片机开发板中。
首先,通过USB线将开发板与电脑连接。
然后,在IDE中选择正确的开发板和端口,并点击“上传”按钮。
IDE将自动编译和烧录程序到开发板中。
一旦程序烧录完成,我们可以断开USB线,将开发板连接到电源,然后观察红绿灯的变化。
通过实验,我们可以看到红绿灯不断地在变化。
这个程序模拟了真实的交通信号灯,给我们提供了一个清晰的视觉指示,用于控制和管理车辆的行驶过程。
这个实验不仅展示了单片机的应用能力,还培养了我们对交通规则和安全的意识。
在红色、黄色和绿色的灯光交替运行中,我们可以思考如何实现更多的功能和效果。
模拟交通灯实验报告
模拟交通灯实验报告模拟交通灯实验报告引言:交通安全一直是社会关注的焦点,而交通信号灯作为交通管理的重要手段,对于维护交通秩序和减少交通事故起着至关重要的作用。
本实验旨在通过模拟交通灯实验,研究交通灯的工作原理和对交通流量的控制效果,以期提高交通系统的效率和安全性。
一、实验目的本实验的主要目的是研究交通灯在不同条件下的工作原理,探究交通灯对交通流量的控制效果以及对交通系统的影响。
二、实验器材和方法1. 实验器材:- 电脑模拟软件- 交通灯模拟装置2. 实验方法:- 设定不同的交通流量条件,模拟不同的交通灯工作模式;- 观察并记录交通灯在不同情况下的工作状态和交通流量情况;- 分析交通灯对交通流量的控制效果。
三、实验过程与结果1. 实验过程:- 首先,我们设置了一个高峰时段的交通流量条件,模拟交通灯的工作。
根据交通流量的变化,交通灯会自动切换不同的信号灯状态,包括红灯、绿灯和黄灯。
- 其次,我们调整了交通灯的周期时长和绿灯时间长度,观察交通流量的变化和交通灯的工作效果。
- 最后,我们分析了不同交通灯工作模式下的交通流量情况,并对交通灯的控制效果进行了评估。
2. 实验结果:- 在高峰时段,交通灯的工作起到了明显的交通流量控制作用。
绿灯时,交通流量明显增加,车辆通行速度加快,而红灯时,车辆停止通行,交通流量减少。
- 调整交通灯的周期时长和绿灯时间长度对交通流量的控制效果有显著影响。
周期时长过长会导致车辆等待时间过长,造成交通拥堵;而周期时长过短会导致交通流量无法得到有效控制。
- 合理调整绿灯时间长度可以有效平衡交通流量,减少交通拥堵和事故发生的可能性。
四、实验讨论与结论1. 实验讨论:- 交通灯作为交通管理的重要手段,对交通流量的控制效果直接影响着交通系统的效率和安全性。
通过本次实验,我们发现交通灯能够有效地控制交通流量,减少交通事故的发生。
- 合理调整交通灯的周期时长和绿灯时间长度,可以最大程度地平衡交通流量,提高交通系统的运行效率。
python仿真控制交通信号灯的编程程序
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`语句来模拟车辆的行驶时间和等待信号灯的过程。
单片机课程设计(交通灯程序)
单片机课程设计基于单片机的交通灯设计2007.07.05 一.设计目的:1、通过交通信号灯控制系统的设计,掌握8255A并行口传输数据的方法,以控制发光二极管的亮与灭;2、用8255作为输出口,控制十二个发光二极管熄灭,模拟交通灯管理.3、通过单片机课程设计,熟练掌握汇编语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力;4、完成控制系统的硬件设计、软件设计、仿真调试。
二.设计要求:交通信号灯模拟控制系统设计利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,并且用LED数码管显示时间。
用8051做输出口,控制十二个发光二极管燃灭,模拟交通灯管理。
在一个交通十字路口有一条主干道(东西方向),一条从干道(南北方向),主干道的通行时间比从干道通行时间长,四个路口安装红,黄,蓝,灯各一盏;1、设计一个十字路口的交通灯控制电路,要求南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,时间可设置修改。
2、在绿灯转为红灯时,要求黄灯先亮,才能变换运行车道3、黄灯亮时,要求每秒闪亮一次。
4、东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。
5、同步设置人行横道红、绿灯指示。
三.设计任务和内容:任务:设计一个能够控制十二盏交通信号灯的模拟系统。
并且要求交通信号灯按照交通规则的模试来运行。
内容:因为本课程设计是交通灯的控制设计,所以要了解实际交通灯的变化情况和规律。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1东西红灯,南北绿灯通车,。
过一段时间转状态2南北绿灯灭,黄灯闪烁几次,东西仍然红灯。
再转状态3,东西绿灯通车,南北红灯。
过一段时间转状态4,东西绿灯灭,闪几次黄灯,南北仍然红灯。
最后循环至状态1。
四.控制系统的总体要求:1.执行程序时,初始态为四个路口的红灯全亮之后;2.东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车;3.延时一段时间后,东西路口的绿灯熄灭,黄灯开始延时并且开始闪烁,闪烁5次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车;4.延时一段时间之后,南北路口的绿灯熄灭,黄灯开始延时并且开始闪烁,闪烁3次之后,再切换到东西路口方向;之后重复2到4过程。
模拟交通灯实验报告
单片机综合实验报告题目: 模拟真实交通灯班级:姓名:学号:指导老师:时间:一、实验内容:用8255芯片的PA、PB口低四位做输出口,控制十二个发光二极管燃灭,模拟十字路口交通灯管理,并利用数码显示器进行倒计时显示(采用单片机内部定时器定时)。
通过外部中断能使交通灯暂停运行,并点亮4个红灯。
通过16*16点阵中的图形模拟控制行人过马路的人形“走”、“停”指示灯,可参考下图所示。
选做增加项目:在交通灯开始之前可通过开关对红绿灯亮灭时间的初始值进行增、减设定或者交通灯暂停时加上乐曲报警。
二、实验电路及功能说明电路:74LS138译码器电路8255与发光二极管连线图数码LED显示器电路(不需接线)16×16LED点阵显示电要求:交通灯亮灭过程同“8255控制交通灯实验”,倒计时显示只需两位数(0~99),用定时器定时进行倒计时,每秒钟减1。
在16*16点阵中显示的人形“走”、“停”标志可自定义,由专门软件可转换为相应显示代码,不需自己推理。
三、实验程序流程图:主程序:子程序:详细程序请参考程序清单。
四、实验结果分析对程序进行仿真可以观察到:点阵中交替显示如图(a)、(b)所示图像,且交替显示时间为30秒。
当显示图像为(a)时,表示可以容行人通过,限时30秒;当显示图像为(b)时,表示不容行人通过,也限时30秒。
如此,在十字路口各置一对点阵即可模拟实景。
五、心得体会通过此次实验,对单片机的I/O口的使用的条件有了更深的理解,对单片机的各个管脚功能的理解也加深了,以及在常用编程设计思路技巧的掌握方面也向前迈了一大步。
这次的课程设计让我把单片机的理论知识应用在实践中,实现了理论和实践相结合,从中更懂得理论是实践的基础,实践有助于检验理论的正确性的道理,对我以后参加工作或者继续学习深造将产生巨大的帮助和影响。
六、程序清单#include <reg51.h>#include <absacc.h>#define uchar unsigned char#define uint unsigned int#define ROW1 XBYTE[0XFFE3]#define ROW2 XBYTE[0XFFE0]#define COL1 XBYTE[0XFFE2]#define COL2 XBYTE[0XFFE1]#define PA XBYTE[0xffd8]#define PB XBYTE[0xffd9]#define CTL XBYTE[0xffdb]#define SEG XBYTE[0xffdc]#define BIT XBYTE[0xffdd]#define allredend 10#define ewredend 2*ewstarter+allredend#define snyellowend ewredend+10#define snredend snyellowend+2*snstarter#define ewyellowend snredend+10sbit KEY1=P1^0;sbit KEY2=P1^1;sbit KEY3=P1^2;sbit P32=P3^2;uchar tongBu;uchar code ewTable[]={0xb6,0x75,0xf3,0xf7,0xae,0x9e,0xbe};uchar code nsTable[]={0xd,0xd,0xc,0xd,0xb,0x7,0xf};//uchar tempa,tempb;int time=1,cnt,change,intflag,inttime=1,ewstarter=10,snstarter=15;int tempseg;uchar key1=0;uchar buffer[]={0,0,0,0,0,0};uchar table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};/*-- 行走--*//*-- 宽度x高度=16x16 --*/uchar code led1[]={0x01,0x80,0x02,0x40,0x02,0x40,0x01,0x80,0x03,0xC0,0x06,0x60,0x0A,0x50,0x0A,0x5 0,0x0B,0xD0,0x12,0x48,0x02,0x40,0x02,0x60,0x04,0x20,0x04,0x20,0x08,0x20,0x18,0x60};/*-- 停止--*//*-- 宽度x高度=16x16 --*/uchar code led2[]={0x01,0x80,0x02,0x40,0x02,0x40,0x01,0x80,0x07,0xE0,0x7E,0x7E,0x02,0x40,0x02,0x40 ,0x03,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0xC0};/*-- 文字: 高--*//*-- Fixedsys12; 此字体下对应的点阵为:宽x高=16x16 --uchar code led2[]={0x02,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x0F,0xE0,0x08,0x20,0x0F,0xE0,0x00,0x0 0,0x7F,0xFC,0x40,0x04,0x4F,0xE4,0x48,0x24,0x48,0x24,0x4F,0xE4,0x40,0x14,0x40,0x08};*/ void delayshort(){char n;for(n=50;n>0;n--);}uchar changeleft(uchar led){uchar temp;temp=0;temp|=(led<<7)&0x80;temp|=(led<<5)&0x40;temp|=(led<<3)&0x20;temp|=(led<<1)&0x10;temp|=(led>>1)&0x08;temp|=(led>>3)&0x04;temp|=(led>>5)&0x02;temp|=(led>>7)&0x01;return(temp);}void led16_16display(uchar *table,uchar length){uchar i=length/2,scan1=0x1,scan2=0x1;for(i=0;i<16;i++){if(i<8){ROW1=0;ROW2=0;COL1=scan1;COL2=0;ROW1=changeleft(table[2*i]);ROW2=table[2*i+1];COL1=scan1;COL2=0;delayshort();scan1<<=1;}else{ROW1=0;ROW2=0;COL1=0;COL2=scan2;ROW1=changeleft(table[2*i]);ROW2=table[2*i+1];COL1=0;COL2=scan2;delayshort();scan2<<=1;}}}void changeseg(){if(key1==0){buffer[3]=10;buffer[0]=10;buffer[5]=tempseg%10;buffer[4]=tempseg/10;buffer[2]=tempseg%10;buffer[1]=tempseg/10;}else if(key1==1){buffer[3]=10;buffer[0]=10;buffer[5]=ewstarter%10;buffer[4]=ewstarter/10;buffer[2]=ewstarter%10;buffer[1]=ewstarter/10;}else{buffer[3]=10;buffer[0]=10;buffer[5]=snstarter%10;buffer[4]=snstarter/10;buffer[2]=snstarter%10;buffer[1]=snstarter/10;}}void timer1()interrupt 3{static uchar temp=0x20,cnt1;TH1=(65536-1000)/256;TL1=(65536-1000)%256;changeseg();SEG=0xff;SEG=table[buffer[cnt1]];cnt1++;if(cnt1==6)cnt1=0;BIT=temp;temp>>=1;if(temp==0)temp=0x20;}void int_0()interrupt 0{delayshort();if(P32==0){PA=0xB6;PB=0xd;PT0=1;PT1=1;intflag=1;while(inttime<=20)led16_16display(led2,32);inttime=1;intflag=0;PT0=0;PT1=0;PA=ewTable[tongBu];PB=nsTable[tongBu];}}void timer0()interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;cnt++;if(cnt==5){cnt=0;if(intflag==1){inttime++;tempseg=10-inttime/2;}else{time++;if(time<=allredend){tongBu=0;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=allredend/2-(time+1)/2;}else if((time>allredend)&&(time<=ewredend)){tongBu=1;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=ewstarter+allredend/2-(time+1)/2;}else if((time>ewredend)&&(time<=snyellowend)){if(change==0){tongBu=2;PA=ewTable[tongBu];PB=nsTable[tongBu];change=1;}else{tongBu=3;PA=ewTable[tongBu];PB=nsTable[tongBu];change=0;}tempseg=ewstarter+allredend/2+5-(time+1)/2;}else if((time>snyellowend)&&(time<=snredend)){tongBu=4;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=ewstarter+allredend/2+5+snstarter-(time+1)/2;}else if((time>snredend)&&(time<=ewyellowend)){if(change==0){tongBu=5;PA=ewTable[tongBu];PB=nsTable[tongBu];change=1;}else{tongBu=6;PA=ewTable[tongBu];PB=nsTable[tongBu];change=0;}tempseg=ewstarter+10+allredend/2+snstarter-(time+1)/2;}else{tongBu=1;time=allredend+1;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=ewstarter+allredend/2-(time+1)/2;}}}}void key(){uchar keynum;keynum=~(P1|0XF8);switch(keynum){case 0x1:while(KEY1==0)led16_16display(led2,32);key1++;TR0=0;if(key1==3){key1=0;TR0=1;}break;case 0x2:while(KEY2==0)led16_16display(led2,32);if(key1==1){ewstarter++;if(ewstarter==100)ewstarter=0;}if(key1==2){snstarter++;if(snstarter==100)snstarter=0;}break;case 0x4:while(KEY3==0)led16_16display(led2,32);if(key1==1){ewstarter--;if(ewstarter==-1)ewstarter=99;}if(key1==2){snstarter--;if(snstarter==-1)snstarter=99;}break;default:break;}}void main(){IE=0x8b;IT0=1;TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-1000)/256;TL1=(65536-1000)%256;CTL=0x80;tongBu=0;TR1=1;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=allredend/2-(time+1)/2;TR0=1;while(1){key();if(intflag==0){if(key1==0){if(time<=allredend)led16_16display(led2,32);else if(time>allredend&&time<=snyellowend)led16_16display(led1,32);else if(time>snyellowend&&time<=ewyellowend)led16_16display(led2,32);}elseled16_16display(led2,32);}}}。
实现交通灯控制模拟程序设计
实现交通灯控制模拟程序设计介绍:交通灯是城市交通管理中的重要组成部分,对于交通流量的控制和交通安全的保障有着重要的作用。
交通灯控制模拟程序设计旨在模拟交通灯的工作原理和控制逻辑,帮助人们更好地理解交通灯的工作机制,并为交通管理者提供参考。
本文将介绍交通灯控制模拟程序设计的实现思路和主要功能。
实现思路:交通灯控制模拟程序设计可以使用面向对象的程序设计思想,将交通灯抽象为一个对象,交通灯控制器作为另一个对象,通过交通灯控制器来控制交通灯的状态转换。
程序设计可以使用事件驱动的方式,在每个时间周期内更新交通灯的状态,并通过图形化界面展示交通灯的状态变化。
主要功能:1.建立交通灯对象:设计一个交通灯类,包含交通灯的各个状态(红灯、绿灯、黄灯)和相关属性(灯的颜色、灯的亮度等)。
2.交通灯状态转换:设计一个交通灯控制器类,负责控制交通灯的状态转换。
根据交通灯的当前状态和时间周期,计算下一个状态是什么,并更新交通灯对象的状态。
3. 创建图形化界面:使用图形化界面库,如Tkinter,创建一个窗口来展示交通灯的状态。
界面上可以显示交通灯的当前状态和剩余时间,并且有按钮可以手动控制交通灯的状态。
4.模拟交通流量:可以设置不同的交通流量参数,如不同道路上车辆的数量和速度,根据这些参数模拟交通流量的变化,并结合交通灯的状态来实现交通的协调与控制。
5.交通灯控制策略:根据交通流量和交通灯的状态,设计一套交通灯控制策略,包括灯的时间周期、绿灯持续时间、红灯持续时间等。
可以通过模拟程序的方式评估不同策略的效果,优化交通灯的控制策略。
总结:交通灯控制模拟程序设计可以帮助人们更好地理解交通灯的工作原理和控制逻辑,并且通过模拟不同交通流量和交通灯策略的情况,优化交通灯的控制效果。
此外,可以通过交通灯控制模拟程序设计为交通管理者提供参考,帮助他们制定更科学、合理的交通灯控制策略,提高城市交通的管理水平和交通安全性。
实验报告二-模拟交通灯实验
实验报告二-模拟交通灯实验实验目的:本次实验旨在通过模拟交通灯实验,了解交通灯的工作原理、设计及调节方法。
实验原理:交通灯是城市交通管理中不可缺少的部分,广泛应用于道路、路口等地方,用以调整交通流量和保障行人和车辆的交通安全。
基本上,每个交通灯系统都由信号控制器、信号球、绿地检测器组成。
信号控制器是交通灯系统的核心部分,通过控制信号球的点灯和熄灭,向车辆、行人发出指令。
实验器材:1. Arduino控制板;2. LED灯若干;3. 面包板;4. 杜邦线;5. 电阻。
实验步骤:1. 通过面包板将Arduino控制板与电阻、LED灯连接;2. 在Arduino控制板上编写程序,实现交通灯模拟;3. 连接电源,通过Arduino IDE输入程序运行。
实验结果:经过程序处理,LED灯按照交通灯的颜色进行变换,使得其能够模拟实际交通灯的工作状态,达到预期效果。
实验教训:在实验过程中,我们发现LED灯的管脚与面包板接触不良时,会出现程序不能正常运行的情况。
因此,我们在连接器件时要确保接触良好,并注意防静电。
实验思考:本次实验通过模拟交通灯,我们深刻认识到交通灯的工作原理以及对道路交通的重要意义。
合理设置交通灯,不仅能够保障行人和车辆安全,而且还能提高道路的通行效率。
因此,在今后的实践活动中,我们应该更加注重交通灯的科学研究和实际应用。
结语:通过本次实验,我们进一步认识到交通灯对于城市交通管理的重要性,同时也掌握了基本的交通灯原理和设计方法。
相信在今后的学习和研究中,我们将能够更好地提高交通管理的水平和效率。
模拟红绿灯c程序
算法描述:1、定义green函数(清屏显示(纵==green 横==red延时30s)定义red函数(清屏显示(横==green 纵==red)延时30s)定义yellow1 yellow2函数(清屏显示延时3s)2、建立循环:调用green函数3、调用yellow1函数4、调用red函数5、调用yellow2函数6、返回继续循环执行。
源程序代码:#include <stdlib.h>#include <stdio.h>#include <windows.h>void green(){system("cls");printf("纵==green 横==red ");Sleep(30000);}void red(){system("cls");printf("纵==red 横==green");Sleep(30000);}void yellow1(){system("cls");printf("纵==yellow 横==red");Sleep(3000);}void yellow2(){system("cls");printf("纵==red 横==yellow");Sleep(3000);}int main(){while(true){green();yellow1();red();yellow2();}return 0;}程序功能:模拟十字路口的红绿灯的变换。
1、进入程序后,程序一直循环,以模拟红绿灯的不断变换。
2、十字路口分为纵横两方向,在模拟中分别用纵横表示。
3、设计每次红灯时间33s,绿灯时间30是,黄灯时间3s。
符合一般十字路口要求。
4、执行时,纵向红灯亮33s,同时横向绿灯亮30,接着横向黄灯亮3s;然后横向变为红灯亮33s,同时纵向绿灯亮30s,接着黄灯亮3s。
十字路口交通灯控制模拟仿真程序课程设计
成绩:C语言课程设计实验十字路口交通灯控制模拟仿真程序设计姓名:学号:班级:信息实验名称:十字路口交通灯控制模拟仿真程序设计实验设备:计算机实验目的:在掌握C语言程序基础知识的基础上,熟练的使用C语言图行库的常用的图形处理函数,熟练掌握选择结构、循环结构的应用。
会开发有一定价值的应用程序。
实验要求:在规定时间内,制作具有简单界面、能够实现基本功能的十字路口交通灯的时间控制动画模拟应用程序。
实验内容:1.人机交互界面(菜单及提示信息)。
2.用户输入的红绿灯停留的时间的界面。
3.根据输入的数据实现交通状况。
4.每次处理完一次数据后都返回主菜单,主菜单上要求有结束程序的接口。
5.程序运行的帮助文档。
6.分析总结。
实现步骤:1. 主函数设计;2. 图形化人机交互界面模块设计;3. 动画模拟模块设计;4. 数据处理模块设计。
自定义函数说明只介绍一部分:1、void DrawLight(int x,int y,int color); //红灯,绿灯,黄灯函数功能:画红绿灯入口参数:x,y为灯的位置,color为灯的颜色输出参数:void2、void VerticalCar(int x,int y, int color); // 车子:竖直方向函数功能:画竖直方向的车辆入口参数:x,y为车的位置,color为车的颜色输出参数:void3、void LevelCar(int x,int y,int color); //车子:水平方向函数功能:画水平方向的车辆入口参数:x,y为车的位置,color为车的颜色输出参数:void4、void SYellowLeftCar(int x,int y,int i); //左转车函数功能:南面车South左转车的车行走路线:入口参数:i为变化的量,x,y为坐标输出参数:void实验过程:1. 根据实验内容对自己该完成什么样的任务进行构思;2. 对各个子程序进行编写并进行错误检查;3. 实现对模块的组建;4. 运行程序,检验程序的功能;5. 总结分析所用到的知识点和不足之处;6. 撰写课程设计报告。
模拟交通灯控制系统(附源程序)
课程设计成绩评定表模拟交通灯控制系统摘要人口的快速增长和车辆的增加,使得城市交通拥挤成为不可避免的问题,为了缓解这一现象,我们设计了模拟交通灯控制系统,通过此系统可以使车辆按一定秩序行驶,降低交通压力。
此系统是由8088为核心部件组建,利用8253A定时/计数器芯片的定时功能,向8259A中断控制器芯片发出定时中断请求,驱动8255A可编程并行接口芯片改变路口的LED灯的亮灭和显示倒数的秒数。
与此同时,该系统设计了应急中断处理,通过外部中断使各个路口皆为红灯,以便应用于急救车、紧急事件或特别情况的应急处理。
关键字:交通灯定时器中断目录摘要 (II)1 交通灯路况分析 (1)1.1交通灯运作的基本情况 (1)1.2交通灯状态变化分析 (2)1.3交通灯持续时间分析 (2)2 项目概述 (3)2.1设计内容 (3)2.2 设计要求 (3)3 系统设计 (4)3.1总体设计 (4)3.2功能模块 (6)4 硬件设计 (11)4.1硬件介绍 (11)4.2 硬件功能分析 (15)4.3硬件模块连接 (17)5 系统实现 (21)5.1开发环境 (21)5.2运行步骤 (21)5.3运行结果分析 (22)参考文献 (23)心得体会 (24)教师评语 (25)附录 (26)1 交通灯路况分析1.1交通灯运作的基本情况一十字路口,假设1、3为东西方向,2、4为南北方向,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车; 延时一段时间后,1、3路口的绿灯熄灭,而1、3路口的黄灯开始闪烁,闪烁若干次以后,1、3 路口红灯亮, 而同时2、4路口的绿灯亮,2、4路口方向通车;延时一段时间后,2、4 路口的绿灯熄灭,而黄灯开始闪烁,闪烁若干次以后,再切换到1、3路口方向,并不断重复上述过程。
如图1-1所示:北南东西绿黄红红黄绿绿黄红红黄绿图1-1 交通灯路况1.2交通灯状态变化分析1. 东西方向为红,南北方向为绿,并持续一定的时间,时间到,南北方的绿灯立刻转为黄灯,进入下一个状态。
交通灯VHDL仿真全代码
1、完整的四个模块:实例化、分频、扫描、状态控制;2、最后附有引脚排列----实例化模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith;entity traffic_light_control isport(clk,emergencykey:in std_logic;red,green,yellow:out std_logic_vector(3 downto 0);led_seg:out std_logic_vector(7 downto 0);led_sel:out std_logic_vector(2 downto 0));end traffic_light_control;architecture behav of traffic_light_control issignal scan_clk,count_clk, temp_key, temp_show: std_logic;signal temp_sel: std_logic;signal temp_h,temp_l: std_logic_vector(3 downto 0);component clk_demultiplier isgeneric(div_fre_1kHz:integer:=24999;div_fre_1Hz:integer:=499);port(clk:in std_logic;clk_1kHz,clk_1Hz:out std_logic);end component;component scandisplay isport(clk:in std_logic;led_sel:out std_logic_vector(2 downto 0);time_h,time_l:in std_logic_vector(3 downto 0);led_segcode:out std_logic_vector(7 downto 0));end component;component StageControl isport(clk:in std_logic;emergencykey:in std_logic;time_h,time_l:out std_logic_vector(3 downto 0);redlight,greenlight,yellowlight:out std_logic_vector(3 downto 0));end component;beginu0:clk_demultiplier port map(clk=>clk, clk_1kHz=>scan_clk,clk_1Hz=>count_clk);u1:scandisplay port map(clk=>scan_clk,time_h=>temp_h,time_l=>temp_l, led_segcode=>led_seg,led_sel=>led_sel);u2:StageControl port map(clk=>count_clk, emergencykey=>emergencykey, redlight=>red,greenlight=>green,yellowlight=>yellow,time_h=>temp_h, time_l=>temp_l);end behav;-- 分频模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith;entity clk_demultiplier isgeneric(div_fre_1kHz:integer:=24999;--=2;div_fre_1Hz:integer:=999 --=4);port(clk:in std_logic;clk_1kHz,clk_1Hz:buffer std_logic);end entity;architecture behav of clk_demultiplier issignal fre_1kHz:integer range 0 to div_fre_1kHz;signal fre_1Hz:integer range 0 to div_fre_1Hz;beginprocess(clk) --将clk_1kHz =clk/50000 beginif rising_edge(clk) thenif(fre_1kHz>=div_fre_1kHz) then fre_1kHz<=0;clk_1kHz<=not clk_1kHz;elsefre_1kHz<=fre_1kHz+1;end if;end if;end process;process(clk_1kHz)--将clk_1Hz =clk_1kHz/1000 beginif rising_edge(clk_1kHz) thenif(fre_1Hz>=div_fre_1Hz) then fre_1Hz<=0;clk_1Hz<=not clk_1Hz;elsefre_1Hz<=fre_1Hz+1;end if;end if;end process;end behav;--扫描显示模块scandisplaylibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith;entity scandisplay isport(clk:in std_logic;led_sel:out std_logic_vector(2 downto 0); time_h,time_l:in std_logic_vector(3 downto 0); led_segcode:out std_logic_vector(7 downto 0));end scandisplay;architecture behav of scandisplay issignal num_in: std_logic_vector(3 downto 0);signal counter:integer range 0 to 1;-- signal led_chioce:std_logic;-- signal led_sel2:std_logic_vector(2 downto 0);--signal led_sel:std_logic;Beginprocess(clk) --数码管扫描beginif(clk'event and clk='1')thencounter<=counter+1;end if;if counter=1 thennum_in<=time_h;led_sel<="001";elsenum_in<=time_l;led_sel<="000";end if;end process;process(num_in) --显示译码(共阴?共阳)begincase num_in iswhen "0000"=>led_segcode<="00111111";when "0001"=>led_segcode<="00000110";when "0010"=>led_segcode<="01011011";when "0011"=>led_segcode<="01001111";when "0100"=>led_segcode<="01100110";when "0101"=>led_segcode<="01101101";when "0110"=>led_segcode<="01111101";when "0111"=>led_segcode<="00000111";when "1000"=>led_segcode<="01111111";when "1001"=>led_segcode<="01101111";when others=>led_segcode<="00000000";end case;end process;end behav;--StageControl控制模块library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;use ieee.std_logic_arith;entity StageControl isport(clk:in std_logic; --时钟emergencykey:in std_logic; --紧急开关time_h,time_l:out std_logic_vector(3 downto 0); --定时redlight,greenlight,yellowlight:out std_logic_vector(3 downto 0) --红黄绿灯);end StageControl;architecture behav of StageControl istype color is(greenred,yellowred,redgreen,redyellow); --四种状态signal stagechange:std_logic:='0';signal tempr,tempg,tempy:std_logic_vector(3 downto 0);signal temp_h,temp_l:std_logic_vector(3 downto 0);signal temp_color:color:=greenred;beginprocess(clk,emergencykey)variable temp_r,temp_g,temp_y:std_logic_vector(3 downto 0); --三组灯的中间变量variable temph,templ:std_logic_vector(3 downto 0); --定时的中间变量variable tempcolor:color:=greenred; --initial stage --当前状态的中间变量beginif(clk'event and clk='1')thencase emergencykey iswhen '1'=> --the normal stagecase temp_color iswhen greenred=> --initial stagetempr<="1100";tempg<="0011";tempy<="1111";case stagechange iswhen '0' =>temp_h<="0010";temp_l<="0101";stagechange<='1';when others =>case temp_l iswhen "0000"=>temp_l<="1001";temp_h<=temp_h-1;when "0001"=>case temp_h iswhen "0000" =>temp_h<="0000";temp_l<="0000";stagechange<='0';temp_color<=yellowred;when others =>temp_l<="0000";end case;when others=>temp_l<=temp_l-1;end case;end case;when yellowred=> --- Second stagetempr<="1100";tempg<="1111"; --quanmietempy<="0011";case stagechange iswhen '0' =>temp_h<="0000";temp_l<="0101";stagechange<='1';when others =>case temp_l iswhen "0000"=>temp_l<="1001";temp_h<=temp_h-1;when "0001"=>case temp_h iswhen "0000" =>temp_h<="0000";temp_l<="0000";stagechange<='0';temp_color<=redgreen;when others =>temp_l<="0000";end case;when others=>temp_l<=temp_l-1;end case;end case;when redgreen=> --Third stagetempr<="0011";tempg<="1100";tempy<="1111";case stagechange iswhen '0' =>temp_h<="0011";temp_l<="0101";stagechange<='1';when others =>case temp_l iswhen "0000"=>temp_l<="1001";temp_h<=temp_h-1;when "0001"=>case temp_h iswhen "0000" =>temp_h<="0000";temp_l<="0000";stagechange<='0';temp_color<=redyellow;when others =>temp_l<="0000";end case;when others=>temp_l<=temp_l-1;end case;end case;when redyellow=> --Forth stagetempr<="0011";tempg<="1111";tempy<="1100";case stagechange iswhen '0' =>temp_h<="0000";temp_l<="0101";stagechange<='1';when others =>case temp_l iswhen "0000"=>temp_l<="1001";temp_h<=temp_h-1;when "0001"=>case temp_h iswhen "0000" =>temp_h<="0000";temp_l<="0000";stagechange<='0';temp_color<=greenred;when others =>temp_l<="0000";end case;when others=>temp_l<=temp_l-1;end case;end case;end case;when others=> --emergency statetempr<="0000";tempg<="1111";tempy<="1111";--- time_h<=temp_h;-- time_l<=temp_l;--temp_color<=tempcolor;end case;redlight<=tempr;greenlight<=tempg;yellowlight<=tempy;time_h<=temp_h;time_l<=temp_l;end if;end process;end behav;引脚排列图:。
交通灯模拟电路程序
第一章课程设计内容与要求分析1.1 课程设计内容1. 以89C51单片机为核心器件组成交通灯控制系统,采用定时中断实现精确定时;1)基本功能与要求:要求在一般工作方式下,十字路口为A B道(A、B道交叉组成十字路口),每道设置红、绿、黄三盏灯,在灯的控制下各道轮流放行。
通行的流程是:B 道红灯亮40秒,同时A道绿灯亮30秒,闪烁5秒,A道黄灯亮5 秒;然后切换A道红灯亮40秒,同时B道绿灯亮30秒,闪烁5秒;B道黄灯亮5秒。
如此循环。
在A B道红、绿、黄灯依次点亮时,A B道对应的两位数码管分别倒计时显示本道红、绿、黄灯点亮的时间。
2)扩展功能:设置自动流量控制功能:即当一道有车而另一道无车(用按键开关S1、S2模拟车辆检测功能)时,使有车车道放行。
设置优先控制功能:当有紧急车辆通过时,用开关S0进行控制,将A、B 道均设定为红灯,第二次按下开关S0后,回复正常运行状态。
2. 利用提供的单元模块构成硬件系统。
硬件设备有AT89C52单片机,74LS164芯片,12个发光二极管,4个共阳极数码管,3个开关和若干导线1.2课程设计要求分析1.2.1系统单元电路组成1. 电路组成1) 在此电路中,我们主要用到了AT89C52单片机下面我们来介绍一下:AT89C52是一种带4K字节闪烁可编程可擦除只读存储器(FPERO—MFalsh Programmable and Erasable Read Only Memory )的低电压,高性能CMOS位微处理器,俗称单片机。
AT89C52是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEI高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATME的AT89C52是一种高效微控制器。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Operation_Type = 4; //下一操作
break;
case 4: //南北向黄灯开始闪烁,绿灯关闭
Green_B = 1;
sbit Yellow_A = P0^1;
sbit Green_A = P0^2;
sbit Red_B = P0^3;//南北向指示灯
sbit Yellow_B = P0^4;
sbit Green_B = P0^5;
uchar Flash_Count = 0; //闪烁次数
Operation_Type = 3; //下一操作
break;
case 3: //东西向红灯与南北向绿灯亮
Red_A = 0; Yellow_A = 1; Green_A = 1;
Red_B = 1; Yellow_B = 1; Green_B = 0;
DelayMS(4000); //延时
Operation_Type = 2; //下一操作
break;
case 2: //东西向黄灯开始闪烁,绿灯关闭
Hale Waihona Puke Green_A = 1; //闪烁5次
//闪烁5次
for(Flash_Count=0;Flash_Count<10;Flash_Count++)
{
DelayMS(600); //延时
Yellow_B = !Yellow_B;
******************************************************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit Red_A = P0^0;//东西向指示灯
/***************************************************************?
名称:?LED模拟交通灯设计
模?块?名:AT89C51?????
功能描述:东西向绿灯亮若干秒后,黄灯闪烁,闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁,闪烁5次后红灯亮,东西向绿灯亮,如此重复。
}
Operation_Type = 1; //回到第一种操作
break;
}
}
void main()
{
while(1) Traffic_Light();
}
uchar Operation_Type = 1;//操作类型
//--------------------------------------------
// 功能描述:延时函数
//--------------------------------------------
void DelayMS(uint x)
{
uchar i;
while(x--)
for(i=0; i<120; i++);
}
//--------------------------------------------
// 功能描述:交通灯切换子程序
//--------------------------------------------
void Traffic_Light()
{
switch (Operation_Type)
{
case 1: //东西向绿灯与南北向红灯亮
Red_A = 1; Yellow_A = 1; Green_A = 0;
Red_B = 0; Yellow_B = 1; Green_B = 1;
for(Flash_Count=0;Flash_Count<10;Flash_Count++)
{
DelayMS(600); //延时
Yellow_A = !Yellow_A;
}