51单片机控制的交通灯系统实验报告

合集下载

基于51单片机控制交通灯课程设计报告

基于51单片机控制交通灯课程设计报告

基于51单片机控制交通灯课程设计报告本设计课程使用STC89c52型号的芯片及相关元器件自己组装单片机最小系统,并编写程序用于控制交通信号灯。

1.STC89c52的芯片元器件的说明:STC89c52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。

此外,STC89c52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。

在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。

掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能,STC89c52在众多嵌入式控制应用系统中得到广泛应用。

2.STC89c52的功能是:·标准MCS-51内核和指令系统·片内8kROM(可扩充64kB外部存储器)· 32个双向I/O口· 256x8bit内部RAM(可扩充64kB外部存储器)· 3个16位可编程定时/计数器·时钟频率3.5-12/24/33MHz·向上或向下定时计数器·改进型快速编程脉冲算法· 6个中断源· 5.0V工作电压·全双工串行通信口·布尔处理器—帧错误侦测· 4层优先级中断结构—自动地址识别·兼容TTL和CMOS逻辑电平·空闲和掉电节省模式· PDIP(40)和PLCC(44)封装形式3.管脚说明VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

基于51单片机设计的交通灯报告书

基于51单片机设计的交通灯报告书

报告书干路—支路口交通信号灯控制器项目目的:通过对模拟交通灯控制系统的操作,让我们掌握定时器和中断系统的综合应用,进一步熟练51单片机的应用.项目要求:本项目主要通过感应开关控制交通灯的切换显示,实现主干路与支路车辆的分流。

(1)在正常情况下,主干道交通灯绿灯一直亮着。

(2)当支路检测到有车辆,60秒后,主干道禁止通行,支路放行。

(3)支路放行30 秒后,恢复正常情况。

项目电路如图:按键S1、S2模拟支路的车辆检测,当S1、S2为高电平(不按下按键)时,表示正常情况。

当S1或S2为低电平(按下按键)时,表示支路上有车辆,将S1、S2接到P3.0、P3.1把信号送入到单片机。

程序设计:源程序代码:#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar time,second,n,m;sbit k1=P3^0;sbit k2=P3^1;Uchar code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x 80,0x90};//数码管显示0~9的段码表void delay(uint t){uchar i;while(t--)for(i=0;i<255;i++);}void shumaguan(uchar s){P2=0xfd;P0=Tab[s/10];delay(1);P2=0xfe;P0=Tab[s%10];delay(1);}void main(){IE=0x82;TMOD=0x01;TH0=(65536-50000)/16;TL0=(65536-50000)%16;while(1){ uchar j;P1=0xde;if(k1==0||k2==0){delay(500);if(k1==0||k2==0){time=40;TR0=1;for(second=60;second>0;)shumaguan(second);TR0=0;P2=0x00;P1=0xf3;delay(3000);for(j=0;j<2;j++){P1=0xfb;delay(200);P1=0xf3;delay(200);}P1=0xeb;delay(500);}}}}void ld() interrupt 1{TR0=0;time--;if(time==0){time=40;second--;if(second==5)P1=0xdf;if(second==4)P1=0xde;if(second==3)P1=0xdf;if(second==2)P1=0xdd;if(second==1)P1=0xdd;}TH0=(65536-50000)/16;TL0=(65536-50000)%16;TR0=1;}项目小结:本项目程序主要包括四部分:主函数、延时函数、数码管显示函数、中断函数。

基于51单片机交通灯控制系统设计的报告

基于51单片机交通灯控制系统设计的报告

单片机课程设计题目单片机交通灯课程设计_学院电气及自动化工程学院_专业自动化______________班级ZB02131_____________学号ZB0213107___________姓名胡继广_______________指导教师卢振利_____________2013 年12 月 1 日摘要本设计是一个以微电子技术,计算机和通信技术为先导的,而计算机技术怎样与实际应用更有效的结合并有效的发挥其作用是科学界最热门的话题,也是当今计算机应用中空前活跃的领域。

十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。

那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。

本系统由单片机系统、按键、四位数码管显示、交通灯演示系统组成。

设计一个用于东西、南北走向的交通管理。

南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为50秒、支干道每次通行间为47秒。

系统除基本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间以及根据具体情况手动控制等功能。

本系统结构简单,操作方便;可实现自动控制,具有一定的智能性;对优化城市交通具有一定的意义。

本设计将各任务进行细分包装,使各任务保持相对独立;能有效改善程序结构,便于模块化处理,使程序的可读性、可维护性和可移植性都得到进一步的提高。

