HPU单片机课程设计

更新时间:2024-05-06 01:23:01 阅读量: 综合文库 文档下载

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

河南理工大学

《微机原理与单片机接口技术》课程设计

交通灯课程设计报告

姓 名: XXXX 学 号:XXXXXXXX 专业班级:XXXXX 指导老师:王 新 所在学院:电气工程与自动化学院

2016年 3月 12日

2 河南理工大学本科课程设计报告

摘要

交通是城市经济活动的命脉,对城市经济发展、人民生活水平的提高起着十 分重要的作用。城市交通问题是困扰城市发展、制约城市经济建设的重要因素。 城市道路增长的有限与车辆增加的无限这一对矛盾是导致城市交通拥挤的根本原因。城市街道网络上的交通容量的不断增加,表明车辆对道路容量的要求仍然很高,短期内还不可能改变。自从开始使用计算机控制系统后,不管在控制硬件里取得什么样的实际进展,交通控制领域的控制逻辑方面始终没能取得重大突破。 本设计是利用STC89C51,晶振,数码管,按键等元件,制作一个简易的程序控制的交通灯, 实现对南北东西路口的倒计时控制,本系统实现了通过P2口设置红、绿灯点亮时间的功能。红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示。经测试,系统达到课程设计的基本要求,具有计周期短、可靠性高、实用性强、操作简单、维护方便、扩展功能强等优点。

根据STC89C51单片机的特点及交通灯在实际控制中的特点,本文提出一种用单片机自动控制交通灯及时间显示的方法。同时给出了软硬件设计方法,设计过程包括硬件电路设计和程序设计两大步骤,对在单片机应用中可能遇到的重要设计问题都有涉足。本文对十字路口状态预设为三种,一种是正常状态,一种是紧急状态,另一种是方程式状态。增设路段遇忙调整时方程式控制状态和紧急情况处理模块,通过手动控制开关按钮A0和A1方便系统在正常状态和紧急状态、方程式控制间来回切换,进一步完善了交通灯控制系统。并分别用红、黄、绿灯的不同组合来指挥两个方向通车与禁行,用LED数码管作为倒计时指示,实时的控制当前交通灯时间使LED显示器进行倒计时工作并与状态灯保持同步,在保持交通安全的同时最大限度的提高交通能顺畅交替运行。本文介绍了控制基本原理以及控制的表现,同时,论述了系统中交通现状、交通管理、交通规则及背景信息。

2

3 河南理工大学本科课程设计报告

目录

概述??????????????????????????????

1设计要求与方案选择

1.1设计要求?????????????????????????

1.2方案选择?????????????????????????

2理论分析与设计

2.1交通灯控制系统的总电路的分析与设计????????????

2.2单片机交通控制系统的基本构成及原理设计?????????? 3系统总体方案及硬件设计

3.1总原理图电路设计????????????????????? 3.2最小系统电路设计????????????????????? 3.3按键电路设计??????????????????????? 3.4数码管显示电路设计???????????????????? 3.5红绿灯显示电路设计????????????????????

4 软件设计

4.1程序流程设计???????????????????????? 4.2程序设计??????????????????????????

5 Proteus软件仿真

6课程设计体会

参考文献

附1:源程序代码 附2:系统原理图

3

4 河南理工大学本科课程设计报告

概述

1设计要求与方案选择 1.1设计要求

基本要求:

扩展部分:

完成交通灯的基本功能。

(1)交通灯的时间可以设定(及绿灯、红灯时间的长短)。 (2)具有应急情况。

1.2方案选择

方案一:PLC控制交通灯

PLC主要应用于强电方面的工业控制,或者整条流水线的控制。虽然比较稳

定,但是功耗要大,成本也比较高。

方案二:单片机控制交通灯

单片机具有结构简单、编程方便、经济、易于连接等优点,特别是其内部定时器计数器、中断系统资源丰富可对交通灯进行精确的控制,有应用价值,可扩展功能多,灵活性比较强,线路也非常简单,成本也是比较低的。

由于此次课程设计是单片机设计,还有结合从各方面优缺点来看,以及简便方面,成本方面,和结构、控制方面来看。为了同时满足课程设计要求,综上所述,选择了方案二,做为本设计的方案选择。

4

5 河南理工大学本科课程设计报告

