单片机交通灯设计报告.docx

上传人:b****7 文档编号:8805359 上传时间:2023-02-01 格式:DOCX 页数:22 大小:220.82KB
下载 相关 举报
单片机交通灯设计报告.docx_第1页
第1页 / 共22页
单片机交通灯设计报告.docx_第2页
第2页 / 共22页
单片机交通灯设计报告.docx_第3页
第3页 / 共22页
单片机交通灯设计报告.docx_第4页
第4页 / 共22页
单片机交通灯设计报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

单片机交通灯设计报告.docx

《单片机交通灯设计报告.docx》由会员分享,可在线阅读,更多相关《单片机交通灯设计报告.docx(22页珍藏版)》请在冰豆网上搜索。

单片机交通灯设计报告.docx

单片机交通灯设计报告

《单片机技术及应用》课程设计任务书

课题名称

交通灯控制系统设计

设计内容及要求

1、课题内容:

以单片机为核心,设计一个简单交通灯控制系统,设A车道与B车道交叉组成十字路口,A是主道,B是支道。

设计要求如下:

(1)用发光二极管模拟交通信号灯、两个方向分别设置红、绿、黄3种通行指示灯,用按键开关模拟车辆检测信号。

(2)正常情况下,A、B两车道轮流放行,A车道放行40秒,其中5秒用于警告,B车道放行25秒,其中5秒用于警告。

有计时牌显示路口通行转换剩余时间。

(3)在交通繁忙时,交通信号灯控制系统应有手控开关,可人为地改变信号灯的状态,以缓解交通拥挤状况。

在B车道放行期间,若A车道有车而B车道无车,按下开关K1使A车道放行15秒;在A车道放行期间,若B车道有车而A车道无车,按下开关K2使B车道放行15秒。

(4)有特种车辆如119、120通过路口时,系统可转为特种车辆放行,其他车辆禁止通行的状态,15s后系统恢复正常管理。

(5)两个方向放行的时间可以通过键盘设置。

设计工作量

1、汇编或C51语言程序设计;

2、程序调试,在Proteus上进行仿真;

3、提交一份完整的课程设计说明书,包括封面,中文摘要,目录,正文(正文主要包括:

设计原理、程序设计、程序分析、仿真分析、调试过程,调试结果等部分),参考文献、设计总结等。

进度安排

起止日期(或时间量)

设计内容(或预期目标)

备注

第一天

课题介绍,答疑,收集材料,C51介绍

第二天

设计方案论证,练习编写C51程序

第三天~第六天

程序设计

第六天~第八天

程序调试、仿真

第九天~第十天

系统测试并编写设计说明书

教研室

意见

 

年月日

系(部)主管领导意见

 

年月日

目录

1设计任务和性能指标1

1.1设计任务1

1.2性能指标1

2设计方案2

2.1任务分析2

2.2方案设计2

3系统硬件设计3

3.1单片机的最小系统3

3.2数码管显示时间电路设计4

3.3信号灯控制电路设计5

4系统软件设计5

4.1主程序设计5

5调试及性能分析6

5.1调试分析6

5.2软件调试7

5.3系统功能调试8

6心得体会9

参考文献10

附录1系统仿真图11

附录2程序清单12

1设计任务和性能指标

1.1设计任务

利用单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。

用红、绿、黄发光二极管作信号灯。

如图上图所示。

设东西向为主干道,南北为支干道。

1.2性能指标

(1)处于常允许通行的状态,支干道有车来时才允许通行。

主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。

(2)干道均有车时,两者交替允许通行,主干道每次放行40秒,支干道每次放行30秒,设立40秒、30秒计时、显示电路。

(3)绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。

黄灯亮时,原红灯按1Hz的频率闪烁。

(4)支干道通行时间及黄灯亮的时间均可在0~99秒内任意设置。

2设计方案

2.1任务分析

模拟交通灯控制器就是使用单片机来控制一些LED和数码管,模拟真实交通灯的功能。

红、黄、绿交替闪亮,利用数码管倒计数显示间隔等,用于管理十字路口的车辆及行人交通,计时牌显示路口通行转换剩余时间等

2.2方案设计

