基于51单片机的交通灯系统报告(张明礼)

更新时间:2024-05-25 16:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

江苏师范大学电气工程及自动化学院

目 级 名 号 间

单片机实训报告

基于51单片机的交通灯系统设计10电51班 张明礼

2013年1月

- 1 -

班 姓

学 10285016

目 录

1 前言 ...................................................... 3

2 交通灯系统硬件设计 ........................................ 4

2.1 单片机概述 .................................. 4

2.2 系统构成 .................................... 5 2.3芯片选择与介绍 ............................... 5

2.3.1 STC89C52芯片 ......................................... 5

2.3.2 STC89C52各管脚功能介绍........................ 5 2 .3.3其引脚分配..................................... 6

2.4交通灯控制线路图 ............................... 7 2.4.1电源模块 .................................. 8 2.4.2红绿灯模块 ................................ 9

3实验平台.................................................. 10

3.1实验平台............................................ 10 3.2 实验步骤 ......................................... 10

4 程序实现代码 ............................................. 11

参考文献 ................................................... 14 致谢 ....................................................... 15

结论 ....................................................... 15

- 2 -

摘要:交通信号灯使交通得以有效管制,对于疏导交通,提高道路通行能力,减少交通事故有明显效

果。

本系统采用单片机STC89C51为中心控制器来设计交通灯控制器实现智能控制十字路口交通灯的各种状态显示。

本设计系统由交通灯状态显示、LED数码显示、复位电路、时钟电路、稳压电路等几大部分组成。系统集成了交通灯的显示功能,较好的模拟实现了十字路口可能出现的状况。

程序的编写在KEIL3环境下,通过C51进行程序的设计,Dxp中进行电路原理图的绘制。

关键词:电子线路; STC89C51; LED 交通灯

1 前言

1.1本设计的目的与意义

交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,交通也成了日常生活的一部分,在交通灯出现以前,如何有效的缓解交通压力以及避免不必要的交通事故,这成了一个城市拥有良好的交通治安的前提。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。

为此我选择交通灯这一课题作为单片机课程设计,通过仿真来模拟实际交通灯的工作状态,可以了解现实中的交通灯信号系统。通过模拟找到实际中的不足,为今后的系统完善做出一些作用。

1.2本设计应达到的要求

本设计采用STC89C52单片机作为中心控制器,两个双位数码管模拟倒计时,十二个有色数码管模拟四方向红绿黄灯。

东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三个指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。红灯的设计时间为40秒,绿灯及左转绿灯各为20秒。各方向按照实际中的情形,模拟交替亮灭,实现交通灯的基本功能。

- 3 -

2 交通灯系统硬件设计

2.1 单片机概述

单片机是由运算器、控制器、存储器、输入设备以及输出设备共五个基本部分组成的。单片机是把包括运算器、控制器、少量的存储器、最基本的输入输出口电路、串行口电路、中断和定时电路等都集成在一个尺寸有限的芯片上。

通常,单片机由单个集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。

单片机经过1、2、3、3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引脚的多功能化,以及低电压、低功耗。

可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机。顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。它主要是作为控制部分的核心部件。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

2.2 系统构成

电路板一块,STC89C52单片机一片,12M晶振一块,两位共阴数码管两个。发光二极管12个(4个绿的,4个红的,4个黄的),7805三端稳压电源一个,四个按键。电阻电容插针杜邦线若干,9V电池一块。

- 4 -

2.3芯片选择与介绍 2.3.1 STC89C52芯片

1、为一般控制应用的 8 位单片机

2、晶片内部具有时钟振荡器(传统最高工作频率可至 33MHz) 3、内部程式存储器(ROM)为 4KB 4、内部数据存储器(RAM)为 128B 5、外部程序存储器可扩充至 64KB 6、外部数据存储器可扩充至 64KB

7、32 条双向输入输出线,且每条均可以单独做 I/O 的控制 8、5 个中断向量源

9、2 组独立的 16 位定时器 10、1 个全双工串行通信端口

11、8751 及 8752 单芯片具有数据保密的功能 12、单芯片提供位逻辑运算指令

2.3.2 STC89C52各引脚功能介绍:如图3

图3 STC89C52

VCC:STC89C52 电源正端输入,接+5V。 VSS:电源地端。

XTAL1:单芯片系统时钟的反向放大器输入端。

- 5 -

XTAL2:系统时钟的反向放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两个引脚与地之间加入一个 20PF 的小电容,可以使系统更稳定, 避免噪声干扰而死机。

RESET:STC89C52的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,STC89C52便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。

