APP下载

基于单片机AT89S51交通灯的仿真设计

2018-07-27王刚

价值工程 2018年17期

王刚

摘要: 本文设计了基于AT89S51单片机的交通灯控制系统。该系统由单片机最小系统、交通灯显示电路、倒计时显示电路、紧急和特殊情况处理电路组成。通过Proteus、Keil软件搭建硬件仿真电路与软件设计、软硬联调,实现了交通灯的基本功能及紧急、特殊情况交通处理功能。仿真结果表明:本系统具有电路设计简单,性价比高,稳定性好,操作性强等特点。为进一步扩展交通灯功能的多样化、智能化提供了参考方案,具有一定的实用价值。

Abstract: This paper designs a traffic light control system based on AT89S51 single-chip microcomputer. The system consists of a single-chip minimum system, a traffic light display circuit, a countdown display circuit, and emergency and special case processing circuits. Proteus and Keil software are used to build hardware simulation circuit and software design, hardware and software joint debugging, to achieve the basic functions of traffic lights and emergency and special circumstances of traffic handling. The simulation results show that this system has the characteristics of simple circuit design, high performance-to-price ratio, good stability, and strong operability, which provides a reference program for further diversification and intelligentization of traffic light functions, and has certain practical value.

关键词: AT89S51;显示电路;处理功能;硬件仿真

Key words: AT89S51;display circuit;processing function;hardware simulation

中图分类号:U491.5+1 文献标识码:A 文章编号:1006-4311(2018)17-0131-02

0 引言

近年来,我国汽车数量增长迅速,大中型城市的交通压力也日趋增大。随着微控制器技术的不断发展,功能日益完善,在工业控制、仪器仪表、武器装备、通信等领域获得广泛应用。在此背景下,采用单片机设计出智能化、人性化的交通灯控制电路,为缓解交通压力提供了可行性的解决方案。

1 系统总体设计

根据系统的功能,本设计的硬件仿真分为三个模块:单片机最小系统、交通灯显示模块、紧急、特殊情况处理模块。最小系统采用核心芯片AT89S51;显示模块采用发光二极管为交通灯、四位一体七段数码管为倒计时显示;非自锁按键构成紧急和特殊情况处理电路。系统组成框图如图1所示。系统的软件设计分为四个模块:动态显示模块、交通灯工作模块、中断模块、定时/计数器模块。

2 硬件仿真设计

本系统的硬件仿真采用Proteus软件。Proteus软件是EDA工具软件,它是目前比较好的仿真单片机及外围器件的工具。同时能与Keil软件进行软硬联调,准确展示单片机的仿真效果。

系统仿真电路主要由单片机最小系统、交通灯显示电路、倒计时显示电路、紧急、特殊情况处理电路部分组成,硬件仿真电路如图2所示。

①单片机最小系统:也称单片机最小应用系统,是指用最少的元件组成,可以使单片机工作的系统。对51系列单片机来说,最小系统包括电源电路、单片机、复位电路、时钟电路、程序存储器选择电路。

单片机:选用8位单片机AT89S51,该单片机具有性能稳定,硬件资源丰富,根据适用、够用的原则,该芯片能够作为交通灯的微控制器。

电源电路:由外部电源提供DC 5V,加在单片机VCC(40号引脚),VSS端(20号引脚)。

时钟电路:为单片机工作提供基本时钟。单片机须在时钟信号控制下严格的按时序进行工作。本设计的时钟电路采用内部时钟方式,即通过两个30pF电容及12MHz的晶体振荡器实现单片机的时钟电路的功能,具体电路连接参看图2中XTAL1与XTAL2的连接部分。

复位电路:单片机复位是使CPU和系统中的其他功能部件都恢复到一个确定的初始状态,单片机的复位条件是必须使单片机的RST(第9引脚)加上持续2个机器周期以上的高电平。复位电路参看图2所接RST端的电路。单片机上电时,按下复位按键RESET键,在RST端产生一个复位高电平,单片机复位。具体电路连接参看图2中RST端的连接方式。

程序存储器选择电路:单片机内部有4KB的程序存储器,能够存放本次设计的交通灯控制程序,无需外扩存储器。单片机的(第31引脚)接VCC,即为高电平时,单片机读取程序从内部程序存储器读取。具体连接方法参看图2中单片机端的接线方式。

②交通灯显示电路:采用6个发光二极管模拟两个方向的红黄绿交通灯,通过单片机的P0口控制,采用灌电流控制方式,对应的P0口某一位为低电平时点亮该位对应LED灯。所接6個200Ω电阻起到限流作用,防止电流过大烧坏发光二极管。具体连接方法参看图2中P0.0~P0.5端的接线方式。

③倒计时显示电路:四位一体的共阳数码管分别模拟两个方向的倒计时显示器,每个方向2位,P2.0~P2.3连接数码管的位选端,为数码管提供的位选信号。P1.0~P1.7的连接数码管的段选端,为数码管提供段选信号。具体连接方法参看图2中P1、P2口对应端的连接方式。