根据设计的要求可知,系统的硬件原理框图如下图所示。

系统硬件框图

单片机可选用AT89C51,它与8051系列单片机全兼容,但其内部带有4KB的FLASHROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。

南北向和东西向各采用2个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。

键盘系统可以根据系统的需要设置不同的键的个数,可以选择线式键盘或矩阵式键盘,若单片机的IO口不够用时,可以考虑扩展8255或8155满足系统的要求。

2.软件方案

根据设计要求,程序框图如图1所示。

软件可由汇编语言完成,也可由C语言完成。

软件设计可以分为以下几个功能模块:

主程序:

初始化及键盘监控。

计时程序模块:

为定时器的中断服务子程序,完成0.1秒(或其他时间)和1秒的时间定时。

显示程序模块:

完成60个发光二极管(实际上只需驱动30个)和8个LED数码管的显示驱动。

程序流程图

3系统硬件设计

3.1单片机的最小系统

ATMEL公司生产的AT89C52单片机它是硬件电路的核心部分,时钟电路晶振使用12MHz,复位电路采取按键复位方式。

具体连接图3.1

3.3数码管显示电路

显示电路采用8个共阴数码管,P0口作为数码管的输入,P2.1、P2.2、P2.5、P2.6分别作为东西南北四路数码管的位选端。

数码管显示电路

3.4信号灯控制电路

由P1口输出个灯的状态。

4系统软件设计

原程序

1、交通灯C语言程序

功能:

第一个状态:

主干道、支干道均亮红灯5S

第二个状态:

主干道亮绿灯35S、支干道亮红灯

第三个状态:

主干道绿灯闪3次转亮黄灯、支干道亮红灯S5

第四个状态:

主干道亮红灯、支干道亮绿灯20S

第五个状态:

主干道亮红灯、支干道绿灯闪3次转亮黄灯5S

返回到第二个状态

/****************************************************************#include/*对单片机的口进行了定义********/

#defineucharunsignedchar/*定义字符串类型为无符号型*/

ucharcodea[10]={0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,0x80,0x90};/*段码组合,P0口,低有效*/

ucharcodeb[4]={0x01,0x02,0x04,0x08};/****P2口,低有效*/

ucharcodec[5]={0x09,0x13,0x24,0x32,0x21};/****P0口.低有效*/

charSN=40,WE=35;/*SN表示南北方向--主干道,WE表示东西方向--支干道*/

charSN_G=35,WE_G=20,Y=5;/*SN_G表示南北方向的绿灯,WE_G表示东西方向的绿灯,Y表示黄灯*/

uchari,k=0,count=0,J;/*定义无符号字符串变量*/

voiddelay(uchart);/*定义函数*/

voidlight();/*定义函数*/

voidled();/*定义函数*/

voidledthrough();/*定义函数*/

voidleddrive();/*定义函数*/

sbitK0=P3^7;/*开关K0接P3^7管脚*/

sbitK1=P3^6;/*开关K1接P3^6管脚*/

sbitK2=P3^3;/*开关K2接P3^3管脚*/

sbitK3=P3^5;/*开关K3接P3^5管脚*/

sbitK4=P3^2;/*开关K4接P3^2管脚*/

/*程序初始化*/

voidinit(void)

{

/*12MHz*/

TMOD=0x01;/**计数器用模式1,为16位计数器*****/

TH1=(65536-50000)/256;/*0x3C*/

TL1=(65536-50000)%256;/*0xB0*//*计50000个数,用时50ms*/

IT0=1;/*外部中断为低电平触发方式*/

ET0=1;/*允许T0中断*/

TR0=1;/*启动计数器*/

EA=1;/*CPU开放总中断*/

EX0=1;/*允许外部中断0中断,即允许响应端口P3^2(K4)中断*/

EX1=1;/*允许外部中断1中断,即允许响应端口P3^3(K2)中断*/

}

/*中断0处理程序*/

voidint0(void)interrupt0

