产品概述

单片机红绿灯程序 给初学单片机朋友的干货,如何用单片机制作模拟交通灯?

小编 2024-11-24 产品概述 23 0

给初学单片机朋友的干货,如何用单片机制作模拟交通灯?

在生活中十字路口经常会见到交通信号灯,很多朋友都习以为常,初学电子或单片机的小伙伴们想知道如何动手实现这样的电路吗?今天我利用单片机基础知识手把手教大家如何实现一个模拟交通灯的电路。而现实中的交通灯都是用大功率器件来驱动的,例如到功率三极管或晶闸管等。那其控制电路也必须要单片机芯片,我们讲的是比较典型的一种国产芯片,STC宏晶公司出产的,其改进信号的运行速度是普通C51的十多倍,如果想学高端的单片机芯片,比如STM32、ARM、甚至DSP等高端单片机芯片,我认为先学好C51在学高端的,这样学习循序渐进,不会打消自己的学习积极性,便于建立自己学好单片机的信心。好了。我们言归正传,下面我们说说设计要求,我们是用万能PCB板由C51单片机焊接组成单片机最小应用系统,控制南北和东西两条干线十字路口的交通信号灯量灭,同时用两位共阳极的数码管进行倒计时。使两条干线交替成为放行线和禁止线。刚上电的时候东西绿色灯亮40 秒,然后红色灯亮30秒,黄灯亮3秒;南北绿色灯亮30 秒,然后红色灯亮40秒,黄灯亮3秒。执行一周期然后如此循环。

设计步骤

制作步骤1:根据控制要求选择电子元器件并绘制电路原理图

用AD10绘制电路原理图

电子元器件明细表

单片机芯片STC89C52RC+ 1片

共阳数码管 2个

发光二极管 12个 (两红、两绿、亮黄)

排阻10K欧 1个

限流电阻220欧姆 12个

三极管PNP型9102 2个

晶振11.0592MHZ 1个

电解电容10uF 1个

瓷片电容30P 2个

电阻10K欧 1个

电阻100欧 1个

微动按键 1个

电阻330欧 2个

PCB万能电路板 1块

步骤2:根据电路原理图编写控制程序

我们写的程序由于是底层驱动程序,需要参考电路原理图,我们参考下面的原理图。因此要根据电路原理图来进行编写,程序不长,程序主要有主程序、亮灯转换程序、数码管扫描程序、定时中断程序四部分组成。如果不清楚的可以在讨论区留言,我们互相讨论。

便于读程序是参考原理图

参考程序如下:

#include<reg51.h>

#define seg_port0 P0//段码口

