51单片机综合实验交通灯设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机综合实验交通灯设计报告
班级:
学生姓名:
学号:
指导教师:
一实验题目
交通灯控制系统设计
二实验目的
1、学会用8051单片机开发简单的计算机控制系统;
2、学会用汇编语言和C语言开发系统软件;
3、学会8051单片机开发环境wave或Keil uVision3软件的使用;
4、学会Proteus软件的使用方法,会用Proteus单片机系统进行仿真;
5、学会Protel软件的使用方法,会用Protel绘制电气原理图和印制
板图;
6、熟悉七位数码管显示的使用方法;
7、了解交通灯控制系统的基本组成。
三实验要求
交通灯处在十字路口上。它有红﹑黄﹑绿三种颜色的灯组成。红灯亮时道路上的车辆停止运行;黄灯是一种过渡用的信号灯,当它亮时,表示道路上的红绿色信号灯即将进行转换。下面拿东西南北四个方向来说明。当东西方向允许行车(或者左转)的时候,南北方向就禁止行车,即此时东西方向的绿灯亮红灯灭,而南北方向的绿灯灭红灯亮。反之当南北方向允许行车(或者左转)的时候,东西方向就禁止行车,即此时南北方向的绿灯亮红灯灭,而东西方向的绿灯灭红灯亮。交通灯配置示意图如图1所示。同时当有特殊的情况发生时,能手动控制各个方向的信号灯。设计任务就是将这一电路用单片机来实现具体的控制。
1 十字路口交通灯配置示
意图
四 设计内容与原理
为了在后面的分析中便于说明,将南北方向允许直行命名为状态1,南北方向允许左转命名为状态2,南北方向行车到东西方向行车的转换阶段命名为状态3,将东西方向允许直行命名为状态4,东西方向允许左转命名为状态5,东西方向行车到南北方向方向行车的转换阶段命名为状态6。
假定直行绿灯点亮的时间为25s ,左转绿灯点亮的时间为20s ,黄灯点亮的时间为5s ,则对方红灯的点亮时间为50秒。黄灯每隔500ms 亮一次,之后灭500ms (亮灭一次叫作闪烁一次),一共闪烁5次,持续5s 。各个状态之间的变换情况如下:
具体显示周期如下:
图2交通信号灯点亮时间图
设计电路中每个路口的控制信号灯应有四个,即绿灯两个、黄灯、红灯各一个,同时需要七段数码管一个。因此,本电路的设计中应用到绿灯八个,黄灯四个,红灯四个,七段数码管两个(东西方向相同,南北方向相同,为节省空间可省略一对)。
五 电路设计分析
根据前面的设计内容与原理分析,电路设计中应有控制模块(单片机电路)、显示模块(十六个信号灯和两个七段数码管)本电路的设计,将发光二极管作为16个信号灯的材料。电源将采用5V 的直流电源。东西两个方向的绿灯是同时亮的,为了简化电路可以让这两个灯接同一个引脚。同理,东西方向的黄灯、红灯也可以分别接同一个引脚。南北方向同上。这样我们可以用一个8位口控制16盏信号灯。
各信号灯均是共阴极接法,LED 负极均接地,正极通过保护电阻接单片机P1口。这样单片机引脚的输出一个高电平时,相应的信号灯就被点亮。七段数码管经过8位排阻RESPACK-8连接。
单片机中应包括复位电路和晶振电路。本设计中,采用上电复位形式,由于本系统应用的机器周期为l
s ,所以晶振选择为12MHz ,根据调试电容选择30pF .
口 绿灯亮 绿灯亮 缓行
东西路
口 红灯亮禁行
直行 绿灯亮
左转 绿灯亮
黄灯亮 缓行
50s 25s 20s 5s
图3:复位电路
图4:晶振电路六硬件原理图
七程序流程
本程序的程序流程图如图所示
八心得体会
这次系统实验历时一个月的时间,在这实验过程里我们巩固了从编程、软件使用到调试的专业知识,逻辑思维和动手能力都得到了很大的提高。
要解决的主要问题就是程序的设计和仿真,虽然初期在设计和布局、编程时思路比较清晰,但是到了细节处,也出了不少问题,而且很难被检查出来,如在定时器使用方面出了一些错误。但是最后经过不断努力,还是写出来正确的代码。
通过这次系统实验,对以前学过的知识进行了巩固,加深了理解,提高了应用的能力,而且提高了我们的发现、分析、解决问题的能力,同时提高了对专业的认识及兴趣,对于我们工科生来说,对以后就业很有帮助。
附录程序代码:
#define uchar unsigned char
#define uint unsigned int
#include <>
/*****定义控制位**********************/
sbit EW_LED2=P2^3; //东西数码管个位
sbit EW_LED1=P2^2; //东西数码管十位
sbit SN_LED2=P2^1; //南北数码管个位
sbit SN_LED1=P2^0; //南北数码管十位_
sbit SN_Yellow=P1^6;//南北黄灯
sbit EW_Yellow=P1^2;//东西黄灯
sbit EW_Red=P1^3;//东西红灯
sbit SN_Red=P1^7;//南北红灯
sbit Busy_Btton=P3^4;
bit Flag_SN_Yellow; //南北黄灯标志位
bit Flag_EW_Yellow;//东西黄灯标志位
char Time_EW;//东西方向倒计时单元
char Time_SN;//南北方向倒计时单元
uchar EW=50,SN=25,EWL=20,SNL=20; //程序初始化赋值
uchar EW1=50,SN1=25,EWL1=20,SNL1=20;//用于存放修改值的变量1-9段选码
uchar
code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };
uchar code S[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信号灯控制代码
/**********************延时子程序************************/
void Delay(uchar a)
{
uchar i;
i=a;
while(i--){;}
}
/*****************显示子函数**************************/
void Display(void)
{
char h,l;
h=Time_EW/10;
l=Time_EW%10;
P0=table[l];
EW_LED2=1;
Delay(200);
EW_LED2=0;
P0=table[h];