数电交通灯课程设计报告书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

武汉理工大学《数字电子技术基础》课程设计说明书
目录
摘要 (1)
Abstract (2)
1、方案设计与论证 (3)
1.1 系统方案设计与论证 (3)
1.2 模块方案设计与论证 (3)
1.2.1 控制模块方案 (3)
1.2.2 显示模块方案 (4)
1.2.3 交通灯模块方案 (4)
1.2.4 调节模块方案 (4)
1.2.5 电源模块方案 (4)
1.3 总体设计思想 (5)
2、系统硬件电路设计 (5)
2.1 单片机模块设计 (5)
2.2 显示模块设计 (6)
2.3 交通灯模块电路设计 (7)
2.4 按键调节电路设计 (7)
3、交通灯软件设计 (7)
3.1 主监控程序设计 (7)
3.2 中断的程序设计 (8)
3.3 按键的程序设计 (8)
3.4 显示的程序设计 (9)
4、性能测试 (9)
4.1 LED交通灯与数码管的显示 (9)
4.2 按键调试 (10)
5、心得体会 (11)
参考文献 (12)
附件1 源程序 (13)
附件2 总原理图 (20)
附件3 元件清单 (21)
摘要
交通灯在交通环境中起着一个重要的角色,是交通管理的重要工具。

为实现十字路口交通灯最优控制,更大程度上的缓解交通压力,本实验设计了基于STC89C52单片机的智能交通灯控制系统,主要由单片机(MCU)、按键控制等模块组成。

系统包括人行道、车行道、以及基本的交通灯的功能。

除此之外,还具有倒计时、时间设置、根据具体情况手动控制等功能。

该系统能够实现对十字路口交通状况的简单控制,达到控制目的,经济效益,具有一定的应用前景。

关键词:STC89C52 交通灯
Abstract
Traffic lights in the traffic environment plays an important role, is an important tool for traffic management. To achieve the optimal control intersection traffic lights, greater ease traffic pressure, this experiment was designed based on the STC89C52 intelligent traffic control system, mainly by microcontroller (MCU), button control etc module. System including sidewalks, the driveway, and basic functions of the traffic lights. In addition, but also has the countdown, time setting, according to the specific circumstances of manual control etc. Function. The system can realize to the intersection traffic simple control to achieve control purposes, economic benefits, have certain application prospect.
Keywords: STC89C52 the traffic lights
交通信号灯控制器的设计
1、方案设计与论证
1.1 系统方案设计与论证
根据实验设计要求,使得红、黄、绿三种LED灯在单片机的控制下作为两个交通通道的指示灯显示,并且使用数码管以减计数的方式显示每个通道的通行时间。

以下是几种系统设计方案。

方案一:基于数字电路的交通灯控制系统
数字电路是我们最常用的一种控制电路,但数字电路有很多弊端。

首先就是电路设计起来很复杂;其次就是电路一旦设计好后其参数就不能改变,工作起来也不是很容易受到外界信号的干扰。

所以其很显然不利于现代交通灯智能控制的发展。

方案二:基于单片机的设计
用单片机控制按键、数码管和LED灯,使用软件编程实现对外部器件的控制。

该方案具有硬件电路简单、可修改性好、普及度高和经济效益好等的优点。

综上所述,本次交通灯控制系统采用方案二基于单片机的方式。

1.2 模块方案设计与论证
1.2.1 控制模块方案
方案一:采用AVR单片机。

AVR是8位单片机,作为控制器件用于不太复杂的设备。

AVR内部资源比51单片机多很多,如10位AD,PWM等等,在功耗和I/O驱动能力方面强很多,改进了内部结构,在相同晶振下AVR处理速度快于51。

但是没有良好的经济效益。

方案二:采用51系单片机。

51系列单片机是一种价格低廉,稳定性好,应用广泛,的8位单片机,内置有4kB ROM 存储单元,适用于小型控制场合,无需外围扩展存储器。

综合考虑经济效益,普及性等,本系统的要求下使用一块通用的51系列单片机已经
足够,故选择方案三。

1.2.2 显示模块方案
该系统要求显示部分能够完成对通行时间的倒计时功能。

