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

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

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

(交通信号灯控制系统)

课程小组成员:

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)仿真效果:

三、软件设计

1、主程序流程图:

2、系统程序设计 系统工作原理: (1)主程序:

本设计系统以单片机为控制核心,连接成最小系统。按键设置模块产生信号输入,信号灯状态模块显示通行状态,LED 倒计时模块模块接受信号并输出。

单片机上电后,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED数码管上实时显示。在此过程中系统一直查询是否有时间调节服务。

(2)按键程序:

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

(3)显示程序:

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

3、程序源代码:

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define PAC XBYTE[0x7fff]

#define PA XBYTE[0x7cff]

#define PB XBYTE[0x7dff]

#define PC XBYTE[0x7eff]

#define state0 6

#define state1 20

#define state2 6

#define state3 0

#define state4 6

#define KEYP PC //定义按键连接到PC口

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

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x5f,0x7c,0x58,0x5e,0x7b,0x71};

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

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

sbit red_a=P1^0;

sbit yellow_a=P1^1;

sbit green_a=P1^2;

sbit red_b=P1^3;

sbit yellow_b=P1^4;

sbit green_b=P1^5;

uchar flash_count=0,operation_type=0;

//延时

void delay_ms(uchar x)

{

uchar h;

while(x--)

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

}

//灯状态子程序?

void traffic_light_0(uchar x)

{

uchar i,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);

}

}

}

void traffic_light_1(uchar x)

{

uchar i,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);

相关文档
最新文档