近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。

本文主要从单片机的应用上来实现十字路口交通灯智能化的管理,用以控制过往车辆的正常运作。

目录前言一、设计任务................................................... - 2 -1.1设计任务 ................................................... - 2 -二、系统总体方案及硬件设计..................................... - 2 -2.1总体硬件设计 ............................................... - 2 - 2.2系统时钟电路 ............................................... - 3 - 2.3数码管显示电路 ............................................. - 3 - 2.4路灯指示电路 ............................................... - 4 -2.5按键电路设计 ............................................... - 5 -三、软件系统设计............................................... - 5 -3.1设计思路及关键技术 ......................................... - 5 -3.2软件流程 ................................................... - 6 -四、 Proteus软件仿真 .......................................... - 7 -4.1 Proteus软件仿真 ........................................... - 7 - 4.2 南北路灯切换时仿真......................................... - 7 -4.3 紧急情况下的仿真........................................... - 8 -五、致谢及心得................................................. - 9 - 参考文献...................................................... - 10 -附录系统源程序前言19世纪初,在英国中部的约克城,红、绿装分别代表女性的不同身份。

基于51单片机交通灯工程实践方案报告书

基于51单片机交通灯工程实践方案报告书

《工程实践》设计方案报告基于单片机的交通灯控制系统设计题目主要研究思路和方法:一,研究方案本项目计划实现的基本目标是:利用单片机作为主要控制系统,模拟出东西方向为主干道十字路口交通灯控制系统。

二,重点解决问题1. 本项目要求可实现可手动设定交通灯亮灭交换所需时长,并且该灯亮时间倒计时用数码管显示。

2. 模拟遭遇突发情况的时候,可手动实现红灯全亮,禁行任何方向的车辆。

3. 由于本项目是模拟东西主干道的十字路口交通灯系统,故要求须包含左转灯,并且可实现右转灯长绿灯。

三. 技术路线1. 本项目由于是单片机作为主控系统,故要求我们熟练掌握单片机编程知识。

2. 本系统由显示电路(包含LED灯倒计时及发光二极管模拟交通灯),单片机主控制电路,按键和电源电路组成,需熟悉自动控制原理。

3. 将紧急情况红灯全亮写成程序编入单片机。

4. 该系统采用+5V直流稳压电源供电工作。

5.显示界面4个路口采用8个共阴极数码管,采用74LS48芯片驱动电路驱动LED晶体管显示部分。

系统原理框图和工作原理:具体:先东西双向直行和左转都是红灯,直行红灯长亮45秒,红灯亮时开始倒计时,剩5秒时开始闪烁(共计红灯亮50秒);接着左转还是红灯,东西双向直行灯长亮绿灯57秒,绿灯亮时倒计时,剩3秒时闪烁(共计绿灯亮60秒,在此期间其余全部红灯);然后5秒黄灯倒计时(不闪烁);然后东西左转绿灯亮时开始倒计时,剩3秒时闪烁(共计13秒),接着黄灯5秒倒计时(不闪烁),直行灯亮红色。

然后东西双向直行与左转又是红灯依次循环(灯亮情况南北直行方向与东西直行方向相反)。

具体对应情况如下主干道亮灭情况及时长:东西 南北左转灯 直行灯 左转灯 直行灯1.红 红(35) 1.红 绿(27)2. 红 绿闪(3)红 黄(5)3.红 红(7) 3.绿(7) 红4.红 红(3) 4.绿闪(3) 红5.红 红(5) 5.黄(5) 红6.红 绿(57) 6.红 红(65)7.红 绿闪(3)8.红 黄(5)9.绿(7) 红 9.红 红(10)10.绿闪(3)红 10.红 红(5)11.黄(5) 红12.红 红(35) 12.红 绿(32)东西方向为主干道;南北为辅干道。

单片机交通灯实习报告

单片机交通灯实习报告

一、实习背景随着我国城市化进程的加快,城市交通压力日益增大,交通拥堵问题日益突出。

为了提高交通效率,保障交通安全,交通信号灯控制系统的设计与研究显得尤为重要。

本实习项目旨在通过单片机技术,实现对交通灯的智能控制,提高交通路口的通行效率和安全性。

二、实习目的1. 熟悉单片机的基本原理和编程方法;2. 掌握交通信号灯控制系统的设计方法;3. 提高实际动手能力和问题解决能力;4. 培养团队协作精神和创新意识。