基于上述原因,我们考虑了二种方案:
方案一:采用数码管显示。

这种方案可以显示数字以及简单的字符,完全可以满足我们设计的要求,而且价格便宜,实用性高。

方案二:采用点阵式LED 显示。

点阵可以显示数字、字符、汉字、自定义符号等,作为交通灯的人机交互模块较为方便,单片点阵即可完成指示作用。

但软件工作较数码管复杂,成本也较为高,对于我们的设计方案实用性不佳。

权衡利弊,我们决定采用方案一以实现系统的显示功能。

1.2.3 交通灯模块方案
交通灯模块直接采用红、绿、黄LED灯作为指示,完全可以满足我们的设计要求。

1.2.4 调节模块方案
方案一:采用矩阵键盘,作为调节按钮及开关可以节约单片机IO口。

方案二:采用独立按键,独立按键编程较矩阵键盘更简单,但是占用的单片机IO口较多。

考虑到我们的设计方案中只用到一个功能键及两个调节键,直接采用独立按键也不会占用太多IO口,故采用方案二直接利用独立按键。

1.2.5 电源模块方案
方案一:设计独立的供电电路,通过变压电路、整流电路、滤波电路、稳压电路最后得到需要的电压供给电路工作。

方案二:利用USB接口直接供电,由于现在电脑很普及,而且单片机的开发也需要利用电脑,电脑的USB接口的电压刚好是5V左右,可以直接供电路使用。

考虑到设计的简单实用性,采用方案二。

1.3 总体设计思想
根据题目要求,经过如上一系列的方案设计比较与分析,制定出一个整体系统设计方案如下图所示。

该系统的工作过程是:系统上电后默认的倒计时时间为30S ,在无任何按键按下时,通道A 红灯亮,通道B 绿灯亮;自动倒计时至5S 时,通道A 红灯灭,黄灯闪烁;当倒计时显示为0时,变为通道A 绿灯亮,通道B 红灯亮……同理,循环显示与计数达到控制通行的目的。

两外,3个独立按键分别是功能键、加、减键,用来实现对系统的倒计时时间的调节,流程图如图1-1所示。

⇑ ⇒ ⇒ ⇓
图1-1 系统流程图
2、系统硬件电路设计
具体的硬件电路包括单片机模块设计、显示模块设计、交通灯模块及按键调节电路设计。

2.1 单片机模块设计
单片机是交通灯的控制中心,通过按键的输入,完成对数码管初值的设定、数码管显示的控制以及交通灯的控制。

本设计采用STC89S52最小系统,外部时钟为12MHz,电路原理图如图2-1所示。

MCU STC89S52 交通灯模块 LED(红、绿、黄) 数码管驱动
调节模块
独立按键 显示模块 数码管
图2-1 单片机模块
2.2 显示模块设计
为了模拟十字路口显示器对行人及车辆等待时间的指示,本系统设计了两组2位一体共阳数码管作为倒计时的显示,分别作为两个通道方向A、B的指示显示。

选用74HC04作为数码管驱动电路,其原理图如图2-2所示。

图2-2 数码管显示模块
2.3 交通灯模块电路设计
选择红黄绿三种颜色作为交通指示灯,红灯停、绿灯行、黄灯为警告提醒。

同样设计成十字形,分别作为通道A、B的指示灯。

原理图如图2-3所示。

图2-3 交通灯
2.4 按键调节电路设计
为方便用户直接对倒计时时间的调节,设定了三个按键。

按键K0是功能按键,当按下时,系统停止工作,按键K1、K2分别为加、减键,并将调节后的时间显示在数码管上。

设计原理图如图2-4所示。

图2-4 按键
3、交通灯软件设计
3.1 主监控程序设计
程序开始后,设置中断程序,运行初始化程序,包括初始化单片机I\O口、按键初始状态、数码管初始显示时间等。

程序进入主循环后,主要执行4个状态的相互转换及按键
检测,系统软件流程图如图3-1所示。

