历史上的今天
返回首页

历史上的今天

今天是:2024年10月15日(星期二)

正在发生

2021年10月15日 | 基于51单片机的交通灯设计

2021-10-15 来源:eefocus

一.硬件方案

本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示。按键可以控制禁行、深夜模式、复位、东西通行、南北通行、时间加、时间减、切换等功能。共四个二位阴极数码管,东南西北各一个显示时间,四个数码管的阴极都接到STC89C51的P1口,阳极接到74HC245芯片上,通过P0口控制74HC245芯片,起到驱动放大作用。


主要硬件:51单片机+最小系统+数码管显示模块+LED指示灯模块+按键模块;

二.设计功能

(1)本设计采用四方向数码管显示时间的设计,更加符合真实的交通信号灯设计;

(2)7个按键:复位、夜间模式、紧急模式、设定时间、时间加、时间减、调试确定键;

(3)夜间模式:按下“夜间模式”按键后,四个方向的黄灯闪烁;

(4)紧急模式:当救护车、救火车等通过时,按下“紧急模式”按键,四个方向的红灯全部亮起;

(5)东西方向和南北方向的通行时间可以分开设置。就是模拟实际交通中的主干道和支干道。


三.设计原理图

(1)原理图主要采用AD软件进行设计,如图:

(2)Protues仿真图如下:

四.软件设计

(1)程序流程图

(1)主程序源码:


//主程序

void main()

{

TMOD=0X11;     //定时器设置

TH1=0X3C;

TL1=0XB0;

TH0=0X3C; //定时器0置初值 0.05S

TL0=0XB0;

EA=1; //开总中断

ET0=1; //定时器0中断开启

ET1=1;    //定时器1中断开启

TR0=1; //启动定时0

TR1=0; //关闭定时1

    logo(); //开机初始化

P2=0Xc3; // 开始默认状态,东西绿灯,南北黄灯   

    sec_nb=sec_dx+5; //默认南北通行时间比东西多5秒

while(1)   //主循环

{  

key(); //调用按键扫描程序

display(); //调用显示程序

}

}

//函数的定义部分

void key(void) //按键扫描子程序

{  

if(k1!=1) //当K1(时间加)按下时

{

display();        //调用显示,用于延时消抖

if(k1!=1) //如果确定按下

{

  TR0=0;         //关定时器

shanruo=0; //闪烁标志位关

P2=0x00; //灭显示

TR1=0; //启动定时1

if(set==0) //设置键按下

set_timedx++;    //南北加1S

else

set_timenb++;    //东西加1S

if(set_timenb==100)

set_timenb=1;

if( set_timedx==100)

set_timedx=1;    //加到100置1

sec_nb=set_timenb ; //设置的数值赋给东西南北

sec_dx=set_timedx;

  do

display(); //调用显示,用于延时

}

while(k1!=1); //等待按键释放

}

}


if(k2!=1) //当K2(时间减)按键按下时

{

display();        //调用显示,用于延时消抖  

if(k2!=1) //如果确定按下

{

TR0=0;          //关定时器0

shanruo=0; //闪烁标志位关

P2=0x00; //灭显示

TR1=0; //关定时器1

if(set==0)

set_timedx--;  //南北减1S

else

set_timenb--;  //东西减1S

if(set_timenb==0)

set_timenb=99;

if( set_timedx==0 )

set_timedx=99;    //减到1重置99

sec_nb=set_timenb ; //设置的数值赋给东西南北

sec_dx=set_timedx;

  do

    { 

display();        //调用显示,用于延时

}

while(k2!=1);    //等待按键释放

}

}


if(k3!=1) //当K3(确认)键按下时

{

display();        //调用显示,用于延时消抖

if(k3!=1) //如果确定按下

{

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

sec_nb=set_timenb; //从中断回复,仍显示设置过的数值

sec_dx=set_timedx; //显示设置过的时间

TR1=0; //关定时器1

if(set==0) //时间倒时到0时

P2=0X00; //灭显示

Green_dx=1; //东西绿灯亮

Red_nb=1; //南北红灯亮

sec_nb=sec_dx+5; //回到初值

}

else 

P2=0x00; //南北绿灯,东西红灯

Green_nb=1;

Red_dx=1;

sec_dx=sec_nb+5; 

}

}

}

 

if(k4!=1) //当K4(切换)键按下

    {

display();        //调用显示,用于延时消抖

if(k4!=1) //如果确定按下

{  

TR0=0; //关定时器0

set=!set; //取反set标志位,以切换调节方向

TR1=0; //关定时器1

dx_nb=set;

do

{

display();    //调用显示,用于延时

}

while(k4!=1);   //等待按键释放

}

}


if(k5!=1) //当K5(禁止)键按下时

{

    display();        //调用显示,用于延时消抖

    if(k5!=1) //如果确定按下

    {

    TR0=0; //关定时器

P2=0x00; //灭显示

Red_dx=1;

Red_nb=1; //全部置红灯

TR1=0;

sec_dx=00; //四个方向的时间都为00

sec_nb=00;

do

{

display(); //调用显示,用于延时

}

while(k5!=1); //等待按键释放

    }

}

if(k6!=1) //当K6(夜间模式)按下 

{

    display();        //调用显示,用于延时消抖 

    if(k6!=1) //如果确定按下

    {

    TR0=0; //关定时器

P2=0x00;

TR1=1;

sec_dx=00; //四个方向的时间都为00

sec_nb=00;

do

{

display();   //调用显示,用于延时

}

while(k6!=1); //等待按键释放

    }

}

}

