基于单片机8255交通灯
8255控制交通灯实验总结

8255控制交通灯实验总结
8255控制
交通灯实验总结
一、实验目的
1. 掌握8255控制器的控制原理和编程过程;
2. 学习8255控制器的编程、基本操作;
3. 通过实验指导的方式,掌握控制交通灯的基本原理;
4. 通过编程,实现交通灯控制系统的实现。
二、实验过程
1. 首先要对8255的编程进行编程,这就需要根据8255的控制字节和模式的要求进行操作;
2. 然后用它来控制交通灯,这需要根据交通灯的运行原理和总线接线的方式来编程控制它;
3. 然后对所做程序进行测试,以验证其控制的可靠性。
三、实验结果
通过本次实验,我们学会了怎样编程控制8255,并且学会了8255控制交通灯的方式,本次实验编程操作也顺利完成,经测试验证,程序实现的正确,交通灯可以根据8255控制运行。
四、总结
本次实验主要是让我们学习掌握8255模块的操作,实现8255控制交通灯的运行,实验结果证明,程序实现正确,交通灯可以根据8255控制运行。
今后,如果能继续拓展,可以把8255用来控制更复
杂的系统,这将有助于我们深入了解和掌握8255控制器的操作技术。
基于单片机8255交通灯

基于单片机8255交通灯————————————————————————————————作者:————————————————————————————————日期:8255控制交通灯一、实验目的了解8255芯片的结构及编程方法,学习模拟交通灯控制的实现方法。
二、实验内容用8255做输出口,控制十二个发光二极管燃灭,模拟交通灯管理.三、实验说明1。
因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化情况和规律。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1东西绿灯通车,南北红灯。
过一段时间转状态2,东西绿灯灭,黄灯闪烁几次,南北仍然红灯。
再转状态3,南北绿灯通车,东西红灯.过一段时间转状态 4,南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯.最后循环至状态1.四、实验程序框图五、实验接线图六、实验步骤①8255 PA0—PA7、PB0—PB3依次接发光二极管L1—L12.②以连续方式从0BB0H开始执行程序,初始态为四个路口的红灯全亮之后,东西路口的绿灯亮南北路口的红灯亮,东西路口方向通车.延时一段时间后东西路口的绿灯熄灭,黄灯开始闪耀。
闪耀若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车,延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪耀。
闪耀若干次后,再切换到东西路口方向,之后重复以上过程。
一摘要:本系统采用单片机、键盘、LED显示、交通灯演示系统组成.设计一个用于十字路口的车辆及行人的交通管理,系统包括左拐、右拐、及行基本的交通灯的功能,计时牌显示路口通行转换剩余时间,在出现紧急情况时可由交通手动实现全路口车辆禁行而行人通行状态。
另外,在特种车辆如119、120通过路口时,系统可自动转为特种车辆放行,其他车辆禁止通行的状态,15s后系统自动恢复正常管理。
其他还有 84s与60s通行管理转换等功能。
采用数码管与点阵LED相结合的显示方法,既要求倒计时数字输出,又要求有状态灯输出等。
实验九 可编程接口芯片8255应用(交通灯控制)