2理论分析与设计

2.1交通灯控制系统的总电路的分析与设计

交通灯系统由5个部分构成,分别是最小系统电路,按键电路,流量控制电路,数码管显示电路,红绿灯显示电路。这几个部分电路结合起来就是一个完整的交通灯系统电路。

通过具体的路口交通灯状态的演示分析我们可以把这四个状态归纳如下: 东西方向红灯灭,同时绿灯亮,南北方向黄灯灭,同时红灯亮,倒计时20秒。此状态下,东西向禁止通行,南北向允许通行。

东西方向绿灯灭,同时黄灯亮,南北方向红灯亮,倒计时5秒。此状态下,除了已经正在通行中的其他所以车辆都需等待状态转换。

南北方向红灯灭,同时绿灯亮,东西方向黄灯灭,同时红灯亮,倒计时20秒。此状态下,东西向允许通行,南北向禁止通行。

南北方向绿灯灭,同时黄灯亮,东西方向红灯亮,倒计时5秒。此状态下,除了已经正在通行中的其他所以车辆都需等待状态转换。

东西南北四个路口均有红绿黄3灯和数码显示管2个,在任一个路口,遇红灯禁止通行,转绿灯允许通行,之后黄灯亮警告行止状态将变换。状态及红绿灯状态如表1所示。说明:0表示灭,1表示亮。

本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示,通行时间调整和紧急处理,对车流量进行监控,并显示出来,以及清除流量数据等功能。 (1)倒计时显示

倒计时显示可以提醒驾驶员在信号灯灯色发生改变的时间、在“停止”和“通过”两者间作出合适的选择。驾驶员和行人普遍都愿意选择有倒计时显示的信号控制方式,并且认为有倒计时显示的路口更安全。倒计时显示是用来减少驾驶员在信号灯色改变的关键时刻做出复杂判断的1种方法,它可以提醒驾驶员灯色发生改变的时间,帮助驾驶员在“停止”和“通过”两者间作出合适的选择 。 (2)时间的设置

本设计中可通过按键对时间进行手动设置,增加了人为的可控性,避免自动故障和意外发生,并再紧急状态下,可设置所有灯变为红灯,同时数码管暂停。 (3)紧急处理

交通路口出现紧急状况在所难免,如特大事件发生,救护车等急行车通过等,

5

6 河南理工大学本科课程设计报告

我们必须尽量允许其畅通无阻,毕竟在这种情况下是分秒必争的,时时刻刻关系着公共财产安全,个人生死攸关等。由此在交通控制中增设禁停按键,就可达到想此目的。

2.2单片机交通控制系统的基本构成及原理设计

单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,当然,接入数码管就可以显示倒计时以提醒行使者,更具人性化。本系统在此基础上,加入了紧急情况处理与时间调整功能。单片机交通控制系统的基本构成及原理设计,系统的总体框图如下图2-2所示:

图2-2系统的总框图

据此,本设计系统以单片机为控制核心,连接成最小系统,由按键设置模块产生输入,信号灯状态模块,数码管倒计时模块模块接受输出。系统的总体框图如上图2-2所示。

单片机上电后,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到数码管上实时显示。在此过程中随时调用急停按键和时间

单片机 控制系统 6

7 河南理工大学本科课程设计报告

调节中断。当复位键按下的时候交通灯控制系统重新开始。 3系统总体方案及硬件设计 3.1总原理图电路设计

STC89C51芯片介绍如下:

单片机以体积小、功能全、性价比等诸多优点而独具特色,在工业控制、尖端武器、通信设备、家用电器等嵌入式应用领域中独占鳌头。如果说C语言程序设计课程设计的基础课,那么单片机以其系统硬件构架完整、价格低廉、学生能动手等特点,成为工科学生硬件设计基础课。

8051单片机包含中央处理器(CPU)、程序存储器(ROM)、数据存储器(RAM) 、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: (1)中央处理器(CPU)

中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8 位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 (2)数据存储器(RAM)

8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一 编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。 (3)程序存储器(内部ROM)

程序存储器用于存放程序和固定不变的常数等。通常采用只读存储器,且其又多种类型,在89系列单片机中全部采用闪存。STC89C51内部配置了4KB闪存。定时/计数器用于实现定时和计数功能。STC89C5共有2个16位定时/计数器。