图3-1 主程序流程图
3.2 中断的程序设计
本系统采用2个定时器中断方式:定时器0完成计时功能,当倒计时时间到来时,调用状态转换函数转换到相应状态,同时定义标识符,检测状态2、4的0.5s间隔,完成黄灯的闪烁;定时器2执行显示命令,利用定时器而不采用延时函数完成数码显示,可以解放CPU,不影响其他功能的实现。

3.3 按键的程序设计
本系统共用到3个独立按键,为了方便共用了两个按键检测函数,一个检测功能键,并利用标识符,设置了两种状态:正常工作状态和时间设定状态;另一个检测两个调节按键,并执行相应的时间加、减,此检测程序只会在时间设定状态下才会被调用,防止正常
运行过程中无意按到,而出现时间显示异常的情况出现,使系统更稳定。

3.4 显示的程序设计
数码显示部分共涉及两个函数:一个是void time_to_display(unsigned char a),完成将显示内容送至显示缓冲区,等待显示函数调用;另一个是void display(),完成数码的显示,由于需要动态显示,若采用延时程序完成,则会占用CPU,影响其他程序的执行,以防此情况发生,所以此函数放到定时器1中断程序中执行,利用定时器2ms中断定时,完成动态显示。

4、性能测试
4.1 LED交通灯与数码管的显示
按照设计思路,开始正常工作时通道A为绿灯亮,同时应伴随着通道B红灯亮和数码管倒计时显示时间;当倒计时到5S时,通道A绿灯灭,黄灯开始闪烁;当倒计时到1时,在下一秒进入下一状态。

仿真测试如图4-1所示。

图4-1 数码管及交通灯仿真测试
完成实物后,测试出现的全部结果可以简单的用状态图表述为图4-2所示。

图4-2 仿真测试状态转换图
4.2 按键调试
当按下S键时,数码管停止计时,并将当前总时间显示在数码管上,红绿灯全部熄灭,再按下按键S(+)与S(-)时,数码管显示加1或减1。

仿真测试图见图4-3。

图4-3 按键仿真测试
经过实物测试,电路可以正常工作,故设计达到题目要求。

5、心得体会
本次课程设计至此已经接近尾声,虽然整个的设计制作过程很短,但是我还是从中学到了好多东西。

此次设计主要是利用单片机控制电路,由于我们还没开设单片机课程,所以此次课程设计不仅是为了锻炼我们动手的能力,更是培养我们的自学能力。

整个设计过程中首先对数字电路这门课程有了更深的了解,以前的数字实验只是针对某一个小的功能设计,而此次课程设计对我们的总体电路的设计的要求更严格,首先需要根据设计要求确立实验总体设计方案,然后逐步细化进行各模块的设计;其次,在编程和调试过程中总会出现一些问题,需要我们细心解决,所以这几天下来,我对程序和电路故障的排查能力有了很大的提高;再次,通过此次课程设计,我对设计所用到的软件有了更加深刻地了解,这对我们以后的工作和学习的帮助都很有用处。

感谢学校给我们这次机会,锻炼了我们的动手能力。

通过这次课设我对单片机的学习热情更高了,也对电路设计产生了浓厚的兴趣,同时通过把学到的理论知识成功应用到实际中,自己感到了一种成就感。

最后感谢学校为我们提供实验室,便于我们调试、测量,感谢老师的细心指导。

