基于51单片机的交通灯【1位数码管,固定时间】(仿真)

本文介绍了使用AT89C51单片机配合9个LED指示灯和LED数码管构建的交通灯控制系统,包括绿灯9秒倒计时及快闪、黄灯亮3秒的流程,并附有数码管显示倒计时的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用单片机AT89C51、9个LED指示灯以及LED数码管组成带倒计时显示的交通灯控制系统。

东南西北四个路口各三个LED指示灯,分别为红色、黄色、绿色。绿灯先亮9秒,最后2秒快闪,然后黄灯亮3秒,最后红灯亮9秒。南北向、东西向交替通行。南北向、东西向各有一位数码管显示红灯倒计时。原理电路如下图所示

 

 

#define uint unsigned int

//数码管编码
uchar code smgduan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

uint time=0;//计时

//主函数
void main()
{
	TMOD|=0X01;//初始化定时器
	TH0=(65536-1000)/256;
	TL0=(65536-1000)%256;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	while(1)
	{
		 //东西绿灯亮
		 time=10000;//9s
		 P1=0xf3;
		 while(time>2000)
		 {
		 	P3=smgduan[time/1000];
		 }
		 while(time>0)//快闪
		 {
		 	P3=smgduan[time/1000];
			if(time%100>50)
			   P1=0xf7;
			else
				P1=0xf3;
		 }
		 //黄灯亮
		 P3=0xff;
		 time=3000;
		 P1=0xf5;
		 while(time>0);
		 //南北绿灯亮
		 time=10000;//9s
		 P1=0xde;
		 while(time>2000)
		 {
		 	P2=smgduan[time/1000];
		 }
		 while(time>0)//快闪
		 {
		 	P2=smgduan[time/1000];
			if(time%100>50)
			   P1=0xfe;
			else
				P1=0xde;
		 }
		 //黄灯亮
		 P2=0xff;
		 time=3000;
		 P1=0xee;
		 while(time>0);
	}

 资料借鉴于此纷传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白茶丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值