实验3 模拟交通灯控制实验

合集下载

交通信号灯控制实验——单片机实验报告

交通信号灯控制实验——单片机实验报告

实验名称:交通灯信号控制实验一、实验目的: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------ ----- -------六、实验总结及感想本次实验主要学习了单片机的开发环境和程序调试及运行两种模式,并通过交通灯信号控制实验进行了实例演练。

模拟交通灯单片机实验报告

模拟交通灯单片机实验报告

本科学生设计性实验报告
学号姓名
学院物理与电子专业、班级子
实验课程名称模拟交通灯控制技术实验
教师及职称
开课学期2013 至2014 学年下学期
填报时间2014 年 6 月 5 日
云南师范大学教务处编印
摘要:道路交通信号灯是交通安全产品中的一种类别,是为了加强道路交通管理,减少交通事故的发生,提高道路使用效率,改善交通状况的一种重要工具。

单片机是微型计算机一个重要分支,具有体积小、价格低、指令系统简单、可靠性高工作范围广等特点,故本实验以89C51单片机为核心进行设计控制交通灯的工作。

4.实验设备及材料。

实验三 交通灯控制实验

实验三  交通灯控制实验

实验三发光二极管控制实验一、实验目的1、熟悉TMS320 2000系列DSP的指令系统;2、熟悉交通灯的控制方案及实现过程;3、熟悉CCS的环境下汇编语言的使用。

二、实验设备1、计算机;2、CCS软件;3、插上2407主控板的实验箱;4、DSP硬件仿真器。

三、实验原理交通灯模块由发光二极管和一个锁存器组成。

数据由TMS320LF2407模块的低八位输入;锁存器的控制信号由2407模块输出,但经由CPLD模块译码后再控制锁存器。

8个发光二极管的地址为3000H。

四、实验步骤1、连接设备①连接计算机和实验箱(电源和仿真器);②打开计算机电源;③打开实验箱电源开关;④打开数码管的电源开关。

2、配置硬件仿真器(在此次实验中配置硬件开发环境为F2407 XDS510 Emulator)①把F24XX XDS510 Emulator 拽入左侧;②下拉框:Auto-generate board data file with extra configration;③configuration File: C:\ti\c5000\drivers\ICETEK.cfg;④I/O Port: 0X0;⑤点击Add Single 增加CPU-1⑥CPU-1:c:\ti\c2000\cc\gel\f2407.gel3、开发设计控制数码管的应用程序3.1 创建一个新的工程3.2 向工程里添加文件3.3 查看源代码3.4 编译和下载程序4、例程3.1 打开工程,选择C:\ti\dsptest\ex5.2\jiaotong.pjt3.2 查看源代码,读懂程序;3.3编译和下载程序;3.4观察交通灯的显示效果。

5、编程实现下列显示效果1、实现流水灯的效果(8个发光二极管依次循环点亮)。

2、自行设计其它显示效果。

五、实验程序六、实验总结。

PLC交通灯实验报告

PLC交通灯实验报告

十字路口交通灯控制的模拟实验报告一、实验目的1、熟练使用各基本指令,定时器,计数器,内部指令等。

2、根据控制要求,掌握PLC的编程方法和程序调试方法。

3、掌握交通灯的实验设计与三菱PLC的连线方法。

二、实验要求交通灯模拟控制实验区中,下框中的南北红、黄、绿灯R、Y、G分别接主机的输出点Y2、Y1、Y0,东西红、黄、绿灯R、Y、G分别接主机的输出点Y5、Y4、Y3,模拟南北向行驶车的灯接主机的输出点Y6,模拟东西向行驶车的灯接主机的输出点Y7;下框中的SD接主机的输入端X0。

上框中的东西南北三组红绿黄三色发光二极管模拟十字路口的交通灯。

信号灯受一个启动开关控制,当启动开关接通时,信号灯系统开始空座,且先南北红灯亮,东西绿灯亮。

当启动开关断开时,所有信号灯都熄灭。

南北红灯亮维持25秒,在南北红灯亮的同时东西绿灯也亮,并维持20秒。

到20秒时,东西绿灯闪亮,闪亮3秒后熄灭。

在东西绿灯熄灭时,东西黄灯亮,并维持2秒。

到2秒时,东西黄灯熄灭,东西红灯亮,同时,南北红灯熄灭,绿灯亮。

