单片机十字路口交通灯控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计说明书
题目十字路口交通灯控制
班级
姓名
学号
指导老师
时间2015.1.26-2015.30
目录
摘要 (3)
第一章引言 (4)
1.1项目名称 (4)
1.2目的和任务 (4)
1.3要求 (4)
第二章设计方案 (5)
2.1总体设计方案分析 (5)
2.2硬件原理图 (5)
第三章框图 (7)
3.1总体设计模式图 (7)
3.2程序流程图 (7)
第四章程序说明 (9)
第五章总结与体会 (13)
摘要
自从1858年英国人,发明了原始的机械扳手交通灯之后,随后的一百多年里,交通灯改变了交通路况,也在人们日常生活中占据了重要地位,随着人们社会活动日益增加,经济发展,汽车数量急剧增加,城市道路日渐拥挤,交通灯更加显示出了它的功能,使得交通得到有效管制,对于交通疏导,提高道路导通能力,减少交通事故有显著的效果。

近年来,随着科技的飞速发展,电子器件也随之广泛应用,其中单片机也不断深入人民的生活当中。

本模拟交通灯系统利用单片机AT89C52作为核心元件,实现了通过信号灯对路面状况的智能控制。

从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。

系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广泛的应用前景。

本模拟系统由单片机硬/软件系统,两位8段数码管和LED
灯显示系统。

和复位电路控制电路等组成,较好的模拟了交通路面的控制。

一.引言
1.1项目名称:
十字路口交通灯控制
1.2目的和任务:
(1)掌握单片机的结构、指令系统、单片机拓展方法和接口技术。

(2)提高综合运用所学的理论知识独立分析和解决实际问题的能力。

(3)掌握C51汇编语言程序设计及调试方法。

(4)掌握单片机应用系统的设计思想。

1.3要求:
用单片机控制LED灯模拟指示。

模拟东西方向的十字路口交通灯控制情况。

东西向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。

二.设计方案
2.1总体设计方案分析
(1)利用定时器T0产生每10ms一次的中断,每100次中断为1s;
(2)对两个方向分别显示红、绿、黄灯的剩余时间即可;
(3)用MAX7219芯片实现共阴极显示驱动;
(4)A方向的红灯时间=方向的绿灯时间+黄灯缓冲时间。

2.2硬件原理图:
三、框图
3.1总体设计模式图
3.2程序流程图
四、程序说明
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit nbr=P2^0;//南北红
sbit nby=P2^1;//南北黄
sbit nbg=P2^2;//南北绿
sbit dxr=P2^3;//东西红
sbit dxy=P2^4;//东西黄
sbit dxg=P2^5;//东西绿
sbit LSA=P1^0;
sbit LSB=P1^1;
sbit LSC=P1^2;
sbit LSD=P1^3;
uint8 smgduan[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F}; //段码
uint8 smgwei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管位选是低电平有效
uint16 sec;
uint8 s[4];
void init0() //定时器0初始化函数
{
TMOD=0x01;
TH0=0xfc;
TL0=0x18; //定时1ms
TR0=1;
ET0=1;
EA=1;
}
void display()
{
unsigned char i;
unsigned int j;
for(i=0;i<4;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=1;LSC=1;LSD=1; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=1;LSD=1; break;//显示第1位
case(2):
LSA=1;LSB=1;LSC=0;LSD=1; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=1;LSD=0; break;//显示第3位
}
P0=~s[i];//发送段码
j=200; //扫描间隔时间设定
while(j--);
P0=~0x00;//消隐
}
}
void main()
{
init0(); //定时器0初始化
P0=0x00; //关闭所有小灯
while(1)
{
if(sec<80) //南北红灯和东西绿灯亮80秒
{
nbr=0;
if(sec<77)
dxg=0;
s[0]=smgduan[(80-sec)/10];
s[1]=smgduan[(80-sec)%10];
display();
}
if(sec>=80&&sec<=83) //南北红灯和东西黄灯亮3秒{
nbr=0;
dxg=1;
s[0]=smgduan[(83-sec)/10];
s[1]=smgduan[(83-sec)%10];
display();
}
if(sec>83&&sec<143) //南北绿灯和东西红灯亮60秒{
if(sec<140)
nbg=0;
dxr=0;
nbr=1;
dxy=1;
s[2]=smgduan[(143-sec)/10];
s[3]=smgduan[(143-sec)%10];
display();
}
if(sec>=143&&sec<=146) //南北黄灯和东西红灯亮3秒{
dxr=0;
nbg=1;
s[2]=smgduan[(146-sec)/10];
s[3]=smgduan[(146-sec)%10];
display();
}
if(sec>146) /大于146秒后清零
{
sec=0;
nby=1;
dxr=1;
P0=0x00;
}
}
}
void time0() interrupt 1
{
static uint16 sum=0,sm=0;
TH0=0xfc;
TL0=0x18; //定时1ms
sum++;
sm++;
if(sm==200)
{
sm=0;
if(sec>=77&&sec<80) //东西绿灯闪烁3秒
{
dxg=~dxg;
}
if(sec>=80&&sec<83)//东西黄灯闪烁3秒
{
dxy=~dxy;
}
if(sec>=140&&sec<143) //南北绿灯闪烁3秒
{
nbg=~nbg;
}
if(sec>=143&&sec<147) //南北黄灯闪烁3秒{
nby=~nby;
}
}
if(sum==1000)//定时时间1秒
{
sum=0; //清零
sec++; //秒加1
}
}
五.总结与体会
一周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。

这次是我认为最有意义的一次课程设计,从原理图设计到软件仿真,我从中收获了许多。

设计刚开始时,我就在学校中门仔细观察路口交通灯,经过研究思考最终得到了上述的交通灯状态转换表。

对于交通灯这个题目,由于以前学单片机这个课程时,做过类似相关的实验,觉得这个比较简单而且做出的东西也比较直观,在确定题目之后,查阅了大量的资料,初步完成了电路设计方案。

我选择了用c语言进行编程,在编写倒计时显示遇到了困难,因为不了解芯片MAX7219的显示原理。

通过查阅资料,克服了困难,很有成就感。

在整个程序的编写过程中,研究每个子程序是否好使,我是通过Keil 和proteus两个软件来实现的。

Keil 则帮助我检查程序是否存在语法错误之类的问题,还可以生成hex文件,供proteus软件仿真使用。

通过几天的编写,程序最终无误并且在仿真中实现了预定的功能。

相关文档
最新文档