单片机交通灯实训报告

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

机电工程学院课程设计报告

课程名称:单片机课程设计

专业班级:13电本2班

学号:2013041632

学生姓名:罗炜

指导教师:王清辉、何文丰

完成时间:

报告成绩:

交通灯设计

一、设计任务与要求

设计基本要求:

(1)车辆通行繁忙的十字交叉路口,设计一交通灯控制器,设东西方向通行时间为30秒,当剩余3秒时黄灯亮,南北方向通行时间为20秒,当剩余3秒时黄灯亮。(2)东西、南北方向各用三个(绿、黄、红)LED表示,并用数码管显示东西、南北方向的剩余时间。

(3)可利用按键修改时间参数,可以利用按键切换东西南北交通灯的当前状态(即立刻东西由红变绿,南北有绿变红,并按设定的时间工作)。

二、方案设计与论证

表2-1:交通灯的工作状态表

根据表2-1所示可将交通灯的工作状态设为以下几个步骤:

1、初始状态时即为东西方向绿灯通行27秒+3秒黄灯,此时南北红灯亮。

2、随后是南北方向绿灯通行17秒+3秒黄灯,此时东西红灯亮。

3、通过按模式选择键一次来切换东西南北交通灯的当前状态。(通过设置定时计时器T1实现交通灯的计时)

4、通过按模式选择键第二次切换至南北方向红绿灯的计时设置,通过加减按键来

确定南北方向红绿灯的计时数。

5、确定南北方向计数值后,通过按模式选择键第三次切换至东西方向红绿灯的计时设置,通过加减按键来确定东西方向红绿灯的计时数。

6、确定交通灯计时数后再按下模式选择键后,交通灯便进入工作状态。

时间计时的实现:采用定时中断实现秒的精确计时(详细方案入下列程序设计所示)。

按键输入的实现:通过编写按键读取函数,来实现交通灯的状态以及时间值得设定(详细方案入下列程序设计所示)。

图2-1程序设计流程框图

三、硬件电路设计

1、 倒计时显示

该系统要求完成倒计时的功能。因只需显示数字,基于上述原因,我完全采用数码管显示,四个路口分别采用一个二位共阴极数码管即可。

2、状态灯显示

该系统要求完成状态灯显示的功能。采用红绿黄三种LED灯一个路口只需三个个状态灯,绿灯通行,红灯停止,黄灯闪烁。

3、输入方案

该系统要求能手动改变东西与南北的通行时间、红绿灯状态紧急交换处理。运用单片机中四个IO口设置三个按键,三个按键的功能分别为:增加、减少、状态切换和暂停。

4、复位电路与晶振电路

复位电路:复位方式有多种,本设计采用按键复位。接线图如图3-1所示,当按下复位按键时,RST端产生高电平,使单片机复位。复位后,其片内各寄存器状态改变,片内RAM内容不变。

晶振电路(如图3-2所示):结合单片机内部产生单片机所需的时钟频率。

图3-1程序仿真接线图图3-2程序仿真接线图

5、AT89S51的简介

AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。

图3-3程序仿真接线图

四、软件设计

根据设计要求得完整的交通灯程序源代码包含有:1.定时2.数码管显示3.LED状态切换.4按键读取。

#include "reg51.h"

#define uint unsigned int

#define uchar unsigned char

uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示数组

uchar T0_Count=0,East_time=0,North_time=0;//定时变量,东西倒计时变量,南北倒计时变量

sbit DXD_Red=P3^0; //东西方向红灯

sbit DXD_Yellow=P3^1; //东西方向黄灯

sbit DXD_Green=P3^2; //东西方向绿灯

sbit NBD_Red=P3^3; //南北方向红灯

sbit NBD_Yellow=P3^4; //南北方向黄灯

sbit NBD_Green=P3^6; //南北方向绿灯

sbit DXKZ_GE=P2^4; //东西方向个位数码管公共端sbit DXKZ_SHI=P2^5; //东西方向十位数码管公共端sbit NBKZ_GE=P2^6; //南北方向个位数码管公共端sbit NBKZ_SHI=P2^7; //南北方向十位数码管公共端sbit Key_Add=P1^1; //增加按键

sbit Key_Dec=P1^2; //减少按键

sbit Key_OK=P1^3; //确定按键,兼具状态切换sbit LE=P1^0;

void delayms(uint i) //毫秒级延时

{

uint x,y;

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

for(y=110;y>0;y--);

}

void t0_init()

{

TMOD=0X01; //16位定时器0

TH0=(65536-50000)/256;

TL0=(65536-50000)%256; //定时50ms

ET0=1; //开启中断1

EA=1; //开启总中断

TR0=1; //开启定时器0

}

void state1() //东西绿灯亮,南北红灯亮{

DXD_Red=1;

DXD_Yellow=1;

DXD_Green=0;

NBD_Red=0;

相关文档
最新文档