交通信号灯控制系统设计报告.docx

上传人:b****6 文档编号:13549107 上传时间:2023-06-15 格式:DOCX 页数:21 大小:165.05KB
下载 相关 举报
交通信号灯控制系统设计报告.docx_第1页
第1页 / 共21页
交通信号灯控制系统设计报告.docx_第2页
第2页 / 共21页
交通信号灯控制系统设计报告.docx_第3页
第3页 / 共21页
交通信号灯控制系统设计报告.docx_第4页
第4页 / 共21页
交通信号灯控制系统设计报告.docx_第5页
第5页 / 共21页
交通信号灯控制系统设计报告.docx_第6页
第6页 / 共21页
交通信号灯控制系统设计报告.docx_第7页
第7页 / 共21页
交通信号灯控制系统设计报告.docx_第8页
第8页 / 共21页
交通信号灯控制系统设计报告.docx_第9页
第9页 / 共21页
交通信号灯控制系统设计报告.docx_第10页
第10页 / 共21页
交通信号灯控制系统设计报告.docx_第11页
第11页 / 共21页
交通信号灯控制系统设计报告.docx_第12页
第12页 / 共21页
交通信号灯控制系统设计报告.docx_第13页
第13页 / 共21页
交通信号灯控制系统设计报告.docx_第14页
第14页 / 共21页
交通信号灯控制系统设计报告.docx_第15页
第15页 / 共21页
交通信号灯控制系统设计报告.docx_第16页
第16页 / 共21页
交通信号灯控制系统设计报告.docx_第17页
第17页 / 共21页
交通信号灯控制系统设计报告.docx_第18页
第18页 / 共21页
交通信号灯控制系统设计报告.docx_第19页
第19页 / 共21页
交通信号灯控制系统设计报告.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

交通信号灯控制系统设计报告.docx

《交通信号灯控制系统设计报告.docx》由会员分享,可在线阅读,更多相关《交通信号灯控制系统设计报告.docx(21页珍藏版)》请在冰点文库上搜索。

交通信号灯控制系统设计报告.docx

交通信号灯控制系统设计报告

 

微机应用系统课程设计报告

(交通信号灯控制系统)

 

课程小组成员:

1.姓名:

xxxx班级:

xxxxxxxxxx,学号:

xxxxxxxxxx

评语:

成绩:

2.姓名:

xxxx班级:

xxxxxxxxxx,学号:

xxxxxxxxxx

评语:

成绩:

3.姓名:

xxxx班级:

xxxxxxxxxx,学号:

xxxxxxxxxx

评语:

成绩:

 

一、课题内容及要求:

1.实验内容:

✧设计一个交通信号灯控制系统,要求:

✧初始状态为两个方向的红灯全亮,时间6秒。

✧主干道绿灯亮,支干道红灯亮,主干道通车,时间为20秒。

✧主干道黄灯闪烁,支干道红灯亮,时间为6秒。

✧主干道红灯亮,支干道绿灯亮,支干道通车,时间为15秒。

✧主干道红灯亮,支干道黄灯闪烁,时间为6秒。

✧循环显示。

✧通过按键输入时间,使主干道和支干道通车时间一样。

✧画出硬件连接电路图,说明各个控制信号的作用。

✧画出程序流程图,编写程序,硬件连接调试,直至正确。

✧编写课程设计报告。

2.实验要求

编程实现功能,并撰写课程设计报告一份。

二、硬件设计

1、硬件原理框图:

 

2、设计电路:

设计电路主要由四部分组成,一是P1口与十二个发光二极管连接电路,二是P0口、部分P2口和部分P3口与8255连接电路,三是8255的PA口、PB口与四个两位数码管的连接电路,四是8255的PC口与矩阵键盘的连接电路。

3、交通灯电路:

设计中采用发光二极管作为交通灯来使用,单片机的I/O接口直接和交通灯(发光二极管)连接。