{

EA=0;/*CPU禁止响应一切中断*/

P1=0x21;/*东西南北方向均红灯亮*/

TR0=!

TR0;/*计数器停止工作*/

for(;;)/*无条件循环*/

{

ledthrough();/*调用通行时间显示函数*/

/*设置南北方向通行时间*/

if(K0==0)/*P3^7=0*/

{

delay(10);/*延时,把抖动的时间抛掉*/

if(K0==0)

{

while(!

K0)/*当松开K0开关时,跳出循环,执行后面的程序*/

{

ledthrough();/*调用通行时间显示函数*/

}

SN_G++;/*南北方向绿灯时间+1*/

if((SN_G+Y)==100)/*南北方向通行时间(绿灯加黄灯时间)为100s*/

SN_G=1;/*由于使用的是两位数码管,当南北方向通行时间加到100后绿灯时间归1*/

}

}

/*设置东西方向通行时间*/

if(K1==0)/*P3^6=0*/

{

delay(10);/*延时,把抖动的时间抛掉*/

if(K1==0)

{

while(!

K1)/*当松开K1开关时,跳出循环,执行后面的程序*/

{

ledthrough();/*调用通行时间显示函数*/

}

WE_G++;/*东西方向绿灯时间+1*/

if((WE_G+Y)==100)/*东西方向通行时间(绿灯加黄灯时间)为100s*/

WE_G=1;/*由于使用的是两位数码管,当东西方向通行时间加到100后绿灯时间归1*/

}}

/*返回*/

if(K3==0)/*P3^5=0*/

{

delay(10);/*延时,把抖动的时间抛掉*/

if(K3==0)

{

while(!

K3)/*当松开K3开关时,跳出循环,执行后面的程序*/

{

ledthrough();/*调用通行时间显示函数*/

}

TR0=!

TR0;/*启动计数器*/

EA=1;/*CPU开放总中断*/

break;/*跳出*/

}

}

}

}

/*中断1处理程序*/

voidint1(void)interrupt2

{

SN=15;

WE=15;

led();

k=4;

light();

}

/*键盘程序*/

voidkey()

{

/*南北有车而东西无车*/

if(K0==0)/*K0=0*/

{

delay(10);/*延时,把抖动的时间抛掉*/

if(K0==0)

{

while(!

K0)/*当松开K0开关时,跳出循环,执行后面的程序*/

{

light();/*调用交通灯函数*/

led();/*调用数码管函数*/

}

count=0;/*清零*/

k=0;/*南北方向通车,东西方向不通车*/

SN=SN_G-25,WE=SN_G+Y-25;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/

}

}

/*南北无车而东西有车*/

if(K1==0)/*K1=0*/

{

delay(10);/*延时,把抖动的时间抛掉*/

if(K1==0)

{

while(!

K1)/*当松开K1开关时,跳出循环,执行后面的程序*/

{

light();/*调用交通灯函数*/

led();/*调用数码管函数*/

}

count=0;/*清零*/

k=2;/*南北方向不通车,东西方向通车*/

SN=WE_G+Y-10,WE=WE_G-10;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东西方向显示时间为东西方向绿灯通行时间*/

}

}

}

/*定时函数0*/

voidtime0(void)interrupt1

{

TH1=0x3c;

TL1=0xb0;/*计50000个数,用时50ms*/

count++;/*自增运算*/

if(count>=20)/*当count大于或等于20时,历时1s,执行程序*/

{

SN--;/*自减运算*/

WE--;/*自减运算*/

count=0;/*清零*/

if(SN==0||WE==0)/*当SN=0或者WE=0时,执行程序*/

{

k++;/*自增运算*/

if(k>3)/*当k>3时,执行程序*/

k=0;/*清零*/

switch(k)/*switch语句*/

{

case0:

SN=SN_G,WE=SN_G+Y;break;/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/

case1:

SN=Y,WE=Y;break;/*东西南北方向显示时间均为黄灯闪亮时间*/

case2:

SN=WE_G+Y,WE=WE_G;break;/*南北方向显示时间为东西方向绿灯通行时间加黄灯闪亮时间,东西方向显示时间为东西方向绿灯通行时间*/

case3:

SN=Y,WE=Y;break;/*东西南北方向显示时间均为黄灯闪亮时间*/

}

}

}

}

/*延时t毫秒*/

voiddelay(uchart)

