简易交通灯设计
一、课程设计的目的与要求
- 1、教学目的
- 2、教学要求
- 3、实验内容
设计一交通灯,要求如下
设计一个十字路口的交通灯,控制A,B两条交叉道理上的车辆通行,东西方向为主干道A,南北方向为副干道B;具体要求如下:
①每条道路设一组交通灯,每组信号灯有红,黄,绿3个灯组成,绿灯表示允许通过,红灯表示禁止通行,黄灯表示该车道上已过停车线的车辆继续通行,未过停车线的车辆停止通行。
②主干道通行40秒,南北通行时间为20秒。
③每次变换通行车道之前,要求黄灯先亮5秒,才能变换通行车道。
二、系统设计方案 - 2.1交通灯四种通行模式及行车方向
指示按照简单的交通路口规则,有四种模式:
南北绿灯亮 东西红灯亮
南北黄灯闪 东西红灯亮
南北红灯亮 东西绿灯亮
南北红灯亮 东西黄灯闪
- 2.2 交通灯控制系统
实用交通灯控制系统主要CPU控制模块为了、信号灯显示模块、倒计时显示模块等组成,如下图所示:
其中控制模块是最核心的部分,控制核心采用AT89C51单片机,利用AT89C51单片机内部定时器实现交通指示灯控制的计时功能,在正常情况下产生相应的控制信息控制倒计时显示电路,信号灯显示电路的正常运行。信号灯显示模块采用四个集成交通指示灯来模拟红、黄、绿交通指示灯,用单片机的P1口控制发光二极管的亮灭状态。倒计时显示模块的接口电路有静态显示和动态显示两种方式,由于动态显示方式在仿真软件中不易于查看,所以本次采用静态显示方式,这种方式优点是易于操作,缺点是浪费单片机接口资源。为了倒计时更加准确,采用外加晶振电路方法实现其功能。
- 2.3 复位模块
此系统可以通过复位按键实现从新工作,电路图如图所示:
- 2.4 时钟模块
此系统可以通过脉冲实现信号导入工作,电路图如图所示:
- 2.5设计原理框图
三、仿真过程与仿真结果
仿真过程:使用proteus软件进行仿真测试,首先在里面进行相应的设置,在工程文件夹下面会新建-一个。DSN的文件夹,然后编写实现功能的程序和测试文件,最后保存编译执行就可以进行功能仿真了。
仿真结果:
结果分析与讨论:从40到0秒,主干道绿,副干道红;从3到0秒,主干道红,副干道黄;从20到0秒,副干道绿,主干道红;从5到0秒,副干道红,主干道黄
四、结论心得
通过此次课程设计,让我更加熟悉的运用PROTEUS软件来实现Verilog语言的编程实现题目的相关功能,也让我更加深刻地体会到“实践是检验真理的唯一标准”。一开始看到题目要求就写出了需要到的输入输出信号,对于该怎么构建还没有完整的思路,在检验代码时也出现了一堆的错误,但是经过自己一步一步的查找最终无错误,但在检验功能时依旧出现了很多错误,比如倒计时的设计。当遇到不明报的地方我也会与同学讨论,在同学的帮助下与自己的思考最终完成了此次实验的功能实现。
五、程序
keil5程序:
#include<reg51.h>
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit k1=P1^6;
sbit k2=P1^7;
sbit k3=P2^7;
sbit k4=P3^0;
sbit yellowled_nb=P1^4; //Äϱ±»ÆµÆ
sbit yellowled_dx=P1^1; //¶«Î÷»ÆµÆ
uchar code table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
uchar data dig; //λѡ
uchar data led; //Æ«ÒÆÁ¿
uchar data buf[4];
uchar data sec_dx=39;//¶«Î÷ÊýÂëָʾֵ
uchar data sec_nb=39;//Äϱ±ÊýÂëָʾֵ
uchar data set_timedx=39;
uchar data set_timenb=39;//µ¹¼ÆʱÉèÖõļüÖµ±£´æ
uchar data b;//¶¨Ê±Æ÷ÖжϴÎÊý
bit time;//µÆ״̬ѻ·±êÖ¾
bit int0_time;//ÖжÏÇ¿ÐбêÖ¾
bit set;//µ÷ʱ·½ÏòÇл»¼ü±êÖ¾
void delay(int ms)
{
uint j,k;
for(j=0;j<ms;j++)
for(k=0;k<124;k++);
}
void key_to1()
{
TR0=0; //¹Ø¶¨Ê±Æ÷
if(set==0)
sec_nb++; //Äϱ±¼Ó1S
else
sec_dx++;//¶«Î÷¼Ó1S
if(sec_nb==100)
sec_nb=1;
if(sec_dx==100)
sec_dx=1;//¼Óµ½100ÖÃ1
}
void key_to2()
{
TR0=0;//¹Ø¶¨Ê±Æ÷
if(set==0)
sec_nb--; //Äϱ±¼õ1S
else
sec_dx--; //¶«Î÷¼õ1S
if(sec_nb==0)
sec_nb=99;
if( sec_dx==0 )
sec_dx=99;//¼õµ½1ÖØÖÃ99
}
void key() //°´¼üɨÃè×Ó³ÌÐò
{
if(k1!=1)
{
delay(10);
if(k1!=1)
{
while(k1!=1);
key_to1();
}
}
if(k2!=1)
{
delay(10);
if(k2!=1)
{
while(k2!=1);
key_to2();
}
}
if(k4!=1)
{
delay(10);
if(k4!=1)
{
while(k4!=1);
set=!set;
}
}
if(k3!=1&&int0_time==1)
{
TR0=1; //Æô¶¯¶¨Ê±Æ÷
sec_nb=59;
sec_dx=59;
int0_time=0;//Çå±êÖ¾
}
else if(k3!=1&&int0_time==0)
{
TR0=1;
set_timenb=sec_nb;
set_timedx=sec_dx; //ÉèÖõļüÖµ·µ»Ø±£´æ
}
}
void display()
{
buf[1]=sec_dx/10; //µÚ1λ ¶«Î÷Ãëʮλ
buf[2]=sec_dx%10; //µÚ2λ ¶«Î÷Ãë¸öλ
buf[3]=sec_nb/10; //µÚ3λ Äϱ±Ãëʮλ
buf[0]=sec_nb%10; //µÚ4λ Äϱ±Ãë¸öλ
P0=table[buf[led]];
delay(2); //ÏÈÑÓʱ£¬ÌáÇ°ÏÔʾһλÁË
P2=dig;
dig=_crol_(dig,1);
led++;
if(led==4)
{
led=0;
dig=0xfe;
}
}
void main()
{
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
EA=1;
ET0=1;
TR0=1;
EX0=1;
EX1=1;
P1=0Xf3;// ¶«Î÷ͨÐÐ
while(1)
{
key(); //µ÷Óð´¼üɨÃè³ÌÐò
display(); //µ÷ÓÃÏÔʾ³ÌÐò
}
}
void t0() interrupt 1 using 1 //¶¨Ê±ÖжÏ×Ó³ÌÐò
{
b++;
if(b==10) // ¶¨Ê±Æ÷ÖжϴÎÊý¡£
{
b=0;
sec_dx--;
sec_nb--;
//Äϱ±»ÆµÆÉÁ˸ÅжÏ
if(sec_nb==3&&time==0)
{
yellowled_nb=1;//Äϱ±»ÆµÆÁÁ
delay(300);
yellowled_nb=0;
}
if(sec_nb==2&&time==0)
{
yellowled_nb=1;//Äϱ±»ÆµÆÁÁ
delay(300);
yellowled_nb=0;
}
if(sec_nb==1&&time==0)
{
yellowled_nb=1;
delay(300);
yellowled_nb=0;
}
//¶«Î÷»ÆµÆÉÁÅжÏ
if(sec_dx==3&&time==1)
{
yellowled_dx=1;//Äϱ±»ÆµÆÁÁ
delay(300);
yellowled_dx=0;
}
if(sec_dx==2&&time==1)
{
yellowled_dx=1;//Äϱ±»ÆµÆÁÁ
delay(300);
yellowled_dx=0;
}
if(sec_dx==1&&time==1)
{
yellowled_dx=1;
delay(300);
yellowled_dx=0;
}
if(sec_dx==0||sec_nb==0) //¶«Î÷»òÄϱ±Ïȵ½´ï1Sʱ¼´¿ªÊ¼ÖØмÆʱ
{
sec_dx=set_timedx;
sec_nb=set_timenb; //µÚÒ»´ÎÑ»·½áÊøÖØÖÃ
if(time==1)
{
P1=0xF3; //¶«Î÷ͨÐÐ
}
else
{
P1=0xde; //Äϱ±Í¨ÐÐ
}
time=!time; //È¡·´
}
}
}
void wb0() interrupt 0 using 1 //¶«Î÷Ç¿ÐÐ
{
TR0=0;
P1=0xF3;
sec_dx=88;
sec_nb=88;
int0_time=1;
}
void wb1() interrupt 2 using 1 //Äϱ±Ç¿ÐÐ
{
TR0=0;
P1=0xDE;
sec_nb=88;
sec_dx=88;
int0_time=1;
}
需要源代码可点击https://download.csdn.net/download/qq_45175681/13792077