(4)并行输入输出(I/O)口

8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。每个口都由1个锁存器和一个驱动器组成。它们主要用于实现与外部设备中数据的并行输入与输出,有些I/O口还有其他功能。 (5)全双工串行口

8951内置一个全双工串行通信口,用于与其它设备间的串行数据传送,

7

8 河南理工大学本科课程设计报告

该串行口既可以用作异步通信收发器,也可以当同步移位器使用。 (6)时钟电路

时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。

(7)中断系统

中断系统的作用主要是对外部或内部的终端请求进行管理与处理。STC89C5共有5个中断源,其中又2个外部中断源和3个内部中断源。 (8)定时/计数器

8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。 3.2最小系统电路设计

单片机最小系统的设计,由晶振电路和复位电路构成,晶振电路,采用12M的晶振和2个30p的电容组成,复位电路由,1k电阻,4.7k电阻和22u电容和一个按键构成。电路图如下图3-3所示:

图3-3

3.3按键电路设计

本设计设计了多个按键,其中包括有调节红绿灯时间加减按键,应急按键和调节设置按键,车流量清零按键,流量显示关闭并锁存按键。这几个部分组成。 3.4数码管显示电路设计

数码管显示电路,通过P0口和P2口的控制输出,其中P0口要加多上拉电阻才能使用,由于其内部无上拉电阻,作为I/O用时候要加上拉电阻。P0口作为显示倒计时的输出端口控制2个2位的数码管,其中还需要用到P3.7,P3.6,P3.5,P3.4来进行控制位选。J2是东西显示数码管,J5是南北显示数码管,REDCC是流量显示数码管,P2口接流量显示

8

9 河南理工大学本科课程设计报告

数据。

3.5红绿灯显示电路设计

红绿灯电路设计主要是由12盏灯进行控制,东西6转盏灯,南北6盏灯,分别由单片机的6个I/O进行控制。

4.1程序流程设计

全部控制程序实际上分为若干模块:按键设置处理程序,状态灯控制程序,LED显示程序紧停程序,中断服务子程序,红绿灯时间调整程序等。

整个软件程序方面主要分两大部分:主程序部分和中断处理程序。该智能交通灯控制系统的软件设计采用的是顺序执行并反复循环的方法。智能交通灯控制系统在正常工作的情况下,每20s(时间可以自行设定)循环变化一次。每个循环周期在还剩5s时,正在通行路口的黄灯同时点亮并开始闪烁,以提醒路人上的行人及车辆,交通灯即将发生变化。在此期间若中断按键按下则转入中断服务子程序进行相关操作。

9

10 河南理工大学本科课程设计报告

4.2程序设计 延时函数

void Delay5ms()

{ unsigned char i, j; i = 54; j = 199;

do

程序流程图 10

11 河南理工大学本科课程设计报告

{ while (--j);

} while (--i);}

void delays(uint t) { uint i,j; for(i=t;i>0;i--)

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

}

数码管显示函数 void show() { d=(m+n); f=(2*m+n); g=(2*m+2*n); if(b=0) { P0=wei[0]; P1=tab[(m-b)];

delays(15); P0=wei[1];

P1=tab[(m-b)0/10];

delays(10); P0=wei[2];

P1=tab[(m-b)00/100];

delays(10); P0=wei[3];

P1=tab[(m-b)/1000]; delays(10); }

if(b=m) { P0=wei[0]; P1=tab[(d-b)];

delays(15);

11

12 河南理工大学本科课程设计报告

P0=wei[1];

P1=tab[(d-b)0/10];

delays(10);

P0=wei[2];

P1=tab[(d-b)00/100];

delays(10); P0=wei[3];

P1=tab[(d-b)/1000]; delays(10); }

if(b=d) { P0=wei[0]; P1=tab[(f-b)];

delays(10); P0=wei[1];

P1=tab[(f-b)0/10];

delays(10); P0=wei[2];

P1=tab[(f-b)00/100];

delays(10); P0=wei[3];

P1=tab[(f-b)/1000]; delays(10); }

if(b=f) { P0=wei[0]; P1=tab[(g-b)];

delays(10); P0=wei[1];

P1=tab[(g-b)0/10]; 12

13 河南理工大学本科课程设计报告

delays(10);

P0=wei[2];

P1=tab[(g-b)00/100];

delays(10);

P0=wei[2];

P1=tab[(g-b)/1000];

delays(10);}}