三、实习内容1. 硬件设计(1)单片机选型:选用STC89C51单片机作为核心控制器;(2)传感器选型:选用红外传感器检测车辆和行人流量;(3)显示屏选型:选用LCD显示屏显示交通灯状态和时间;(4)交通灯模块:采用LED灯实现红、黄、绿灯的显示;(5)按键模块:采用按键实现功能切换和参数设置。

2. 软件设计(1)系统初始化:单片机上电后,进行系统初始化,包括设置定时器、初始化I/O端口等;(2)数据采集:通过红外传感器采集交通流量数据,并进行处理;(3)数据处理与决策:根据采集到的交通流量数据,结合预设的算法和规则,计算出当前交通灯的信号配时;(4)信号控制:根据计算出的信号配时,控制交通灯的信号状态;(5)人机交互:通过按键实现功能切换和参数设置,并通过LCD显示屏显示交通灯状态和时间。

3. 系统测试与调试(1)硬件测试:检查电路连接是否正确,电源是否稳定,传感器、显示屏、交通灯模块是否正常工作;(2)软件测试:通过编写测试程序,验证系统功能是否满足设计要求;(3)调试:根据测试结果,对系统进行调试,确保系统稳定可靠地运行。

四、实习成果1. 设计并实现了基于单片机的交通信号灯控制系统;2. 系统能够根据实时交通流量自动调整红绿灯的切换时间,提高交通效率;3. 系统具有故障自诊断、手动/自动切换等功能,提高了系统的可靠性和实用性。

五、实习总结通过本次单片机交通灯实习,我掌握了单片机的基本原理和编程方法,熟悉了交通信号灯控制系统的设计方法,提高了实际动手能力和问题解决能力。

51单片机红绿灯设计报告

51单片机红绿灯设计报告

51单片机红绿灯设计报告一、设计目的在交通管理中,红绿灯是一种重要的交通设施,能够有效地控制交通流量,保证道路交通的安全和顺畅。

本设计旨在使用51单片机实现一个红绿灯控制系统,通过控制红绿灯的状态来实现交通信号控制。

二、系统设计1.设计原理红绿灯控制系统分为两种模式:定时模式和交通流量感应模式。

在定时模式下,红绿灯会按照预设的时间间隔循环切换;在交通流量感应模式下,通过传感器检测车辆的流量来实现智能控制。

2.硬件设计本设计采用51单片机作为控制核心,配合电路部件包括红绿灯LED 灯、传感器等。

51单片机通过IO口控制LED灯的状态,同时接收传感器信号用于交通流量感应模式。

3.软件设计软件设计主要包含控制程序和交通流量感应算法。

控制程序通过定时器产生中断来实现定时模式下红绿灯的切换;交通流量感应算法通过读取传感器信号来判断是否有车辆通过,进而控制红绿灯的切换。

三、系统实现1.控制程序控制程序主要实现红绿灯状态的切换,包括定时模式和交通流量感应模式的切换逻辑。

在定时模式下,通过定时器中断来实现红绿灯的周期性切换;在交通流量感应模式下,通过传感器信号来判断车辆的流量,并根据流量大小来调整红绿灯的状态。

2.传感器接口传感器接口用于检测车辆的流量,根据传感器的信号来实现对红绿灯状态的控制。

在系统中,传感器可以是红外传感器、光电传感器等,通过检测车辆通过时的信号变化来判断车辆的流量。

3.LED灯控制LED灯控制通过51单片机的IO口来实现,控制红绿灯的状态。

根据控制程序的逻辑,51单片机可以实现红绿灯的亮灭控制,从而实现交通信号的控制。

四、系统优化1.系统稳定性优化为了提高系统的稳定性,在设计中可以加入硬件看门狗等机制来监测系统的运行状态,确保系统正常运行。

2.智能交通流量控制在交通流量感应模式下,可以通过进一步算法优化,实现更加智能的交通流量控制,提高红绿灯的切换效率。

3.软硬件结合优化软硬件结合优化可以进一步提高系统的性能和稳定性,减少系统的延迟,提高交通信号的控制效率。

交通灯实验报告——单片机

交通灯实验报告——单片机

二、用51单片机设计交通灯、彩灯控制器一、可实现功能:1)通过51单片机,在面包板上模拟交通红绿灯。

分为主干道和支干道,每条道上安装红、绿、黄三种颜色的灯,并用两位八段数码管显示主干道三种灯亮的时间,由程序控制自动循环,红灯40秒,绿灯35秒,黄灯5秒;2)用单片机的外部中断0的产生来控制六路彩灯,此处只设计了四种花型。

