基于51单片机的交通灯控制电路设计_基于51单片机的交通灯
基于51单片机的交通灯控制电路设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“基于51单片机的交通灯”。
交通灯
一、功能要求
要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次通行时间都设为25秒,黄灯先亮5秒钟,才能变换运行车道;黄灯亮时,要求每秒钟闪亮一次。
二、电路图
说明:1)每一位数码管位选要分开,对应IO口参照程序中红色部分 2)图示数码管为共阳,没加驱动数码管显示较暗,建议加驱动
三、程序
//TrafficLight.c #include“reg52.h”
//IO口定义 sbit red_1 =P2^0;//南北方向 sbit red_2 =P2^3;//东西方向 sbit yellow_1 =P2^1;sbit yellow_2 =P2^4;sbit green_1 =P2^2;sbit green_2 =P2^5;sbit com1_1 =P3^6;//十位 南北方向 数码管位选 sbit com1_2 =P3^7;//个位 南北方向 sbit com2_1 =P3^4;//十位 东西方向 sbit com2_2 =P3^5;//个位 东西方向
//全局变量 char time=30;//倒计时
unsigned char num1=0,num2=0;//辅助计时 unsigned char flag1=0,flag2=0;//黄灯闪标志位 unsigned char shi1,shi2,ge1,ge2;//数码管十位个位
const unsigned char ledNum[] =
{// 0 1
A
b
c
d
E
F
不显示-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 //在交通灯中,计时和数码管显示一直进行,故定时器开启后不用停止 void InitInter(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;}
void Display(void){ static unsigned char i=1;
switch(i){ case 1:
com2_2=0;
P0=ledNum[shi1];
com1_1=1;
break;case 2:
com1_1=0;
P0=ledNum[ge1];
com1_2=1;
break;case 3:
com1_2=0;
P0=ledNum[shi2];
com2_1=1;
break;case 4:
com2_1=0;
P0=ledNum[ge2];
com2_2=1;
break;
default:;}
i++;if(i>4)i=1;}
//红灯可以直接变成绿灯,但绿灯必须先变成黄灯再变红灯 void main(void){ bit i=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;} } void Timer_0(void)interrupt 1//计时 { TH0=(65535-45872)/256;TL0=(65535-45872)%256;num1++;if(num1>=20){
num1=0;
time--;
//if(time
//处理time,显示方式
} if(flag1||flag2){
num2++;
if(num2>=10)
{
num2=0;
if(flag1)yellow_1=~yellow_1;
if(flag2)yellow_2=~yellow_2;
} } }
void Timer_1(void)interrupt 3 { TH1=(65535-1835)/256;//11.0592M晶振,2ms TL1=(65535-1835)%256;
Display();}
交通灯控制电路设计一、设计任务及指标(1)要求南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行间为20秒;(2......
毕业设计程序源代码ORG 0000H;主程序的入口地址LJMP MAIN;跳转到主程序的开始处ORG 0003H;外部中断0的中断程序入口地址ORG 000BH;定时器0的中断程序入口地址LJMP T0_INT;跳......
#include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; sbit beep=P2^3; unsigned int pp; unsigned char code table[]={0x3f......
单片机控制交通灯实验设计摘要:本次实验运用80C51单片机来完成对红黄绿交通灯的控制。实验当中主要运用了80C51单片机的计数器定时器功能,另外对单片机的一些参数进行了设置,比......
智能交通灯设计与实现基于单片机的智能交通灯控制系统的设计与实现,系统能够根据十字路口双车道车流量的情况控制交通讯号灯按特定的规律变化。首先对智能交通灯的研究意义和......