推荐阅读

史海拾趣

GC Electronics公司的发展小趣事
传感器本身出现故障,如损坏、老化或灵敏度降低等,可能导致误报。
American Technical Ceramics (ATC)公司的发展小趣事
传感器本身出现故障,如损坏、老化或灵敏度降低等,可能导致误报。
爱特姆(ATOM)公司的发展小趣事

爱特姆科技自在美国德克萨斯州休斯顿市成立以来,便致力于电子行业的创新与发展。1998年,公司成功创立了“ATOM”品牌,标志着其正式踏入了品牌化发展的道路。起初,爱特姆以台湾、深圳、昆山为主要研发生产基地,凭借对技术的不断追求和对市场的敏锐洞察,逐渐在连接器领域取得了突破。

台湾富致(FUZETEC)公司的发展小趣事

自1983年Futaba的VFD产品被福特汽车公司采用后,其在美国三大汽车厂的市场占有率迅速达到100%。这一成就不仅证明了Futaba VFD产品在汽车行业的卓越性能和广泛应用,还推动了其在全球汽车市场上的快速扩张。VFD的抗震性能、良好的温差适应性以及高可靠性,使其在汽车仪表盘和抬头显示器等关键部件中扮演了重要角色。随着新能源汽车的兴起,Futaba的VFD技术也进一步适应市场需求,为新能源汽车提供了更加先进的显示解决方案。

Cliff Electronic Components公司的发展小趣事

除了在工业控制和汽车领域取得显著成就外,Futaba还将其技术延伸至休闲娱乐领域。公司开发的遥控飞机、车、船等产品,凭借其先进的无线遥控技术和卓越的性能表现,成为户外休闲运动的热门选择。特别是2.4G接收机的推出,进一步丰富了Futaba的产品线,满足了不同消费者的需求。在航模遥控器市场中,Futaba凭借其独特的技术优势和品牌影响力,占据了重要地位。这一领域的拓展不仅为公司带来了新的增长点,还进一步提升了Futaba在全球电子行业中的知名度和影响力。

飞翼科技(FEIYI)公司的发展小趣事

为了更好地服务于中国市场,Futaba在2002年成立了双叶电子科技开发(北京)有限公司。该公司专营Futaba的全线产品,包括VFD真空荧光显示管和RC无线遥控设备等。这一举措标志着Futaba在全球化布局上迈出了重要一步,也为公司在中国市场的快速发展奠定了基础。北京分公司的成立不仅加强了Futaba与中国客户的联系,还促进了公司在技术、产品和市场等方面的全方位合作。

问答坊 | AI 解惑

数字电路非常基础的教材

数字电路非常基础的教材…

查看全部问答>

来讨论下VHDL里边的库吧

最近用VHDL编程,发现有很多时候遇到《Error (10327): VHDL error at and2.vhd(11): can\'t determine definition of operator \"\"+\"\" -- found 0 possible definitions》这样的问题,开始不知道为什么,后来在知道不同的数据类型的运算是定义在 ...…

查看全部问答>

为什么9650预览的图像很红?

原来我的9650输出图像时30万像素的,可以正常显示图像。 可是我从代理要到了130万像素的配置后,图像发红,而且是很红。 不知道有没有遇到这种情况的?是如何解决的?…

查看全部问答>

做一个受欢迎的提问者

要想让你的问题尽快得到解答,我想以下几条是你应该注意的: 1.首先说清楚你使用的软,硬件平台。比如:我使用wince5.0在 2440上做开发... 2.问题要尽量具体,不要问诸如:我要做一个什么项目,该怎么做?或者我要做一个什么软件,该怎么做这类的 ...…

查看全部问答>

向大家请教一下!

#define TRANDATA_TOGSM_TIMES 0350h #define UP_3mA 0352h #define UP_10mA 035Eh ;这是一个6个字长的数组,放置峰值大于10mA的数量 ;该数组占据的地址空间为35E/360/362/364/366/368 #define Rain_Counter_Day 0400 ...…

查看全部问答>

生产厂家规范的-- LED驱动电源测试报告范例

replyreload += \',\' + 1365593;这份报告是基于一个8W LED驱动电源临时做的一个基本范例,是考虑有公司商业机密的问题,略作修改: 1.不对版权负责,只供参考. 2.不对内容负责,不做解释.每家公司各不相同,难于解释不同.敬请谅解. Timson,如果您要 ...…

查看全部问答>

[转贴]实施DDR 2 / mddr布局的tms320dm35x dmsoc 大家可以参考一下!很有用!!

摘要:         该tms320dm35x数字媒体系统芯片(dmsoc)装置。该方法来指定接口时序的DDR 2 / mddr接口是完全不同的,比以前的设备。         前一种方法指定计时装置在数据表规格 ...…

查看全部问答>

ad测量通过串口发出的程序,只能发出FF

我用AD采样,然后想通过串口发出,结果只能得到FF。大家帮我看看那里出现了问题,谢谢 #include  \"msp430g2553.h\" #define uchar unsigned char long temp; void uart_init(void) {         BCSCTL1 = CAL ...…

查看全部问答>

鍵盤A鍵和B鍵交替輸入效果

將鍵盤上A鍵和B鍵的4個接觸點伸延出來(因為是接觸按鍵,所以每個按鍵都有2個接觸點), 我想透過一組電子零件來接駁伸延出的4個接觸點, 啟動該製成品後在顯示螢幕上出現ABABABAB...連續按鍵的效果。 當然如果使用軟件來達成簡直是易如反掌,但我 ...…

查看全部问答>