二、电路原理图:三、源程序如下:#include "reg51.h"#include <intrins.h>void display(unsigned int digital);void delay(unsigned int time);void colour();unsigned shu[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; Unsignedled[41]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xdf,0xcf,0xc7,0xc3,0xc1,0xc0,0xc1,0xc3,0xc7,0xcf,0xdf,0xff, 0xf3,0xe1,0xc0,0xe1,0xf3,0xff,0xde,0xcc,0xc0,0xcc,0xdf,0xff, 0xdb,0xed,0xf6,0xed,0xdb,0xff,0xc0,0xff,0xc0,0xff,0xc0,0xff};sbit a=P2^6;sbit b=P2^7;sbit G=P2^0;sbit Y=P2^1;sbit R=P2^2;sbit g=P2^3;sbit y=P2^4;sbit r=P2^5;int flag=0;//全局变量,当它为1时显示彩灯,当它为0时,显示交通灯#define state_1 G=0;Y=1;R=1;g=1;y=1;r=0//主干道绿,支干道红#define state_2 G=1;Y=0;R=1;g=1;y=1;r=0//主干道黄,支干道红#define state_3 G=1;Y=1;R=0;g=0;y=1;r=1//主干道红,支干道绿#define state_4 G=1;Y=1;R=0;g=1;y=0;r=1//主干道红,支干道红void main(void){unsigned int i;EA=1; //首先开启总中断EX0=1; //开启外部中断 0IT0=1; //设置触发方式为下降沿触发while(1){while(flag==0){state_1;for(i=35;i>0;i--)delay(1);state_2;for(i=5;i>0;i--){delay(i);y1=~y1;}state_3;for(i=20;i>0;i--)delay(i);state_4;for(i=5;i>0;i--){delay(i);y2=~y2;}}while(flag==1) colour();}}//显示子程序,实现用两位数码管显示灯亮的时间void display(unsigned int digital){ unsigned int k;unsigned int ge=digital%10,shi=digital/10;//将十位与个位分离for(k=0;k<30000;k++){ a=1;b=0;P0=shu[ge];P0=0;a=0;b=1;P0=shu[shi];P0=0;}}//实现彩灯控制void colour(){ P1=0xff;P3=0x00;P2=0xff;while(1){ unsigned int j;for(j=0;j<41;j++)//循环程序演示四种花型{ P2=led[j];delay(1);} delay(5);}}//中断函数void key_scan() interrupt 0 //关键字"interrupt" ,这是C语言的中断函数表示法,,单片机有6个中断口,外部中断0的优先级最高,在程序里我们只用外部中断0 {flag++;if(flag==2) flag=0;}//延时程序void delay(unsigned int time) //参数time大小决定延时时间长短{ unsigned int j,k;time=time*5;for(j=0;j<time;j++)for(k=0;k<10000;k++);}四、源程序分析1、在电路设计时我用了共阴极八段数码管来显示时间:unsigned shu[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};数组中十个数分别表示0到9十个数;2、在设计彩灯时,我直接利用交通灯的主干道和支干道的六个灯设计彩灯:unsignedled[48]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xff,0xdf,0xcf,0xc7,0xc3,0xc1,0xc0,0xc1,0xc3,0xc7,0xcf,0xdf,0xff,0xf3,0xe1,0xc0,0xe1,0xf3,0xff,0xde,0xcc,0xc0,0xcc,0xdf,0xff,0xdb,0xed,0xf6,0xed,0xdb,0xff,0xc0,0xff,0xc0,0xff,0xc0,0xff};数组中的48个数共演示了四种花型3、void display(unsigned int digital){ unsigned int k;unsigned int ge=digital%10,shi=digital/10;//将十位与个位分离for(k=0;k<30000;k++){ a=1;b=0;P0=shu[ge];P0=0;a=0;b=1;P0=shu[shi];P0=0;}}显示子程序中将时间的十位与个位分离,用a、b来选择数码管将个位与十位分时输出。

51单片机 交通灯

51单片机 交通灯

实验二交通灯实验一、实验目的a)按键、数码管、发光二极管综合应用编程技术b)数据存储于EEPROM的技术(也可以不使用)c)定时中断技术d)按键中断技术二、实验实现的功能a)对绿黄红灯的时间进行设定。

b)紧急按键功能,当按下该键时,所有路口变成红灯,相当于交警指挥特殊车辆通过。

再按该键,恢复正常显示。