参考文献
[1]郭天祥.51单片机C语言教程.北京:电子工业出版社,2009.12.
[2]伍时和,吴友宇.数字电路技术基础.北京:清华大学出版社,2009.4.
[3]欧伟明,何静等.单片机原理与应用系统设计.北京:电子工业出版社,2009.9.
[4]蔡惟铮.数字电子线路基础.哈尔滨:哈尔滨工业大学出版社,1988.3.
[5]谭浩强.C语言基础设计.北京:清华大学出版社,2007.7.
[6]张建华.数字电子技术.北京:机械工业出版社,1994.4.
附件1 源程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit kai=P1^0; /*按键的定义*/
sbit jia=P1^1;
sbit jian=P1^2;
sbit shiwen=P2^6; /*数码管位选定义*/
sbit gewen=P2^7;
sbit LED_GREEN1=P2^0; /*交通灯定义*/
sbit LED_RED1=P2^1;
sbit LED_YELLOW1=P2^2;
sbit LED_GREEN2=P2^3;
sbit LED_RED2=P2^4;
sbit LED_YELLOW2=P2^5;
bit wen=1,guan; /*标识符定义*/
uchar TIME,i,z;
char TIME_MAX1=30; /*时间初始化*/
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar wenxuan[]={0,1};shuzi[]={0,0};
void delayms(uchar z) /*延时函数*/
{
uchar x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void time_to_display(uchar z) /*缓存待显示内容的函数*/
{
shuzi[0]=z/2/10;
shuzi[1]=z/2%10;
}
void display() /*数码显示函数*/
{
P0=0xff;
shiwen=wenxuan[wen];
gewen=!wenxuan[wen];
P0=table[shuzi[wen]];
}
void set_zhuangtai(uchar zhuangtai) /*状态转换函数*/ {
if(zhuangtai==0)
{
LED_GREEN1=0;
LED_RED1=1;
LED_YELLOW1=1;
LED_GREEN2=1;
LED_RED2=0;
LED_YELLOW2=1;
TIME=2*TIME_MAX1+1;
}
else if(zhuangtai==1)
{
LED_GREEN1=1;
LED_RED1=1;
LED_YELLOW1=!LED_YELLOW1;
LED_GREEN2=1;
LED_RED2=0;
LED_YELLOW2=1;
}
else if(zhuangtai==2)
{
LED_GREEN1=1;
LED_RED1=0;
LED_YELLOW1=1;
LED_GREEN2=0;
LED_RED2=1;
LED_YELLOW2=1;
TIME=2*TIME_MAX1+1;
}
else if(zhuangtai==3)
{
LED_GREEN1=1;
LED_RED1=0;
LED_YELLOW1=1;
LED_GREEN2=1;
LED_RED2=1;
LED_YELLOW2=!LED_YELLOW2;
}
}
void key() /*功能(开关)键检测函数*/ {
while(!kai)
{
delayms(10);
if(!kai)
{
guan=~guan;
set_zhuangtai(z);
}
while(!kai);
}
}
void tiao() /*调节按键检测函数*/
{
if(jian==0)
{
delayms(10);
if(jian==0)
{
if(--TIME_MAX1<0) TIME_MAX1=30;
}
while(!jian);
}
else if(jia==0)
{
delayms(10);
if(jia==0)
{
if(++TIME_MAX1>30) TIME_MAX1=0;
}
while(!jia);
}
z=0;
if(TIME_MAX1<6) z=1;
}
void main()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65532-2000)/256;
TL1=(65536-2000)%256;
EA=1;
while(1)
{
key();
if(guan)
{
TR0=1;
TR1=1;
ET0=1;
ET1=1;
}
else
{
LED_GREEN1=1;
LED_RED1=1;
LED_YELLOW1=1;
LED_GREEN2=1;
LED_RED2=1;
LED_YELLOW2=1;
ET0=0;
TR0=0;
ET1=1;
TR1=1;
TIME=2*TIME_MAX1+1;
time_to_display(TIME);
tiao();
}
}
}
void TIME0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
if(i==10)
{
i=0;
if(TIME_MAX1>5)
{
if(1<--TIME&&TIME<12)
{
set_zhuangtai(z+1);
}
if(TIME<2)
{
set_zhuangtai(z=2-z);
}
}
else
{
if(--TIME<2)
{
set_zhuangtai(z=4-z);
TIME=2*TIME_MAX1+1;
}
else set_zhuangtai(z);
}
time_to_display(TIME);
}
}
void TIME1() interrupt 3
{
TH1=(65532-2000)/256;
TL1=(65536-2000)%256;
display();
wen=~wen;
}
附件2 总原理图
附件3 元件清单
STC89C52 1个12MHz晶振 1个
自锁开关 1个按键 4个200Ω电阻 6个5.1K电阻 1个10K电阻 1个10K九脚排阻 1个30pF电容 2个0.1μF电容 1个10μF电容 1个LED(红) 3个LED(绿、黄)各2个2位共阳数码管 2个74HC04 1个USB接口 1个。

相关文档
最新文档