EA/Vpp:\为英文\的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用 8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。

ALE/PROG:ALE是英文\的缩写,表示地址锁存器启用信号。ATSTC89C52可以利用这个引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中,因为ATSTC89C52是以多工的方式送出地址及数据。平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。

PSEN:此为\的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。ATSTC89C52可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围。

PORT0(P0.0~P0.7):端口0是一个8位宽的开路电极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当作I/O用时可以推动8个LS的TTL负载。如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。设计者必须外加一个锁存器将端口0送出的地址锁住成为A0~A7,再配合端口2所送出的A8~A15合成一组完整的16位地址总线,而定位地址到64K的外部存储器空间。

PORT2(P2.0~P2.7):端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当作一般I/O端口使用外,若是在ATSTC89C52扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当作I/O来使用了。

PORT1(P1.0~P1.7):端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地,若将端口1的输出设为高电平,便是由此端口来输入数据。如果是使用8052或是8032的话,P1.0又当作定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发引脚。

PORT3(P3.0~P3.7):端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。

2.3.3其引脚分配如下:

P3.0:RXD,串行通信输入。 P3.1:TXD,串行通信输出。 P3.2:INT0,外部中断0输入。 P3.3:INT1,外部中断1输入。

- 6 -

P3.4:T0,计时计数器0输入。 P3.5:T1,计时计数器1输入。

P3.6:WR:外部数据存储器的写入信号。 P3.7:RD,外部数据存储器的读取信号。 7805的功能,既提供稳定的+5V电压。

2.4 交通灯控制线路图

- 7 -

2.4.1 电源模块

电源模块采用的是7805芯片,将9V的电池通过7805芯片转成稳定的直流5V电压 供给单片机及交通灯控制电路使用。

7805概述

电子产品中,常见的三端稳压集成电路有正电压输出的78 ×× 系列和负电压输出的79××系列。顾名思义,三端IC是指这种稳压用的集成电路,只有三条引脚输出,分别是输入端、接地端和输出端。它的样子象是普通的三极管,TO- 220 的标准封装,也有9013样子的TO-92封装。

用78/79系列三端稳压IC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。该系列集成稳压IC型号中的78或79后面的数字代表该三端集成稳压电路的输出电压,如7806表示输出电压为正6V,7909表示输出电压为负9V。

- 8 -

2.4.2 红绿灯模块

红绿灯模块采用12个发光二极管,分别模拟四个方向的红绿黄灯。将南北东西并接到P3口上的6个IO口。二极管共接到VCC上。这样在控制发光二极管时,只要在IO口输出0即亮,输出1即灭。注意,由于单片机灌电流掌握不好容易烧掉单片机,切记一个IO口不可带过多的LED。

- 9 -

3实验平台

3.1实验平台

我们采用的是Keil Software生产的Cx51编译器。运行在Windows XP操作平台下。 开启计算机进入Keil C51编译器介面。如图6

图6 Keil C51编译器介面

3.2实验步骤

3.2.1 编写程序代码

程序代码分为3个模块:主函数循环模块,按键扫描模块,延时函数。(见程序实现代码)3.2.2 按照系统硬件连线图连接好系统并调试

1.调试程序

⑴ 打开Keil软件,新建工程;

- 10 -

⑵ 选择芯片;

⑶ 新建文档,把编写好代码写入文档并保存了C文件; ⑷ 把保存的文档加载到Source Group; ⑸编译程序;

⑹设置转换成16进制; ⑺运行程序的结果;

2. 把编译好的16进制文件(.hex) 输入单片机STC89C52仿真器和对其进行初始化。

3.给实验板进行通电,观察运行结果,不一致则跳到第一步进行反复调试,直到与预定目的一致。

4.程序实现代码

;此程序分为四个部分,循环运行。南北方向绿灯6S。东西方向红灯6S。 ;南北方向黄灯3S,东西方向红灯3S(总共9S红灯)。 ;东西方向绿灯6S,南北方向红灯6S。

;东西方向黄灯3S,南北方向红灯3S(总共9S红灯)。

;共设计12个发光二极管,4个红的,4个绿的,4个黄的。

;按照如图的解法将南北东西各方向的红绿灯依次接到P3.0~~P3.5共6个IO口上。K1,K2,K3按键分别接到P2^2~P2^0上。表示了暂停/继续按键,南北强制通行按键,东西强制通行按键。

C语言程序如下 :

#include //头文件 #define uchar unsigned char //宏定义 #define uint unsigned int

sbit hong1=P3^0; //定义各个方向红绿灯端口 sbit lv1=P3^1; sbit huang1=P3^2; sbit hong2=P3^5; sbit lv2=P3^4; sbit huang2=P2^3;

