项目实战:51单片机控制交通信号灯

发布者:RadiantSerenity最新更新时间:2022-01-13 来源: eefocus关键字:51单片机控制  交通信号灯  仿真软件 手机看文章 扫描二维码
随时随地手机看文章

51单片机控制交通信号灯
说明:最近接了一个小项目,要在一个十字路口用单片机实现交通信号灯的控制

我试着用仿真软件做了一下,效果还可以,希望和大家一起学习

总体设计仿真图在这里插入图片描述
单片机仿真设计部分
在这里插入图片描述
公路信号灯显示仿真部分
在这里插入图片描述
四个方向仿真设计部分
在这里插入图片描述
启动仿真后开始计时
在这里插入图片描述

C语言参考源代码:


/*****************************************************

十字路口交通灯控制 C 程序


******************************************************/


#define uchar unsigned char

#define uint unsigned int

#include

/定义控制位*****************/

sbit Time_Show_LED2=P2^5;//Time_Show_LED2控制位

sbit Time_Show_LED1=P2^4;//Time_Show_LED1控制位

sbit EW_LED2=P2^3; //EW_LED2控制位

sbit EW_LED1=P2^2; //EW_LED1控制位

sbit SN_LED2=P2^1; //SN_LED2控制位

sbit SN_LED1=P2^0; //SN_LED1控制位

sbit SN_Yellow=P1^6;//SN黄灯

sbit EW_Yellow=P1^2;//EW黄灯

sbit EW_Red=P1^3;//EW红灯

sbit SN_Red=P1^7;//SN红灯

sbit EW_ManGreen=P3^0;//EW人行道绿灯

sbit SN_ManGreen=P3^1;//SN人行道绿灯

sbit Special_LED=P2^6;//交通正常指示灯

sbit Busy_LED=P2^7;//交通繁忙指示灯

sbit Nomor_Button=P3^5;//交通正常按键

sbit Busy_Btton=P3^6;//交通繁忙按键

sbit Special_Btton=P3^7;//交通特殊按键

sbit Add_Button=P3^3;//时间加

sbit Reduces_Button=P3^4;//时间减

bit Flag_SN_Yellow; //SN黄灯标志位

bit Flag_EW_Yellow;//EW黄灯标志位

char Time_EW;//东西方向倒计时单元

char Time_SN;//南北方向倒计时单元

uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化赋值,正常模式

uchar EW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量

uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段选码

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(2);

EW_LED2=0;

P0=table[h];

EW_LED1=1;

Delay(2);

EW_LED1=0;


h=Time_SN/10;

l=Time_SN%10;

P0=table[l];

SN_LED2=1;

Delay(2);

SN_LED2=0;

P0=table[h];

SN_LED1=1;

Delay(2);

SN_LED1=0;


h= EW1/10;

l= EW1%10;

P0=table[l];

Time_Show_LED1=1;

Delay(2);

Time_Show_LED1=0;

P0=table[h];

Time_Show_LED2=1;

Delay(2);

Time_Show_LED2=0;

}

/外部0中断服务程序**/


void EXINT0(void)interrupt 0 using 1

{

EX0=0; //关中断


if(Add_Button0) //时间加

{

EW1+=5;

SN1+=5;

if(EW1>=100)

{

EW1=99;

SN1=79;

}

}

if(Reduces_Button0) //时间减

{

EW1-=5;

SN1-=5;

if(EW1<=40)

{

EW1=40;

SN1=20;

}


    } 

1

if(Nomor_Button0)//测试按键是否按下,按下为正常状态

{

EW1=60;

SN1=40;

EWL1=19;

SNL1=19;

Busy_LED=0;//关繁忙信号灯

Special_LED =0;//关特殊信号灯

}

if(Busy_Btton0) //测试按键是否按下,按下为繁忙状态

{

EW1=45;

SN1=30;

EWL1=14;

SNL1=14;

Special_LED=0;//关特殊信号灯

Busy_LED=1;//开繁忙信号灯


}

if(Special_Btton==0)//测试按键是否按下,按下为特殊状态

{

EW1=75;

SN1=55;

EWL1=19;

SNL1=19;

Busy_LED=0;//关繁忙信号灯

Special_LED =1;//开特殊信号灯


}

EX0=1;//开中断

}

