交通等控制系统(C语言)

更新时间:2024-04-24 05:49:01 阅读量: 综合文库 文档下载

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

单片机课程设计

设计内容:基于单片机的交通控制系统

系 别:机械工程学院 班 级: 学生姓名:

学 号: 指导老师: 成 绩:

2012年5月

引言

交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频

繁,这点更是体现的淋漓尽致。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为核心器件来使用,以实现各项功能。

本设计就是采用AT89S52单片机为中心器件来设计交通灯控制器,实现了智能控制功能。

1

2 设计任务及总体方案

2.1 设计任务及要求

利用单片机的定时器产生秒信号,控制十字路口的红绿黄灯交替点亮和熄

灭,并且用4只LED数码管显示十字路口两个方向的剩余时间。具体设计要求如下。

十字交叉路口的交通灯控制系统的

2

结构如图1.1所示。

往南和往北的信号一致,即红灯(绿灯或黄灯)同时亮或同时熄灭。用两个

数码管来显示被点亮的指示灯还将点亮多久。往东和往西方向的信号一致,其工作方式与南北方向一样,也采用两个数码管来倒计时。当南北方向为绿灯和黄灯时,东西向的红灯点亮禁止通行;而东西方向为绿灯和黄灯时,南北向的红灯点亮禁止通行。

假设南北方向为主干道,通行时间为40秒,东西方向是次干道,通行时间

为40秒,黄灯点亮的时间均为5秒,则其工作方式如下表所示循环点亮信号灯。

交通信号灯工作模式 南北向 绿灯亮40秒 东西向 红灯亮45秒 绿灯亮40秒 2.2 总体方案介绍:

本系统电路由单片机AT89S52、复位电路、时钟电路、数码管显示电路以及发光二级管显示电路构成,逻辑框图如下图所示。

黄灯亮5秒 红灯亮45秒 黄灯亮5秒 复位电路 单 片 发光二极管时钟电路 机 数码管显示

3

各相应组成部分提供定时信号,使得相应的发光二极管和数码管显示。

3 硬件系统的设计

3.1 AT89S52简介

AT89S52单片机是一种低功耗、高性能CMOS 8位微控制器。它具有以下主要标准功能: 8KB可重复编成的Flash存储器, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,8个中断向量源,全双工串行口。它采用单一+5V电源。

其I/O口分别为P0、P1、P2和P3,其中P0

口作通用I/O接口时必须接上上拉电阻;P1口是准双向口,只能作通用I/O接口使用;P2口可作

通用I/O接口和高8位地址线;P3口不仅可作准双向I/O接口使用,而且每一根线都具有第二功能。本设计中,只用了P0、P1和P2口,它们都作通用I/O口使用。

3.2 时钟电路

如图所示,本设计采用内部时钟产生方式,在XTAL1和XTAL2两端跨接12Mhz的石英晶振和两个30pF的振荡电容,构成始终电路。

4

3.3 复位电路

本设计用RC元件构成外部复位电路,因为RC时间常数应大于两个机器周期,所以电容选取10uf,电阻选取1k和200欧姆。复位方式有两种:上电复位和按钮复位。本设计采用按钮复位方式,电路图如右图所示。

3.4 LED数码管显示模块

本设计中LED数码管显示模块电路如下图所示,其中D0、D1数码管显示南北向时间,D2、D3数码管显示东西向时间。

5

本设计所用LED数码管显示器是共阴极8段式数码管,其内部8段发光二极管的阴极端连接在一起,阳极端分开控制,使用时公共端接地,因此,点亮发光二极管,只需给对应的阳极端送高电平。给数码管的各个引脚输入不同的8位二进制编码,可显示不同的数字或字符,这种二进制编码称为字段码。本设计所用共阴极数码管的字段码如下图所示。

显示字符的共阴极字段码

显示字符 0 1 2 3 4 5 6 7 8 共阴极字段码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6

9 6FH

LED数码管在显示时,通常有静态显示方式和动态显示方式两种。

静态显示结构简单,操作方便,要显示某个数字,直接在I/O线上发送相对

应的字段码,但是一个数码管就需要8根I/O线,而本系统中数码管数量较多,需要占用的I/O线很多;动态显示所用的I/O接口信号线少,线路简单,因此本系统选用动态显示方式。四个数码管的段选线并接在一起通过P0口控制,它们的公共端不直接接地,每个数码管的公共端分别与一根I/O口项链,通过P2口控制。动态显示的工作原理是4个数码管轮流显示相应的数字,一次循环完毕后,下一次循环又这样轮流显示,由于人的视觉暂留效应,循环的周期太快,只有几十微秒,所以看起来所有的数码管是一起显示的。并在P0口接7407芯片,起到缓冲的作用,使得系统更加稳定。

3.5 红绿灯显示模块

本系统红绿灯显示电路如图所示。其中R1、Y1、G1分别表示南北红、黄、

绿灯,R2、Y2、G2 分别表示东西红、黄、绿灯。

本系统采用共阴极结构发光二极管,6段发光二极管的阴极端连接在一起,阳极

7

端分开控制,使用时公共端接地,要使哪根发光二极管点亮,则对应得阳极端接高电平。由P1口控制,输入对应字段码,显示对应的发光二极管。 3.6 系统电路图

系统电路图见附录二。

4 软件系统的设计

4.1 软件设计分析

为了增加程序的可读性,理清程序的编写思路,程序采用模块化结构,本系统按以下几个模块编写程序:

① 主程序模块: 初始化程序,RAM清零,子程序的调用。