{

uchari;/*定义无符号字符常量*/

for(t;t>0;t--)/*执行t次循环*/

{

for(i=2000;i>0;i--)/*由于时钟脉冲是12MHz,执行2000次循环的时间为1ms*/

{

}

}

}

/*交通灯函数*/

voidlight()

{

P1=c[k];/*交通灯对应着k的值变化*/

if(P1==c[1]&&count==0)/*当南北方向亮黄灯且count=0时,执行程序*/

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;/*延时50ms*/

P1=0x13;/*南北方向黄灯熄灭,东西方向亮红灯*/

}

else

if(P1==c[3]&&count==0)/*当东西方向亮黄灯且count=0时,执行程序*/

{

TH1=(65536-500000)/256;

TL1=(65536-500000)%256;/*延时50ms*/

P1=0x32;/*南北方向亮红灯,东西方向黄灯熄灭*/

}

}

/*数码管函数*/

voidled()

{

P2=b[0],P0=a[SN%10];/*显示南北方向个位*/

delay(5);/*延时*/

P2=b[1],P0=a[SN/10];/*显示南北方向十位*/

delay(5);/*延时*/

P2=b[2],P0=a[WE%10];/*显示东西方向个位*/

delay(5);/*延时*/

P2=b[3],P0=a[WE/10];/*显示东西方向十位*/

delay(5);/*延时*/

}

/*通行时间显示函数*/

voidledthrough()

{

P2=b[0],P0=a[(SN_G+Y)%10];/*南北方向数码管显示可通行时间的个位*/

delay(5);/*延时*/

P2=b[1],P0=a[(SN_G+Y)/10];/*南北方向数码管显示可通行时间的十位*/

delay(5);/*延时*/

P2=b[2],P0=a[(WE_G+Y)%10];/*东西方向数码管显示可通行时间的个位*/

delay(5);/*延时*/

P2=b[3],P0=a[(WE_G+Y)/10];/*东西方向数码管显示可通行时间的十位*/

delay(5);/*延时*/

}

/*数码管驱动函数*/

voidleddrive()

{

P2=b[0];/*显示南北方向个位*/

delay(5);/*延时*/

P2=b[1];/*显示南北方向十位*/

delay(5);/*延时*/

P2=b[2];/*显示东西方向个位*/

delay(5);/*延时*/

P2=b[3];/*显示东西方向十位*/

delay(5);/*延时*/

}

/*主函数*/

voidmain(void)

{

init();/*调用程序初始化函数*/

for(;;)/*无条件循环*/

{

key();/*调用键盘程序*/

light();/*调用交通灯函数*/

led();/*调用数码管函数*/

}

}

 

主程序设计

系统程序流程图系统仿真图

 

5调试及性能分析

1软件调试

软件调试主要是利用proteus仿真软件完成电路的搭建,运行以发现设计中的错误及时改正。

2系统功能调试

通过软件仿真显示,系统基本能完成要求,由于设计思路出现问题,键盘没有正确的做出来,没有键盘电路,紧急情况也可以通过一个按钮来采取相关的动作。

6心得体会

这次课程设计让我认识到学的知识在现实中是很有用的;由于这两周有几个很重要的考试,所以在课程设计上话的时间不够,再加上混遍学的不怎么样只能用c语言写程序了.(程序只是更改了一下网上下的,有点惭愧呀,虽然我正在学java…

;这此课程设计更加坚定了我学编程的信念,我相信自己一定可以学好它!

参考文献

[1]徐维祥.单片微型机原理及应用大连理工大学出版社,2006.12

[2]胡汉才.单片机原理与接口技术[M].北京:

清华大学大学出版社,2004.1-505.

[3]闫胜利.AltiumDesigner6.X中文版使用教程 电子工业出版社 2007.6

[4] 李朝青.单片机原理及接口技术(简明修订版).杭州:

北京航空航天大学出版社,1998

[5] 李广弟.单片机基础[M].北京:

北京航空航天大学出版社,1994

[6] 阎石.数字电子技术基础(第三版).北京:

高等教育出版社,1989

[7] 廖常初.现场总线概述[J].电工技术,1999.

[8]曾屹.单片机原理与应用.中南大学出版社,2009

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1