/***T0中断服务程序/

void timer0(void)interrupt 1 using 1

{

static uchar count;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;


if(count==10)

{

1

2

if(Flag_SN_Yellow1) //测试南北黄灯标志位

{SN_Yellow=~SN_Yellow;}

if(Flag_EW_Yellow1) //测试东西黄灯标志位

{EW_Yellow=~EW_Yellow;}

}

if(count20)

{

Time_EW–;

Time_SN–;

if(Flag_SN_Yellow1)//测试南北黄灯标志位

{SN_Yellow=~SN_Yellow;}

if(Flag_EW_Yellow==1)//测试东西黄灯标志位

{EW_Yellow=~EW_Yellow;}

count=0;

}


}

/主程序开始*/

void main(void)


{

Busy_LED=0;

Special_LED=0;

IT0=1; //INT0负跳变触发

TMOD=0x01;//定时器工作于方式1

TH0=(65536-50000)/256;//定时器赋初值

TL0=(65536-50000)%256;

EA=1; //CPU开中断总允许

ET0=1;//开定时中断

EX0=1;//开外部INTO中断

TR0=1;//启动定时


while(1)


{ /S0状态***/

EW_ManGreen=0; //EW人行道禁止

SN_ManGreen=1;//SN人行道通行

Flag_EW_Yellow=0; //EW关黄灯显示信号

Time_EW=EW;

Time_SN=SN;

while(Time_SN>=5)

{P1=S[0]; //SN通行,EW红灯

Display();}

/S1状态***/

P1=0x00;

while(Time_SN>=0)

{Flag_SN_Yellow=1; //SN开黄灯信号位

EW_Red=1; //SN黄灯亮,等待左拐信号,EW红灯


Display();

}

/S2状态***/

Flag_SN_Yellow=0; //SN关黄灯显示信号

Time_SN=SNL;

while(Time_SN>=5)

{P1=S[2];//SN左拐绿灯亮,EW红灯

Display();}


/S3状态***/

P1=0x00;

while(Time_SN>=0)

{Flag_SN_Yellow=1; //SN开黄灯信号位

EW_Red=1; //SN黄灯亮,等待停止信号,EW红灯


Display();}


/*赋值/

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;


/S4状态***/

EW_ManGreen=~EW_ManGreen;//EW人行道通行

SN_ManGreen=~SN_ManGreen;//SN人行道禁止

Flag_SN_Yellow=0; //SN关黄灯显示信号

Time_EW=SN;

Time_SN=EW;

while(Time_EW>=5)

{P1=S[4]; //EW通行,SN红灯

Display();}

/S5状态***/

P1=0X00;

while(Time_EW>=0)

{Flag_EW_Yellow=1;//EW开黄灯信号位

SN_Red=1;//EW黄灯亮,等待左拐信号,SN红灯

Display();}

/S6状态***/

Flag_EW_Yellow=0; //EW关黄灯显示信号

Time_EW=EWL;

while(Time_EW>=5)

{P1=S[6];//EW左拐绿灯亮,SN红灯

Display();}


/S7状态***/

P1=0X00;

while(Time_EW>=0)

{Flag_EW_Yellow=1; //EN开黄灯信号位

SN_Red=1;//EW黄灯亮,等待停止信号,SN红灯

Display();}


/*赋值/

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;

}

关键字:51单片机控制  交通信号灯  仿真软件 引用地址:项目实战:51单片机控制交通信号灯

上一篇:单片机水塔控制系统
下一篇:51单片机控制的数字温度计

推荐阅读最新更新时间:2024-11-08 10:21

51单片机控制SL811HS的USB主机底层驱动
引言 基于USB接口的设备使用方便,性价比高,因此在人们的工作和生活中得到了广泛的应用,如U盘,移动硬盘,光驱,USB摄像头,USB鼠标键盘等,同时,51系列单片机以其成熟的技术和高性价比吸引了大量国内用户,被广泛应用于测控和自动化领域,因此,如果在51单片机系统中增加USB主机接口,实现对USB从机设备的控制,则该单片机系统可以充分利用现有的各种USB从机设备,大大扩展单片机系统功能。 本设计实现了在51单片机系统中增加USB主机功能,采用普通51单片机外接专用USB接口芯片的方案,这种方案虽然会使系统传输速度受到限制,而且在稳定性有所欠缺,但此方案设计灵活性高,且易于移植,为低成本产品的开发提供了广阔前景,设计中采用51单
[单片机]
multisim10仿真软件中示波器如何看幅度及相位
MulTIsim是一个强大的电路图捕捉和仿真环境,工程师、学生以及教授可用来仿真电路和设计印刷电路板(PCB)原型。如何在mulTIsim10仿真软件中示波器看幅度及相位呢? mulTIsim中频率、幅值参数显示的方法 在下面“Instruments”工具栏种点击“Measurementprobe”,如下图图标,选中后到连线上单击一下即可。 查看mulTIsim10仿真软件中示波器幅度及相位的方法 1、打开仿真按钮,双击示波器; 2、按暂停键,通过调节时间轴比例和通道比例来确定合适的位置即可方便的查看幅值和相位。
[测试测量]
multisim10<font color='red'>仿真软件</font>中示波器如何看幅度及相位
仿真软件ProteuS 在ARM系统设计中的应用
引 言 现在,人们生活中的每个角落都有嵌入式设备的存在,比如DVD、移动电话、MP3及掌上电脑等等。这些嵌入式设备多采用32位RISC嵌入式处理器作为核心部件。其中基于ARM核的嵌入式处理器独占鳌头,在32位RISC处理器中占据超过75%的市场份额。因而越来越多的电子爱好者都加入了学习ARM的队伍中。通过和一般单片机系统开发过程的比较不难发现,嵌入式系统的设计包括硬件设计和软件设计两个方面,其调试过程包括软件调试、硬件测试、系统调试3个过程。软件调试一般比较容易进行,但是硬件测试和系统调试则比较麻烦,因为要进行这两个过程必须在 PCB制作、元器件焊接完毕之后才能进行;而PCB的制作、元器件的焊接是非常费时费力的,如果能采用仿真工
[单片机]
<font color='red'>仿真软件</font>ProteuS 在ARM系统设计中的应用
51单片机控制P2口8位LED灯左移C语言程序
此 程序控制 P2.0~P2.7口8个LED(P2.0~P2.7)灯逐个依次点这,又从(P2.7~P2.0)这样的顺序一直到全部被点亮。 #include reg52.h //头文件 void delay(unsigned int x)//延时函数 { while(x--); } void main(void) { unsigned char i;//定义一个无符号字型局部变量i取值范围0~255 delay(50000); P2=0xfe; for(i=0;i 8;i++)//加入for循环,表明for循环大括号中程序循环执行8次 { delay(50000);//调用延时函数,更
[单片机]
演示仿真在高频电子设计中应用
  随着电子技术的飞速发展,通信领域的新技术也不断涌现,诸如移动电话技术的升级、3G通信的成熟与普及、无线局域网、卫星通信等无线通信技术迅猛发展等。因此,用以讲述通信系统中各部分电路实现方法的高频电子线路课程显得更为重要。由于该课程具有概念多、电路类型多、分析方法多以及同单元电路中信号频率多等特点,使得学生们普遍反映这门课程学习起来比较难且兴趣不足,因此改善高频电子线路的教学方法、教学手段及教学效果,对于专业培养和造就高素质人才具有重要的作用。   1 传统教学中存在的问题   1.1 教学方法缺乏吸引力   教学过程中,通常是先进行一段时间的理论教学,再进行实验验证,最后进行综合性课程设计的教学方式,但是这样实施的教
[网络通信]
工业机器人仿真软件有哪些
工业机器人仿真软件是用于模拟工业机器人操作过程的软件工具,它们可以帮助工程师和技术人员在实际应用之前对机器人进行测试和优化。以下是一些常见的工业机器人仿真软件: RoboDK :RoboDK 是一款功能强大的机器人仿真和离线编程软件,支持多种机器人品牌,如Fanuc、KUKA、ABB等。它提供了丰富的工具,如3D可视化、碰撞检测、路径优化等。 CoppeliaSim (前称V-REP) :CoppeliaSim 是一款开源的机器人仿真软件,适用于教育和研究。它支持多种编程语言,如Python、MATLAB、Java等,可以进行复杂的机器人模拟。 RobotStudio :由ABB公司开发,RobotStudio 提供了一套完
[嵌入式]
单片机控制交通灯c51程序
先上图 /* 程序效果:单片机模拟控制交通灯程序,规则如下:当南北通车时,此时南北的绿灯亮,东西的红灯亮,之后南北的绿灯闪烁3次,过后黄灯亮,延时片刻,转东西绿灯亮同时南北红灯亮,之后东西的绿灯闪烁3次,过后黄灯亮,延时片刻;数码管显示的值都同步,结束。全部代码由http://www.51hei.com站长开发(由于站长对交通灯的规则不是特别了解,产生于事实冲突,敬请包涵) */ #include reg52.h //头文件 #define uchar unsigned char//宏定义 #define uint unsigned int uchar code table ={0x00,0x01,0x02,0x
[单片机]
<font color='red'>单片机控制</font><font color='red'>交通</font>灯c<font color='red'>51</font>程序
罗克韦尔自动化推出FactoryTalk® Logix Echo仿真软件
罗克韦尔自动化推出FactoryTalk® Logix Echo仿真软件 革新机器设计流程 (2021 年 9月 3 日,中国上海)全球最大的工业自动化、信息化和数字化转型企业之一罗克韦尔自动化公司近日推出FactoryTalk® Logix Echo控制器仿真软件,可有效优化机器性能,帮助机器设计人员节省时间和成本,加快产品上市速度。FactoryTalk Logix Echo仿真软件可与罗克韦尔自动化ControlLogix® 5580系列控制器协同工作,进一步赋能机器设计。 采用 FactoryTalk Logix Echo仿真软件 ,工程师可以在虚拟环境中对控制代码进行全面测试。该软件最多支持 17 个仿真控制器,
[工业控制]

推荐帖子

求个双色灯转换充电器电路9015和358的,谢谢。
说明:DC转DC,输入12V,输出12.6V2A,用方案9015和LM358的双色灯转换电路,谢谢。求个双色灯转换充电器电路9015和358的,谢谢。:time::time:
cxk2015 汽车电子
泣血求助:我的VxWorks怎么shell特别的慢呢?愿送全部分数给帮我的人!
泣血求助:我的VxWorks怎么shell特别的慢呢?不知怎么回事,我的VxWorks目标机shell特别的慢!我加载了一个CF卡,然后用ll看CF卡的文件,需要10分钟左右,才会一行一行的显示出列表来!而且,在shell下创建或打开CF卡上的文件也是半天才有反应!到底是怎么回事呢?请大侠们帮帮忙啊!我用的是Tornado2.2版本的,主机环境win2000和xp都试过了!都不行啊!用我的BSP在别人的Tornado2.2.1下创建的VxWorks镜像,然后在在我的开发板上
yejin 实时操作系统RTOS
6410的CAMERA问题
我用6410裸奔LCD启用了WIN0并且可以正常输出800*600的彩条信号,我的FRAMEBUFFER的地址是0X51000000后来我把摄像头信号采集过来用PREVIEWPATH模式DMA地址到0X51000000,也就是LCD的FRAMMEBUFFER地址,但是显示效果没东西,希望有哥们整过的,提点建议,我的QQ:634623163可以交流6410的CAMERA问题裸奔,很牛裸奔。猛男。老兄,过几天我跟着搞搞。嘿嘿。兄弟们你们说我这思路是不是对的啊还有要
baobeidudu 嵌入式系统
小信号放大电路设计_TLC2652应用案例.pdf
讲得挺通俗易懂的。给大家推荐一下!小信号放大电路设计_TLC2652应用案例.pdfkankanxian!是什么方面的知识呀。有没人知道。是不是新手没钱啊?:(谢谢了,不错的新手下载不到东西啊:\'(新手会赠送20芯币的新手下载不到东西啊新手下载不到东西啊原帖由clgzfq于2008-11-1919:16发表新手下载不到东西啊 为了维护我们大家的环境,请不要重复发帖在置顶帖有方便大家使用的报到送芯币活动帖子下还有积分规则可以参考如果有困难,请随
07haoyangde 模拟电子
WINCE ACCESS cdb 转换问题
我有一个access的a.mdb文件,通过activesync下载到wince开发板转换成a.cdb转换成功,再转换回.mdb也没错误,没乱码,但就是执行sql查询select*from时出现问题调用查询createtableabc(idint);也没问题//里面原来没有表abc再执行select*fromabc也没问题怀疑是转换过程因为字符集问题使表名发生了变化想查看a.cdb里面究竟有什么表,access
shortt WindowsCE
寻找一款嵌入式开发板,能流畅播放高清晰的MP4文件.量大,敬请关注
寻找一款开发板,要求:1、支持800*480及以上像素TFT屏,能够在这之上流畅播放MP4等格式的视频文件。2、WINCE5。0系统,并能免费提供BSP包。3、至少支持一路视频输入。4、SD卡,USB储存器,串口等驱动的支持。5、最好能提供核心板。如果能达到以上要求的公司或机购请与我联系,公司采购,量比较可观。QQ:371383396EMAIN:hwr2008@163.com寻找一款嵌入式开发板,能流畅播放高清晰的MP4文件.量大,敬请关注我有支持7寸模拟屏的方案
m200200 嵌入式系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved