产品选型

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

小编 2025-07-05 产品选型 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,在没接电源之前一定要先检查一下焊接的电路板,主要看看极性有没有接错,有没有虚焊、漏焊等。检查没有问题可以通电试验。

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

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

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

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

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

初学单片机,设计一款《交通灯控制系统》的元器件准备

接昨天的话题《设计一款“交通灯控制系统”的想法》,我们今天来看看需都要用到什么元器件?

第一个,单片机:其实用什么单片机都可以,鉴于我们是“初学单片机”的话题,为了表达和实验方便,这里选择传统的51系列,例如89C52单片机。

那么51单片机需要基本的外围元器件才能工作,例如晶体、参与振荡的电容,复位电路,剩下的就是供电。

这部分材料清单:

单片机:STC89C52RC;

复位电路:10k电阻、10uF电容、按键;

晶振12MHz、30P(20~50P均可)电容两只;

图一.单片机以及外围器件

第二个,显示部分:从上篇文中的功能表可以看出,需要4个两位的LED数码管,数码管分共阳和共阴型,我们选择共阳。当然共阴型也完全可以,相应的公共极驱动电路和程序做对应的改变就可以。提到驱动,我们知道,STC89C51单片机的I/O口输出一般也就8mA左右(器件手册各有不同),而数码管公共极电流最大应该在40mA左右(按单只5mA计算)。因此需要外接驱动,例如74HC245、74HC595、三极管等等。我们今天选择三极管,原因是取材方便,就是说用什么都可以,仅仅电路和程序做下改变。我之前为了省材料也做过不用驱动电路的设计,利用了单片机程序分时控制的原理,降低了每个端口的输出电流,也就是一次只点亮2个LED,把7段数码管当作2段来使用,这个话题我们以后有机会再聊。

这部分材料清单:

4只两位共阳型数码管(0.36英寸);

LED指示灯需要三种颜色各4只,四路共计12只,用1k的限流电阻就可以驱动。

电阻:数码管段码限流7只1K;LED因为每路同一时间只显示一位,因此用4只1K;因为绿色LED的压降大于红色和黄色,如果要求视觉完美的话单独给绿色LED使用4只680欧左右的电阻,这样亮度趋于一致。

三极管4只,驱动共阳型数码管使用PNP型,例如8550或9012;

图二. 显示部分元器件

第三部分,电源和控制:

此部分材料清单:

供电接口:可以使用你自己方便的材料,例如接线柱,3.5直径的圆孔插座;

开关:自锁开关,用于电源通断;

电源滤波电容:104pF(0.1uF)瓷片或独石电容,100~470uF电解电容;

单片机程序下载接口:三针即可;

操作按键:根据功能可多可少,加上复位先准备5只;

图三. 其它元器件

最后就是PCB:蚀刻、洞洞板连线、面包板均可,根据个人喜好选择。

这里是洞洞板:

洞洞板分电木和玻纤以及二者中间的不同材质,电木最差,正品玻纤最优。

图四. 常见电木洞洞板

除以上元器件以外,还需具有单片机下载程序的条件,当然也可以仅仿真,无需制作实物。

今天我们就聊到这里,下次继续做绘制原理图的步骤。

相关问答

单片机 的红绿灯控制程序如何写啊 - 小红薯BDA0DD94 的回答 -...

//--------------------------------------------------//名称:LED模拟交通灯//作者:彭伟《单片机C语言程序设计实训100例-基于8051PROT...

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

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

交通灯 的国内外研究现状和发展趋势怎样?

我也想知道啊不过我找到点研究现状目前设计交通灯的方案有很多,有应用CPLD设计实现交通信号灯控制器方法;有应用PLC实现对交通灯控制系统的设计;有...

交通灯 是每个国家的什么?

交通灯是各个国家管理交通的重要工具,是城市交通最重要的组成部分,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。近年来随着科技的飞速发展,...

单片机 外部中断实验(急救车与 交通灯 )怎么延时闪烁?

在单摆的中间放一个红外对管,这样单摆每过一次中间就会有一个脉冲信号。这个脉冲信号连接外部中断,通过中断来统计次数。再用定时器定时1秒,1秒后把中断次数输...

交通红绿灯工作原理的重要内容是什么?

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

交通信号灯的单片系统是什么?

靠的是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用MSC-51系列单片机Intel8031和可编程并行I/O接口芯片8255A...就是先设计一个时...

高电是什么专业?

专业性质:属职业鉴定专业课程设置:电子技术、工厂变配电技术、工厂电气控制技术、可编程序控制器(PLC)的原理与应用、MCS—51系列单片机的原理与应用。实操...

街上的红绿灯谁控制?

其中红绿灯智能引导系统常见解决方案有以下几种:一、单辆车通行控制方式(单车通行,无需刷卡)本方案适用于:通道较短,对进、出车辆的通行效率...

好基友们 谁能回答:酒泉放心人行通道闸机系统,人行通道闸...

[回答]本系统由单片机系统、键盘、LED显示、交通灯演示系统组成。系统包括人行道、左转、右转、以及基本的交通灯的功能。系统除基本交通灯功能外,还具有...

猜你喜欢