文档介绍:目录
第一节系统总体方案 2
2
2
总体设计 2
第二节硬件设计 3
3
引脚结构图 3
硬件电路图 4
第三节软件设计 5
设计流程图 5
紧急中断流程图 6
设计程序及说明 6
主要函数说明 11
第四节 Proteus软件仿真 11
正常运行 11
黄灯闪烁 12
12
设置信号灯时间 13
绿灯时间 13
黄灯时间 13
设置后启动运行 14
第五节课程设计体会 14
第六节参考文献 14
附录 15
1、同组人姓名 15
2、实验分工 15
1)程序设计: 15
2)电路设计: 15
第一节系统总体方案
1)南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为80秒、支干道每次通行间为60秒。
2)在绿灯转为红灯时,要求黄灯先亮3秒钟,才能变换运行车道;
3)黄灯亮时,要求每秒闪亮一次。
4)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。
1)东西、南北车辆交替运行
2)绿灯转为红灯时,黄灯闪亮(间隔3秒)。
3)能显示剩余时间。
4)能对交通运行进行控制。
5)能够对时间进行修改并正常运行。
总体设计
单片机
按键电路
复位电路
晶振电路
数码显示
LED显示
第二节硬件设计
AT89C51
引脚结构图
硬件电路图
第三节软件设计
设计流程图
调支路通行子程
开始
中断初始化
调主干道黄灯闪烁子程
调主干道通行子程序
调支路黄灯闪烁子程
判断是否有开关中断?
中断处理
中断返回(到子程序处)
NO
YES
紧急中断流程图
断点入栈保护
状态参数设置
送状态字至端口
状态响应
断点返回
开始
开始
设计程序及说明
#include<>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={ //共阴极数码管码表1-F
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0xC9,0xFF,0x40};//设置码,测试码,不计时码
void delay(uint x);//延时函数
void display(uchar,uchar,uchar,uchar); //数码管显示函数
void mkeys(); //键盘函数
void traffic(); //交通灯函数
uchar num,num1,num2, //1南北 2东西
shi1,ge1,shi2,ge2,
value1,value2,//南北绿灯时间黄灯时间
value3,value4,//东西绿灯时间黄灯时间
count1,count2,flag1,flag2; //南北标记东西标记
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
/*初状态*/
value1=60; //南北黄绿灯默认值
value2=3;
value3=80; //东西黄绿灯默认值
value4=3;
num1=value1; //南北数码管先绿灯时间
num2=value2+value1;//东西红灯时间
shi1=num1/10;
ge1=num1%10;
shi2=num2/10;
ge2=num2%10;
P1=0x41;//初始状态:东西红灯南北绿灯
while(1){
if(num==20) //定时器1s
{
num=0;
num1--;
num2--;
traffic();
shi1=num1/10;
ge1=num1%10;
shi2=num2/10;
ge2=num2%10;
} mkeys();//扫描按键
display(shi1,ge1,shi2,ge2);//调用数码管显示函数
}
}