基于STC单片机的交通灯实训论文

更新时间:2024-03-30 13:13:01 阅读量: 综合文库 文档下载

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

物理机电学院课程设计报告

课程名称: 单片机课程设计 系 部: 物理与机电工程学院 专业班级: 09 电子信息工程一班 完成时间: 2012、3、13 报告成绩:

评阅意见: 评阅教师 日期

1

目录

摘 要.............................................................................................................................3

引 言.............................................................................................................................4

第一章 设计任务与要求.............................................................................................5

第二章 案论证与论证...............................................................................................5

第三章 硬件电路设计....................................................................................9

第四章 软件设计........................................................................................16

第五章 仿真过程与仿真结果.................................................................................29

第六章 安装于调试..........................................................................................29

第七章 结论与心得...................................................................................................31

第八章 参考文献...................................................................................................32

2

摘要

本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。系统包括左转、右转、以及基本的交通灯的功能。系统除基本交通灯功能外,还具有倒计时、时间设置、以及根据具体情况手动控制等功能。近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。交通信号灯控制方式很多当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口

关键词:单片机; 交通灯;停车;89C51;交叉路口

3

引言

近年来,随着我国国民经济的快速发展,我国机动车辆发展迅速,而城镇道路建设由于历史等各种原因相对滞后,交通拥挤和堵塞现象时常出现。如何让利用当今计算机和自动控制技术,有效地疏通交通,提高城镇交通路口的通行能力,减少交通事故是很值得研究的一个话题。目前,国内的交通灯一般设在十字路口,在醒目位置用红绿黄三种颜色的指示灯再加上一个倒计时的显示计时器来控制行车。我国交通法规也对交通指挥信号灯做出规定:

(1) 绿灯亮时,准行车辆,行人通行,但转弯的车辆不准妨碍执行的车辆和被放行的行人通行。

(2) 黄灯亮时,不准车辆行人通行,但已越过停止线的车辆和已进入人行横道的行人,可以继续通行。

(3) 红灯亮时,不准车辆,行人通行。

(4) 绿色箭头灯亮时,准行车辆按箭头所示方向通行。 (5) 黄灯闪烁时,车辆行人在确保安全的原则下可以通行。

信号灯的出现,使交通得到有效管制,对于疏导交通流量、提高道路通行能力和减少交通事故有明显效果。

4

交通灯实训论文

一、设计任务与要求 1.1 交通灯设计 1.2 设计基本要求

车辆通行繁忙的十字交叉路口,设计一交通灯控制器,设东西方向通行时间为40秒,当剩余3秒时黄灯亮,南北方向通行时间为25秒,当剩余3秒时黄灯亮。

东西、南北方向各用三个(绿、黄、红)LED表示,并用数码管显示东西、南北方向的剩余时间。

可利用按键修改时间参数。

二、方案设计与论证 2.1 总体设计方案

根据十字路口交通灯的要求,可将本系统分为四个模块,第一模块是控制模块,主要负责整个系统的控制和运算,从而使各模块正常工作,第二个模块式显示模块包括led灯和数码管;第三是输入模块,对通行时间进行设置等;第四十电源模块给各模块提供电源,让各模块工作。其系统设计结构如图:

5

(1)RSR/ VPD(9脚):复位信号输入端,高电平有效,当振荡器运行时,在此引脚加上两个机器周期的高电平将使单片机复位(REST)。复位后应使此引脚电平保持为不高于0.5V的低电平,以保证单片机正常工作。

掉电期间,此引脚可接上备用电源(VPD),以保持内部RAM中的数据不丢失。当Vcc下降到低于规定值,而VPD在其规定的电压范围内(5±0.5V)时,VPD就向内部RAM提供备用电源。

(2)ALE/PROG(30脚):ALE为地址锁存允许信号。当单片机访问外部存储器时,ALE(地址锁存允许)输出脉冲的下降沿用于锁存16位地址的低8位。即使不访问外部存储器,ALE端仍有周期性正脉冲输出,其频率为振荡器频率的1/6。但是每当访问外部数据存储器时,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲。ALE端可以驱动8个LSTTL负载。

