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

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

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

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

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

 

年月日

系(部)主管领导意见

目录

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<

reg51.h>

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

#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开关时,跳出循环,执行后面的程序*/

}

SN_G++;

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

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

SN_G=1;

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

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

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

if(K1==0)

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

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

WE_G++;

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

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

WE_G=1;

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

}}

/*返回*/

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

if(K3==0)

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

TR0=!

/*启动计数器*/

/*CPU开放总中断*/

break;

/*跳出*/

}

/*中断1处理程序*/

voidint1(void)interrupt2

SN=15;

WE=15;

led();

k=4;

light();

/*键盘程序*/

voidkey()

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

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

if(K0==0)

/*调用交通灯函数*/

/*调用数码管函数*/

count=0;

/*清零*/

k=0;

/*南北方向通车,东西方向不通车*/

SN=SN_G-25,WE=SN_G+Y-25;

/*南北方向显示时间为南北方向绿灯通行时间,东西方向显示时间为南北方向绿灯通行时间加黄灯闪亮时间*/

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

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

led();

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--;

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

k++;

/*自增运算*/

if(k>

3)/*当k>

3时,执行程序*/

switch(k)/*switch语句*/

case0:

SN=SN_G,WE=SN_G+Y;

break;

case1:

SN=Y,WE=Y;

/*东西南北方向显示时间均为黄灯闪亮时间*/

case2:

SN=WE_G+Y,WE=WE_G;

case3:

/*延时t毫秒*/

voiddelay(uchart)

uchari;

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

for(t;

t>

0;

t--)/*执行t次循环*/

for(i=2000;

i>

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

}

/*交通灯函数*/

voidlight()

P1=c[k];

/*交通灯对应着k的值变化*/

if(P1==c[1]&

&

count==0)/*当南北方向亮黄灯且count=0时,执行程序*/

/*延时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];

/*显示东西方向个位*/

P2=b[3],P0=a[WE/10];

/*显示东西方向十位*/

/*延时*/

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

voidledthrough()

P2=b[0],P0=a[(SN_G+Y)%10];

/*南北方向数码管显示可通行时间的个位*/

P2=b[1],P0=a[(SN_G+Y)/10];

/*南北方向数码管显示可通行时间的十位*/

P2=b[2],P0=a[(WE_G+Y)%10];

/*东西方向数码管显示可通行时间的个位*/

P2=b[3],P0=a[(WE_G+Y)/10];

/*东西方向数码管显示可通行时间的十位*/

/*数码管驱动函数*/

voidleddrive()

P2=b[0];

P2=b[1];

P2=b[2];

P2=b[3];

/*主函数*/

voidmain(void)

init();

/*调用程序初始化函数*/

for(;

key();

/*调用键盘程序*/

/*调用数码管函数*/

主程序设计

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

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