基于51单片机的交通灯控制电路设计.docx
- 文档编号:6720547
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:7
- 大小:54.79KB
基于51单片机的交通灯控制电路设计.docx
《基于51单片机的交通灯控制电路设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的交通灯控制电路设计.docx(7页珍藏版)》请在冰点文库上搜索。
基于51单片机的交通灯控制电路设计
基于51单片机的交通灯控制电路设计
交通灯
一、功能要求
要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次通行时间都设为25秒,黄灯先亮5秒钟,才能变换运行车道;黄灯亮时,要求每秒钟闪亮一次。
二、电路图
说明:
1)每一位数码管位选要分开,对应IO口参照程序中红色部分
2)图示数码管为共阳,没加驱动数码管显示较暗,建议加驱动
三、程序
//TrafficLight.c
#include"reg52.h"
//IO口定义
sbitred_1=P2^0;//南北方向
sbitred_2=P2^3;//东西方向
sbityellow_1=P2^1;
sbityellow_2=P2^4;
sbitgreen_1=P2^2;
sbitgreen_2=P2^5;
sbitcom1_1=P3^6;//十位南北方向数码管位选
sbitcom1_2=P3^7;//个位南北方向
sbitcom2_1=P3^4;//十位东西方向
sbitcom2_2=P3^5;//个位东西方向
//全局变量
chartime=30;//倒计时
unsignedcharnum1=0,num2=0;//辅助计时
unsignedcharflag1=0,flag2=0;//黄灯闪标志位
unsignedcharshi1,shi2,ge1,ge2;//数码管十位个位
constunsignedcharledNum[]=
{//0123456789AbcdEF不显示-o(18)H(19)h(20)C(21)0(22)n(23)
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8e,0xFF,0xbf,0xa3,0x89,0x8b,0xc6,0xc0,0xab
};//共阳数码管
//中断优先级别T0>T1,数码管显示中断间隔2ms,计时时间间隔50ms
//计时要求比较精确,间隔长,不应该被打断,故中断优先级要高,使用T0
//数码管中断可以被打断,打断时间较短,不会影响显示,使用T1
//在交通灯中,计时和数码管显示一直进行,故定时器开启后不用停止
voidInitInter(void)
{
TMOD=0x11;//设置定时器工作方式为16位计时器
TH0=(65535-45872)/256;//11.0592M晶振,50ms
TL0=(65535-45872)%256;
TH1=(65535-1835)/256;//11.0592M晶振,2ms
TL1=(65535-1835)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
voidDisplay(void)
{
staticunsignedchari=1;
switch(i)
{
case1:
com2_2=0;
P0=ledNum[shi1];
com1_1=1;
break;
case2:
com1_1=0;
P0=ledNum[ge1];
com1_2=1;
break;
case3:
com1_2=0;
P0=ledNum[shi2];
com2_1=1;
break;
case4:
com2_1=0;
P0=ledNum[ge2];
com2_2=1;
break;
default:
;
}
i++;
if(i>4)i=1;
}
//红灯可以直接变成绿灯,但绿灯必须先变成黄灯再变红灯
voidmain(void)
{
biti=0;
InitInter();
while
(1)
{
red_1=0;//0为亮
red_2=1;
green_2=0;
time=30;
while(time>5)
{
shi1=time/10;
ge1=time%10;
shi2=(time-5)/10;
ge2=(time-5)%10;
}
green_2=1;
yellow_2=0;
flag2=1;
num2=0;
while(time>0)
{
shi1=time/10;
ge1=time%10;
shi2=time/10;
ge2=time%10;
}
flag2=0;
yellow_2=1;
red_2=0;
red_1=1;
green_1=0;
time=30;
while(time>5)
{
shi2=time/10;
ge2=time%10;
shi1=(time-5)/10;
ge1=(time-5)%10;
}
green_1=1;
yellow_1=0;
flag1=1;
num2=0;
while(time>0)
{
shi2=time/10;
ge2=time%10;
shi1=time/10;
ge1=time%10;
}
flag1=0;
yellow_1=1;
//red_1=0;
//green_2=0;
}
}
voidTimer_0(void)interrupt1//计时
{
TH0=(65535-45872)/256;
TL0=(65535-45872)%256;
num1++;
if(num1>=20)
{
num1=0;
time--;
//if(time<0)time=30;
//处理time,显示方式
}
if(flag1||flag2)
{
num2++;
if(num2>=10)
{
num2=0;
if(flag1)yellow_1=~yellow_1;
if(flag2)yellow_2=~yellow_2;
}
}
}
voidTimer_1(void)interrupt3
{
TH1=(65535-1835)/256;//11.0592M晶振,2ms
TL1=(65535-1835)%256;
Display();
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 交通灯 控制电路 设计