^`
十字路口交通灯控制设计
开放与创新实验任务书
一、设计任务
设计题目:十字路口交通灯控制设计
设计内容:本设计是十字路口交通灯控制,所以依据实际交通灯的变化情况和规律,给出如下需求:一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1东西绿灯通车,南北红灯。过一段时间转状态2,东西绿灯灭,黄灯闪烁几次,南北仍然红灯。再转状态3,南北绿灯通车,东西红灯。过一段时间转状态4,南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯。最后循环至状态1。
二、系统需求
基本要求:利用STC-89C51单片机作为系统核心控制部分,用外围12个发光二极管(红、绿、蓝各4组)模拟交通灯的显示部分,自己设计电路和程序完成交通灯控制设计。
发挥部分:
1.扩展外部并口芯片(如8255A)对12个发光二级管进行控制。
2.用硬件定时器完成交通灯转换间的延时,延时误差小于2010-6s.
3. 利用数码管进行东西、南北方向的倒计时显示。
摘要 利用STC-89C51单片机作为核心控制部分,用外围12个发光二极管(红绿黄各4组)模拟交通灯的显示部分,用硬件定时器完成交通灯颜色转换间的延时。在红灯亮时用8段显示数码管完成倒计时功能,每次红灯亮时开始倒计时,从30倒计到0。在设计数码管完成倒计时功能的电路中用到了8255和8155的片子。
关键词 单片机,控制,二极管,数码管,延时,定时器。
一题目分析与功能要求........................................................
二总体方案设计....................................................................
三单元模块设计....................................................................
四系统软件系统设计............................................................
五系统调试............................................................................
六系统功能与参数描述........................................................
七设计总结............................................................................
一 题目分析与功能要求
本设计是十字路口交通灯控制,所以依据实际交通灯的变化情况和规律,给出如下需求:一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1东西绿灯通车,南北红灯。过一段时间转状态2,东西绿灯灭,黄灯闪烁几次,南北仍然红灯。再转状态3,南北绿灯通车,东西红灯。过一段时间转状态4,南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯。最后循环至状态1。其间延时以硬件定时器完成,并且在红灯亮时数码管开始显示倒计时,从30倒计到0。用4个8段显示数码管两两为一组,东西红灯亮时表示东西方向红灯亮的时间的倒计时,南北方向时亦然。
二 总体方案设计
开始
东西南北R
东西G,南北R
延时5秒
东西闪Y,南北R
东西R,南北G
东西R,南北闪Y
延时5秒
交通灯转换间的延时可用两种方法实现。一种是软件延时,另一种是硬件定时器实现。其中硬件实现计时十分准确,这个不同于软件计时要给定一定的数进行循环并由计时软件完成时间的换算,故在本设计中采用硬件定时器完成交通灯转换间的延时控制。
三 单元模块设计
1 各单元模块功能简介及电路设计
(1)延时:主要完成交通灯转换间的时间控制,设计电路时用到了8255的片子作为核心控制部分。
(2)数码管显示倒计时:主要完成红灯转换到绿灯间的倒计时功能,在本设计中数码管显示从30到0的倒计时。设计电路时用到了8255和8155的片子作为核心控制部分。
(3)交通灯:用12个二极管的亮灭表示交通灯的变换闪烁(红黄绿各4个)。
2 电路参数的计算及元器件的选择
3 系统硬件电路的设计
四 系统软件系统的设计
#include
#include
#define K8255 XBYTE[0xFF2B]
#define C8255 XBYTE[0xFF2A]
#define B8255 XBYTE[0xFF29]
#define A8155 XBYTE[0XFF21]
#define B8155 XBYTE[0XFF22]
#define C8155 XBYTE[0XFF23]
#define K8155 XBYTE[0XFF20]
unsigned int i,j,k,l;
unsigned int m,cnt=0;
unsigned char code tal[]={0x40,0x10,0x00,0x78,0x02,0x12,0x19,0x30,0x24,0x79};
unsigned char code tal1[]={0x30,0x24,0x79,0x40};
void delay(unsigned int n);
void main()
{
SP=0x50;
K8255=0x80;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;ET0=1;
while(1)
{
C8255=0x61;
B8255=0x08;
cnt=0; j=0;k=0;TR0=1;
while(1)
{
A8155=0X01;
B8155=tal[j]; l=150;while(l--);
A8155=0x02;
B8155=tal1[k]; l=150;while(l--);
A8155=0X10;
B8155=tal[j]; l=150;while(l--);
A8155=0x20;
B8155=tal1[k]; l=50;while(l--);
if(cnt==10)
{
cnt=0;j++;
if(j==1) k++;
if(j>9) j=0;
if(k==4) //{k=0;j=0;}
break;
}
}
TR0=0;
for(k=0;k<5;k++)
{
C8255=0x51;
B8255=0x04;
delay(100);
C8255=0x41;
B8255=0x00;
delay(100);
}
delay(100);
C8255=0x0C;
B8255=0x03;
j=0;k=0;TR0=1;
while(1)
{
A8155=0X01;
B8155=tal[j]; l=150;while(l--);
A8155=0x02;
B8155=tal1[k]; l=150;while(l--);
A8155=0X10;
B8155=tal[j]; l=150;while(l--);
A8155=0x20;
B8155=tal1[k]; l=50;while(l--);
if(cnt==10)
{
cnt=0;j++;
if(j==1) k++;
if(j>9) j=0;
if(k==4) //{k=0;j=0;}
break;
}
}
for(k=0;k<5;k++)
{
C8255=0x8A;
B8255=0x02;
delay(100);
C8255=0x08;
B8255=0x02;
delay(100);
}
delay(100);
}
}
void delay(unsigned int n)
{
for(i=0;i
展开阅读全文
相关搜索