东西红灯亮维持30秒。

南北绿灯亮维持25秒,然后闪亮3秒后熄灭。

同时南北黄灯亮,维持2秒后熄灭,这时南北红灯亮,东西绿灯亮。

周而复始。

三、程序设计步骤1、过程分析:过程一:东西向车行驶 2、设置定时器 当司机看到红灯变为绿灯的时候需要有时间反应,启动车辆等。

因此在车子行驶和交通灯变化之间设置1s 的间隔。

②设置T22、T222、T221、T223的原因是:T2和T7只能控制交通灯的闪亮时间,并不能使其控制。

T22一个定时器并不能同时控制东西绿灯与南北绿灯的闪烁,要分别设置控制器,所以通过T22、T222的分别作用,使东西绿灯与南北绿灯分别在高、低电平交替的时候闪亮。

南北红灯亮25s东西向车行驶东西绿灯亮20s →东西绿灯闪2s →东西黄灯亮2s 南北绿灯亮25s →南北绿灯闪3s →南北黄灯亮2s南北向车行驶 东西红灯亮30sT0: 南北红灯亮25sT6: 东西绿灯亮20s T22:东西绿灯闪烁 T1: 南北绿灯亮25sT7: 东西绿灯闪亮2s T222:南北绿灯闪烁 T2: 南北绿灯闪亮3sT10: 东西向车行驶22s T221:东西绿灯闪烁的断点 T3: 南北黄灯亮2s T11: 南北向车行驶27s T223:南北绿灯闪烁的断点T4: 东西红灯亮30s T12: 延迟1sT5: 东西黄灯亮2s T13: 延迟1s输入X0:启动开关输出Y40: 南北绿灯Y43: 东西绿灯Y41: 南北黄灯Y44: 东西黄灯Y42: 南北红灯Y45: 东西红灯Y46: 南北向车行驶Y47: 东西向车行驶4、按照设置的I/O分配进行接线。

实验三-交通灯控制实验

实验三-交通灯控制实验

南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□√设计□创新实验日期:实验成绩:实验三交通灯控制实验一.实验目的掌握十字路口交通灯控制方法。

二.实验内容利用系统提供的双色LED 显示电路,和四位静态数码管显示电路模拟十字路口交通信号灯。

4 位LED 数码管显示时间,LED 显示红绿灯状态。

三.实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。

四.实验说明和电路原理图交通信号灯控制逻辑如下:假设一个十字路口为东西南北走向。

开始为四个路口的红灯全部亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后(20秒),东西路口的绿灯,闪烁若干次后(3 秒),东西路口的绿灯熄灭,同时东西路口的黄灯亮,延时一段时间后(2 秒),东西路口的红灯亮,南北路口的绿灯亮,南北路口方向通车,延时一段时间后(20 秒),南北路口的绿灯闪烁若干次后(3 秒),南北路口的绿灯熄灭,同时南北路口的黄灯亮,延时一段时间后(2 秒),再切换到东西路口的绿灯亮,南北路口的红灯亮,之后重复以上过程。

双色LED 是由一个红色LED 管芯和一个绿色LED 管芯封装在一起,共用负极,当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。

本实验需要用到CPU 模块(F3 区)、静态数码管/双色LED 显示模块(B4 区)实验框图如图:五.实验预习要求学习教材的相关内容,根据实验要求画出程序流程图,写出实验程序。

六.实验步骤1)系统各跳线器处在初始设置状态。

P10 同时接G1、G3;P11 同时接R1、R3;P1.2 同时接G2、G4;P1.3 同时接R2、R4;P1.6、P1.7 分别接静态数码显示的DIN、CLK。

2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。

编译无误后,下载程序运行。

3)观察十字路口交通灯效果。

交通灯实验报告

交通灯实验报告

交通灯实验报告交通灯实验报告引言:交通灯是城市交通管理中不可或缺的一部分,它通过红、黄、绿三种信号灯的变化来引导车辆和行人的通行。

本次实验旨在通过观察交通灯的工作原理和效果,了解交通灯在交通管理中的重要性。

实验目的:1. 观察交通灯的信号灯变化规律;2. 分析交通灯对车辆和行人通行的引导作用;3. 探讨交通灯在交通管理中的优势和不足。