(3)PSEN(29脚):程序存储器允许输出控制端。此输出为单片内访问外部程序存储器的读选通信号。在从外部程序存储器取指令(或取常数)期间,每个机器周期均PSEN两次有效。但在此期间,每当访问外部数据存储器时,这两次有效的PSEN信号将不会出现。PSEN同样可以驱动8个LSTTL负载。 (4)EA(31脚):EA功能为内外程序存储器选择控制端。当EA端保持高电平时,单片机访问内部程序存储器,但在PC(程序计数器)值超过0FFFH时将自动转向执行外部程序存储器内的程序。 输入/输出引脚

此类引脚包括P0口、P1口、P2口和P3口。

(1)P0(P0.0~P0.7)是一个8位三态双向I/O口,在不访积压处部存储器时,做通用I/O口使用,用于传送CPU的输入/输出数据,当访问外部存储器时,此口为地址总路线低8位及数据总路线分时复用口,可带8个LSTTL负载。 (2)P1(P1.0~P2.7)是一个8位准双向I/O口(作为输入时,口锁存器置1),带有内部上拉电阻,可带4个LSTTL负载。

(3)P2(P2.0~P2.7)是一个8位准双向I/O口,与地址总路线高8位复用,可驱动4个LSTTL负载。

(4)P3(P3.0~P3.7)是一个8位准双向I/O口,除此之外每位还具有第二功能。

11

P3口功能表:

P3口各个位的第二功能 P3口的位 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 第二功能 RXD TXD INT0 INT1 T0 T1 WR RD 说明 串行数据接收口 串行数据发射口 外部中断0输入 外部中断1输入 计数器0计数输入 计数器1计数输入 外部RAM写信号 外部RAM读信号 89C52单片机内部结构图:

12

图2-1单片机8051的内部结构

3.3单片机最小系统

1.时钟电路如图2-3所示

图2-3时钟电路

XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。AT89单片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的

13

稳定性、起振的快速性和温度的稳定性。因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为22μF。在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。 2.复位电路

在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。复位是由外部的复位电路来实现的。片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路。当时钟频率选用6MHz时,C取22μF,Rs约为200Ω,Rk约为1K。复位操作不会对内部RAM有所影响。 常用的复位电路如图2-4所示:

3.LED显示电路

图2-4复位电路图

显示器普遍地用于直观地显示数字系统的运行状态和工作数据,按照材料及产品工艺,单片机应用系统中常用的显示器有: 发光二极管LED显示器、液晶LCD显示器、CRT显示器等。LED显示器是现在最常用的显示器之一,如图2-5所示。

14

图2-5 LED显示器的符号图

发光二极管(LED)由特殊的半导体材料砷化镓、磷砷化镓等制成,可以单独使用,也可以组装成分段式或点阵式LED显示器件(半导体显示器)。分段式显示器(LED数码管)由7条线段围成8字型,每一段包含一个发光二极管。外加正向电压时二极管导通,发出清晰的光。只要按规律控制各发光段亮、灭,就可以显示各种字形或符号。LED数码管有共阳、共阴之分。图是共阳式、共阴式LED数码管的原理图和符号。 4.原理图

15

四、软件设计

4.1 程序流程图

4.2具体程序

16

#include //声明头文件

#define uint unsigned int #define uchar unsigned char sbit red1=P2^0; //定义六个灯分别为P1.0~7

sbit yellow1=P2^1; sbit green1=P2^2; sbit red2=P2^5; sbit yellow2=P2^4; sbit green2=P2^3; sbit key1=P3^0; //模式选择键 sbit key2=P3^1; //数值+ sbit key3=P3^2; //数值- sbit key4=P3^3;

//暂停开始键

uchar aa,qian,bai,shi,ge,bb,shu1,shu2; uint num,key1num,key4num; //定义数组0~9 uchar code table[]={

0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90}; //延时函数z毫秒

17

void delay(uint z)