三、系统硬件设计四、系统软件设计#include <stc10.h>#define uchar unsigned char#define uint unsigned int#define N 10//0--F的共阴极字段码表ucharcodevalue[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71};uchar Num_Buffer[]={0,0};uchar GT=0,YT=0;RT=0,Operation_Type=1,sec=0,count=0,k=0;sbit P02=P0^2;sbit P03=P0^3;sbit P36=P3^6;sbit P37=P3^7;/************************北方向灯组位定义***************************/ sbit BG=P2^3;sbit BY=P2^4;sbit BR=P2^5;/************************西方向灯组位定义***************************/ sbit XG=P2^0;sbit XY=P2^1;sbit XR=P2^2;/************************南方向灯组位定义***************************/ sbit NG=P3^3;sbit NY=P3^4;sbit NR=P3^5;/************************东方向灯组位定义***************************/ sbit DG=P2^6;sbit DY=P2^7;sbit DR=P3^2;/*******************************************************************/ void delay(uint x) //延时{uchar i;while(x--){for(i=0;i<120;i++);}}void display(uchar n) //显示函数{Num_Buffer[1]=n/10;Num_Buffer[0]=n%10;P0=0XFB;P1=codevalue[Num_Buffer[1]];delay(N);P0=0XF7;P1=codevalue[Num_Buffer[0]];delay(N);}uchar scan_key() //按键扫描程序{uchar i,m;P36=0;P37=1;for(i=0;i<2;i++){delay(N);m=P0;switch(m&0xe0){case 0xc0: k=i*3+1;return k;break;case 0xa0: k=i*3+2;return k;break;case 0x60: k=i*3+3;return k;break;default: break;}P36=1;P37=0;}}void dingshi() //设定绿黄红灯的时间{uchar k;P2=0XFF;P3=0XFF;while(1){display(0); //开始时显示0k=scan_key();if(k==4) //按下4键设定主干道绿灯时间{while(1){display(GT);k=scan_key();if(k==4){ delay(20N);GT++;}if(k==3) //按下3键设定好绿灯时间{ delay(20N);break;}}}else if(k==5) //按下5键设定黄灯时间{while(1){ ;display(YT);k=scan_key();if(k==5){ delay(20N);YT++;}if(k==3) //按下3键设定好绿灯时黄间{ delay(20N);break;}}}else if(k==6) //按下6键设定红灯时间{while(1){display(RT);k=scan_key();if(k==6){ delay(20N);RT++;}if(k==3) //按下3键设定好红灯时间{ delay(20N);break;}}}else if(k==3) //再次按下3键时间设定好返回break;}}void zanting() //暂停程序{ uchar k;k=scan_key();if(k==3) //按下3键暂停{ TR0=0;delay(50N);while(1){BG=1;BY=1;BR=0;NG=1;NY=1;NR=0; //东西南北红灯都亮XG=1;XY=1;XR=0;DG=1;DY=1;DR=0;k=scan_key();if(k==3) //再次按下3键开始{delay(50N);break;}}}}void yunxing() //运行程序{ uchar i;delay(50N);while(1){switch(Operation_Type){case 1://东西向绿灯与南北向红灯亮sec=GT;while(1){if(sec>-1){TR0=1;display(sec);BG=1;BY=1;BR=0;NG=1;NY=1;NR=0;XG=0;XY=1;XR=1;DG=0;DY=1;DR=1;zanting();}else{TR0=0;Operation_Type=2;break;}}break;case 2://东西向黄灯亮5s,绿灯关闭sec=YT;while(1){if(sec>-1){TR0=1;BG=1;BY=1;BR=0;NG=1;NY=1;NR=0;XG=1;XY=~XY;XR=1;DG=1;DY=~DY;DR=1;for(i=0;i<50;i++) //以数码管显示来延时{display(sec);}zanting();}else{TR0=0;Operation_Type=3;break;}}break;case 3://东西向红灯,南北向绿灯亮sec=RT;while(1){if(sec>-1){TR0=1;display(sec);BG=0;BY=1;BR=1;NG=0;NY=1;NR=1;XG=1;XY=1;XR=0;DG=1;DY=1;DR=0;zanting();}else{TR0=0;Operation_Type=4;break;}}break;case 4://东西向红灯亮,南北向黄灯亮5ssec=YT;while(1){if(sec>-1){TR0=1;BG=1;BY=~BY;BR=1;NG=1;NY=~NY;NR=1;XG=1;XY=1;XR=0;DG=1;DY=1;DR=0;for(i=0;i<50;i++){display(sec);}zanting();}else{TR0=0;Operation_Type=1;break;}}}}}void shan(){P2=0XB6;P3=0X37;delay(5N);P2=0X6D;P3=0X2F;delay(5N);P2=0XDB;P3=0X1B;delay(5N);}main(){P1M0=0XFF;P1M1=0X00;TMOD=0X01; //定时器T0,工作方式1TH0=-50000/256; //定时器T0赋初值TL0=-50000%256;EA=1; //开总中断ET0=1; //定时器T0中断允许while(1){P02=1;P03=1;shan(); //开始时二极管闪烁scan_key();if(k==1)dingshi();if(k==2)yunxing();}}void timer0(void) interrupt 1{TH0=-50000/256;TL0=-50000%256;count++;if(count==20){count=0;sec--;}}五、实验过程中遇到的问题及解决方法问题1:将各路口的灯用P2,P3口赋值来表示,显示乱码解决:直接对每个灯进行位定义,然后直接赋值,这样简单明了易查错,而且对按键扫描程序没有任何影响问题2:设定的时间走到1直接显示下一个灯的时间,没有显示0解决:检查发现在执行时if(sec>0),改成if(sec>-1)运行正常问题3:黄灯闪烁程序为XG=1;XY=~XY;XR=1;DG=1;DY=~DY;DR=1;发现运行时黄灯不闪烁,一直为黄色解决:因为运行时执行指令的速度较快,导致黄灯的熄灭人的眼睛无法识别,加延时函数delay(5N)既可,当加入延时函数又出现了新的问题,即数码管显示不连续,有的位显示一直闪烁,分析问题在于当加入延时函数后影响了数码管的扫描频率,数码管是动态显示的,靠的就是快速移位显示来显示4为数码管,将延时函数用数码管显示程序来代替,保证了数码管的显示,又解决了黄灯的闪烁问题。

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