实验过程:在实验室中,我们使用了一套模拟交通灯系统进行实验。

该系统包括红、黄、绿三种信号灯和相应的控制器。

首先,我们观察了交通灯的信号灯变化规律。

根据实验室提供的资料,红灯表示停止,黄灯表示准备,绿灯表示通行。

交通灯的变化规律是:红灯亮→绿灯亮→黄灯亮→红灯亮。

这个变化过程是有序的,为车辆和行人提供了明确的信号。

接下来,我们进行了交通灯对车辆和行人通行的引导实验。

在实验室中,我们设置了一段模拟道路和人行横道,并安装了交通灯。

通过控制器,我们模拟了不同的交通情况,观察交通灯对车辆和行人通行的影响。

实验结果显示,当红灯亮起时,车辆停止通行,行人等待过马路;当绿灯亮起时,车辆可以通行,行人可以过马路;当黄灯亮起时,车辆应减速停车,行人应尽快过马路。

交通灯的引导作用使得车辆和行人的通行更加有序和安全。

讨论:交通灯作为一种交通管理工具,具有一定的优势和不足。

首先,交通灯通过明确的信号灯变化规律,为车辆和行人提供了明确的指示,减少了交通事故的发生。

其次,交通灯可以根据交通流量的变化进行智能调控,提高道路的通行效率。

此外,交通灯还可以与其他交通设施相结合,形成综合交通管理系统,进一步提升交通管理水平。

然而,交通灯也存在一些不足之处。

首先,当交通流量较大时,交通灯的信号周期较长,可能导致车辆和行人等待时间过长,影响通行效率。

其次,交通灯对车辆和行人的通行进行了简化处理,不能完全满足各种交通情况的需求。

例如,在某些情况下,行人可能需要额外的通行时间,以确保安全过马路。

结论:通过本次实验,我们深入了解了交通灯的工作原理和效果。

智能交通灯模拟控制电路实验报告

智能交通灯模拟控制电路实验报告

智能交通灯模拟控制电路实验报告(指导老师:李赣平)一.设计任务利用单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。

用红、绿、黄发光二极管作信号灯。

二.设计方案2.1任务分析模拟交通灯控制器就是使用单片机来控制一些LED和数码管,模拟真实交通灯的功能。

2.2 方案设计单片机的I/O 接口直接和交通灯(LED)连接。

在十字路口的四组红、黄、绿三色交通灯中,东西方向道路上的两组同色灯连接在一起,南北方向道路上的两组同色灯连接在一起,受单片机P0.0~P2.3 口控制。

12 个发光二极管采用了共阳极的连接方式,因此I/O 口输出低电平时,与之相连的LED 会亮,I/O 口输出高电平时,与之相连的LED 会灭。

软件方案根据设计要求,软件可由汇编语言完成,也可由C语言完成。

程序流程图如下程序流程图智能交通灯模拟控制电路实验报告(1)单片机的构造89SC51 的基本结构89SC51 单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等单元及数据总线、地址总线和控制总线等三大总线,现在分别加以说明。

中央处理器:中央处理器是8 位CPU,含布尔处理器;时钟电路;总线控制逻辑。

中央处理器(CPU)是整个单片机的核心部件,是8 位数据宽度的处理器,能处理8 位二进制数据或代码,CPU 负责控制、指挥和调度整个单元系统的工作,完成运算和控制输入输出等操控。

数据存储器(RAM):数据存储器(RAM)有128KB 数据存储器(RAM,可再扩64KB)和特殊功能寄存器SFR。

89C51内部有128个8 位用户数据存储单元和128个寄存器单元,他们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM 只有128个,可存放读写的数据,运算的中间结果或用户自定义的字型表。

模拟交通灯实验报告

模拟交通灯实验报告

单片机综合实验报告题目: 模拟真实交通灯班级:姓名:学号:指导老师:时间:一、实验内容:用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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

综合实验一:模拟交通灯控制实验
一、实验目的
1、了解时间常数的计算方法。

2、了解80C51中断的工作机理、过程,掌握中断服务程序的编制。

3、掌握80C51单片机内部定时/计数器的工作方式选择,初始化程序的设置以及中断服务子程序的设计。

二、实验内容
编写模拟交通灯运行控制程序。

要求红绿灯亮灯延时时间为30秒,黄灯亮灯延时时间为10秒。