{ uint x,y; for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

//初始化函数 void init() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1;

ET0=1; TR0=1;

num=40;

qian=num/10; bai=num; red1=1;

yellow1=1; green1=0;

green2=1;

//设置定时器T0为工作方式1

//赋初值

//开总中断

//开定时器

//数码管初始显示40

//起始状态为南北绿灯,东西红灯

18

yellow2=1; red2=0;

bb=1; key1num=0; //key4num=0;

shu1=40;

//南北通行时间初始为40s,东西通行

时间初始为25s shu2=25;

}

//数码管显示函数

void display(uchar qian,uchar bai) { P0=table[bai]; delay(1);

P1=table[qian]; delay(1);

}

//键盘扫描函数

19

void keyscan() {

if(key1==0) {

delay(10); if(key1==0) {

key1num++; if(key1num==4) { }

key1num=1;

//消抖

while(!key1); if(key1num==2)

//按下第一次进入设置南北通行时间

模式

{

TR0=0; num=40; qian=num/10;

bai=num;

display(qian,bai); green1=0;

20

yellow1=0; red1=0; green2=1; yellow2=1; red2=0;

}

if(key1num==1)

模式 { TR0=0; num=25;

qian=num/10;

bai=num; display(qian,bai); //key1num=0;

green1=0;

yellow1=0; red1=1; green2=1; yellow2=0; red2=0;

}

//按下第二次进入设置东西通行时间

21

}

}

if(key1num!=0) {

if(key2==0) {

delay(10);

//当key1键被按下

if(key2==0) {

num--; qian=num/10;

//按下key2键调整南北通行时间

bai=num;

display(qian,bai); shu1=num; if(shu1==0) {

shu1=40; num=shu1; qian=num/10;

//将设置后的时间赋给shu1

bai=num;

display(qian,bai);

22

}

}

while(!key2);

}

if(key3==0) { delay(10);

if(key3==0) 时间 { num--;

qian=num/10;

bai=num; display(qian,bai); shu2=num; if(shu2==0) { shu2=25; num=shu2;

qian=num/10;

bai=num;

//按下key3键设置东西通行

//将设置后的值赋给shu2

23

display(qian,bai);

}

}

while(!key3); }

}

/*if(key4==0) { delay(10); if(key4==0) { key4num++; while(!key4); if(key4num==1) { TR0=1;

}

if(key4num==2) { TR0=0; key4num=0;

}

24

}

}*/

if(key1num==3) { TR0=1;

} }

//主函数 void main() { init(); while(1) { display(qian,bai); keyscan();

}

}

//定时器中断函数 void timer0() interrupt 1 {

25

TH0=(65536-50000)/256; TL0=(65536-50000)%6; aa++; if(aa==20)

//重赋初值

//定时到达1S

{ aa=0; num--; qian=num/10; bai=num; display(qian,bai); if(bb==1) { if(num==3)

{ red1=1;

西红灯 yellow1=0; green1=1; green2=1; yellow2=0; red2=1;

}

//起始状态为南北绿灯,东

26

if(num==0) {

red1=0;

//起始状态为南北绿灯,东

西红灯 yellow1=1; green1=1; green2=0; yellow2=1; red2=1; num=shu2;

qian=num/10;

bai=num; display(qian,bai); bb++;

}

} if(bb==2) { if(num==3)

{ red1=1;

西红灯

yellow1=0;

//起始状态为南北绿灯,东

27

green1=1; green2=1; yellow2=0; red2=1;

}

if(num==0) { num=shu1;

qian=num/10; bai=num; display(qian,bai);

red1=1;

东西红灯 yellow1=1; green1=0; green2=1; yellow2=1; red2=0; bb=1;

}

}

//起始状态为南北绿灯,

28

}

}

五、仿真过程与仿真结果

根据要求,仿真结果应该包括:情况一,南北方向绿灯亮40秒,此时东西方向的红灯亮40秒(南北方向通车)。情况二,南北方向路灯亮黄灯5秒,此时东西方向继续亮红灯(南北方向通车,黄色警告)。情况三,南北方向亮红灯,东西方向亮绿灯(东西方向通车)。情况四,南北方向亮红灯,东西方向亮黄灯5秒(东西方向通车),然后继续重复此过程。下图是其中一种仿真结果,由图可知此电路图是可行的。