unsigned char code seg_code[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char timer=0;

bit flag1s=1;

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

sbit ew_green=P3^1;//东西方向绿灯

sbit ew_yellow=P3^2;//东西方向黄灯

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

sbit sn_green=P3^4;//南北方向绿灯

sbit sn_yellow=P3^5;//南北方向黄灯

sbit wela1=P1^1;//数码管位选信号

sbit wela2=P1^2;

sbit Latch=P1^0;

void traffic_light();//交通灯亮灯转换函数声明

void main(void)//主函数

{

EA=1;//打开总中断

Latch=1;

TH0=(65536-1000)/256;//设置定时初值

TL0=(65536-1000)%256;

ET0=1;//定时使能打开

TR0=1;//打开定时器

TMOD=0x01;//设置定时中断模式

while(1)

{

if(flag1s)//判断是否1秒到,位声明为flag1s

{

flag1s=0;

traffic_light();

}

}

}

void traffic_light( )//交通灯转换子程序

{

static unsigned char color=0;

static unsigned char timer=0;//因为在两个函数中都用到此变量所以要用设置为全局变量

if(timer==0)

{

switch(color)

{

case 0:sn_red=0;sn_green=1;sn_yellow=1;

ew_green=0;ew_red=1;ew_yellow=1;

timer=39;color=1;break;

case 1:sn_red=1;sn_green=0;sn_yellow=1;

ew_green=1;ew_red=0;ew_yellow=1;

timer=29;color=2;break;

case 2:sn_red=1;sn_green=1;sn_yellow=0;

ew_green=1;ew_red=1;ew_yellow=0;

timer=3;color=0;break;

default:break;

}

}

else

{

timer--;

seg_port0=seg_code[timer%10];

seg_port0=seg_code[timer/10%10];

}

}

void led_scan(void)//数码管扫描子程序

{

static unsigned char i=0;

switch(i)

{

case 0: wela1=0;wela2=1;i++;seg_port0=seg_code[timer%10];

break;

case 1:wela1=1;wela2=0;i=0;seg_port0=seg_code[timer/10%10];

break;

default:break;

}

}

void interrupttimer0() interrupt 1//定时中断子程序

{

static unsigned int tmr1s=0;

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

led_scan();

tmr1s++;

if(tmr1s>=1000)

{

tmr1s=0;

flag1s=1;

}

}

步骤3:根据电路原理图和编写好的控制程序进行PROTEUS软件仿真

用PROTEUS软件仿真,主要是验证自己所写的程序是否正确,但能通过仿真并不一定能在电路板上把程序跑起来,需要后续的调试。这一环节可以根据自己的具体情况进行删减。由于仿真是在理想状态下进行的,由于运行准确度的考虑,我没加三极管驱动,主要为了验证程序的正确性。

仿真南北绿灯亮东西红灯亮进行中

南北红灯亮东西绿灯亮进行中

南北黄灯亮东西黄灯亮等待下一循环中

步骤4:根据电路原理图用PCB万能板焊接电路

焊接时要注意的有以下几点:

第一点是在焊接单片机芯片时最好先焊接DIP-40插座或者用自紧锁插座,焊接好插座后再把单片机芯片安装上,如果没有这些插座在焊接时一般要断电用电烙铁的余热进行焊接,因为单片机内部用了大量的COM管对静电防范要求很高,这样通过断电用电烙铁的余热焊接40个引脚3次就可以焊接完成,同时能够确保单片机芯片被损坏。

第二点是在焊接单片机时钟晶振时,设计好晶振的位置,要尽可能的把晶振离单片机近些,同时要选好晶振的稳频电容,一般其容量在20P~30P之间就能满足要求。

第三点是要注意发光二极管的极性,一般长引脚是发光二极管的正极,短脚是发光二极管的负极,不要接错。

可用锁紧口插座方面烧写程序

焊接时所用的DIP-40芯片插座

焊接电路板正面

步骤5:焊接好电路板进行调试

51单片机电源要加5v不能太高,否则会烧坏芯片。前两天刚自己做好一个可调稳压电源,调节好电源5V,在没接电源之前一定要先检查一下焊接的电路板,主要看看极性有没有接错,有没有虚焊、漏焊等。检查没有问题可以通电试验。

南北绿灯亮东西红灯亮进行中

南北红灯亮东西绿灯亮进行中

南北黄灯亮东西黄灯亮等待下一循环中

以上是为各位刚学单片机朋友提供了开发的思路和经验,可以让大家从实践过程中提高自己发现问题、分析问题、解决问题的能力。 想学好单片机这门技术,只能是拿起烙铁焊电路,动手写程序,我们在学习技术的时候,一定要多动脑筋,遇到问题后,三思而后问。每天前进一小步,坚持一段时间后回头看看,就会发现你学会了很多。

欢迎刚学习单片机的小伙伴们转载、讨论。感觉喜欢的朋友给个赞哦!!

用PLC设计复杂十字路口的红绿灯控制系统,让交通井然有序

通过分析交通复杂十字路口信号灯的控制要求,结合S7-200的控制性能,在传统的交通灯控制基础上增加了左转控制功能,对系统进行了软、硬件设计,实现了复杂十字路口的东西南北方向的直行、左转及人行道信号灯的合理控制的功能,实验验证了方法的可靠性。

1 西门子S7-200与交通灯控制

S7-200系列是SIEMENS公司推出的一种小型PLC。它以紧凑的结构、良好的扩展性、强大的指令功能、低廉的价格,已经成为当代各种小型控制工程的理想控制器。S7-200包含了一个单独的S7-200CPU和各种可选择的扩展模块,可以十分方便地组成不同规模的控制器。其控制规模可以从几点到几百点。

目前,PLC已广泛应用于工业控制中,但是在交通控制方面应用方面还不是很广泛。PLC应用于交通控制还有很大的潜能,PLC以其可方便操作、可方便编程调试等特点,使得其有逐步取代以往的单片机在交通灯中的地位的趋势。本文主要研究了基于西门子S7-200的复杂十字路口的交通信号灯控制系统。

2 复杂十字路口交通灯控制系统的功能

一个复杂十字路口的交通灯控制系统主要包括东西南北方向上的车辆直行红黄绿灯的控制、车辆左转红绿灯的控制以及各方向上人行道的红黄绿灯的控制。

在现代化的大城市中, 十字交叉路口越来越多,在每个交叉路口都需要使用红绿灯进行交通指挥和管理,红、黄、绿灯的转换要有一个准确的时间间隔和转换顺序,这就需要有一个安全、自动的、协调的系统对红、黄、绿灯的转换进行管理。

3 设计

3.1 十字路口交通灯布置

在十字路口东西南北装上主干道“红黄绿”灯,人行道“红黄绿”灯,其中主干道的“红黄绿”灯又分为左转“红绿”灯和直行“红黄绿”灯。具体分布如图1,总共交通灯个数为32个,其中红灯12个、绿灯12个、黄灯8个。

图1 交通灯分布图

3.2 I/O分布及硬件接线图

输入只需一个启动按钮即可。输出有东西方向主干道直行“红黄绿”灯、东西方向人行道“红黄绿”灯、南北方向直行“红黄绿”灯、南北方向人行道“红黄绿”灯、东西方向左转“红绿”灯、南北方向左转“红绿”灯,共32个灯。

但东西方向主干道直行“红黄绿”灯和南北方向人行道“红黄绿”灯运行状况相同,南北方向直行“红黄绿”灯和东西方向人行道“红黄绿”灯运行状况相同,所以它们可以共用输出口,最后核计只需用10个PLC输出点就能达到目的。具体I/O分配表如表1。

表1 数字量输入输出地址分配表

控制系统主要任务是负责控制东西南北各红绿灯的状态和转换顺序, 关键是各个状态之间的转换和进行适当的时间延时。由于人行道上的交通灯控制与其同方向上的主干道直行灯控制一样,故下面有些讨论暂没有提及人行道上的交通灯控制。

3.3 按控制要求给出控制时序

按车辆通行顺序开启系统控制,先让南北方向左转车辆运行,接着让南北方向主干道直行车辆运行,再接着让东西方向左转车辆运行,然后东西方向主干道直行车辆运行,如此循环。正常情况下,在变换车道运行时,绿灯熄灭前会闪几秒钟,左转绿灯灭设定闪2S,直行绿灯灭设定闪3S。正常情况下循环运行时序图如下:

图2 交通灯控制时序图

3.4 软件设计

南北方向的交通灯控制程序流程图如图3:

图3 控制程序流程图

流程图省略的部分是东西方向的交通灯控制流程,其控制方案与南北方向的控制相似。

4 实验调试

根据系统对I/O口量的需求,选用S7-224来完成调试,硬件接线如图4 。

图4 系统硬件接线图

图中的标注以“南主左绿”为例说明,其中的“南”表示南边方向,“主”表示主干道,“左”表示左转,“绿”表示绿灯,其它的标注与此类似。

选一个循环周期(90S),以南北左转绿灯闪亮为开始,根据实验实际情况,记录其调试结果如表2,表中“1”表示其对应的I/O口在其对应的时间段输出为高电平,“0”则表示其对应的I/O口在其对应的时间段输出为低电平,“闪”表示闪亮。

表2 实验调试数据(一个循环周期)

从表中可以看出其工作顺序情况与事先设计的交通灯控制时序完全吻合,这证明了方法的有效性。分析上述表格数据,可以看出任何时刻都只有4个输出口处于工作状态。

分析同一时刻的4个输出口的情况可以看出,这四个输出口分别控制着交通的四个状态,即东西直行(东西人行道)、南北直行(南北人行道)、东西左转和南北左转,且在同一时刻,交通的四个状态中只有一个交通状态的绿灯在正常有效工作,而其它三个交通状态的红灯在正常有效工作(或者其绿灯处于闪亮阶段),这就保证了整个十字路口的井然有序工作。

结束语

本文详细介绍了单个复杂路口的PLC软硬件设计,随着现在城市交通的发展,越来越需要把多个路口看作一个整体来进行设计,根据各道路上的流量来控制各路口的红黄绿灯。但是单个路口的控制仍然是基础,只有在解决了单个路口的基础上才能更方便地解决多路口问题,所以说研究单个复杂十字路口交通灯的PLC控制问题仍然是具有一定的实际意义。

(摘编自《电气技术》,原文标题为“基于S7-200设计的复杂交通灯控制系统”,作者为张小青。)

相关问答

求一基于AT89C52 单片机 的交通灯 程序 :要求:(1)主、支干道交替...

[最佳回答]这个这么简单,你不要老是把老是的作业拿来问大家,我记得我们大学的后门有这么一句话,市场经济不相信眼泪的这个这么简单,你不要老是把老是的作业拿...

单片机 实现 红绿灯 ,一个路口,红灯20s,黄灯3s?

main函数最后加上while(1);如voidmain()//主函数{red=1;yellow=1;green=1;num1=1;init();temp=30;TR0=1;w...

单片机红绿灯 代码时间怎么改?

单片机红绿灯代码时间改动方法:确定需要改动的时间参数,包括红灯时间、绿灯时间和黄灯时间。打开单片机红绿灯控制程序。找到控制红绿灯时间的部分,通常是...

单片机 里面的 红绿灯 名称叫什么?

智能交通灯控制系统。智能交通灯控制系统。

红黄灯亮- 红绿灯 亮-绿黄灯亮-全亮-全灭-循环.】作业帮

[最佳回答]3BIT的二进制计数器,加上一个低频的时钟源就可以实现.当然用单片机也可以.来得更灵活.

行车记录仪 红绿灯 什么原理?

交通信号灯是用计算机语言的逻辑来编写的,根据不同的交通路口设定时间。由单片机芯片控制起灯亮的时间和灭的时间;具体就是当红灯该亮时,单片机控制信号灯红...

红绿灯 讯号机怎么把倒计时显示到LED屏?我测量了下都是220V的...

那你要看一下你计时器里是几种颜色。一般的进线到LED里面再接一条到倒计时器机里面,相同颜色相接就行了!倒计时里的单片机测的每个灯亮的时间,然后...

童鞋们,急需帮忙!交通灯控制逻辑电路设计?工业控制电路设...

[回答]1.设计一个十字路口的交通灯控制电路,要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次通行时间都设为25秒;2.要求黄灯先亮5秒,才能变换运行车...

能推荐几个基于 单片机 ,能设计出实物的毕业设计题目么?不要太难得,好做的?

如果是毕业项目,确实不适合太难的,淘宝有许多组件,什么循迹小车,循迹雷达等等很多,可以买回来,自己组装一下,编编程序,试验一下,这种组件里面一般都会有...如果...

朋友们 帮个忙呗:专业的 红绿灯 杆工程, 红绿灯 杆产品好不好都...

智能道闸还可添加车辆感应器,起到车过自动落杆,落杆时感应到杆下有车辆自动台杆(落杆时防砸车辆)。可选配专为道路收费而增设的值班岗亭及通道红绿...

猜你喜欢