二极管显示

void led_show() { dl=1;xl=1;nl=1;bl=1; dh=1;xh=1;nh=1;bh=1; dy=1;xy=1;ny=1;by=1; d=(m+n); f=(2*m+n); g=(2*m+2*n); if(b=0) //东西通 { dl=0;xl=0;nl=1;bl=1; dh=1;xh=1;nh=0;bh=0; dy=1;xy=1;ny=1;by=1;

}

if(b=m) //黄

{ dl=1;xl=1;nl=1;bl=1; dh=1;xh=1;nh=1;bh=1; dy=0;xy=0;ny=0;by=0;

}

if(b=d) //南北通 { dl=1;xl=1;nl=0;bl=0; dh=0;xh=0;nh=1;bh=1; dy=1;xy=1;ny=1;by=1;

}

13

14 河南理工大学本科课程设计报告

if(b=f) { } b=0;

}

dl=1;xl=1;nl=1;bl=1; dh=1;xh=1;nh=1;bh=1; dy=0;xy=0;ny=0;by=0;

//黄

if(b==g)

中断,确定b的数值,并送给数码管显示

void timer0() interrupt 1 { }

TH0=(65536-45872)/256; TL0=(65536-45872)%6; a++; if(k==1) { if(a==20) { } } if(k!=1) { } key();

if(a==20) a=0; b++; a=0;

5软件仿真

14

15 河南理工大学本科课程设计报告

6课程设计体会

单片机作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。这次单片机课程设计我们虽然只有短短机星期,但是经过这段时间的实践和坚持不懈,我还是克服了种种困难,最终完成了交通灯的单片机控制系统。现在想来,觉得学校安排的课程设计有着它更深层的意义——通过课程设计让我们综合了学过的理论知识来运用到设计和创新之中,增强了自己的动手和实践能力,提高了自己独立思考的能力,为将来继续学习和工作打下了基础

15

16 河南理工大学本科课程设计报告

参考文献

[1] 李华,王思明.单片机原理及应用.兰州:兰州大学出版社,2001.5 [2] 陈宁.单片机技术项目教程. 南京:南京东南大学出版社,2008.4 [3] 何立民.单片机高级教程.北京:北京航空航天大学出版社, 2000

[4] 余发山,王福忠,杨凌霄,王莉.微机原理与单片机接口技术.北京:煤炭工业出版社,2013

16

17 河南理工大学本科课程设计报告

附1 源程序代码

#include

#define uint unsigned int #define uchar unsigned char

uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f}; //共阴型 uchar wei[]={0xf7,0xfb,0xfd,0xfe}; //位选 void led_show(); uint m=30,n=5; uint a=0; uint b=0;

uchar k,w,c,d,f,g; sbit ko1=P3^6; sbit ko2=P3^7; sbit ki1=P0^5; sbit ki2=P0^6; sbit ki3=P0^7; sbit dh=P2^6; sbit dl=P3^2; sbit dy=P2^7; sbit xh=P2^0; sbit xl=P2^2; sbit xy=P2^1; sbit nh=P3^3; sbit nl=P3^5; sbit ny=P3^4; sbit bh=P2^3; sbit bl=P2^5; sbit by=P2^4;

void Delay5ms() {

unsigned char i, j; i = 54; j = 199; do {

while (--j);

//@11.0592MHz 17

18 河南理工大学本科课程设计报告

} while (--i);

}