sbit w1=P2^7; //定义位选 sbit w2=P2^6; sbit w3=P2^5; sbit w4=P2^4;

sbit k1=P2^2; //定义按键 sbit k2=P2^1; sbit k3=P2^0; uchar num;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

- 11 -

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delayms(uint x); void keyscank1(); void keyscank2(); void keyscank3();

void main() //主函数 {

unsigned int i,j,m,n; w1=0; w2=0; w3=0; w4=0;

while(1) {

for(i=6;i>0;i--)

{keyscank1(); keyscank2(); keyscank3(); //按键扫描 lv1=0; //南北方向绿灯6S。东西方向红灯6S。 hong1=1;huang1=1; hong2=0;

huang2=1;lv2=1; P0=table[i-1]; P1=table[i+2]; delayms(1000); }

for(j=3;j>0;j--)

{ keyscank1(); keyscank2(); keyscank3();

lv1=1; //南北方向黄灯3S,东西方向红灯3S(总共9S红灯)。 hong1=1;huang1=0; hong2=0;

huang2=1;lv2=1; P0=table[j-1]; P1=table[j-1]; delayms(1000); }

for(m=6;m>0;m--) { keyscank1();keyscank2(); keyscank3();

hong1=0; //东西方向绿灯6S,南北方向红灯6S。 lv1=1;huang1=1; P0=table[m+2]; P1=table[m-1]; lv2=0;

huang2=1;hong2=1; delayms(1000); }

- 12 -

for(n=3;n>0;n--) { keyscank1(); keyscank2(); keyscank3();

hong1=0; //东西方向黄灯3S,南北方向红灯3S(总共9S红灯)。 lv1=1;huang1=1; P0=table[n-1]; P1=table[n-1]; huang2=0;

lv2=1;hong2=1; delayms(1000); } } }

void keyscank1() //{

if(k1==0) {

delayms(5); if(k1==0) {

while(!k1); } } }

void keyscank2() //{ {

if(k2==0) {

delayms(10) ; if(k2==0) { while(!k2) {

hong1=0;

lv1=1;huang1=1; lv2=0;

huang2=1;hong2=1; delayms(1000); } } } }

void keyscank3() //{ {

按键K1扫描 按键K2扫描 按键K3扫描 - 13 -

if(k3==0) {

delayms(10) ; if(k3==0) { while(!k3) {

hong2=0;

lv2=1;huang2=1; lv1=0;

huang1=1;hong1=1; delayms(1000); } } } }

void delayms(uint x) //延迟程序 {

uint i,j;

for(i=x;i>0;i--)

for(j=110;j>0;j--) ; }

结论

本系统就是利用了STC89C52芯片的I/O引脚。系统采用STC公司生产的单片机STC89C52,以及其它芯片(如:L7805三端稳压电源)来设计交通灯控制器,实现了红灯亮9秒,绿灯亮6秒和黄灯亮3秒。并通过STC89C52的IO口设置红、绿灯燃亮的功能和控制实现在七段数码管上的时间显示;为了系统稳定可靠系统内集成了“看门狗”芯片,避免了系统因为死机而停止工作的情况发生。系统设计简便、实用性强、操作简单、程序设计简便。

系统不足:时间设定中间隔较短,没有设置左右转以及人行灯,以及自动根据车流改变红绿灯时间。此外,还没有充分考虑的把现代管理、人工智能运用到交通的控制中,来计算交通控制点之间的距离,来更合理的安排红、绿灯的持续时间,使城市的交通管理更加人性化。使人们远离目前的交通拥塞的现象。仅仅是在红绿灯的基础上增加了暂停/继续按键,南北强制通行按键,东西强制通行按键。

- 14 -

参考文献

[1]刘海宽 单片机实验与实训教程[M] 东南大学出版,2008 [2]张鑫 单片机原理及应用(第二版) 电子工业出版社 2012 [3]郭天祥 51单片机C语言教程[M] 电子工业出版社 2007 [4]谭浩强 C程序设计 [M] 电子工业出版社,1991

致谢

三周单片机实训结束了,感慨很多。三周时间很长也很短,在这三周里首先感谢之前单片机老师给我们很多扎实的基本知识。感谢学校图书馆和实验室给我们的良好的理论与实践支持。感谢老师们的无私帮助,无私解答我们实训中的问题,感谢班级同学尤其是集成创新社里的各位同学的帮助与支持。

- 15 -

本文来源:https://www.bwwdw.com/article/2wa7.html

Top