基于AT89C51的交通灯十字路口系统的仿真实现正常交通二且调时间(南北、东西时间)

一、 课程设计目的

  熟悉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;
		}		
	} 
}
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值