在十字路口的四组红、黄、绿三色交通灯中,东西方向道路上的两组同色灯连接在一起,南北方向道路上的两组同色的灯也彼此连接在,受单片机P1.0~P1.5控制。

单片机的I/O接口与交通灯电路的具体连接方式为:

P1.0~P1.2分别接东西方向的红、黄、绿共6个放光二极管,P1.3~P1.5分别接南北方向的红、黄、绿共6个发光二极管。

12个发光二极管采用了共阴极的连接方式,因此I/O口输出高电平时,与之相连的发光二极管会亮,I/O口输出低电平时,相应的发光二极管会灭。

交通灯电路如下图所示

4、倒计时显示电路:

该显示装置选用双位数码管来显示交通灯转换的剩余时间,根据控制要求,每个路口需要1个数码管,这样四个路口就要求4个数码管。

我们可以选用共阴型数码管。

四个路口倒计时显示被置在同一时刻显示不同的数字。

电路如下图

5、按键模块:

按键模块主要利用经过8255扩展之后的PC口来控制的。

当有按键被按下时,PC口会产生低电平,按下不同键会调用相应的子程序,根据不同的按键进行相应的处理

6、仿真电路及效果图:

(1)仿真电路:

(2)仿真效果:

7、主要元件清单:

名称

件数

参数

选择理由

电阻

13

220Ω

限流,以免烧坏数码管

发光二极管

12

3色

便于仿真显示

AT89C51

1

低电压,高性能八位微处理器

2位共阴数码管

4

常用数字显示,便于仿真

开关

17

单片机复位及键盘

排阻

1

RESPACK-8

驱动数码管

排针、排线

若干

便于连接电路

晶振

1

12MHz

为单片机工作提供时钟脉冲信号

瓷片电容

2

27pF

防止单片机自激

电解电容

1

10uF

8255A

1

扩展并口

三、软件设计

1、主程序流程图:

2、系统程序设计

系统工作原理:

(1)主程序:

本设计系统以单片机为控制核心,连接成最小系统。

按键设置模块产生信号输入,信号灯状态模块显示通行状态,LED倒计时模块模块接受信号并输出。

单片机上电后,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED数码管上实时显示。

在此过程中系统一直查询是否有时间调节服务。

(2)按键程序:

按键采用查询方式进行处理,当某个键按下时,单片机确认外设已“准备好”,然后进行相应处理,

(3)显示程序:

显示主要包括数码管的时间显示和交通灯的交通状态显示,本设计包含六种正常交通状态。

3、程序源代码:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#definePACXBYTE[0x7fff]

#definePAXBYTE[0x7cff]

#definePBXBYTE[0x7dff]

#definePCXBYTE[0x7eff]

#definestate06

#definestate120

#definestate26

#definestate30

#definestate46

#defineKEYPPC//定义按键连接到PC口

//定义数码管字形0~15、a~f

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x5f,0x7c,0x58,0x5e,0x7b,0x71};

chardisp=0x3f;//声明七段显示初值为小数点

ucharscan[4]={0xef,0xdf,0xbf,0x7f};//显示器几件判断扫描码

sbitred_a=P1^0;

sbityellow_a=P1^1;

sbitgreen_a=P1^2;

sbitred_b=P1^3;

sbityellow_b=P1^4;

sbitgreen_b=P1^5;

ucharflash_count=0,operation_type=0;

//延时

voiddelay_ms(ucharx)

{

ucharh;

while(x--)

{for(h=0;h<120;h++);}//延时1ms

}

//灯状态子程序?

voidtraffic_light_0(ucharx)

{

uchari,n;

red_a=0;yellow_a=1;green_a=1;//东西通行

red_b=0;yellow_b=1;green_b=1;//南北通行

for(i=x;i>0;i--)

{

for(n=1000;n>0;n--)

{

PB=0x0a;

PA=table[i/10];//十位

delay_ms

(2);

PB=0x05;

PA=table[i%10];//个位

delay_ms

(2);

}

}

}