② 延时子程序模块:产生1ms延时信号,循环调用1000次完成1秒钟延时,循环调用500次完成0.5秒定时。

③ 显示子程序模块:为12位LED动态显示提供驱动信号。P0口和P2口为数码管提供驱动信号,P0口送出段选码,P2口为位选码。

P1口输出字段码控制红绿灯亮灭:南北绿灯亮,东西红灯亮时

P1=001100B=0CH,同时数码管从40倒计时到00;南北黄灯闪烁,东西红灯亮,亮0.5S,P1=001010B=0AH,灭0.5S,P1=001000B=08H,同时数码管从05倒计时到00;南北红灯亮,东西绿灯亮时P1=100001B=21H,同时数码管从40倒计时到00;南北红灯亮,东西黄灯闪烁,亮0.5S,P1=010001B=11H,灭0.5S, P1=000001B=01H。

4.2 程序流程图

8

开始 程序初始化 南北绿灯亮,东西红灯亮,数码管显示时间,40s倒计南北黄灯闪烁,东西红灯亮,数码管显示时间,5s倒计时 南北红灯亮,东西绿灯亮,数码管显示时间,40s倒计南北红灯亮,东西黄灯闪烁,数码管显示时间,5s倒计时

4.3 系统程序 系统程序见附录

9

5 设计总结

为期十周的单片机课程设计已经接近尾声,这次的课程设计与以往的课程设

计安排有些不同,将时间分散到每周,而不像以往的集中在两周做,这样提高了课程设计的难度,也考验了我们的能力。在设计过程中,遇到了许多问题,在老师的指导下,以及靠查询图书馆资料克服了种种困难,最终顺利完成了设计。总体来说,这次的课程设计使我受益匪浅。

在设计过程中,遇到了许多问题。在开始的时候,设计硬件电路图,需要用

Protel软件,这个软件虽然以前接触过,但是用的很是不熟,尤其是在新建库文件的时候,但是在老师的指导下,我基本掌握了Protel的基本制图技巧。在做完硬件电路的基础上,我开始编制程序,我采用的是模块化编程方式,然后调用各子程序。由于以前学习理论知识的时候是学的用汇编语言编程,而这次课程设

10

计要求使用C语言编程,所以在编程的时候遇到了一些问题。在编制定时程序的时候,由于我对定时器这一块掌握的不是很透彻,因此选用延时程序代替定时程序,又因为延时程序不如定时器来得准,会有些误差,所以我用Keil软件内部调试方法,改变所赋初值,使得定时误差降到很小很小。诸如此类,小问题很多,但是最终都被克服。

通过这次的课程设计,我掌握了基本的C语言编程方法,也掌握了Protel

基本制图技巧和Keil软件的调试操作,这次课程设计,收获很大!最后,感谢老师十周以来的指导!

11

6 参考文献

1.谢维成,杨加国.单片机原理与应用及C51程序设计.北京:清华大学出版社,2003

2.李建忠.单片机原理及应用.西安:西安电子科技大学出版社,2002 3.谭浩强.C语言设计(第2版).北京:清华大学出版社。1999

4.严天峰.单片机应用系统设计与仿真调试.北京:北京航空航天大学出版社,2005

5.张齐等.单片机应用系统设计——基于C语言编程.北京:电子工业出版社,2004 6.赵亮,侯国锐.单片机C语言编程与实例.北京:人民邮电出版社,2003

12

7 附录

7.1 附录一:系统程序 #include #include

#define uchar unsigned char void delay_1ms(uchar t) void scan(void) void scan_led(uchar k)

13

void scan_led40(void) void scan_led5(uchar x) charcode

LED_7[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共阴极LED数码管的字段码

char code scan_con[4]={0x01,0x02,0x04,0x08};//4个LED数码管的位选码void delay_1ms(uchar t) //1ms延时程序

{ uchar i,j; for(i=0;i

;

}

void scan_led(uchar k) //数码管显示倒计时 { P2=scan_con[0]; P0=LED_7[k/10]; delay_1ms(1); P2=scan_con[1]; P0=LED_7[k]; delay_1ms(1);

P2=scan_con[2]; 14

P0=LED_7[k/10]; delay_1ms(1); P2=scan_con[3]; P0=LED_7[k]; delay_1ms(1);

}

void scan_led40() { uchar m,n; for(m=40;m>0;m--) { for(n=0;n<1000;n++) { scan_led(m);

}

}

}

void scan_led5(uchar x) { uchar y;

for(y=0;y<500;y++)

{

15

scan_led(x);

}

}

void scan() //显示程序

{ uchar i,j;

P1=0x0c; //南北绿灯亮,东西红灯亮 scan_led40();

for(i=5;i>0;i--) //南北黄灯闪烁,东西红灯亮 { P1=0x0a;

scan_led5(i); P1=0x08; scan_led5(i);

}

P1=0x21; //南北红灯亮,东西绿灯亮 scan_led40();

for(j=5;j>0;j--) //南北红灯亮,东西黄灯闪烁 { P1=0x11;

scan_led5(j);

P1=0x01;

16

scan_led5(j);

}

}

void main() { P0=0x00; //初始化 P1=0x00; P2=0x00; while(1) {

scan(); //显示程序

}

}

7.2附录二:系统原理图

17

7.3 附录三:元器件清单

18

序号 元件名 数量 1 AT89S52单片机 1 2 12Mhz晶振 1 3 30pf电容 2 4 10uf电解电容 1 5 按键 1 6 10k电阻 2 7 1k电阻 6 8 470电阻 8 9 发光二极管 6 10 7407芯片 1 11 8段共阴极LED数码管 4

19

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

Top