系统实验报告——基于51单片机的交通灯设计专业:XX学生姓名:xx XX学号:***********指导教师:wwwwwwwwwww2000年x月x日目录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数码管显示时间电路设计 (4)3.4信号灯控制电路设计 (5)4 系统软件设计 (5)4.1主程序设计 (5)5 调试及性能分析 (6)5.1调试分析 (6)5.1.1 软件调试 (6)5.1.2 硬件调试 (6)5.1.3 系统功能调试 (6)6 心得体会 (6)参考文献 (8)附录1 系统原理图 (9)附录3 程序清单 (10)附录3元器件清单 (14)1 设计任务和性能指标1.1设计任务利用单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。

用红、绿、黄发光二极管作信号灯。

如图上图所示。

设东西向为主干道,南北为支干道。

1.2性能指标1. 状态1:仅亮灯,数码管不工作。

按下键4,红/黄/绿三色灯交替亮:红—〉(20秒)黄(闪烁)—〉(5秒)绿—〉(20秒) 黄(闪烁)—〉(5秒)红2. 状态2:灯和数码管相结合,模拟十字路口的交通灯 在以上功能的基础上数码管倒计时显示时间。

南东2 设计方案2.1任务分析模拟交通灯控制器就是使用单片机来控制一些LED 和数码管,模拟真实交通灯的功能。

红、黄、绿交替闪亮,利用数码管倒计数显示间隔等,用于管理十字路口的车辆及行人交通,计时牌显示路口通行转换剩余时间等2.2方案设计根据设计的要求可知,系统的硬件原理框图如下图所示。

单片机键盘LED 显示三色指示灯系统硬件框图单片机选用A T89S52,它与8051系列单片机全兼容,但其内部带有4KB 的FLASH R OM ,设计时无需外接程序存储器,为设计和调试带来极大的方便。

南北向和东西向各采用2个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。

键盘系统可以根据系统的需要设置不同的键的个数,可以选择线式键盘或矩阵式键盘,若单片机的IO 口不够用时,可以考虑扩展8255或8155满足系统的要求。

2. 软件方案根据设计要求,程序框图如图1所示。

软件可由汇编语言完成,也可由C 语言完成。

软件设计可以分为以下几个功能模块: 主程序:初始化及键盘监控。

计时程序模块:为定时器的中断服务子程序,完成0.1秒(或其他时间)和1秒的时间定时。

显示程序模块:完成60个发光二极管(实际上只需驱动30个)和8个LED 数码管的显示驱动。

程序流程图见下一页:程序流程图3 系统硬件设计3.1单片机的最小系统ATMEL 公司生产的AT89S52单片机它是硬件电路的核心部分,时钟电路晶振使用12MHz ,复位电路采取按键复位方式。

