proteus基于51单片机的红绿灯控制设计

本文提供了一个基于51单片机的红绿灯控制系统实现,适合初学者。代码包括数字显示模块和红绿灯模块,通过 Proteus 原理图进行仿真。程序详细展示了如何使用延迟函数、LED 显示和状态切换,以模拟交通信号灯的工作流程。

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

proteus 基于51单片机的红绿灯项目

	用最简单的语句来实现一个小型51单片机项目的实现,适用于初学者。
	包含模块:数字显示和倒计时模块、红绿灯模块。

数字显示模块:

void delay_ms(uint x)
{
	uint i,j;
	for(i=x;i>0;i--)
	for(j=110;j>0;j--);
}
void displayns5()
{	
	int i,k;
	for(i=4;i>=0;i--)
		{	
			for(k=0;k<=5;k++)
			{
			LED1=0;
			P0=shuzi[0];
			LED1=1;
			delay_ms(50);
			LED1=0;
			LED2=0;
			P0=shuzi[i];
			LED2=1;
			delay_ms(50);
			LED2=0;
			delay_ms(1);	
			ns_yellow=0;
			delay_ms(500);
			ns_yellow=1;			
			}		
			}
}

void displayew5()
{	
	int i,k;
	for(i=4;i>=0;i--)
		{	
			for(k=0;k<=10;k++)
			{
			LED1=0;
			P0=shuzi[0];
			LED1=1;
			delay_ms(50);
			LED1=0;
			LED2=0;
			P0=shuzi[i];
			LED2=1;
			delay_ms(50);
			LED2=0;
			delay_ms(1);	
			ew_yellow=0;
			delay_ms(500);
			ew_yellow=1;
			}		
		}
}
void display25()
{
	int i,j,k;
	for(j=2;j>=0;j--)
	{	

		if(j==0){
			for(i=9;i>=5;i--)
			{	
				for(k=0;k<=10;k++)
				{
				
				P0=shuzi[j];
				LED1=1;
				delay_ms(50);
				LED1=0;
		
				P0=shuzi[i];
				LED2=1;
				delay_ms(50);
				LED2=0;
				delay_ms(1);	
				}		
			} 
			}	
		if(j>0)
		{
		for(i=9;i>=0;i--)
			{	
			for(k=0;k<=10;k++)
				{
			
				P0=shuzi[j];
				LED1=1;
				delay_ms(50);
				LED1=0;
			
				P0=shuzi[i];
				LED2=1;
				delay_ms(50);
				LED2=0;
	
				}		
			}
		}
	
}

红绿灯模块:

void alldown()//红黄绿灯全灭
{
ns_red=0;
ns_green=0;
ns_yellow=0;
ew_red=0;
ew_green=0;
ew_yellow=0;
}

proteus原理图:
总原理图
总代码图:

#include <reg51.h>
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#define uchar 	unsigned char
#define uint 	unsigned int
sbit  E=P1^0;	
sbit  W=P1^1;
sbit  S=P1^2;
sbit  N=P1^3;
sbit LED1=P1^6;
sbit LED2=P1^7;
sbit  ns_yellow=P2^0;
sbit  ns_red=P2^1;
sbit  ns_green=P2^2;
sbit  ew_yellow=P2^3;
sbit  ew_red=P2^4;
sbit  ew_green=P2^5;

uchar code shuzi[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint djs,js;

void delay_ms(uint x)
{
	uint i,j;
	for(i=x;i>0;i--)
	for(j=110;j>0;j--);
}
void displayns5()
{	
	int i,k;
	for(i=4;i>=0;i--){	
			for(k=0;k<=5;k++){
			LED1=0;
			P0=shuzi[0];
			LED1=1;
			delay_ms(50);
			LED1=0;
			LED2=0;
			P0=shuzi[i];
			LED2=1;
			delay_ms(50);
			LED2=0;
			delay_ms(1);	
			ns_yellow=0;
			delay_ms(500);
			ns_yellow=1;			
			}}
}
void displayew5()
{	
	int i,k;
	for(i=4;i>=0;i--){	
			for(k=0;k<=10;k++){
			LED1=0;
			P0=shuzi[0];
			LED1=1;
			delay_ms(50);
			LED1=0;
			LED2=0;
			P0=shuzi[i];
			LED2=1;
			delay_ms(50);
			LED2=0;
			delay_ms(1);	
			ew_yellow=0;
			delay_ms(500);
			ew_yellow=1;
			}}
}
void display25(){
	int i,j,k;
	for(j=2;j>=0;j--){	
		if(j==0){
			for(i=9;i>=5;i--){	
				for(k=0;k<=10;k++){
				P0=shuzi[j];
				LED1=1;
				delay_ms(50);
				LED1=0;
				P0=shuzi[i];
				LED2=1;
				delay_ms(50);
				LED2=0;
				delay_ms(1);	
				}}}	
		if(j>0){
		for(i=9;i>=0;i--){	
			for(k=0;k<=10;k++){
				P0=shuzi[j];
				LED1=1;
				delay_ms(50);
				LED1=0;
				P0=shuzi[i];
				LED2=1;
				delay_ms(50);
				LED2=0;}}}}
}
void alldown()
{ns_red=0;ns_green=0;ns_yellow=0;ew_red=0;ew_green=0;ew_yellow=0;
}

void main()
{
	while(1)
	{
	pthread_t tid;
	pthread_create(tid,NULL,display25,NULL);
	
	alldown();
	ew_green=1;
	ns_red=1;
	display25();
	
	alldown();
	ew_yellow=1;
	ns_red=1;
	displayew5();	
	
	alldown();	
	ew_red=1;
	ns_green=1;
	display25();
	
	alldown();	
	ew_red=1;
	ns_yellow=1;
	displayns5();
	}
}

转送请标明出处

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值