单片机课程设计 交通灯.docx
《单片机课程设计 交通灯.docx》由会员分享,可在线阅读,更多相关《单片机课程设计 交通灯.docx(14页珍藏版)》请在冰豆网上搜索。
单片机课程设计交通灯
单片机课程设计
交
通
灯
控
制
系
统
学生:
学号:
指导老师:
成绩:
引言
交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为核心器件来使用,以实现各项功能。
本设计就是采用AT89S52单片机为中心器件来设计交通灯控制器,实现了智能控制功能。
1引言
2设计任务及总体方案
2.1设计任务及要求
2.2总体方案介绍
3硬件系统的设计
3.1AT89S52简介
3.2时钟电路
3.3复位电路
3.4LED数码管显示模块
3.5红绿灯显示模块
4软件系统的设计
4.1软件设计分析
4.2程序流程图
4.3系统程序
5设计总结
6参考文献
7附录
7.1附录一:
系统程序
7.2附录二:
系统原理图
7.3附录三:
元器件清单
2设计任务及总体方案
2.1设计任务及要求
利用单片机的定时器产生秒信号,控制十字路口的红绿黄灯交替点亮和熄灭,并且用4只LED数码管显示十字路口两个方向的剩余时间。
具体设计要求如下。
十字交叉路口的交通灯控制系统的结构如图1.1所示。
往南和往北的信号一致,即红灯(绿灯或黄灯)同时亮或同时熄灭。
用两个数码管来显示被点亮的指示灯还将点亮多久。
往东和往西方向的信号一致,其工作方式与南北方向一样,也采用两个数码管来倒计时。
当南北方向为绿灯和黄灯时,东西向的红灯点亮禁止通行;而东西方向为绿灯和黄灯时,南北向的红灯点亮禁止通行。
假设南北方向为主干道,通行时间为40秒,东西方向是次干道,通行时间为40秒,黄灯点亮的时间均为5秒,则其工作方式如下表所示循环点亮信号灯。
交通信号灯工作模式
南北向
绿灯亮40秒
黄灯亮5秒
红灯亮45秒
东西向
红灯亮45秒
绿灯亮40秒
黄灯亮5秒
2.2总体方案介绍:
本系统电路由单片机AT89S52、复位电路、时钟电路、数码管显示电路以及发光二级管显示电路构成,逻辑框图如下图所示。
各相应组成部分提供定时信号,使得相应的发光二极管和数码管显示。
3硬件系统的设计
3.1AT89S52简介
AT89S52单片机是一种低功耗、高性能CMOS8位微控制器。
它具有以下主要标准功能:
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的振荡电容,构成始终电路。
3.3复位电路
本设计用RC元件构成外部复位电路,因为RC时间常数应大于两个机器周期,所以电容选取10uf,电阻选取10K复位方式有两种:
上电复位和按钮复位。
本设计采用按钮复位方式。
3.4LED数码管显示模块
本设计中LED数码管显示模块电路如下图所示,其中D0、D1数码管显示南北向时间,D2、D3数码管显示东西向时间。
本设计所用LED数码管显示器是共阴极8段式数码管,其内部8段发光二极管的阴极端连接在一起,阳极端分开控制,使用时公共端接地,因此,点亮发光二极管,只需给对应的阳极端送高电平。
给数码管的各个引脚输入不同的8位二进制编码,可显示不同的数字或字符,这种二进制编码称为字段码。
本设计所用共阴极数码管的字段码如下图所示。
显示字符的共阴极字段码
显示字符
共阴极字段码
0
3FH
1
06H
2
5BH
3
4FH
4
66H
5
6DH
6
7DH
7
07H
8
7FH
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段发光二极管的阴极端连接在一起,阳极端分开控制,使用时公共端接地,要使哪根发光二极管点亮,则对应得阳极端接高电平。
由P1口控制,输入对应字段码,显示对应的发光二极管。
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程序流程图
4.3系统程序
系统程序见附录
5设计总结
6参考文献
1.谢维成,杨加国.单片机原理与应用及C51程序设计.北京:
清华大学出版社,2003
2.李建忠.单片机原理及应用.西安:
西安电子科技大学出版社,2002
3.谭浩强.C语言设计(第2版).北京:
清华大学出版社。
1999
4.严天峰.单片机应用系统设计与仿真调试.北京:
北京航空航天大学出版社,2005
5.张齐等.单片机应用系统设计——基于C语言编程.北京:
电子工业出版社,2004
6.赵亮,侯国锐.单片机C语言编程与实例.北京:
人民邮电出版社,2003
7附录
7.1附录一:
系统程序
#include
#include
#defineucharunsignedchar
voiddelay_1ms(uchart)
voidscan(void)
voidscan_led(uchark)
voidscan_led40(void)
voidscan_led5(ucharx)
charcodeLED_7[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共阴极LED数码管的字段码
charcodescan_con[4]={0x01,0x02,0x04,0x08};//4个LED数码管的位选码
voiddelay_1ms(uchart)//1ms延时程序
{
uchari,j;
for(i=0;ifor(j=0;j=120;j++)
;
}
voidscan_led(uchark)//数码管显示倒计时
{
P2=scan_con[0];
P0=LED_7[k/10];
delay_1ms
(1);
P2=scan_con[1];
P0=LED_7[k%10];
delay_1ms
(1);
P2=scan_con[2];
P0=LED_7[k/10];
delay_1ms
(1);
P2=scan_con[3];
P0=LED_7[k%10];
delay_1ms
(1);
}
voidscan_led40()
{
ucharm,n;
for(m=40;m>0;m--)
{
for(n=0;n<1000;n++)
{
scan_led(m);
}
}
}
voidscan_led5(ucharx)
{
uchary;
for(y=0;y<500;y++)
{
scan_led(x);
}
}
voidscan()//显示程序
{
uchari,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;
scan_led5(j);
}
}
voidmain()
{
P0=0x00;//初始化
P1=0x00;
P2=0x00;
while
(1)
{
scan();//显示程序
}
}
7.2附录二:
系统原理图
7.3附录三:
元器件清单
序号
元件名
数量
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