实验九可编程接口芯片8255应用(交通灯控制)双击自动滚屏发布者:admin 发布时间:2005-9-8 阅读:2151次一、实验目的1、学习扩展简单I/O接口的方法以及双色灯的使用。
2、进一步学习微处理器的编程技术。
二、实验要求编写程序,以8255作为输出口,控制4个双色LED灯(可发红、绿、黄光)红绿交替闪亮。
三、实验说明1、双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。
当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。
2、本实验要求8255工作于方式0,四个双色灯红绿交替闪亮。
四、实验电路及连线将DG1~DG4,DR1~DR4用导线连至8255的PC0~PC7,8255的CS片选接至138译码处的200H~207插孔。
芯片在实验机的位置五、实验参考程序D1 EQU 10HD2 EQU 200HDA TA SEGMENTPB DB ?DA TA ENDSSTACK SEGMENT STACKSTA DW 50 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: PUSH CSPOP DSMOV DX,203H ;设置为全输出MOV AL,80HOUT DX,ALMOV DX,202HOUT DX,AL ;清LEDMOV DX,202H ;全红MOV AL,0F0HOUT DX,ALMOV BX,7fHCALL DL YBG: MOV AL,01101001B ;南北绿,东西红OUT DX,ALMOV BX,D2CALL DL YMOV CX,03HXH1: AND AL,0F6H ;绿灭OUT DX,ALMOV BX,D1CALL DL YOR AL,09H ;绿亮OUT DX,ALMOV BX,D1CALL DL YLOOP XH1OR AL,90H ;南北黄OUT DX,ALMOV BX,D1CALL DL YMOV BX,D1CALL DL YMOV AL,10010110B ;南北红,东西绿OUT DX,ALMOV BX,D2CALL DL YMOV CX,03XH2: AND AL,0F9HOUT DX,ALMOV BX,D1CALL DL YOR AL,06HOUT DX,ALMOV BX,D1CALL DL YLOOP XH2OR AL,60HOUT DX,ALMOV BX,D1MOV BX,D1CALL DL YJMP BGDL Y PROC NEARPUSH CXDDD: MOV CX,0FFFHCCC: LOOP CCCDEC BXCMP BX,0JNE DDDPOP CXRETDL Y ENDPCODE ENDSEND START六、思考题有紧急车辆或紧急情况出现,如何处理?程序如何设计?七、实验报告要求1、实验内容为必做内容,其中,思考题须自行设计电路、连线及编写程序。
基于8255A的应用—交通灯的设计

《微型计算机技术》课程设计报告题目:基于8255A的应用—交通灯的设计专业名称:通信工程班级:学号:姓名:2013年 1月基于8255A的应用—交通灯的设计胡晋电子信息工程学系摘要:随着微型计算机技术的飞速发展。
为此,基于8255芯片原理来实现交通灯的的控制是这次设计基础。
因为交通灯的控制可以分东西方向和南北方向两种,每种可用红、绿、黄三个灯进行交通管理,所以用8255芯片的PB口对六个交通灯进行控制。
通过8255芯片的PA口来控制交通灯状态的切换。
关键词:交通灯;8255芯片;控制;开关1 设计要求、目的和内容1.1设计要求基于微型计算机技术,利用8255芯片的原理实现交通的的控制,即8255芯片的应用—交通灯的的设计。
1.2 设计目的掌握8255芯片方式0的编程方法,PC机及配套的接口电路实验装置的连接于调试,IC芯片:8255A芯片的原理应用1.3 设计内容采用8255芯片设计交通灯控制的接口方案,硬件电路的设计和连接,程序的编写和调试。
2 设计原理2.1 8255内部框图介绍图1 8255A的内部结构图数据总线缓冲器:这是一个双向三态的8位数据缓冲器,它是8255A与微机系统数据总线的接口。
输入输出的数据、CPU输出的控制字以及CPU输入的状态信息都是通过这个缓冲器传送的。
三个端口A,B和C:A端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入锁存器。
B端口包含一个8位数据输入/输出锁存器和缓冲器,一个8位数据输入缓冲器。
C端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入缓冲器(输入没有锁存器)。
A组和B组控制电路:这是两组根据CPU输出的控制字控制8255工作方式的电路,它们对于CPU而言,共用一个端口地址相同的控制字寄存器,接收CPU输出的一字节方式控制字或对C 口按位复位字命令。
方式控制字的高5位决定A组的工作方式,低3位决定B组的工作方式。
[2]对C口按位复位命令字可对C口的每一位实现置位或复位。
单片机课程设计基于8255A的交通灯