voidtraffic_light_1(ucharx)

{

uchari,n;

red_a=1;yellow_a=1;green_a=0;//东西通行

red_b=0;yellow_b=1;green_b=1;//南北通行

for(i=x;i>0;i--)

{

for(n=500;n>0;n--)

{

PB=0x0e;

PA=table[i/10];

delay_ms

(1);

PB=0x0d;

PA=table[i%10];//主东西

delay_ms

(1);

PB=0x0b;

PA=table[(i+6)/10];

delay_ms

(1);

PB=0xf7;

PA=table[(i+6)%10];//支南北

delay_ms

(1);

}

}

}

voidtraffic_light_2(ucharx)

{

uchari,n;

for(i=x;i>0;i--)

{

yellow_a=~yellow_a;

green_a=1;

for(n=1000;n>0;n--)

{

PB=0x0a;

PA=table[i/10];

delay_ms

(2);

PB=0x05;

PA=table[i%10];

delay_ms

(2);

}

flash_count++;

if(flash_count==6)break;//闪烁3次

}

flash_count=0;

}

voidtraffic_light_3(ucharx)

{

uchari,n;

red_a=0;yellow_a=1;green_a=1;//东西通行

red_b=1;yellow_b=1;green_b=0;//南北通行

if(x==0)

{

for(i=15;i>0;i--)

{

for(n=250;n>0;n--)

{

PB=0x0e;

PA=table[(i+6)/10];

delay_ms

(1);

PB=0x0d;

PA=table[(i+6)%10];//主东西

delay_ms

(1);

PB=0x0b;

PA=table[i/10];

delay_ms

(1);

PB=0xf7;

PA=table[i%10];//支南北

delay_ms

(1);

}

}

}

else

{

for(i=x;i>0;i--)

{

for(n=248;n>0;n--)

{

PB=0x0e;

PA=table[(i+6)/10];

delay_ms

(1);

PB=0x0d;

PA=table[(i+6)%10];//主东西

delay_ms

(1);

PB=0x0b;

PA=table[i/10];

delay_ms

(1);

PB=0xf7;

PA=table[i%10];//支南北

delay_ms

(1);

}

}

}

}

voidtraffic_light_4(ucharx)

{

uchari,n;

for(i=x;i>0;i--)

{

yellow_b=~yellow_b;

green_b=1;

for(n=1000;n>0;n--)

{

PB=0x0a;

PA=table[i/10];

delay_ms

(2);

PB=0x05;

PA=table[i%10];

delay_ms

(2);

}

flash_count++;

if(flash_count==6)break;//闪烁3次

}

flash_count=0;

}

///*键扫描函数*/

//扫描4x4键盘几4个七段显示器函数

//PC口接入键盘PC口高4位做输出低4位做输入

ucharscanner()//扫描函数开始

{

ucharcol,row;//声明变量(col列,row行)

ucharrowkey,kcode;//声明变量(rowkey行键值,kcode按键码)

delay_ms

(2);//消除键盘抖动

for(col=0;col<4;col++)//for循环,扫描第col列

{

KEYP=scan[col];//高4位输出扫描信号,低4位输入行值

PA=disp;//输出数字

rowkey=~KEYP&0x0f;//读入KEYP低4位,再清除高4位求出行键值

if(rowkey!

=0)//若有按键按下

{

if(rowkey==0x01)

row=0;//若第0行被按下

elseif(rowkey==0x02)

row=1;//若第1行被按下

elseif(rowkey==0x04)

row=2;//若第2行被按下

elseif(rowkey==0x08)

row=3;//若第3行被按下

kcode=4*col+row;//算出按键号码

disp=table[kcode];//将键值编码后写入最右侧

while(rowkey!

=0)

rowkey=~KEYP&0x0f;//在读入行键值

}

delay_ms(4);

}

returnkcode;

}