具体连接图3.1和图3.2。

单片机系统的时钟电路开始初始化判断当前状态调用正常 运行子程序 调用紧急 状态子程序单片机系统的复位电路3.2电源电路设计电源用5V直流变压器直接供电。

3.3数码管显示电路显示电路采用8个共阳数码管,P1口作为数码管的输入,P0.4、P0.5、P0.6 P0.7分别控制东西南北四路数码管的位选端C1,C2,C3,C4。

数码管显示电路(上图是共阴数码管)3.4信号灯控制电路应急电路4 系统软件设计4.1 主程序设计开始参数初始化显示子程序中断处理紧急中断子程序系统程序流程图5 调试及性能分析5.1 调试分析5.1.1 软件调试软件调试主要是利用proteus仿真软件完成电路的搭建,运行以发现设计中的错误及时改正。

5.1.2 硬件调试硬件调试主要是检测硬件电路是否有短路、断路、虚焊等。

具体步骤及测试结果如下:(1)检查电源与地线是否全部连接上,用万用表对照电路原理图测试各导线是否完全连接,对未连接的进行修复。

(2)参照原理图,检查各个器件之间的连接是否连接正确,是否存在虚焊,经测试,各连接不存在问题。

(3)以上两项检查并修复完后,给该硬件电路上电,电源指示灯点亮。

5.1.3 系统功能调试通过软件仿真显示,系统基本能完成要求。

6 心得体会这次系统实验历时两周的时间,在这实验过程里我们巩固了从编程、焊板到调试的专业知识,逻辑思维和动手能力都得到了很大的提高。

对于交通灯这个题目,由于以前学单片机这个课程时,做过类似相关的实验,觉得这个比较简单而且做出的东西也比较直观,查阅了大量的资料,在老师的讲解帮助下,我们对如何通过单片机控制交通灯这个题目,有了进一步的理解。

要解决的主要问题就是程序的设计了,虽然感觉交通灯程序没什么难的,就是数码管倒计时显示加几个闪烁的二极管就完事,但是也许是起初想的太简单,设计时到了细节处,也出了不少问题,而且很难被检查出来,但是最后经过我们的不断努力,还是写出来正确的代码。

上周终于拿到了PCB板,怀着紧张的心情一个器件一个器件的完成板子的焊接,最后通过串口线把程序下载到板子上,但是板子却没有意料中的效果,而且没一点现象,用万用表检查单片机的电压差不多为零,查出了问题所在松了口气,后来在网上查资料知道原来变压器的接口那三个引脚,两个GND必须短接,要不就不能正常供电,本以为短接后就正常了,但是数码管还是没反应,二极管基本可以正常显示,这时候真是一种煎熬,差了很久找不到原因,后来对照着原理图一个个的检查,最后发现原来是数码管封装错了,板子上的数码管公共极是3、8两个引脚,但是原理图上封装的事1、6,当时也没有注意,以为只要是共阴管就没问题了,没想到软件本身就存在错误。

通过这次系统实验,对以前学过的知识进行了巩固,加深了理解,提高了应用的能力,而且提高了我们的发现、分析、解决问题的能力,同时提高了大家对专业的认识及兴趣,对于我们工科生来说,对以后就业很有帮助。

最后,尤其要感谢xx和xx老师的指导和帮助,我们才得以顺利完成这次系统试验。

参考文献[1] 邹丽新.单片微型机原理及应用苏州大学出版社,2006.12[2]彭伟.单片机C语言程序设计实训100例.北京:电子工业出版社,2009。

8附录1 系统原理图系统原理图附录2 程序清单;------------------------------------;程序实现功能;西南北路口直行与转弯交替通行,数码管显示直行通行倒计时,红绿黄灯显示包括人行道在内的道路交通状态。

;某一方向道路拥挤时,可以人工控制调节东西南北方向通行时间。

;紧急情况时,各路口交通灯显示红灯,数码管保持数据不变。