利用二位八段LED显示器进行时间显示。

时间显示采用倒计时的方式。

时间归零时信号进行切换。

三、实验要求
掌握单片机内部通用资源如中断、定时计数器、串行口及并行端口的应用。

时间的延时必须采用定时器定时中断方式进行,定时器0或定时器1可任选一个(默认为0)。

编程时请充分考虑定期器的时间扩展问题。

利用二位八段LED显示器进行时间显示,显示码采用串行口模式0进行输出。

显示方式及相应的程序编写请参考实验一。

显示部分的详细接线原理及对应的显示码参考图15。

掌握中断系统的基本概念及使用方法。

如:中断被响应所需的必要条件;一个完整的中断响应过程;中断优先级的概念
信号灯的控制由并行口P0口输出进行快关控制。

四、实验线路图
图为交通灯控制接线示意图,除红绿黄六路交通灯外,还需要用到两个八段LED显示器,用于显示交通灯时间显示,显示码采用串行口模式0进行输出。

图为八段显示器接线原理图,具体说明了串行口工作模式0的硬件线路。

由于开发板一有6个八段显示器,在实验过程中除正常计时的两个八段LED外,将其余四个灭掉。

图交通灯控制接线示意图
图八段显示器接线原理图五、程序及注释
ORG 0000H
ORG 000BH ;定时器计数器T0中断矢量
AJMP T0INT
ORG 0030H
MAIN:
MOV TMOD,#01H ;设定时器/计数器T0为方式1,T1为方式0 MOV SCON,#00H
MOV SP,#60H ;设堆栈指针SP为60H
SETB TR0 ;启动定时器/计数器T0
SETB PT0 ;T0中断为高优先级
SETB ET0 ;允许定时器/计数器T0中断
SETB EA ;开中断
MOV TL0,#0B0H ;设T0时间常数为100ms
MOV TH0,#3CH
;ORG 0100H
RED:
SETB ;设置灯的初始状态
CLR
CLR
CLR
CLR
SETB
MOV R0,#30 ;红绿灯亮30秒
MOV R1,#10 ;黄灯亮10秒
LOOP1:MOV A,R0
WAIT1:JNB ,WAIT1 ;显示管每隔1秒倒计数CLR
DJNZ R1,WAIT1
MOV R1,#10
DEC R0 ;倒计时从30到1 CJNE R0,#00H,LOOP1
YELLOW: ;设置灯的初始状态CLR
SETB
CLR
CLR
SETB
CLR
MOV R0,#10 ;黄灯亮10秒MOV R1,#10
LOOP2:MOV A,R0
LCALL SHOW
WAIT2:JNB ,WAIT2
CLR
DJNZ R1,WAIT2
MOV R1,#10
DEC R0
CJNE R0,#00H,LOOP2
GREEN:
CLR
CLR
SETB
SETB
CLR
CLR
MOV R0,#30
MOV R1,#10
LOOP3:MOV A,R0 LCALL SHOW
WAIT3:JNB ,WAIT3 CLR
DJNZ R1,WAIT3 MOV R1,#10
DEC R0
CJNE R0,#00H,LOOP3
LJMP MAIN
SHOW:
MOV 21H,R0
MOV 22H,R1
MOV B,#10
DIV AB
MOV DPTR,#TAB MOVC A,@A+DPTR MOV 4BH,A
MOV A,B
MOVC A,@A+DPTR
MOV 4AH,A
MOV 4CH,#0FFH ;前四个显示管灭
MOV 4DH,#0FFH
MOV 4EH,#0FFH
MOV 4FH,#0FFH
MOV R1,#4AH
MOV R0,#06H
TRAN:MOV A,@R1
CLR TI
MOV SBUF,A
HERE:JNB TI,HERE
INC R1
DJNZ R0,TRAN ;循环六次,是的六个显示管有相应的状态MOV R0,21H
MOV R1,22H
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
T0INT:
MOV TH0,#3CH
MOV TL0,#0B0H
SETB
SETB TR0
RETI
六、实验心得和体会
本次实验综合性较高,囊括了半本书的知识范围。

在最初写程序时,我不时参考课本266页的程序,但也遇到了很大的困难,最终是和同学讨论着完成的。

一个实验有不同的的程序,用不同的思路写出来的程序不同。

相关文档
最新文档