④紧急和特殊情况处理电路:采用非自锁按键S1、S2分别模拟紧急情况和特殊情况的发生,当S1、S2没有按键按下时,表示正常情况。当S1按下时,表示紧急情况,将S1接至(P3.2引脚),即可实现外部中断0的中断请求。当S2按下时,表示特殊情况,将S2接至(P3.3引脚),即可实现外部中断1的中断请求。具体连接方式参看图2中P3口对应的连接方式。

3 软件设计

倒计时交通灯的程序编写采用C语言进行设计,C语言因执行效率高、可移植性好,可以直接对硬件进行操作等多种优势而被广泛使用。单片机C语言的编译软件采用Keil μVision。该软件是目前最流行的开发51单片机软件,能将程序与硬件仿真软件进行系统联调,从而成功实现仿真。程序包括如下部分:主函数、中断函数、定时函数、显示函数,6个用户自定义状态函数。

3.1 主函数:包括两个部分

①6个状态函数:nanbei50s();nanbei3s();nanbei2s();dongxi50s();dongxi3s();dongxi2s();交通灯系统正常工作时,南北方向和东西方向自动切换6个运行状态。状态1至状态3:东西方向红灯亮(55s)、南北方向绿灯亮(50s);南北方向绿灯闪烁(3s)、南北方向黄灯亮(2s);状态4到状态6:南北方向红灯亮(55s)、东西方向绿灯亮(50s)、东西方向绿灯闪烁(3s)、东西方向黄灯(2s)。正常情况下,交通灯从状态1顺序切换到状态6,如此循环。主函数中通过调用六个状态子函数,使程序结构清晰,便于纠错、调试。

②基于仿真电路的设计,主函数中将外部中断0和外部中断1开中断,利用自然优先级使中外部中断0为高优先级。在调用中断函数时采用外部中断的下降沿触发方式。主函数如下:

void main( )

{TMOD=0X01;IT0=1;EX0=1;IT1=1;EX1=1;EA=1;

While(1)

{nanbei50s();nanbei3s();nanbei2s();dongxi50s();dongxi3s();dongxi2s();}}

3.2 动态显示函数:采用动态扫描法实现四位数码管的数值显示。动态扫描显示过程:在某一时段只让其中1位的LED位选口有效,并在段选口上送出相应的字形显示编码。这时,在选中的LED上显示指定字符,其他位的LED处于熄灭状态;延时一段时间,下一时段按顺序选通另外1位LED,并送出相应的字形显示编码,依此规律循环下去,直到最后1位LED被选通,显示指定字符。反复进行以上LED动态扫描过程,就能实现各位LED稳定显示字符的效果。以东西交通灯显示程序为例,其中ew为全局变量,存放东西方向交通灯的倒计时数。南北交通灯显示程序与东西方向类似。

void display()

{unsigned led[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char wei[ ]={0xfe,0xfd,0xfb,0xf7};

unsigned char b; P2=wei[0];P1=led[ew/10];

for(b=0;b<100;b++);P1=0X00;P2=wei[1];P1=led[ew%10];

for(b=0;b<100;b++);P1=0X00;}

3.3 定时函数:采用定时计数器0,工作方式1,定时50ms的时间作为基本时间单位。通过多次调用该函数,实现1s的计时。定时函数如下:

void dingshi50ms(unsigned char i)

{unsigned char j; for(j=0;j

{TH0=(65536-50000)/256; TL0=(65536-50000)%256;

TR0=1;while(!TF0); TF0=0; }}

3.4 中断处理函数:当按下按键S1后,进入外部中断0中断处理函数。包括保护现场,两个方向为红灯,持续20s,对应交通的紧急情况。当按下按键S2后,进入外部中断1的中断处理函数。包括保护现场,南北方向绿灯,东西方向红灯,持续10s,对应交通的特殊情况。

4 仿真結果

将源程序在Keil软件进行编译、链接后与Proteus仿真电路软硬联调,成功展示了交通灯的正常运行状态,分别按下按键S1,S2后,交通灯的紧急、特殊情况运行正常。

5 结语

通过对系统的总体设计、搭建硬件仿真电路、软件设计、软硬联调,成功设计倒计时交通灯电路,该系统具备功能可靠、性价比高、结构简单等优点。本设计的硬件仿真适合应用于虚拟仪器的教学演示和实际的应用系统设计等方面,为交通灯的智能化发展提供可行性参考方案。

参考文献:

[1]尹毅峰,刘龙江.单片机原理及应用[M].北京:北京理工大学出版社,2010.

[2]倪志莲.单片机应用技术[M].北京:北京理工大学出版社,2010.

[3]王冬梅,张建秋,路敬.基于单片机的交通灯控制系统设计与实现[J].佳木斯大学学报:自然科学版,2009,27(1):94-96.

[4]彭伟.单片机C语言程序设计实训100例[M].北京:电子工业出版社,2012.