#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;sbit smgwe1=P0^4;sbit smgwe2=P0^5;sbit smgwe3=P0^6;sbit smgwe4=P0^7;sbit smgdot=P2^7;sbit south_green=P2^0;sbit south_red=P2^1;sbit south_yellow=P2^2;sbit east_green=P2^3;sbit east_red=P2^4;sbit east_yellow=P2^5;sbit num_a=P0^0;sbit num_b=P0^1;sbit num_c=P0^2;sbit num_d=P0^3;uchar count;uchar type=1;uchar num;uchar south_dispnum=10,east_dispnum=5;void delay_ms(uint z){uchar x,y;for(x=0;x<z;x++)for(y=0;y<123;y++);}void timer0_init(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1;TR0=1;}void display(uchar south_dispnum,uchar east_dispnum) {uchar south_dispnum1,south_dispnum2;uchar east_dispnum1,east_dispnum2;south_dispnum1=south_dispnum/10;south_dispnum2=south_dispnum%10;east_dispnum1=east_dispnum/10;east_dispnum2=east_dispnum%10;smgwe1=1;smgwe2=0;smgwe3=0;smgwe4=0;num_d=south_dispnum1/8;num_c=south_dispnum1%8/4;num_b=south_dispnum1%4/2;num_a=south_dispnum1%2;delay_ms(1);smgwe1=0;smgwe2=1;smgwe3=0;smgwe4=0;num_d=south_dispnum2/8;num_c=south_dispnum2%8/4;num_b=south_dispnum2%4/2;num_a=south_dispnum2%2;delay_ms(1);smgwe1=0;smgwe2=0;smgwe3=1;smgwe4=0;num_d=east_dispnum1/8;num_c=east_dispnum1%8/4;num_b=east_dispnum1%4/2;num_a=east_dispnum1%2;delay_ms(1);smgwe1=0;smgwe2=0;smgwe3=0;smgwe4=1;num_d=east_dispnum2/8;num_c=east_dispnum2%8/4;num_b=east_dispnum2%4/2;num_a=east_dispnum2%2;delay_ms(1);}void traffic_light(){switch(type){case 1: south_red=1;south_green=0;south_yellow=0;east_red=0;east_green=1;east_yellow=0;display(south_dispnum,east_dispnum);if(east_dispnum==0){east_dispnum=5;south_dispnum=5;type=2;}break;case 2:south_red=1;south_green=0;// south_yellow=0;east_red=0;east_green=0;// east_yellow=0;display(south_dispnum,east_dispnum);if(east_dispnum==0){south_dispnum=5;east_dispnum=10;type=3;}break;case 3:south_red=0;south_green=1;south_yellow=0;east_red=1;east_green=0;east_yellow=0;display(south_dispnum,east_dispnum);if(south_dispnum==0){south_dispnum=5;east_dispnum=5;type=4;}break;case 4:south_red=0;south_green=0;// south_yellow=0;east_red=1;east_green=0;// east_yellow=0;display(south_dispnum,east_dispnum);if(east_dispnum==0){south_dispnum=10;east_dispnum=5;type=1;}break;}}void main(){timer0_init();while(1){traffic_light();}}void timer0_isr() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==5){if(type==2){east_yellow=!east_yellow;}if(type==4){south_yellow=!south_yellow;}}if(count==20){count=0;south_dispnum--;east_dispnum--;}}附录1 元器件清单数量器件类型原理图符号封装Used Part Type Designator Footprint Description==== =================== ========== =========== ============== 排阻3 10K排阻RP1 RP3 SIP9RP4==== =================== ========== =========== ============== 电阻(1/8w)8 150 R20 R21 AXIAL0.4R22 R23R24 R25R26 R278 1K R1 R2 R3 AXIAL0.4R4 R5 R6R7 R10==== =================== ========== =========== ============== 电容(耐压16V)1 0.1u C9 RAD0.22 20p C5 C6 RAD0.21 22u C12 RB.2/.41 470u C7 RB.2/.4==== =================== ========== =========== ============== 晶振1 11.0592M XTAL1 XTAL1==== =================== ========== =========== ============== 三极管10 9013 Q1 Q2 Q3 TO-92C NPN TransistorQ4 Q5 Q6Q7 Q8 Q9Q10==== =================== ========== =========== ============== 集成块1 74LS47 U2 DIP161 AT89S51 U1 DIP401 LM7805 U5 TO-220S==== =================== ========== =========== ==============按键(四脚扁平,脚距4.57*7.1)5 按键K1 K2 K3 KEY6x6K4KEYRESET==== =================== ========== =========== ============== 发光二极管3 红灯LED2 LED5 LEDLEDPower2 黄LED3 LED6 LED2 绿LED1 LED4 LED==== =================== ========== =========== ============== 0.8"数码管(带小数点)4 数码管DS1 DS2 LED08DS3 DS4==== =================== ========== =========== ============== 1 整流桥D1 BRIDGE_C==== =================== ========== =========== ============== 9V变压器。

相关文档
最新文档