1、1模拟交通灯设计报告【摘要】当今世界正处于一个自动化时代,交通灯控制等很多行业的设备都需要计算机来控制。因此,一个好的交通灯控制系统能在道路拥挤、违章控制等方面起到很大作用。十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用MSC-51系列单片机STC89C52为中心器件来设计交通灯控制器,实现了红、黄、绿灯燃亮功能;红黄绿灯循环点亮。实现模拟交通灯的功能。本系统实用性强、操作简单、扩展功能强。关键词:单片机(89C52) 交通灯 数码管 LED一、 整体方案设计1. 基本要求在十字路的东
2、西南北方向各设置一组红黄绿灯以及一个转向灯并设置一个两位数码管,编程实现十字路口红黄绿灯交替点亮与数码管倒计时显示。2. 实现功能1) 正常情况东西车道与南北车道交替通行,每次通行时间为20秒,东西方向红灯亮30秒同时其方位的数码管倒计时30秒,南北向绿灯亮20秒之后黄灯闪5秒同时其方位的数码管倒计时25秒,之后南北向转向灯亮5秒数码管倒计时5秒。东西向绿灯亮20秒之后黄灯闪5秒同时南北向红灯亮30秒。2) 紧急情况a) 通过按压“禁止通行键”可使东西南北全部红灯,即全都不通,以应付突发情况。b) 按压“东西紧急键 ”,则东西方向绿灯,南北方向红灯;再按一次解除东西紧急通行状态。按压“ 南北紧
3、急键” ,则南北方向绿灯,东西方向红灯;再按一次后解除南北2紧急通状态。c) 按压“东西转向键” ,则东西转向灯开;按压“南北转向键” ,则南北转向灯开。3) 交通灯显示状态东西方向(简称A方向) 南北方向(简称B方向)红灯 黄灯 绿灯 转向 红灯 黄灯 绿灯 转向状态说明灭 灭 亮 灭 亮 灭 灭 灭 A方向通行,B方向禁行灭 闪烁 灭 灭 亮 灭 灭 灭 A方向警告,B方向禁行亮 灭 灭 亮 亮 灭 灭 灭 A方向左转亮 灭 灭 灭 灭 灭 亮 灭 A方向禁行,B方向通行亮 灭 灭 灭 灭 闪烁 灭 灭 A方向禁行,B方向警告亮 灭 灭 灭 亮 灭 灭 亮 B方向左转3. 总体设计方案框图
4、二、 方案原理采用单片机 STC89C52 的 I/O 口 P1 口通过锁存器控制共阴极数码管, ,在十字路口的四组红、黄、绿交通灯及转向灯中,由单片机 P0 口管脚分别控制,由于交通灯为发光二极管且阳极通过限流电阻和电源正极连接,因此 I/O 口输出低电平时,与之相连的灯会亮,并通过数码管显示时间倒计时。紧急情况的工作模式转换由人工控制5v 直流稳压电源独立键盘控制基于STC89C52 的单片机最小系统两位共阴极数码管LED 模拟交通灯3计时是利用单片机内部的一个 T0 定时器/ 计数器来实现,它的处理过程如下:首先设定单片机内部的一个定时器/计数器工作于定时方式,先对它的定时进行校准,校准
5、为50ms,之后以 20 个定时溢出为标准为 1s 进行计时同时根据条件语句与循环语句对数码管的计时及 LED 的燃亮进行调控。 本系统共用4个两位数码管,数码管显示的信息用8个内存单元存放,这8个内存单元称为显示缓冲区。在本系统中数码管显示采用软件译码动态显示。在存储器中首先建立一张显示信息的字段码表,显示时,先从显示缓冲区中取出显示的信息,然后通过查表程序在字段码表中查出所显示的信息的字段码,从P1口输出,同时在P2口将对应的位选码输出选中显示的数码管,就能在相应的数码管上显示显示缓冲区的内容。三、 硬件设计1. 单片机最小系统89C52单片机是硬件电路最核心的部分,时钟电路晶振使用11.
6、0592HZ42. 电源电路设计电源使用自制+5V直流稳压电源3. 数码管显示电路数码管采用两位共阴极数码管,东西南北各一个4. LED交通灯电路东西南北各三个红黄绿LED模拟交通灯,外加一个转向灯5四、 软件设计1. 程序流程图NYYNYYNNY运行过程SN:绿灯(20) ,EW:红灯(30)Num60 是否到 10SN:黄灯亮, EW:红灯Num60 是否到 5SN:黄灯灭,EW:红灯,转向亮(5)Num60 是否到 0秒NEW:绿灯(20),SN:红灯(30)Num60 是否到 40EW:黄灯亮(5) ,SN:红灯Num60 是否到 35EW:黄灯灭,EW:红灯,EW 转向亮(5 )Nu
7、m60 是否到30s 秒N数码管显示缓冲区 Y主程序开始设置中断工作方式、触发方式、初始化是否有中断运行过程执行中断YN中断结束,退出中断,返回6Y数码管显示程序获取当前通行剩余时间送 h、lE/S/W/N 状态送 P1 口位选码送 P3 口调用 Delay 延时四位显示完?返回主程序7T0 中断 定时计数初值50ms 计数(num) 加 1判断 1S(num=20?)到否Num=0Num60-恢复现场中断返回获取 P2 口信号Key1=0 Key2=0 Key5=0 Key4=0 Key3=0 关闭/开始计数器关闭/开始计数 关闭/开始计数 关闭/开始计数 关闭/开始计数Keycts=1 K
8、eycts=2 Keycts=3 Keycts=4 Keycts=5红灯全亮 南北红东西绿南北绿东西红红灯全亮东西转向红灯全亮南北转向按键82. 程序清单#includesbit key1=P20;sbit key2=P21;sbit key3=P22;sbit key4=P23;sbit key5=P24;unsigned char code table=0x3f,0x0c,0x76,0x5e,0x4d,0x5b,0x7b,0x0e,0x7f,0x5f;9void delayms(unsigned int x);void display(unsigned char x,unsigned ch
9、ar y,unsigned char a,unsigned char b);void keyscan();unsigned char keycts,num1,num11,num22,ge1,shi1,ge2,shi2;char num60=60;void main()TMOD=0x01;TH0=(65536-45872)/256;TL0=(65536-45872)%256;EA=1;ET0=1;TR0=1;while(1)10if(TR0=0)if(keycts=1)P0=0xbe;else if(keycts=2)P0=0xee;else if(keycts=3)P0=0xbb;else if(keycts=4)P0=0x3e;elseP0=0xb6;else