`目录第一章引言 (1)1.1设计目的 (1)1.2 设计背景 (1)1.3 设计要求 (2)第二章系统硬件设计 (3)2.1设计方案 (3)2.2工作原理 (3)2.3 硬件介绍 (4)2.3.1 MSC-51芯片简介 (4)2.3.2 8255A芯片 (5)第三章系统软件设计 (7)3.1 时间及信号灯的显示 (7)3.2 延时设计 (8)3.3 程序流程图 (9)3.4 程序源代码 (10)第四章系统调试结果 (15)4.1 测试结果 (15)小结 (16)参考文献 (17)第一章引言1.1设计目的1、通过交通信号灯控制系统的设计,掌握8255A并行口传输数据的方法,以控制发光二极管的亮与灭;2、用8255作为输出口,控制十二个发光二极管熄灭,模拟交通灯管理.3、通过单片机课程设计,熟练掌握汇编语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力;4、完成控制系统的硬件设计、软件设计、仿真调试。
1.2 设计背景十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。
十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。
当前,国大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。
它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。
在交通灯的通行与禁止时间控制显示中,通常要么东西、南北两方向各50秒;要么根据交通规律,东西方向60秒,南北方向40秒,时间控制都是固定的。
交通灯的时间控制显示,以固定时间值预先“固化”在单片机中,每次只是以一定周期交替变化。
但是,实际上不同时刻的车辆流通状况是十分复杂的,是高度非线性的、随机的,还经常受认为因素的影响。
采用定时控制经常造成道路有效应用时间的浪费,出现绿灯方向车辆较少,红灯方向车辆积压。
它不顾当前道路上交通车辆数的实际情况变化,其最大的缺陷就在于当路况发生变化时,不能满足司机与路人的实际需要,轻者造成时间上的浪费,重者直接导致交通堵塞,导致城市交通效率的下降。
单片机实验8255控制交通灯

delay(20);
pa8255=0xf7;
pb8255=0x0d;
delay(20);
}
pa8255=0xae;
pb8255=0x0b;
delay(400);
while(d2--)
{
pa8255=0x9e;
pb8255=0x07;
delay(20);
pa8255=0xbe;
题目:实验四8255控制交通灯
硬件实验
实验类别:【设计】
班级:
学号:
姓名:
1、实验内容或题目
题目:8255控制交通灯
实验内容:用8255做输出口,控制十二个发光二极管燃灭,模拟交通灯管理。
2、实验目的与要求
实验目的:
(1)掌握8051系统中,扩展8255做输出口的方法;
(2)了解芯片8255编程方法。
void delay(unsigned int i)
{
unsigned int j,k;
for(k=0;k<i;k++)
for(j=0;j<1000;j++);
}
void main(void)
{ com8255=0x88;
pa8255=0xb6;
pb8255=0x0d;
delay(400); //all red lamp light
pb8255=0x0f;
delay(20);
}
}
}
while(1)
{ uchar d1=5,d2=5;
pa8255=0x75; //west and east green lamp light
pb8255=0x0d; //south and north red lamp light
基于单片机交通红绿灯控制系统设计..

基于单片机交通红绿灯控制系统设计单片机作为电子产品的开发平台已应用到众多领域。
用单片机控制交通红绿灯有很高的性价比。
本设计要求:1)熟悉MCS-51单片机的结构及编程方法。
2)了解继电器的工作原理。
3)设计并实现交通红绿灯控制系统。
用8255作为输出口,接继电器,控制12个信号灯的燃灭,模拟交通等管理。
4) 控制算法自定并可设置。
目录一、引言二、单片机概述三、80C51引脚说明四、8255A芯片简介五、系统硬件设计5.1、原理说明5.2、元件选择5.3、电路原理图六、系统软件设计6.1、程序流程图6.2、程序清单七、仿真结果八、心得体会九、参考文献一、引言2005年最新统计数据表明,在中国每5分钟就有一人丧身车轮,每一分钟都会有一人因为交通事故儿伤残。
每年因交通事故所造成的的经济损失达数百亿元。
为了减少交通事故,如今交通红绿灯已经安装在各个交通路口上,已经成为疏导交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
1918年,又出现了带控制的红绿灯和红外线红绿灯。
带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。
红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。
红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。
单片机8255交通灯程序

交通灯程序/*********************************************************** 十字路口交通灯控制 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;}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8255控制交通灯一、实验目的了解8255芯片的结构及编程方法,学习模拟交通灯控制的实现方法。
二、实验内容用8255做输出口,控制十二个发光二极管燃灭,模拟交通灯管理。
三、实验说明1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化情况和规律。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1东西绿灯通车,南北红灯。
过一段时间转状态2,东西绿灯灭,黄灯闪烁几次,南北仍然红灯。
再转状态3,南北绿灯通车,东西红灯。
过一段时间转状态 4,南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯。
最后循环至状态1。
四、实验程序框图五、实验接线图六、实验步骤①8255 PA0—PA7、PB0—PB3依次接发光二极管L1—L12。
②以连续方式从0BB0H开始执行程序,初始态为四个路口的红灯全亮之后,东西路口的绿灯亮南北路口的红灯亮,东西路口方向通车。
延时一段时间后东西路口的绿灯熄灭,黄灯开始闪耀。
闪耀若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车,延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪耀。
闪耀若干次后,再切换到东西路口方向,之后重复以上过程。
一摘要:本系统采用单片机、键盘、LED显示、交通灯演示系统组成。
设计一个用于十字路口的车辆及行人的交通管理,系统包括左拐、右拐、及行基本的交通灯的功能,计时牌显示路口通行转换剩余时间,在出现紧急情况时可由交通手动实现全路口车辆禁行而行人通行状态。
另外,在特种车辆如119、120通过路口时,系统可自动转为特种车辆放行,其他车辆禁止通行的状态,15s后系统自动恢复正常管理。
其他还有 84s与60s通行管理转换等功能。
采用数码管与点阵LED相结合的显示方法,既要求倒计时数字输出,又要求有状态灯输出等。
关键字:单片机系统(AT89C51)控制8255、交通规则、LED显示、动态扫描、按键输入、分时段调整参考文献:《单片机课程设计指导》北京航天航空大学出版社《基于MCS-51系列的单片机原理的应用设计》国防工业出版社《单片机实训教程》北京大学出版社《单片机系统原理及应用》《微机原理及应用》二、方案设计与论证1电源提供方案:采用独立的稳压电源,此方案稳定可靠,且有各种成熟电路可供选用2显示界面方案采用数码管和点阵LED相结合的方法,因为实际既要求倒计时施主输出,又要求又状态灯输出等,为方便观看并考虑到现实状况,用数码管与LED分别显示时间和提示信息。
这种方案既满足系统功能要求,又减少了系统实现的复杂度。
3输入方案直接在IO口上接按键开关。
因为设计时精简和优化了电路,所以剩余口的资源还比较多。
4主控制方案采用AT89C51单片机作为控制器,控制8255实行通行倒计时及左拐、右拐、直行、行人通行指示采用单块LCD液晶点阵显示器。
这种方案设计占用单片机的端口最少,硬件也少。
耗电也最小;系统框图正文一、功能描述本系统由单片机系统、键盘、发光二极管、交通灯演示系统组成,单片机作为主控制器用于十字路口的车辆及行人的交通管理,每个方向具有左拐、右拐、直行及行人4种通行指示灯,计时牌显示路口通行转换剩余时间。
另外,在特种车辆如119、120通过路口时,系统可自动转为特种车辆放行,其他车辆禁止通行的状态,15s后系统自动恢复正常管理。
并有手动控制分时段 84s与60s通行管理转换等功能。
二、系统硬件电路的设计整套电路系统由控制系统模块、通行灯输出控制显示模块、时间显示模块、时间显示模块和自动特种车辆控制模块等组成。
1、主控制系统单片机的P0口用于控制8255。
8255的PA口和PB口用于控制南北及东西的通行灯,。
PC 口及P3.0~P3.2口用于4组2位LED计时器的控制,特种车通过时使用外中断1口(P3.3),手动自动转换采用P1.0按键。
选择8255的工作方式0,在这种情况下三个端口都可以由程序设置为输入和输出。
2、通行灯输出控制道口交通灯指示采用高亮度红绿双色发光二极管,左拐、直行、右拐及行人各一个。
当发光电流为6mA时,按公式R=(5-1.8)/0.006计算,限流电阻应为510Ω.由于南北通行时双向指示牌相同,因此每个端口应具有12mA的吸收电流能力。
图7.4所示为指示灯电路图。
3、时间显示模块道口通行剩余时间采用高亮红色7段LED发光数码管显示,采用共阳数码管,如用单片机吸收电流驱动,列扫描驱动使用三极管,按每段6mA电流算,全显示字形“8”时,每个数码管需6mA×8=48mA。
由于时间显示每个道口相同,4组需192mA,因此设计中采用中功率三极管9012.由于单片机每个断码输出口需吸收24mA 电流,因此在电路设计中也使用了驱动集成块74HC244。
其显示驱动电路如图示。
4、特种车辆自动控制模块自动道口灯在特种车辆到来时能自动关闭所有绿灯,让特种车通过。
设计中采用红外线发生器作为特种车的发生器,使用实时中断来影响特种车的通行要求。
红外线接收器一般采用电视机上用的一体化红外接收器,具有很高的灵敏度和较强的抗干扰能力.5、电源电路由于整个系统采用的电源电压需+5V电压,所以采用不可调的3端稳压器件,用常用的lm7850就可以满足系统电源的要求。
LM7850三端集成稳压电源内部由准电压回路、恒流源、过流保护、过压保护和短路保护回路等8部分组成具有低功耗,高效率,波纹系数小,输出电压稳定等优点。
三、系统主要程序的设计道口交通控制系统程序主要分为以下几个模块:初始化程序、主程序、定时中断程序和特种车实时响应程序等。
1、初始化程序初始化程序主要完成内存划,定时器的工作模式、中断方式等的设定。
由于子程序调用较多,因此初始化时堆栈指针设于80H处。
定时器T0、T1设为16位定时器模式,定时时间位50ms,为秒计时用,T1为通行结束闪烁用。
2、主程序主程序要负责总体程序管理功能,实现人机交换设定。
由于采用动态扫描方式显示时间,因此主程序大部分时间要调用扫描显示程序。
主程序流程图如下图示。
3、外中断1中断服务程序经过时,车中发射红外线信号,其信号被道口控制板上的接收器接收,并输出一个低电平处外中断1.中断处理程序流程图如下页图所示。
4、定时服务中断程序序主要用于行车与行人的通行指示,按照交通规则,红绿灯控制转换逻辑表如7.1表所列。
南北方向端口控制功能 120~110s 110~70s 70~60s 60~10s 10~0sP*.7 左拐红 0 0 0 1 1P*.6 左拐绿 1 1 1 0 0/1P*.5 直行红 1 1 1 0 0P*.4 直行绿 0 0 0/1 1 1P*.3 右拐红 0 1 1 1 1P*.2 右拐绿 1 0 0 0 0/1P*.1 行人红 1 1 1 0 0P*.0 行人绿 0 0 0/1 1 1道口控制字 66H 6AH 6AH/7BH 99H 99H/DDH东西方向 P*.7 左拐红 0 0 0 0 0P*.6 左拐绿 1 1 1 1 1P*.5 直行红 0 0 0 0 0P*.4 直行绿 1 1 1 1 1P*.3 右拐红 0 1 1 1 1P*.2 右拐绿 1 0 0 0 0/1P*.1 行人绿 0 0 0 0 0P*.0 行人红 1 1 1 1 1道口控制字 55H 59H 59H 59H 59H/5DH通行规则如下:(1)车辆南北直行、各路右拐,南北向行人通行。
南北向通行时间为1min,各路右拐比直行滞后10s开放。
(2)车辆南北向左拐、各路右拐,行人禁行。
通行时间为1min。
(3)车辆东西向直行、各路右拐,东西向行人通行。
东西向通行时间为1min,各路右拐比直行滞后10s开放。
(4)车辆东西向左拐、各路右拐,行人禁行。
通行时间为1min。
表中通行规则,是以给控制红绿灯端口送控制码的方式实现的。
它的原理是,将按不同通行规则时的各路口的红绿灯亮灭情况转换为单片机端口控制码。
其指示灯功能通过T0定时中断服务程序实现。
定时器T0定时益出中断周期为10ms,中断累计20次(即1s)时对120s倒计时单元减1操作。
设计中将4种通行规则分成集中不同的亮灯方式,通过查询秒倒计时单元的数据,实现在不同的时间段给控制端口送不同的控制数据码。
控制码分为5个时间段:84—74s、74—58s、58—48s、48—10s、10—0s。
交通管理定时功能程序流程图如下页图所示。
5、调试及性能分析设计时按红绿交通灯控制程序和特种车辆经过中断程序两大部分电路进行测试。
1、红绿交通灯控制程序时器T0,直接按照表7.1中算好的数据码送出来控制灯,观察其逻辑状态是否符合要求。
可多次、反复地进行调试,直至逻辑关系正确。
值得注意的是,南北方向、东西方向的指示灯要同时调试。
2、特殊车辆通行时红外线检测电路的调试在模拟小车中放一块红外发射模块,将示波器输入端接在交通控制灯的红外接收模块的输出引脚上,当小车通过路口时,检测红外线是否被接收。
若该脚输出为低电平,则说明可以收到信号,电路正常。
本系统以AT89C51单片机为核心,开发程序调试阶段采用W78E516B进行在线编程及修改,可大大加快调试进度。
设计的交通灯可用于十字路口的车辆及行人的交通管理,显示采用2位7段数码管,可以很直观的显示红绿灯的开放和关闭的时间;设计中应用了两种倒计时显示方式, 84S 倒计时适用于车流量较大的城市,60s倒计时可用于中小型城市;功能完整,不仅有普通交通灯的指示功能,还增加了特种车辆自动通行功能。
其控制功能和效果与真实道口管理红绿灯完全一致。
ORG 0630HHA4S: MOV SP,#60HMOV DPTR,#0FF2BHMOV A,#80HMOVX @DPTR,AMOV DPTR,#0FF29HMOV A,#49HMOVX @DPTR,AINC DPTRMOVX @DPTR,AMOV R2,#25HLCALL DELAYHA4S3: MOV DPTR,#0FF29H MOV A,#08HMOVX @DPTR,AINC DPTRMOV A,#61HMOVX @DPTR,AMOV R2,#55HLCALL DELAYMOV R7,#05HHA4S1: MOV DPTR,#0FF29H MOV A,#04HMOVX @DPTR,AINC DPTRMOV A,#51HMOVX @DPTR,AMOV R2,#20HLCALL DELAYMOV DPTR,#0FF29HMOV A,#00HMOVX @DPTR,AINC DPTRMOV A,#41HMOVX @DPTR,AMOV R2,#20HLCALL DELAYDJNZ R7,HA4S1MOV DPTR,#0FF29HMOV A,#03HMOVX @DPTR,AINC DPTRMOV A,#0cHMOVX @DPTR,AMOV R2,#55HLCALL DELAYMOV R7,#05HHA4S2: MOV DPTR,#0FF29H MOV A,#02HMOVX @DPTR,AINC DPTRMOV A,#8aHMOV R2,#20HLCALL DELAYMOV DPTR,#0FF29HMOV A,#02HMOVX @DPTR,AINC DPTRMOV A,#08HMOVX @DPTR,AMOV R2,#20HLCALL DELAYDJNZ R7,HA4S2LJMP HA4S3DELAY: PUSH 02HDELAY1: PUSH 02HDELAY2: PUSH 02HDELAY3: DJNZ R2,DELAY3POP 02HDJNZ R2,DELAY2POP 02HDJNZ R2,DELAY1POP 02HDJNZ R2,DELAYRETEND交通灯(带外部中断)实验作者: 徐学军一.实验教学目的1、学习外部中断技术的基本使用方法。