六、安装与调试

6.1硬件调试

系统的硬件调试一般分下面三个步骤:

第一步:目测,检查外部的各种元件或者电路是否有断点。

第二步:用万用表检测,先用万用表复核目测中有疑问的连接点,在检测各种电源线与地线之间是否有短路现象。

第三步:加电检测,给板加电,检测所有插座或者器件的电源是否符合要求

29

的值。

(1).倒计时显示电路调试

给硬件电路接上电源,这时数码管全灭,用一根导线的一端与地线相连,另一端一次碰触AT89C51的P0和P1口,一边碰触一边察看七段数码管,正常情况下可以看到每碰触一个引脚,对应的一段数码管点亮。若不亮,仔细查看与该脚相连的电阻及数码管是否虚焊。 (2).交通灯电路的调试

需要说明的是,由于整个设计是用发光二极管来代替交通灯,需要低电平“0”来驱动点亮,在实际应用中,应使P1口输出高电平“1”来驱动继电器导通,从而使220V的交通灯点亮。这是试验与实际应用比较容易混淆的地方,应该引起注意。同时,在进行交通灯调试应注意LED1-LED6这6个发光二极管不能焊反。 (3).紧急通行电路调试

仔细检查S1、S2、S3、S4四个按键是否焊牢,并且四个键是否与相应的I/O口对应准确。

6.2 软件调试

(1).静态调试

静态调试是指对程序进行人工书面检查。静态调试时要仔细阅读程序及其文档,经过结构分析、功能分析、逻辑分析、接口分析、语法分析以及逐行检查。 a、 检查语法错误

产生语法错误的原因主要有两个:一是键入错误,此错误如同写文章时的“笔误”;二是由于对语法规则不熟悉,见书后错误信息、各种限制、全局变量与局部变量、先后左右的原则等,这些虽不是系统规定,但也是语法的一部分,应作为专项予以检查。 b、 跟踪过程

此时的跟踪程序流程,即把自己当作计算机。给定一组输入数据后,顺序执行每条语句,考察所得结果,寻找错误。 (2).动态调试

动态调试是指实际上机运行程序进行调试。源程序上机运行,语言系统及操作系统会在程序有故障时给出信息,常见的故障分为以下几种情况:

30

a、没有通过编译。 b、没有通过连接编译。

c、程序的运行过程因故障而停止。

d、程序只输出部分结果。对这部分结果进行分析,可大致了解程序被执行的逻辑,或程序在什么地方中断。 e、程序执行了很长时间没结果。 (3)PCB图如下

七、结论与心得

课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在一星期的日子里,可以说是苦多于甜,但是可以学到

31

很多很多的的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中可以说是困难重重,同时在设计的过程中也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说在画PCB图时对单片机最小系统不够了解导致我画的图中出现了晶振与单片机的连接不够合理、这样就可能因为干扰而无法起振;在制版时由于转印过程中没调好比例造成与元器件不能吻合,所以只能重新转印;在焊接时有些元器件没有按照要求摆放,不够合理;对用C语言编程也掌握不好等等。

虽然遇到很多问题,不过还是顺利完成了这次设计,通过这次设计,我对单片机有了进一步的理解,这将为我期末的电子系统设计做好铺垫。同时,也要感谢老师和同学们对我的指点和帮助。

八、参考文献

[1] 李海滨.片春媛.许瑞雪编.《单片机技术课程设计与项目实例》,中国电力出版社,2009

[2] 王静霞主编.《单片机应用技术》.电子工业出版社,2009

[3] 雄建云主编.《Protel99 se EDA技术及应用》.北京机械工业出版社,2007 [4] 曹天汉主编.《单片机原理与接口技术》,电子工业出版社,2009 [5] 何立民主编.《单片机高等教程》.北京航空航天大学出版社,2000

[6] 何立民主编.《单片机应用系统设计系统配置与接口技术》,北京航空航天大学出版社,2001

32

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

Top