//通过按键使交通灯?

状态切换

voidtraffic_light()

{

ucharkey,key0,key1;

uchari,m[2];

key=scanner();

if(key==14)

while

(1)

{

switch(operation_type)

{

case0:

//东西红灯(主干道),南北红灯(支干道)))

traffic_light_0(state0);

operation_type=1;

break;

case1:

//东西绿灯,南北红灯

traffic_light_1(state1);

operation_type=2;

break;

case2:

//东西黄闪,绿灯灭

traffic_light_2(state2);

operation_type=3;

break;

case3:

//东西红灯,南北绿灯

traffic_light_3(state3);

operation_type=4;

break;

case4:

//南北黄闪,

traffic_light_4(state4);

operation_type=1;

break;

}

}

elseif(key==15)

{

//delay_ms(1000);

while(scanner()==15);

for(i=0;i<1;i++)

{

key0=scanner();

while(!

key0)

key0=scanner();

delay_ms(1000);

m[i]=key0;

while(scanner()==key0);

}

key1=m[0]*10+m[1];

while

(1)

{

switch(operation_type)

{

case0:

//东西红灯(主干道),南北红灯(支干道))

traffic_light_0(state0);

operation_type=1;

break;

case1:

//东西绿灯,南北红灯

traffic_light_1(state1);

operation_type=2;

break;

case2:

//东西黄闪,绿灯灭

traffic_light_2(state2);

operation_type=3;

break;

case3:

//东西红灯,南北绿灯

traffic_light_3(key1);

operation_type=4;

break;

case4:

//南北黄闪,

traffic_light_4(state4);

operation_type=1;

break;

}

}

}

}

//主程序

voidmain()

{

PAC=0x81;

while

(1)

traffic_light();

}

4、调试与运行:

(1)按照硬件连接图,东西方向,P1.0接红灯,P1.1接黄灯,P1.2接绿灯;南北方向,P1.3接红灯,P1.4接黄灯,P1.5接绿灯。

(2)参考大量资料后,在实验模拟电路板分阶段模拟(LED显示和数码管倒计时)

(3)用proteus和keil相关软件模拟,调试程序和修改电路。

(4)在仿真成功后又在实验板上模拟,确定毫无问题开始电路板焊接

(5)将电路板焊接好后,再进行检查、修改电路,直至功能正常实现。

四、课设心得

XXXX:

通过两个星期的交通灯课程设计,我对单片机相关知识有了更深的了解。

对于管脚及相关的数码管,有了更进一步的巩固和了解,尤其是I/O口的实用及编程,相当于重新细细温习了一遍。

特别对protues软件画电路图及仿真的过程,我几乎是从零开始学习并使用的。

说到这里,得感谢小组里同学们的帮助,同时也幸好大家都很团结,让我有更多的热情将这些东西变成自己的。

这次课程设计的任务是通过单片机的I/O口来控制交通灯。

主要完成两大项任务,第一就是硬件连接图;第二是编写相应的程序来实现硬件功能。

看似简单,实际上需要过硬的知识作为基础,平时看看书考试那样的过程,是难以完成这样的任务的。

这次设计过程中,遇到了很多棘手的问题,很多东西,动起手来束手无策,大多都只得先通过查阅资料或者参考别人做类似课题,才能自己动手设计画图,编程调试。

过程中还错误不少,关于编程我们小组成员有各自想法,有喜欢汇编的也有喜欢C的,大家在自己喜欢的方向深入研究学到很多知识。

还有就是protues软件仿真原来及整个过程,虽然并不太难,但是我还是通过这次才真正弄明白的。

这次课程设计之后,关于单片机的知识我有了更深入的了解,但更多是让我知道了知识的欠缺,很多环节,都是慢慢翻书或者查找资料才能完成。

这也让我明白了,在以后的学习中,应更注重知识的应用,更注重实质的掌握。

