利用单片机实现对交通灯的模拟控制

时间:2022-09-01 04:04:22

利用单片机实现对交通灯的模拟控制

摘要:本文主要介绍了利用单片机LY-51SV2.3开发板实现对交通灯的模拟控制,通过本实例的设计与制作,使我们对单片机的学习有一个更深入的理解与掌握,并加强C语言的编程能力。希望通过本实例的学习,对以后进一步学习单片机提供一个良好的基础。

关键词:单片机;交通灯;C语言

中图分类号:TP319

目前,交通信号灯可以说随处可见,只要有交通的地方的就有交通控制灯,我们在街道随处可以见到红、黄、绿三色信号灯,交通灯在生活中是至关重要的,没有交通灯,交通就会陷入瘫痪,人们的出行就会受到影响,所以本文利用LY-51SV2.3开发板,通过C语言编程模拟实现对交通灯的简单控制,使初学者对LY-51SV2.3开发板有一个基本的了解与掌握,对C语言编程有个基本的掌握,为以后的进一步学习提供基础。

1设计要求

双干线十字路通灯控制规则如下:

A:放行线:绿灯亮放行25秒,黄灯亮警告5秒,然后红灯禁行;

B:禁行线:红灯亮30秒禁止通行,绿灯亮放行。

设计能控制东、南、西、北四个路口的红、黄、绿信号灯正常工作;

当东西方向放行时,南北方向禁行,反之亦然;

利用P1口控制LED灯实现;用数码管显示时间

2接线

根据设计要求,连接开发板线路端口。

3函数与端口说明

主函数voidmain(void)

定时器中断程序(LED显示)voidtimer0()interrupt1

共阴数码管显示函数voidDisplay(unsignedcharFirstBit,unsignedcharNum);

延时函数voidDelayMs(unsignedchart);

注:LED显示采用多分支选择语句

sbitRED_A=P1^0;//南北

sbitYELLOW_A=P1^1;sbitGREEN_A=P1^2;

sbitRED_B=P1^3;//东西

sbitYELLOW_B=P1^4;sbitGREEN_B=P1^5;

unsignedchartime_A,time_B;

unsignedcharoperation_type=1;

unsignedcharms;

#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换

sbitLATCH1=P2^2;//定义锁存使能端口段锁存

sbitLATCH2=P2^3;//位锁存

unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7funsignedcharTempData[8];//存储显示值的全局变量

voidDelayUs2x(unsignedchart);voidDelayMs(unsignedchart);

voidDisplay(unsignedcharFirstBit,unsignedcharNum);

4实现过程

voidmain(void)

{ TMOD=0x01; //使用模式1,16位定时器

TH0=(65536-50000)/256; //给定初值

TL0=(65536-50000)%256;

EA=1; ET0=1; TR0=1;

time_A=25;time_B=30;

while(1)//主循环

{TempData[0]=dofly_DuanMa[time_A/10];

TempData[1]=dofly_DuanMa[time_A%10];

TempData[2]=dofly_DuanMa[time_B%10];

TempData[3]=dofly_DuanMa[time_B%10];

Display(0,4); }}

voidDelayUs2x(unsignedchart)

{while(--t);}

voidDelayMs(unsignedchart)

{while(t--){DelayUs2x(245); DelayUs2x(245);}}

voidDisplay(unsignedcharFirstBit,unsignedcharNum)

{unsignedchari; for(i=0;i

{DataPort=0;//清空数据,防止有交替重影

LATCH1=1;LATCH1=0;

DataPort=dofly_WeiMa[i+FirstBit];//取位码

LATCH2=1;LATCH2=0;

DataPort=TempData[i];//取显示数据,段码

LATCH1=1;LATCH1=0;

DelayMs(2);//扫描间隙延时,时间太长会闪烁,太短会造成重影}}

voidtimer0()interrupt1

{ TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

ms++; if(ms==20)

{ms=0;time_A--; time_B--;}

switch(operation_type)

{ case1:RED_A=1;YELLOW_A=1;GREEN_A=0; //南北绿灯 25S

RED_B=0;YELLOW_B=1;GREEN_B=1; //东西红灯 30S

if(time_A!=0)return; //25S时间到

time_A=5;operation_type=2; break;

case2:YELLOW_A=0;GREEN_A=1; //南北黄灯5S

if(time_A!=0)return; //5S时间到

time_A=30;time_B=25; //南北30S,东西25S

operation_type=3; break;

case3:RED_A=0;YELLOW_A=1;GREEN_A=1; //南北红灯30S

RED_B=1;YELLOW_B=1;GREEN_B=0; //东西绿灯25S

if(time_B!=0)return; //25S时间到

time_B=5; //5S

operation_type=4;break;

case4:YELLOW_B=0;GREEN_B=1; //东西黄灯5S

if(time_B!=0)return; //5S时间到

time_A=25;time_B=30; //东西25S,南北30S

operation_type=1; break; }

5总结

到此,我们通过对设计要求的理解,对开发板的线路端口的正确连接以及C语言编程,我们对整个实例就完成了,虽然本实例有很多不完善的地方,但是希望通过本实例的设计与制作,使我们对使用单片机开发模拟控制交通灯有个简单的理解与掌握,也希望通过进一步的学习,能设计制作出更优秀的作品来。

参考文献:

[1]郑锋.51单片机典型应用开发范例大全[M].北京:中国铁道出版社,2011,10.

[2]郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社.

[3]郑锋.51单片机应用系统典型模块开发大全[M].北京:中国铁道出版社,2013,2.

上一篇:OPGW光缆结构设计程序开发 下一篇:计算机教学改革研究