一、 课程设计目的
熟悉AT89C51单片机各引脚的用法,学会使用protues仿真原理图的设计和C51语言keil软件编程完成设计的交通灯控制系统
(1)通过使用《单片机原理与应用》课程的基础理论知识和设计方法,进一步加深对课程所讲理论知识的理解;
(2)通过查阅资料,阅读程序,提高使用单片机分析问题、解决问题的能力;
(3)通过实际动手进行硬件设计及软件程序设计,达到理论联系实际、灵活应用单片机解决实际问题的目的。
二、 课程设计内容
1、电路设计
交通灯系统整体设计构想:系统东西通行时间都为18秒,包含黄灯闪烁3秒。南北通行时间都为13秒,包含黄灯闪烁3秒,这样一直循环。另外还有三个按键,分别是设置、加、减,调节南北或者东西时间。
三.仿真截图
1.倒数时间和灯电路仿真
2.按键
3.整体仿真图
四、代码
void delay(uint i)//延时
{
while(i--);
}
void control()//控制路灯
{
switch(mode)
{
case 0:red1=0;yellow1=1;green1=1;red2=1;yellow2=1;green2=0;//南北红灯亮
nan=dong_lim+3;dong=dong_lim;//设置初始时间
break;
case 1:red1=0;yellow1=1;green1=1;red2=1;yellow2=0;green2=1;//东西黄灯亮
dong=4;nan=4;
break;
case 2:red1=1;yellow1=1;green1=0;red2=0;yellow2=1;green2=1;//东西红灯亮
nan=nan_lim;dong=nan_lim+3;//设置初始时间
break;
case 3:red1=1;yellow1=0;green1=1;red2=0;yellow2=1;green2=1;//南北黄灯亮
nan=4;dong=4;
}
}
void display() //显示各路口时间
{
P0=tabel[nan/10];//南北
smg1=1;
delay(100);
smg1=0;
P0=tabel[nan%10];
smg2=1;
delay(100);
smg2=0;
P0=tabel[dong/10];//东西
smg3=1;
delay(100);
smg3=0;
P0=tabel[dong%10];
smg4=1;
delay(100);
smg4=0;
}
void main()//主函数
{
TMOD=0x01;//定时器设置
TH0=0x3c; //50ms
TL0=0xb0;
ET0=1; //开中断
EA=1;
TR0=1; //启动定时器
control();
nan=dong_lim+2;dong=dong_lim-1;
while(1)
{
if(moshi==0)
display();//显示
if(!k1)
{ //模式切换
if(moshi<2)
moshi++;
else
moshi=0;
while(!k1);
}
if(moshi==1)//调节南北时间
{
if(!k2)
{
if(nan_lim<99)
nan_lim++;
while(!k2);
}
if(!k3)
{
if(nan_lim>1)
nan_lim--;
while(!k3);
}
P0=tabel[(nan_lim-1)/10];//南北
smg1=1;
delay(100);
smg1=0;
P0=tabel[(nan_lim-1)%10];
smg2=1;
delay(100);
smg2=0;
}
if(moshi==2)//调节东西时间
{
if(!k2)
{
if(dong_lim<99)
dong_lim++;
while(!k2);
}
if(!k3)
{
if(dong_lim>1)
dong_lim--;
while(!k3);
}
P0=tabel[(dong_lim-1)/10];//东西
smg3=1;
delay(100);
smg3=0;
P0=tabel[(dong_lim-1)%10];
smg4=1;
delay(100);
smg4=0;
}
}
}