当然这次课程设计,提高了我的知识应用能力和和实践能力,同时提高了我独立思考、独立完成任务的能力。

当然组队之间的相互讨论,也加强了大家的合作精神和团结能力,这对以后的学习和工作也都有重要意义。

XXXX:

经过此次课程设计,我自我感觉收获颇丰,不仅学会了硬件仿真,而且对硬件的连接与焊接有了更进一步的熟悉。

因为是第一次用单片机设计一个实用的设备,所以根据自己的实际,我们最终确定做交通信号灯控制系统。

课题确定后,我们就各自先找关于交通灯课程设计的资料,然后汇总。

可以说我们组是谁有理就听谁的,很是民主。

接下来就是分工了,XXXX主要搞软件,XXXX写报告,而我焊电路,偶尔也客串“软件指导”,在这段时间我们都各司其职,向着共同的目标前进。

我们的团队合作精神在最后这几天表现得尤为明显,以至于我们的硬件和软件第一次融合就成功了,这跟我们严谨的作风和细致的操作是分不开的。

当然在焊接电路的时候,我也遇到了问题,比如按钮那四个引脚是如何连接的,当时没有万用表,所以问了同学,问了后才知道当按钮按下时对角的接通,而相对的引脚是本来就连着的。

还有数码管的引脚,也是问了同学并且查阅了相关资料,才知道如何使用万用表检测一个数码管是共阴极的还是共阳极的。

操作起来也挺简单的,先把万用表拨到二极管那一档,如果用红表笔接触一个引脚,黑表笔接触其他的引脚,同时当接触一个引脚,数码管有相应的位亮,说明这个数码管是共阳极的,与此相反就是共阴极的。

课程设计之前感觉那些东西挺简单的,可当自己亲身实践后才发现真没有想的那么容易。

真不知道,如果没有图书馆那些可借的与此课程设计相关的书籍,和那么方便的网络资源,我们还会不会做出这个来。

俗话说,熟能生巧,所以以后我要做更多的设计,以便于熟悉更多的设计技巧。

我相信在不久的将来我会设计出自己的产品。

XXXX:

通过这次单片机的学习和课程设计,我才真正的认识到,知识只有在实际生活中得到运用,它才是有意义的。

好多的问题其实很简单,但想要找到问题存在的地方就比较麻烦了。

同时我们还要学习其他同学做事认真细心的优点,并且要大胆的尝试,不要总停留在理论上,只有试了,才知道对否。

在实践中磨练并成长才是最重要的。

做课程设计就是将从课本上学到的知识应用于实际中,微机应用系统课程设计就是很好的实践。

在交通灯控制系统设计中,就充分的体现了同学们动手能力的强弱和对课本知识的掌握程度。

在整个过程中,我认为最重要的是设计过程,它不仅让我们加深了对理论的理解,也使我们对知识有了更深的认识,对书上知识的应用也有了更进一步的直观了解,同时也是对以往所学有了一次小小的总结与回顾。

其次,在插线接线的过程中,我们不仅要心灵手巧,更要细心耐心,有条理有目的的按顺序连线,不能遍地撒网,没有目的性,否则再插线还没连完的时候就头晕眼花了。

最后的调试更是一次考验。

我们不仅要找错误,更要知道错误的原因,这不仅要求我们掌握设计原理,更要求理解设计原理。

每一个错误的原因是什么,错在哪里,怎样改正,我们都必须一一弄清楚。

在处理所遇到问题的过程中有成功也有失败,但这确实加强了我们的动手能力,最终我们大家还是体会到了成功的喜悦。

在这次的设计过程中,我更深深的体会到了理解知识的重要性,如果你不能真正理解你所学到的东西,你就不能去改正错误,不能去实际运用。

因此,在今后的学习中不能仅仅局限于知道了某种理论,而关键在于要真正的理解掌握并能实际运用这种知识。

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2