当前位置:文档之家› 带数字显示的交通灯

带数字显示的交通灯

4.2
根据此次课程设计的题目,我实现了课设上面的所有要求,可以自行进行支线干线红绿灯闪烁,也可以进行数码管倒计时工作,最终结果如下图4.1,图4.2,图4.3和图4.4展示。
图4.1支线绿灯运行图
图4.2支线黄灯等待图
图4.3干线绿灯运行图
图4.4干线绿灯闪烁图
参考文献
[1]王为青,51单片机应用开发案例精选.人民邮电出版社,2007
2
2
本课设主要分为2个模块。第一个模块是支线干线数码管显示模块,用于倒计时支线和干线等待时间;第二个模块是支线干线交通灯变化模块,此模块用于展示支线和干线红绿黄灯的交替变化情况。系统模块图如图2.1所示。
图2.1系统模块图
2.2
硬件环境:伟福LAB8000;
软件环境:Keiμvision
3
3.
交通灯控制器实例主要使用了8051单片机的定时器/计数器,基础知识主要包括交通灯的变化规律、定时器/计数器的概念、定时器/计数器的相关寄存器、定时器/计数器的工作方式。8051单片机内有两个可编程的定时器/计数器T0、T1。当定时器/计数器用作“定时器”时,每经过1个机器周期(12个时钟周期),计数器加1。当定时器/计数器用作“计数器”时,计数器在对应的外部输入管脚(T0为P3.4引脚,T1为P3.5引脚)上每发生一次1到0的跳变时加1。使用“计数器”功能时,外部输入每个机器周期被采样一次。当某一周期管脚状态采样为高电平而下一周期采样为低电平时,计数器加1。由于检测下降沿跳变需要两个机器周期(24个时钟周期)的时间,所以技术频率最大值只能为时钟周期的1/24。计数器对外部输入信号的占空比并无限制,但为了保证给定的电平信号在其改变之前至少被采样一次,外部输入信号必须至少保持一个完整的机器周期。
}
//第5、6数码管显示支线时间
void display_60s()
{
uchar shi,ge;
shi=gantime/10;
ge=gantime%10;
BITSET=0x10;
SEGSET=table[ge]; //5号数码管显示个位
delay(1);
BITSET=0x20;
SEGSET=table[shi]; //6号数码管显示十位
(3)撰写课程设计报告。
1
图1.1原理分析图
根据实际交通灯的变化情况和规律。假设一个十字路口如上图1.1所示,为主线干线。初始状态1支线绿灯通车,干线红灯亮。过一段时间后,转状态2,支线绿灯闪3下,黄灯亮1s,干线红灯变绿灯。再转状态3,干线绿灯通车,支线红灯亮。过一段时间后转状态4,干线绿灯闪3下,黄灯亮1s,支线红灯变绿灯,然后又循环至状态1。对于交通信号灯来说,应该有东西南北共四组灯,但由于同一道上的两组的信号灯的显示情况是相同的,而且实验箱上并没有那么多灯,所以我们只用6个信号灯,采用单片机内部的I/O口上的P1口中的6个引脚来控制6个信号灯。通过编写程序,实现对发光二极管的控制,来模拟交通信号灯的管理。每延时一段时间,灯的显示情况都会按交通灯的显示规律进行状态转换。通过延时时间送显,可以在原有的交通信号灯系统的基础上,增添其倒计时间的显示功能,实现其功能的扩展。
图3.2主程序流程图
支线和干线交通灯显示是本次课设的重要部分,由于支线干线的交通灯变化相同,这里,我们已支线变化情况为例描述,干线与其相同。首先,当支线启动的时候,我们需要把干线停止,即ganred=1,当支线时间大于4的时候,支线可以通行,即zhigreen=1,当支线时间小于等于4且大于1的时候,需要进行绿灯闪烁,共三秒,每1s闪一次,当支线时间小于等于1的时候,需要亮支线黄灯,即zhiyellow=1,此时支线黄灯亮1s,当时间用完时,支线黄灯灭,干线红灯灭,即ganred=0,zhiyellow=0,具体流程图如下图3.3所示。
这个设计过程中,我遇到过许多次失败的考验,就比如,自己对实际生活中的交通秩序的不了解给整个设计带来的困扰,在老师的讲解下,我明白了交通灯的变化规律。这个设计我是用C语言编写的,由于本身对C语言的掌握程度比较高,所以在编写过程中问题不是很多,在进行绿灯闪烁的时候遇到了一些困难,但在查看资料后解决了这一难题。从这次课程设计中,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。
for(i=0;i<50;i++);
}
void init()
{
P1=0X00;
TMOD=0X11; //定时器0的工作方式1
TH0=0X3C; //初值50ms
TL0=0XB0;
TH1=0X3C; //初值50ms
TL1=0=1; //开定时器中断0
ET1=1; //开定时器中断1
[6]丁元杰.单片机原理与应用.机械工业出版社,2007

#include<reg51.h>
#define SEGSET (*(unsigned char xdata *)0x08004)
#define BITSET (*(unsigned char xdata *)0x08002)
typedef unsigned int uint;
sbit zhired=P1^7;sbit zhiyellow=P1^6;sbit zhigreen=P1^5;
sbit ganred=P1^4;sbit ganyellow=P1^3;sbit gangreen=P1^2;
void delay(uchar n)
{
uchar i,j;
for(j=0;j<n;j++)
LED的选择上面,数量上我们需要红、黄、绿三种不同颜色的灯光各两个。器件选择上,一般情况下,大家常见的LED灯就可以满足要求,单片机也可以直接驱动其正常工作。
图3.1硬件电路图
根据图3.1的连接可以看出,两对数码管分别显示支线和干线等待时间,六盏灯分别显示支线和干线灯的变化情况。
3.
采用C语言对单片机程序进行设计。主函数部分,程序进入主程序后先通过flag为0或1来判断是需要调用支线函数还是干线函数,当flag=0时,令zhitime=30,然后调用支线数码管显示函数和支线交通灯变化函数,之后将flag赋值为1以便进行干线函数,此时需要令gantime=60,然后调用干线数码管显示函数和干线交通灯变化函数,之后令flag=0以便进行支线函数,flag为0和1交替循环,主函数流程图如下图3.2所示。
delay(1);
}
//第1、2数码管显示干线时间
void display_30s()
{
uchar shi,ge;
shi=zhitime/10;
ge=zhitime%10;
BITSET=0x01;
SEGSET=table[ge]; //1号数码管显示个位
delay(1);
BITSET=0x02;
SEGSET=table[shi];//2号数码管显示十位
{
display_60s();
ganline_light();
}
flag = 0;
}
}
}
void Time0() interrupt 1
{
TH0=0X3C;
TL0=0XB0;
zhiline++;
if(zhiline==20)
{
zhiline=0;
zhitime--;
}
}
void Time1() interrupt 3
{
TH1=0X3C;
TL1=0XB0;
ganline++;
if(ganline==20)
{
ganline=0;
gantime--;
}
}
图3.4交通灯变化程序流程图
4
4.1
在一开始,我对于课设的思路不是很明确,对于交通灯变化情况有一些模糊,最初的设计是绿灯亮完之后直接亮红灯,并没有绿灯的闪烁3下和黄灯的亮1s,对于绿灯如何在1s内闪一下共闪3下的问题,我遇到了很多困难,最终采用ganline和zhiline两个变量成功计出了1s内闪烁1下。
1.1
1.课程设计内容
利用南京伟福公司的LAB8000来开发单片机实现带数字显示的交通灯。具体要求内容如下:
(1)能够控制干线和支线红灯、绿灯、黄灯亮暗闪烁的变化情况。
(2)能够设计出在其变化期间的数码管计时情况,并用两个数码管分别表示支线和干线等待时间。
2.课程设计要求
(1)认真查阅相关资料;
(2)独立设计、调试并通过指导教师现场验收;
[2]戴仙金. 51单片机及其C语言程序开发实例[M].北京:清华大学出版社,2011
[3]张义和.例说51单片机:C语言版{M}.北京:人民邮电出版社,2010
[4]楼然苗.李广飞.51系列单片机设计实例.北京:北京航空航天大学出版社,2003
[5]伟福Lab8000系列单片机仿真实验系统 使用说明书[M]. 南京伟福实业有限公司,2015
课程设计总结:
回顾起此次单片机课程设计,我感慨颇多,学到了很多的东西。不仅巩固了以前所学过的知识,而且还学到了很多在书本上所没有学到过的知识。在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
{
gangreen=0;
if(ganline/10%2==0)
相关主题