void delays(uint t) {

uint i,j;

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

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

void show() { d=(m+n); f=(2*m+n); g=(2*m+2*n);

if(b=0) {

P0=wei[0];

P1=tab[(m-b)]; delays(15); P0=wei[1];

P1=tab[(m-b)0/10]; delays(10); P0=wei[2];

P1=tab[(m-b)00/100]; delays(10); P0=wei[3];

P1=tab[(m-b)/1000]; delays(10);

}

if(b=m) {

P0=wei[0];

P1=tab[(d-b)]; delays(15); P0=wei[1];

P1=tab[(d-b)0/10];

delays(10);

18

19 河南理工大学本科课程设计报告

P0=wei[2];

P1=tab[(d-b)00/100]; delays(10); P0=wei[3];

P1=tab[(d-b)/1000]; delays(10); }

if(b=d) {

P0=wei[0];

P1=tab[(f-b)]; delays(10); P0=wei[1];

P1=tab[(f-b)0/10];

delays(10); P0=wei[2];

P1=tab[(f-b)00/100]; delays(10); P1=tab[(f-b)/1000]; delays(10); }

if(b=f) {

P0=wei[0];

P1=tab[(g-b)]; delays(10); P0=wei[1];

P1=tab[(g-b)0/10]; delays(10);

P1=tab[(g-b)00/100]; delays(10); P0=wei[2];

P1=tab[(g-b)/1000]; delays(10);

19

P0=wei[3];

P0=wei[2];

20 河南理工大学本科课程设计报告

}

}

void keys(uchar r) {

if(r==2) // 调m {

delays(10); if(r==2) m++;

delays(10); while(r!=2); }

if(r==3) { delays(10); if(r==3) m--;

delays(10); while(r!=3); } if(r==5) // 调n { delays(10); if(r==5) n++;

delays(10); while(r!=5); } if(r==6) { delays(10); if(r==6) n--;

delays(10);

while(r!=6);}} uchar key() {

20

21 河南理工大学本科课程设计报告

uchar temp; P0=0xe0; P3=0xbf; temp=P0;

temp=temp&0xe0; if(temp!=0xe0) {

Delay5ms(); temp=P0;

temp=temp&0xe0; if(temp!=0xe0)

{

temp=P0; switch(temp)

{

case 0xc0:k=1;break; case 0xa0:k=2;break; case 0x60:k=3;break; }

while(temp!=0xe0)

{

temp=P0;

temp=temp&0xe0; } }

keys(k); }

P0=0xe0; P3=0x7f; temp=P0; temp=temp&0xe0; if(temp!=0xe0) {

Delay5ms(); temp=P0;

temp=temp&0xe0; if(temp!=0xe0) {

21

22 河南理工大学本科课程设计报告

temp=P0;

switch(temp) {

case 0xc0:k=4;break; case 0xa0:k=5;break; case 0x60:k=6;break; }

while(temp!=0xe0) {

temp=P0;

temp=temp&0xe0;

} }

keys(k);

}

return k; }

void timer0() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%6; a++; if(k==1) {if(a==20)

{ b++;a=0;}} if(k!=1) {if(a==20) a=0;} key();}

void led_show() {

dl=1;xl=1;nl=1;bl=1; dh=1;xh=1;nh=1;bh=1; dy=1;xy=1;ny=1;by=1; d=(m+n); f=(2*m+n);

g=(2*m+2*n);

22

23 河南理工大学本科课程设计报告

if(b=0) //东西通

{

dl=0;xl=0;nl=1;bl=1; dh=1;xh=1;nh=0;bh=0; dy=1;xy=1;ny=1;by=1; }

if(b=m) //黄 {

dl=1;xl=1;nl=1;bl=1; dh=1;xh=1;nh=1;bh=1; dy=0;xy=0;ny=0;by=0; }

if(b=d) {

//南北通

dl=1;xl=1;nl=0;bl=0; dh=0;xh=0;nh=1;bh=1; dy=1;xy=1;ny=1;by=1; }

if(b=f) //黄 {

dl=1;xl=1;nl=1;bl=1; dh=1;xh=1;nh=1;bh=1; dy=0;xy=0;ny=0;by=0; }

if(b==g) b=0;} void main() {

P1M1=0x00; P1M0=0xff;

TMOD=0x01;

TH0=(65536-45872)/256; TL0=(65536-45872)%6; EA=1; ET0=1; TR0=1; while(k!=1) { key();

P0=wei[0];

23

24 河南理工大学本科课程设计报告

P1=tab[m]; delays(10); P0=wei[1]; P1=tab[m/10]; delays(10); P0=wei[2]; P1=tab[n]; delays(10); P0=wei[3]; P1=tab[n/10];

delays(10);}

while(1) {

if(k==1) {

show(); led_show(); }

if(k==4) {

dl=1;xl=1;nl=1;bl=1; dh=0;xh=0;nh=0;bh=0; dy=1;xy=1;ny=1;by=1;

}}}

24

25 河南理工大学本科课程设计报告

附2 系统原理图

25

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

Top