单片机仿真交通灯实验
交通信号灯控制实验——单片机实验报告
实验名称:交通灯信号控制实验一、实验目的:1.学习P1口的使用方法;2.学习延时子程序的编写;3. 学习单片机的开发环境及流程。
二、实验内容及步骤:以P1口作为输出口,控制6个发光二极管,模拟交通信号灯的管理。
在实验仪上选择两组红、黄、绿指示灯,代表交通信号灯。
要求:设有一个十字路口为东西南北方向,其中东西方向为支路,南北方向为主路。
初始状态为4个路口的红灯全亮。
之后,南北路口的绿灯亮,东西路口的红灯亮。
南北路口方向通车,延时20秒后,南北路口的绿灯熄灭,黄灯开始闪烁,闪烁5次后红灯亮。
而同时东西方向路口的绿灯亮,东西方向开始通车,延时10秒后,东西路口的绿灯熄灭,而黄灯开始闪烁。
闪烁5次后,再切换到南北路口的绿灯亮,东西路口的红灯亮。
之后重复上述过程。
三、实验电路四、程序流程图五、单片机程序(*.lst文件)A51 MACRO ASSEMBLER JIAOTONGDENG 04/17/2010 11:17:58 PAGE 1MACRO ASSEMBLER A51 V7.01OBJECT MODULE PLACED IN jiaotongdeng.OBJASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE jiaotongdeng.asm SET(SMALL) DEBUG EPLOC OBJ LINE SOURCE0000 1 ORG 0000H230000 759018 4 START: MOV P1,#00011000B0003 1155 5 CALL DALY1 ;调用0.5s延时子程序0005 7590DB 6 MOV P1,#11011011B0008 1133 7 CALL DALY;调用20s子程序000A 7805 8 MOV R0,#5H000C 74DD 9 LOOP1: MOV A,#11011101B ;P1口状态000E F590 10 MOV P1,A0010 1155 11 CALL DALY1 ; 调用0.5s延时子程序0012 74DF 12 MOV A,#11011111B0014 F590 13 MOV P1,A0016 1155 14 CALL DALY1 ;调用0.5s延时子程序0018 D8F2 15 DJNZ R0,LOOP1001A 747E 16 MOV A,#01111110B001C F590 17 MOV P1,A001E 1144 18 CALL DALY2 ;调用10s延时子程序0020 7805 19 MOV R0,#5H0022 74BE 20 LOOP2: MOV A,#10111110B0024 F590 21 MOV P1,A0026 1155 22 CALL DALY1 ;调用0.5s延时子程序0028 74FE 23 MOV A,#11111110B002A F590 24 MOV P1,A002C 1155 25 CALL DALY1 ;调用0.5s延时子程序002E D8F2 26 DJNZ R0,LOOP20030 020000 27 LJMP START2829 ;20s延时子程序0033 7C64 30 DALY:MOV R4,#1000035 7B64 31 DELAY1:MOV R3,#1000037 7A14 32 DELAY2:MOV R2,#200039 792D 33 DELAY3:MOV R1,#45003B D9FE 34 DELAY4:DJNZ R1,DELAY4003D DAFA35 DJNZ R2,DELAY3003F DBF6 36 DJNZ R3,DELAY20041 DCF2 37 DJNZ R4,DELAY10043 22 38 RET3940 ;10s延时子程序0044 7C64 41 DALY2:MOV R4,#1000046 7B64 42 DEAY1:MOV R3,#1000048 7A0A43 DEAY2:MOV R2,#10004A 792D 44 DEAY3:MOV R1,#45004C D9FE 45 DEAY4:DJNZ R1,DEAY4004E DAFA46 DJNZ R2,DEAY30050 DBF6 47 DJNZ R3,DEAY20052 DCF2 48 DJNZ R4,DEAY10054 22 49 RET5051 ;0.5s延时子程序0055 7C64 52 DALY1: MOV R4,#1000057 7B64 53 DEY1: MOV R3,#1000059 7A19 54 DEY2: MOV R2,#25005B DAFE 55 DEY3: DJNZ R2,DEY3005D DBFA56 DJNZ R3,DEY2005F DCF6 57 DJNZ R4,DEY10061 22 58 RET04/17/2010 11:17:58 PAGE 25960 END04/17/2010 11:17:58 PAGE 3SYMBOL TABLE LISTING------ ----- -------六、实验总结及感想本次实验主要学习了单片机的开发环境和程序调试及运行两种模式,并通过交通灯信号控制实验进行了实例演练。
单片机交通灯实验报告
单片机交通灯实验报告简介本实验通过使用单片机设计并实现一个交通灯控制系统,模拟城市道路上的交通信号灯。
实验过程中,我们通过编程控制不同灯的亮灭状态,实现交通灯的循环变换,以此来模拟车辆和行人的行进。
实验材料•单片机•LED灯•电阻•连线•电源实验过程及结果1. 电路连接首先,我们根据实验需要将单片机和LED灯等材料进行连接。
具体连接方式如下:- 将电阻连接到单片机的IO口上,起到限流的作用。
- 将LED灯连接到电阻的另一端。
- 将单片机通过连线与电源进行连接。
2. 程序设计接下来,我们需要编写程序来实现交通灯的循环变换。
使用C语言编程,通过控制IO口的高低电平来控制LED灯的亮灭状态。
以下是程序的主要逻辑:#include <reg52.h>sbit redLed = P1^0; // 红灯sbit yellowLed = P1^1; // 黄灯sbit greenLed = P1^2; // 绿灯void delay(unsigned int t){while(t--);}void main(){while(1){// 红灯亮,其他灯灭redLed = 0;yellowLed = 1;greenLed = 1;delay(50000);// 红灯亮黄灯亮,绿灯灭redLed = 0;yellowLed = 0;greenLed = 1;delay(20000);// 绿灯亮,其他灯灭redLed = 1;yellowLed = 1;greenLed = 0;delay(50000);// 黄灯亮,其他灯灭redLed = 1;yellowLed = 0;greenLed = 1;delay(20000);}}3. 实验结果与分析通过实验,我们观察到LED灯按照我们设计的程序循环地变换亮灭状态,从而实现了交通灯的模拟效果。
红灯、黄灯、绿灯在规定的时间间隔内依次亮起,并在该时间间隔结束后熄灭。
单片机交通灯实验报告
单片机交通灯实验报告一、实验目的二、实验原理三、实验器材四、实验步骤五、实验结果六、实验分析与讨论七、实验总结一、实验目的:本次单片机交通灯实验的主要目的是通过使用单片机控制LED灯的亮灭,模拟交通信号灯的运行状态,并能够正确地掌握单片机编程技巧和硬件连接技术。
二、实验原理:本次交通灯实验采用了单片机作为中央处理器,通过编写程序控制LED灯的亮灭来模拟交通信号灯。
在程序中,我们需要使用到延时函数和条件判断语句。
具体来说,在红绿黄三个LED灯之间切换时,需要设定一个时间段,并在该时间段内循环执行红绿黄三个LED灯亮度变化的循环语句。
三、实验器材:1. 单片机开发板一块;2. LED 灯若干;3. 杜邦线若干。
四、实验步骤:1. 将红色 LED 灯连接至 P0 口;2. 将黄色 LED 灯连接至 P1 口;3. 将绿色 LED 灯连接至 P2 口;4. 将单片机开发板与电脑连接,打开 Keil 软件;5. 编写程序,将红色 LED 灯亮起来;6. 编写程序,将黄色 LED 灯亮起来;7. 编写程序,将绿色 LED 灯亮起来;8. 编写程序,模拟交通信号灯的运行状态。
五、实验结果:在完成了上述步骤后,我们成功地模拟出了交通信号灯的运行状态。
具体来说,在程序中我们设定了一个时间段为10s,在这个时间段内,红灯亮 5s,黄灯亮 2s,绿灯亮 3s。
在这个时间段结束后,循环执行该过程。
六、实验分析与讨论:通过本次交通灯实验,我们学习到了如何使用单片机控制LED灯的亮灭,并能够正确地编写程序模拟交通信号灯的运行状态。
在编写过程中需要注意以下几点:1. 在使用延时函数时要注意时间单位和精度;2. 在编写条件判断语句时要注意逻辑结构和语法规范;3. 在硬件连接时要注意杜邦线的颜色对应关系和插口位置。
七、实验总结:本次单片机交通灯实验是一次非常有意义的实践活动。
通过此次实验,我们掌握了单片机编程技巧和硬件连接技术,并能够正确地模拟交通信号灯的运行状态。
单片机交通灯实验报告(一)
单片机交通灯实验报告(一)引言概述:交通灯是城市交通管理的重要组成部分,通过控制红绿灯的变化,实现车辆和行人的有序通行。
本文将详细介绍单片机交通灯实验的设计与实现,包括硬件设计、程序编写和实验结果分析。
正文:一、硬件设计1. 确定电路所需元件:单片机、LED灯、电阻等。
2. 组装硬件电路:按照电路图进行元件的连接,确保电路的正确连接。
3. 设计适当的电源:为单片机和LED灯提供稳定的电源。
二、程序编写1. 定义程序所需的IO口:确定控制LED灯的IO口。
2. 初始化单片机:设置单片机的工作频率和中断。
3. 设计交通灯的流程控制:根据实际的交通灯变化规律,设计程序的流程控制。
4. 编写交通灯控制的函数:使用if-else语句或switch-case语句编写函数控制交通灯的变化。
5. 调试程序:通过单片机调试工具或仿真软件,检查程序运行的正确与否。
三、实验结果分析1. 观察实验现象:通过实验现场观察交通灯的变化,记录每一种灯亮的时间和顺序。
2. 分析实验结果:根据实验记录,分析交通灯的工作原理和实现的准确性。
3. 比较与设计要求的符合度:将实验结果与设计要求进行比较,评估实验的完成度。
4. 探讨存在问题与改进方向:分析实验中可能存在的问题,并提出改进措施。
四、小结本文介绍了单片机交通灯实验的设计与实现。
通过硬件设计和程序编写,实现了交通灯的变化控制。
通过实验结果分析,我们可以得出实验的有效性和可行性。
当然,实验中也存在一些问题,需要进一步改进。
在后续的实验中,我们将进一步完善交通灯的控制,提高其实际应用的稳定性和可靠性。
总结:本文详细介绍了单片机交通灯实验的设计与实现,包括硬件设计、程序编写和实验结果分析。
通过该实验,我们对交通灯的工作原理和控制方法有了更为深入的了解,并对实验的经验和教训进行了总结。
相信在今后的学习和实践中,我们能够更好地应用单片机技术,为实现交通管理的智能化和高效化作出贡献。
《单片机原理及应用》基于51单片机的交通信号灯模拟控制系统实验
《单片机原理及应用》基于51单片机的交通信号灯模拟控制系统实验一、实验目的和要求1.掌握单片机基本资源使用。
2.掌握单片机电路原理图绘制和仿真。
3.掌握单片机C语言软件开发以及联合仿真。
二、实验内容和原理实验内容:1.根据题目绘制单片机电路原理图。
2.绘制程序流程图并编写C语言程序3.在仿真程序中进行联合仿真,最后提交实验报告三、主要仪器设备keilC,proteus。
四、操作方法与实验步骤4.1 题目要求用单片机设计一个十字路口交通灯模拟控制系统,要求东西、南北两个方向都通行20秒,警告3秒,禁止20秒,同时要考虑到东西、南北两个方向出现异常情况,出现异常情况器该方向通行60秒。
4.2 系统设计思路南北的红,绿,黄发光二极管与单片机AT89C51单片机的P1.0,P1.1,P1.2相连。
东西的红,绿,黄发光二极管与单片机AT89C51单片机的P1.4,P1.5,P1.6相连。
因此改变单片机P1口的输出编码就可控制交通灯的输出状态。
程序中实现交通灯正常运行过程,两种异常用外中断0和外中断1管理,外接开关模拟异常发生,在中断服务程序中实现异常处理,在主程序中开放外中断0和外中断1,设置为边沿触发方式。
时间单位采用500ms信号,由定时/计数器0定时50ms,循环10次产生,定时/计数器0采用查询方式,主程序中设定定时/计数器0的工作方式:方式1。
4.2 电路图绘制(包含详细的参数选定文字和图像叙述)C1=1nF,C2=1nF,C3=1nF,R1=300,R2=300,R3=300,R4=300,R5=300,R6=300,R7=300,R8=300,R9=300,R10=300,R11=300,R12=300,R13=300,时间单位=500ms。
4.3 C程序编制(包含详细的文字和程序流程图)4.3 仿真分析(包含文字和图像叙述)状态1:东西绿灯,南北红灯,20s。
状态2:东西黄灯,南北红灯,3s。
单片机交通灯实验报告
单片机交通灯实验报告实验目的:1.熟悉单片机的基本工作原理和编程方法。
2.学习如何使用单片机控制交通灯的运行。
3.加深对电子元器件和电路原理的理解和掌握。
实验器材:1.51系列单片机开发板:包括单片机主控板、显示器板、外部扩展板等。
2.LED灯:红色、黄色、绿色各一颗。
3.电阻:用于限流。
4.连接线:用于连接各个电子元器件。
实验原理:在交通中,红灯代表停止、黄灯代表警告、绿灯代表通行。
在本实验中,我们将使用单片机控制三个LED灯实现交通灯的运行。
具体原理如下:1.使用单片机的IO口控制LED灯的亮灭。
2.根据交通灯的运行状态,通过改变LED灯的亮灭顺序来模拟交通的运行。
实验步骤:1.连接电路:将三个LED灯连接到单片机的IO口,并通过电阻限流。
2.编写程序:使用C语言编写程序,在主函数中设置交通灯的运行状态和亮灭顺序。
3.烧写程序:将编写好的程序烧写到单片机中。
4.运行实验:启动单片机,观察LED灯的亮灭情况,验证交通灯是否能正常工作。
实验结果:经过实验,我们成功地实现了单片机交通灯的控制。
在程序运行过程中,红灯先亮,表示停止;然后黄灯亮,表示警告;最后绿灯亮,表示通行。
整个过程循环不断,符合实际交通灯的运行规律。
实验总结:通过这次实验,我深入了解了单片机的基本工作原理和编程方法,掌握了使用单片机控制交通灯的技巧。
同时,我也加深了对电子元器件和电路原理的理解和掌握。
这些知识将对我今后的学习和工作产生积极影响。
然而,在实验过程中也遇到了一些问题。
比如,如果LED灯连接不正确或程序编写有误,交通灯可能无法正常运行。
因此,在进行单片机实验时,我们需要仔细检查电路连接和程序编写,确保一切正常。
总之,单片机交通灯实验是一次充满趣味和挑战的实践活动。
通过这次实验,我不仅学到了许多知识,而且培养了动手能力和实践能力。
希望将来能有更多这样的实验机会,继续提升自己的电子技术水平。
单片机模拟交通灯综合实训
C51单片机模拟交通灯综合实训背景:设计模拟交通灯,东南西北各有红绿黄3只led灯。
工作状态:初始化全部灯亮,并闪烁三次;东西绿灯亮20s(南北红灯亮),黄灯亮并闪烁3次(每次0.5s),然后红灯亮,切换到南北绿灯亮,时间与点亮规律同东西方向,循环重复上述过程。
任务:1设计流程说明。
2系统框图设计。
3硬件电路设计。
4 软件设计及调试。
P1、简要说明设计流程及各环节的工作内容和目的。
1、确定任务:对任务进行分析,确定功能、性能要求,制定总体方案2、总体设计:系统功能分配,确定软件硬件功能关系,拟定调试方案3、硬件设计:绘制硬件原理图,绘制印制板图,配置元器件,硬件功能分配4、软件设计:确定算法与数据结构,程序模块划分,绘制程序流程图,程序编写与仿真调试5、系统调试:包括硬件调试和软件调试P2、根据系统需求,设计并画出系统功能模块框图,说明产品总体工作原理和各模块的功能。
交通灯模块工作原理是通过单片机控制实现灯的亮灭功能是实现东西南北的红、黄、绿灯的亮灭情况数码管模块工作原理是从单片机I/O口接出,实现数字显示功能是实现计时20S倒数和3秒倒数P3、根据系统框图,设计单片机应用系统和接口驱动电路图,标注电路中元器件型号和参数。
电路图用到得元器件如下表设计单片机应用系统和接口驱动电路图P4、编写软件代码,仿真、下载运行验证,实现要求的功能1.软件代码#include <reg51.h>unsigned char second=20, time0 =100 ,time1=50,county=6;unsigned char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsigned char con[]={0xfd,0xfe};sbit NB_G=P1^0;sbit NB_Y=P1^1;sbit NB_R=P1^2;sbit DX_G=P1^3;sbit DX_Y=P1^4;sbit DX_R=P1^5;bit DXT=1;unsigned int i,j;void showtime();main(){for(j=6;j>=1;j--){P0=~P0;for(i=50000;i>0;i--);}P0=0xFF;for(i=50000;i>0;i--);NB_R=0;DX_G=0;showtime();TMOD=0X11;TL0=-10000;TH0=-10000>>8; TL1=-10000;TH1=-10000>>8;EA=1;ET0=1;ET1=1;TR0=1;while(1);}void isr_time0() interrupt 1{ showtime();TL0=-10000;TH0=-10000>>8; time0--; showtime(); if (time0==0){time0=100;second--;if (second==0){TR0=0; TR1=1;second=3;showtime();if (DXT){ DX_G=1;DX_Y=0; }else { NB_G=1;NB_Y=0; } }}}void isr_time1()interrupt 3{TL1=-10000;TH1=-10000>>8;time1--;showtime();if(time1==0){time1=50;if (county%2!= 0){second--;}county--;if(county){if(DXT) DX_Y=~DX_Y;else NB_Y=~NB_Y; }else{county=6;if (DXT){ DX_Y=1;DX_R=0; NB_R=1;NB_G=0;} else{DX_R=1 ;DX_G=0; NB_Y=1;NB_R=0;}TR1=0;TR0=1;DXT=~DXT;second=20;showtime();}}}void showtime(){unsigned int i,j;unsigned char time[2];time[0]=second/10;time[1]=second%10;P2=con[0];P0=seg[time[0]];for(j=100;j>0;j--);P2=con[1];P0=seg[time[1]];}2.仿真电路如图所示M1、分析并列出软件设计中需用到的单片机特殊功能寄存器(SFR)及其功能设置。
单片机交通灯实验报告(二)2024
单片机交通灯实验报告(二)引言概述本报告旨在介绍单片机交通灯实验的进一步研究。
通过对单片机交通灯实验的深入探讨,我们将了解交通信号灯电路的设计原理、控制逻辑以及实际应用的相关知识。
本文将分为五个大点进行阐述,包括:电路设计、控制逻辑编程、硬件连接、功能扩展和实验结果分析。
正文一、电路设计1. 确定交通信号灯的基本电路结构2. 选择适当的电子元件并进行电路布局3. 绘制电路原理图和PCB布局图4. 按照电路设计进行焊接和组装二、控制逻辑编程1. 理解交通信号灯的控制逻辑2. 学习并掌握单片机编程语言3. 根据控制逻辑编写程序代码4. 调试程序的运行,确保交通信号灯按照预期进行切换5. 优化控制逻辑,提高程序效率和稳定性三、硬件连接1. 连接交通信号灯的LED灯及其它电子元件2. 理解并实现灯光的正反相控制3. 使用适当的电阻进行电流限制4. 连接并配置单片机与电路的通信接口5. 建立单片机与计算机之间的连接,方便程序下载与调试四、功能扩展1. 添加电子组件以实现交通信号灯的更多功能2. 尝试不同的交通灯控制算法3. 增加人车辨别传感器以实现智能化控制4. 加入音效与声光提示功能,提高交通信号灯的可视性和可听性5. 设计并实现交通流量的实时监测和统计功能五、实验结果分析1. 对交通信号灯的各项功能进行实验验证2. 分析实验结果,评估系统的性能和稳定性3. 总结实验中遇到的问题和解决方案4. 提出改进交通信号灯设计的建议总结通过本文详细的阐述,我们了解了单片机交通灯实验的电路设计、控制逻辑编程、硬件连接、功能扩展以及实验结果分析等方面的知识。
这些内容不仅对于我们更深入地了解交通信号灯的工作原理和应用具有重要意义,而且为我们开展相关实际项目提供了指导和启示。
希望本报告能够帮助读者更好地理解和应用单片机交通灯实验。
单片机交通灯实验报告
单片机交通灯实验报告交通灯是城市交通管理的重要组成部分,它能够规范车辆和行人的通行秩序,保障交通安全。
为了进一步学习交通灯的原理和掌握其设计,我们进行了一次单片机交通灯实验。
本次实验使用单片机和几个LED灯,通过对单片机的编程控制来实现交通灯的自动切换。
下面是我对该实验进行的详细记录和分析。
首先,我们需要连接电路。
我们采用的是STC89C52单片机,使用3个LED灯来模拟红灯、黄灯和绿灯。
利用杜邦线将LED灯连接到单片机的GPIO口,另外还需要连接一个电位器到单片机的模拟口,用来控制红灯亮灭的时间。
接下来,我们进行了单片机的编程。
我们使用C语言编写程序,利用单片机提供的GPIO口控制LED灯的亮灭,从而实现交通灯的控制。
我们通过控制红灯、黄灯和绿灯的亮灭时间,模拟真实交通灯的工作。
在编写程序的过程中,我们首先做了一些准备工作。
我们初始化了单片机的GPIO口,设定了红灯、黄灯和绿灯的引脚。
然后,我们使用一个循环语句不断地进行交通灯的切换。
具体来说,我们将交通灯控制划分为红灯、绿灯和黄灯三个状态,利用if-else语句对不同状态进行判断并进行相应的控制。
通过对红灯亮灭时间的控制,我们能够实现交通灯的自动切换。
在程序设计的过程中,我们还考虑了交通灯的变化时间。
我们在红灯和绿灯之间设置了一个黄灯过渡时间,以模拟真实交通灯的工作。
同时,我们还设置了一个迟滞时间,使得每个状态之间的切换更加顺滑。
通过这次实验,我们进一步了解了交通灯的工作原理和掌握了单片机的编程技巧。
通过对交通灯的模拟,我们成功地实现了交通灯的自动切换。
总结起来,这次实验不仅提高了我们对交通灯的认识,还锻炼了我们的动手能力和创新思维。
在今后的学习和工作中,我们将继续学以致用,将所学的知识应用到实际问题中。
让我们共同努力,为交通安全做出贡献。
(最新版)单片机综合实验报告之模拟交通灯设计
单片机综合实验报告题目: 模拟真实交通灯班级:姓名:学号:指导老师:2014 年 6 月 13 日一、实验内容:用8255芯片的PA、PB口低四位做输出口,控制十二个发光二极管燃灭,模拟十字路口交通灯管理,并利用数码显示器进行倒计时显示(采用单片机内部定时器定时)。
通过外部中断能使交通灯暂停运行,并点亮4个红灯。
通过16*16点阵中的图形模拟控制行人过马路的人形“走”、“停”指示灯,可参考下图所示:利用实验系统16×16点阵实验单元,以两种方式控制点阵显示。
要求编制程序实现汉字点阵循环显示。
I/O口地址分配I/O口分别提供字形代码(列码)、扫描信号(行码),凡字形代码位为“1”、行扫描信号为“1”点亮该点,否则熄灭;通过逐行扫描循环点亮字形或曲线。
二、实验电路及功能说明8255与发光二极管连线图数码LED显示器电路16×16LED点阵显示电路实验原理图三、实验程序流程图:主程序:四、实验结果分析通过程序仿真,可以检测设计的电路能基本满足设计要求。
交通灯亮灭过程同“8255控制交通灯实验”,倒计时显示只需两位数(0~99),用定时器定时进行倒计时,每秒钟减1。
在16*16点阵中显示的人形“走”、“停”标志可自定义。
五、心得体会我们通过作这个单片机实验,我们总结了一下点:1、加深了对51单片机的理解,不仅仅是以前那样只能点亮发光二极管。
2、感受到了完成一件程序的乐趣,并且知道了实践精神。
3、理解了51单片机的强大和我们知识的肤浅。
4、学到了许多原来C语言中没有的东西,如:控制按键的程序While(P0_5==1){Time++;While(P0_5==1);}这样可以不加防按键抖动的延时程序,更精确时间。
5、进一步充分利用中断时刻都在运行,让时间在中断中显示,就不会出现进入死循环后而无法显示时间的情况,而且还可以快速的反映除时间的变化。
六、程序清单#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[]={};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,0x50,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,0x00,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=()/256;TL1=()%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=()/256;TL0=()%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];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;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=()/256;TL0=()%256;TH1=()/256;TL1=()%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.单片机交通灯实验的意义单片机交通灯实验可以帮助学生理解并掌握交通灯的基本原理和控制方式,培养学生的创新思维和动手能力,并为进一步研究和改进交通灯系统提供参考。
二、单片机交通灯实验的设计和实施1.设计交通灯的硬件结构a.硬件元件选择和连接方式b.单片机选择和编程2.实施交通灯的控制逻辑和操作a.基本的交通灯控制逻辑b.交通灯的运行和状态转换三、单片机交通灯实验的分析和评价1.对交通流畅性的影响分析a.不同信号时间间隔对交通流量的影响b.交通灯控制方式对交通流畅性的影响2.对交通安全性的评价a.不同交通灯参数对交通安全的影响b.交通灯设施对行人安全的影响3.对实验结果的分析和总结a.实验数据的收集和处理b.结果的呈现和解释四、单片机交通灯实验的改进和优化方向1.优化交通灯的控制算法a.基于流量的自适应控制算法b.基于信号的智能预测算法2.改进交通灯的硬件设计a.使用更高效的电子元件和材料b.结合无线通信技术和传感器技术进行实时监测和控制五、单片机交通灯实验的应用和展望1.在城市交通管理中的应用前景a.提高交通流畅性和安全性的需求b.单片机交通灯技术的潜在优势2.可能的进一步研究方向a.基于互联网的智能化交通灯系统b.基于算法的全自动交通控制系统总结:通过本次单片机交通灯实验,我们对交通灯的原理和实现方法有了更深入的了解。
单片机交通灯综合实验报告
单片机交通灯综合实验报告河北工业大学实验报告学院:专业:班级:姓名:学号:实验课程:单片机应用系统设计开发入门指导教师:实验名称:交通信号灯控制实验实验时间:2021 年5月23 日2021 年5 月23 日一实验要求1实验目的及实验内容要求实验目的:1.熟悉外部中断源的扩展方法。
2.初步掌握单片机综合应用系统设计。
3.掌握用Proteus 调试汇编源程序的方法。
实验内容要求:用发光二极管模拟交通信号灯,用逻辑电平开关模拟控制开关,设计一个交通信号灯控制系统。
设计要求如下:(1) A 车道与B 车道交叉组成十字路口,A 是主道,B 是支道;正常情况下,A、B 两车道轮流放行。
具体放行时间和要求如下:(2) A 车道放行50s,其中绿灯常亮44s,绿灯闪烁3s(用于警告),黄灯常亮3s(用于警告)。
(3) B 车道放行30s,其中绿灯常亮24s,绿灯闪烁3s(用于警告),黄灯常亮3s(用于警告)。
在交通繁忙时,交通信号灯控制系统应有手控开关,可人为地改变信号灯的状态,以缓解交通拥挤状况。
控制要求如下:(1) 在B 车道放行期间,若A 车道有车而B 车道无车,按下开关使A 车道放行15s。
(2) 在A 车道放行期间,若B 车道有车而A 车道无车,按下开关使B 车道放行15s。
(3) 有紧急车辆通过时,按下开关使A、B 车道均为红灯,禁行15s。
2实验设备或运行软件平台完成本实验需要使用到单片机仿真软件Proteus8,该软件是英国Lab Center Electronics 公司出版的EDA 工具软件,是目前比较好的仿真单片机及外围器件的工具。
从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB 设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB 设计软件和虚拟模型仿真软件三合一的设计平台。
在编译方面,它也支持IAR、Keil、MATLAB 等多种编译器。
其具有的基本功能特点为:1.原理布图。
单片机交通灯实验报告
单片机交通灯实验报告单片机交通灯实验报告引言:交通灯作为城市交通管理的重要组成部分,对于保障道路交通的安全和顺畅起着至关重要的作用。
为了更好地了解交通灯的工作原理和控制方法,我们进行了单片机交通灯的实验。
一、实验目的本实验旨在通过使用单片机来控制交通灯的变化,探索交通灯的工作原理,并了解单片机在交通灯控制中的应用。
二、实验材料1. 单片机开发板2. 交通灯模块3. 连接线4. 电源适配器三、实验过程1. 将单片机开发板与电源适配器连接,并接通电源。
2. 将交通灯模块与单片机开发板连接,确保连接线的正确性。
3. 编写单片机程序,实现交通灯的控制逻辑。
4. 将程序烧录到单片机开发板中。
5. 通过操作单片机开发板上的按键,观察交通灯的变化。
四、实验结果通过实验,我们成功地实现了交通灯的控制。
在程序的控制下,交通灯按照规定的时间间隔进行变化,保证了道路交通的安全和顺畅。
五、实验分析1. 单片机控制交通灯的好处通过使用单片机来控制交通灯,可以实现精确的时间控制,避免了传统机械控制方式中可能存在的误差。
同时,单片机还可以根据实际情况进行自适应调整,提高了交通灯的灵活性和响应速度。
2. 单片机程序的设计在本次实验中,我们编写了一段简单的单片机程序来控制交通灯的变化。
该程序通过设定不同的时间间隔来控制红、黄、绿三种灯的亮灭,实现了交通灯的正常工作。
在实际应用中,我们可以根据道路情况和交通流量的变化来调整程序,以达到最佳的交通管理效果。
3. 单片机在交通灯控制中的应用前景随着城市交通的不断发展和智能化水平的提高,单片机在交通灯控制中的应用前景十分广阔。
通过使用单片机,可以实现交通灯的智能控制,根据实时的交通流量和道路情况进行调整,提高交通效率和安全性。
同时,单片机还可以与其他交通管理系统进行联动,实现更加智能化的交通管理。
六、实验总结通过本次实验,我们深入了解了交通灯的工作原理和控制方法,并成功地使用单片机实现了交通灯的控制。
单片机交通灯实验报告
一、实验目的1. 理解单片机在交通灯控制系统中的应用原理。
2. 掌握单片机编程方法,实现交通灯的自动控制。
3. 学会使用Proteus进行电路仿真和调试。
4. 培养动手实践能力和团队协作精神。
二、实验环境1. 硬件:STC89C52单片机、数码管、LED灯、电阻、电容、按键、三极管等元器件。
2. 软件:Keil C51、Proteus 8.0。
三、实验原理本实验基于STC89C52单片机,通过编程实现交通灯的红、黄、绿三色灯光切换,并利用数码管显示倒计时功能。
系统主要包括以下模块:1. 单片机控制模块:负责控制LED灯的亮灭和数码管的显示。
2. 数码管显示模块:显示交通灯状态和倒计时时间。
3. 按键模块:实现交通灯的紧急停用功能。
四、实验步骤1. 电路连接:根据原理图连接单片机、数码管、LED灯、电阻、电容、按键等元器件。
2. 程序编写:使用Keil C51编写单片机控制程序,实现以下功能:- 初始化单片机I/O端口;- 设置定时器中断,实现倒计时功能;- 编写主循环程序,控制LED灯的亮灭和数码管的显示;- 编写按键中断程序,实现紧急停用功能。
3. 仿真调试:使用Proteus软件对电路进行仿真,观察LED灯和数码管的显示效果,确保程序运行正确。
4. 实物测试:将程序烧录到单片机中,连接实物电路,测试交通灯控制系统是否正常工作。
五、实验结果与分析1. LED灯控制:通过编程实现LED灯的红、黄、绿三色灯光切换,模拟交通灯的运行状态。
2. 数码管显示:数码管显示倒计时时间,方便观察交通灯的运行状态。
3. 按键控制:按下按键,实现交通灯的紧急停用功能。
实验结果表明,本实验成功实现了单片机控制的交通灯系统,达到了预期目标。
六、实验总结1. 通过本次实验,掌握了单片机编程方法,实现了交通灯的自动控制。
2. 学会了使用Proteus进行电路仿真和调试,提高了动手实践能力。
3. 培养了团队协作精神,与同学共同完成了实验任务。
单片机 交通灯实验
P0.3
P0.2
P0.1
P0.0
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
北G
北Y
北R
西G
西Y
西R
南G
南Y
南R
东G
东Y
东R
1
1
0
1
0
1
1
1
0
1
0
1
设置一个秒计数单元SEC每秒+1,设置两个控制值变量a,b。
采用断处理按键的方式,其优点是按键后处理程序能立即响应和处理,响应的速度也是最快最及时的。本实验可以不采用中断处理按键,在主程序中利用查询键盘的方式判断按键然后进行相对应的程序处理即可。
六、总结
通过本次实验,我已熟练掌握C51对单片机的外部中断及定时器中断的编程,对编译错误的查错能力也有了提升。在处理交通灯闪烁问题时,由于当时定义的ESC变量是整型的,不能为小数,于是想到把ESC代表的秒数翻倍,两个单位作为一秒但是感觉不太好,后来把ESC变量改为了float型,采用强制转换成int型然后和原值相减的方式((int)ESC-ESC!=0)达到了目的。
图42K1键按下保持南北通行状态
3、K2键按下保持东西通行状态,暂停原来的交通灯状态(如图4-3)
图43K2键按下保持东西通行状态
4、K3键按下恢复原来的交通灯状态并正常运行(如图4-4)
图44K3键按下恢复原来的交通灯状态并正常运行
5、K4键按下恢复正常交通灯运行并复位(如图4-5)
图45K4键按下恢复正常交通灯运行并复位
[精品文档]:单片机交通灯实验报告
[精品文档]:单片机交通灯实验报告一、实验目的本次实验的目的是为了熟悉单片机的使用,利用单片机控制模拟实现交通灯的功能,将算法转化为软件程序,同时加强对C语言的编程能力。
二、实验原理本次实验采用的是单片机STC89C52控制,使用软件程序控制单片机的电路,实现交通灯的控制。
芯片收到低电平信号后,依据指令控制执行流程,处理相应的控制动作,从而实现交通灯的控制。
三、实验准备1. STC89C52芯片2. 交通灯模块3. 连接线四、实验步骤1. 先将交通灯模块插电,执行红灯亮,绿灯灭。
2. 然后再把STC89C52芯片插入相应的插座中,连接交通灯模块与STC89C52芯片,将芯片的P0口接到红灯,P1口接到绿灯,然后再把电源的正极和负极分别接到芯片的Vcc和GND口中。
3. 接下来,就是编写程序将算法转化为软件程序。
这个程序需要控制STC89C52芯片来控制交通灯模块,让它呈现红绿灯的模式,节点处相应的各灯间隔时间需要为3s,红灯时间需要大于绿灯时间,红灯时间为5s,绿灯时间很2s。
4. 写完程序打包进Stc-128位定点调试器中,运行调试,调试后点击发送,再把发送的软件烧录到芯片的FLASH中。
5. 最后通电,查看交通灯模块的呈现情况,绿灯呈示状态两次后,红灯呈示状态,重复几次,实现周期性变化,检查整个程序是否正确。
五、实验结果实验中,通过芯片STC89C52与交通灯模块的联系,以及对程序的编写,终于成功的实现了芯片控制实现交通灯的功能,实现交通灯模块的周期性变化。
六、总结通过本次实验,使我们更加深入的了解和掌握了单片机技术下实现交通灯的控制技术,实现其相应的指令和程序,从而提高C语言编程能力,对算法与编程有了更深入的认识。
单片机——交通灯实验报告
方案二:用单片机实现交通灯和彩灯一、实现内容1)在严格具有主、支干道的十字路口,设计一个交通灯自动控制装置。
要求:在十字路口的两个方向上各设一组红黄绿灯;顺序无要求;2)设置一组数码管,以倒计时的方式显示允许通行或禁止通行时间。
红(主:R,支:r)绿(主:G,支:g)黄(主:Y,支:y)三种颜色灯,由四种状态自动循环构成(Gr→Yr→Rg→Ry);并要求不同状态历时分别为:Gr:35秒,Rg:40秒,Yr,Ry:5秒。
二、单片机I/O口介绍我所用的单片机是美国ATMEL公司生产的低电压、高性能CMOS8位AT89C51。
其性能:32个可编程I/o口线、2个16位定时/计数器、6个中断源、可编程串行UART通道,1000次擦写周期等等。
我使用P0口和P2口作为I/O口与外设连接。
P0口:P0口是一组8位漏极开路性双向I/O口,即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个逻辑门电路,对端口写“1”可作为高阻抗输入端用。
在访问外部数据存储器或程存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动4个TTL逻辑门电路。
对电路写“1”,通过内部的上拉电阻把端口拉到高电平,此时可做输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外界信号拉低是会输出一个电流。
在访问外部程序存储器时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器时,P2口线上的内容,在整个访问期间不改变。
Flash编程或校验时,P2亦接收高位地址和其他控制信号。
三、设计原理A)烧录程序于AT89C51上。
我所用的是C语言(因为对汇编语言不是很熟悉)。
程序如下:#include "reg51.h"#include <intrins.h>void display(unsigned int digital);void delay(unsigned int time);void colour();unsigned shu[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};unsignedled[41]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xdf,0xcf,0xc7,0xc3,0xc1,0xc0,0xc1,0xc3,0xc7,0xcf,0xdf,0xff,0xf3,0xe1,0xc0,0xe1,0xf3,0xff,0xde,0xcc,0xc0,0xcc,0xdf,0xff,0xdb,0xed,0xf6,0xed,0xdb,0xff,0xc0,0xff,0xc0,0xff,0xc0,0xff};sbit a=P2^6;sbit b=P2^7;sbit G=P2^0;sbit Y=P2^1;sbit R=P2^2;sbit g=P2^3;sbit y=P2^4;sbit r=P2^5;int flag=0;//全局变量,当它为1时显示彩灯,当它为0时,显示交通灯#define state_1 G=0;Y=1;R=1;g=1;y=1;r=0//主干道绿,支干道红#define state_2 G=1;Y=0;R=1;g=1;y=1;r=0//主干道黄,支干道红#define state_3 G=1;Y=1;R=0;g=0;y=1;r=1//主干道红,支干道绿#define state_4 G=1;Y=1;R=0;g=1;y=0;r=1//主干道红,支干道红void main(void){unsigned int i;EA=1; //首先开启总中断EX0=1; //开启外部中断 0IT0=1; //设置触发方式为下降沿触发while(1){while(flag==0){state_1;for(i=35;i>0;i--)delay(1);state_2;for(i=5;i>0;i--){delay(i);y1=~y1;}state_3;for(i=20;i>0;i--)delay(i);state_4;for(i=5;i>0;i--){delay(i);y2=~y2;}}while(flag==1) colour();}}//显示子程序,实现用两位数码管显示灯亮的时间void display(unsigned int digital){ unsigned int k;unsigned int ge=digital%10,shi=digital/10;//将十位与个位分离for(k=0;k<30000;k++){ a=1;b=0;P0=shu[ge];P0=0;a=0;b=1;P0=shu[shi];P0=0;}}//实现彩灯控制void colour(){ P1=0xff;P3=0x00;P2=0xff;while(1){ unsigned int j;for(j=0;j<41;j++)//循环程序演示四种花型{ P2=led[j];delay(1);} delay(5);}}//中断函数void key_scan() interrupt 0 //关键字"interrupt" ,这是C语言的中断函数表示法,,单片机有6个中断口,外部中断0的优先级最高,在程序里我们只用外部中断0 {flag++;if(flag==2) flag=0;}//延时程序void delay(unsigned int time) //参数time大小决定延时时间长短{ unsigned int j,k;time=time*5;for(j=0;j<time;j++)for(k=0;k<10000;k++);}B)将程序下载到单片机上后,插于已焊好外围电路的电路板上的插槽上。
单片机交通灯实验报告
单片机交通灯实验报告本实验旨在通过单片机控制,实现交通信号灯的模拟,以达到以下目的:通过模拟交通信号灯的控制,理解交通信号灯的工作原理和优化交通流量的方法。
本实验采用单片机作为主控芯片,通过编程设定各个交通信号灯的亮灭时间,以模拟交通信号灯的工作。
实验中采用LED灯模拟交通信号灯,红灯表示停止,绿灯表示通行,黄灯表示警告。
通过单片机的控制,可以实现交通信号灯的顺序切换,从而达到控制交通的目的。
准备材料:单片机、LED灯(红、绿、黄三个)、电阻、杜邦线、面包板、电脑及编程软件。
搭建电路:将LED灯分别连接到单片机的P1端口,并添加电阻以保护LED灯。
使用杜邦线将单片机与电脑连接,以便进行编程。
编程:使用C语言编写程序,控制交通信号灯的亮灭时间和顺序。
程序中应包含初始化函数、主函数和延时函数等基本元素。
其中,初始化函数用于设置LED灯的初始状态;主函数用于循环读取按键输入并控制LED灯的亮灭;延时函数用于实现交通信号灯的顺序切换。
调试:将程序下载到单片机中,观察交通信号灯的实际运行情况。
如有问题,可通过调整程序中的参数或重新编写程序进行优化。
数据记录与分析:记录每次实验的数据,包括LED灯的亮灭时间、交通流量等。
分析实验数据,得出结论并提出改进意见。
在本次实验中,我们成功地实现了交通信号灯的模拟。
通过调整程序中的参数,我们观察到交通信号灯的亮灭时间和顺序对交通流量的影响。
在早高峰时段,我们将红灯时间设置为较长时间,以减缓交通压力;在平峰时段,我们将绿灯时间设置为较长时间,以加快车辆通行速度。
同时,我们也注意到黄灯设置的重要性,它能够提醒司机注意交通安全。
在实验过程中,我们还发现了一些问题,例如在某些情况下,车辆在绿灯亮起时未能及时启动,导致交通拥堵。
针对这一问题,我们建议在程序中增加一个启动提醒功能,以提醒司机及时启动车辆。
通过本次实验,我们深入了解了单片机的原理和应用,并成功地模拟了交通信号灯的工作过程。
模拟交通灯单片机实验报告
本科学生设计性实验报告
学号姓名
学院物理与电子专业、班级子
实验课程名称模拟交通灯控制技术实验
教师及职称
开课学期2013 至2014 学年下学期
填报时间2014 年 6 月 5 日
云南师范大学教务处编印
摘要:道路交通信号灯是交通安全产品中的一种类别,是为了加强道路交通管理,减少交通事故的发生,提高道路使用效率,改善交通状况的一种重要工具。
单片机是微型计算机一个重要分支,具有体积小、价格低、指令系统简单、可靠性高工作范围广等特点,故本实验以89C51单片机为核心进行设计控制交通灯的工作。
4.实验设备及材料。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告实验名称:交通灯实验
姓名
班级
日期
实验要求:
1. 请使用单片机系统主机板和单片机系统键盘、显示板设计一个硬件系统,最终实
现一个交通路口红绿灯的控制。
用两个数码管显示秒,8个LED灯分成四组,分别作为十字交叉路口的红绿灯。
2. 相对双向绿灯的最后几秒时,绿灯要闪烁,即亮灭交替,亮灭时间均为0.5秒,
然后变成红灯。
3. 每组同学可自行设计进行连接,形成一个单片机硬件系统。
4. 模拟调试完成后,用STC-ISP下载编程软件将生成的*。
HEX文件在线下载到单片
机中。
5.下载后,按复位键执行程序,检验程序运行结果。
硬件连线方案:
程序流程图:
源代码:
#include<reg51.h> //51单片机头文件声明
unsigned char code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //定义无符号数组,定义的数据要放在ROM(程序存储区)里面
sbit dula=P1^3; //特殊功能位定义,数码管段码控制信号
sbit G1=P1^4; //数码管位选控制信号
sbit c=P1^5; //c表示P1.0口,地址最高位
sbit b=P1^6; //地址次高位
sbit a=P1^7; //地址最低位
sbit xl=P2^0; //特殊功能位声明,xl表示P2.0口
sbit xh=P2^1; //
sbit yl=P2^2;
sbit yh=P2^3;
sbit sl=P2^4;
sbit sh=P2^5;
sbit zl=P2^7;
sbit zh=P2^6;
char count=100; //定时时间取10ms,循环100次即为1s
unsigned char ssx=14; //秒上下,为上下绿灯亮时倒计数
unsigned char szy=10; //秒左右,为左右绿灯亮时倒计数
char sx=1; //方向标志,上下绿灯亮
void delay(char x) //延时函数,通过for循环进行延时
{
char a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void shumaguanxianshi() //数码管显示函数
{
if(sx==1) //方向标志假如为上下
{ P0=tab[ssx/10]; dula=1; //选择2号管显示秒十位(上下) c=0;b=1;a=0; G1=1;
delay(2); //在晶振频率12MHz,延时2ms。
G1=0;
P0=tab[ssx%10]; dula=1; //选择3号管显示秒个位(上下)c=0;b=1;a=1; G1=1;
delay(2);
G1=0;
}
if(sx==0) //方向标志假如为左右
{ P0=tab[szy/10]; dula=1; //选择4号管显示秒十位(左右) c=1;b=0;a=0; G1=1;
delay(2);
G1=0;
P0=tab[szy%10]; dula=1; //选择5号管显示秒个位(左右)c=1;b=0;a=1; G1=1;
delay(2);
G1=0;
}
}
void xiaodeng() //小灯函数
{
if(sx==1) //判断方向是否为上下
{ xl=0; xh=1; sl=0; sh=1;
yl=1; yh=0; zl=1; zh=0; //红绿灯亮灭,0表示亮,1表示灭。
上下绿灯,左右红灯 if(ssx<=5) //当左数码管显示5秒,控制绿灯闪烁
{ if(count<=50) //计数器时间小于0.5s
{xl=1;sl=1;} //绿灯灭
}
}
if(sx==0)
{ xl=1; xh=0; sl=1; sh=0;
yl=0; yh=1; zl=0; zh=1;
if(szy<=5)
{if(count<=50)
{yl=1;zl=1;}
}
}
}
initial() //初始化函数
{
TMOD=0x01; //设置定时器为工作方式1
TH0=0xD8; //在晶振频率12MHz下,赋初值
TL0=0xF0;
EA=1; //允许CPU中断
G1=0; //位选信号G1无效
TR0=1; //启动定时器T0
ET0=1; //允许定时器T0中断
}
main() //主函数
{
initial();//调用初始化函数
while(1) //无限循环,用于循环点亮小灯和显示数码管{
shumaguanxianshi(); //调用数码管显示函数xiaodeng(); //调用小灯函数
}
}
t0_int() interrupt 1 //中断函数,T0中断
{
TH0=0xD8; //重新赋初值
TL0=0xF0;
count--; //计数器减1
if(count==0) //判断计数器是否记满100次
{
count=100; //定时时间重新取值
if(sx==1) //假如方向标志是上下
{
ssx--; //时间倒记时
if(ssx==0) //左数码管显示0
{
sx=0; //方向标志取反,方向为左右
szy=10; //右数码管取值10s
}
}
if(sx==0) //假如方向标志是左右
{
szy--; //时间倒记时
if(szy==0) //右数码管显示0
{
sx=1; //方向标志取反,方向为上下
ssx=14; //左数码管取值10s
}
}
}
}
每个成员完成的工作:独立完成。
实验总结:。