用51单片机实现交通信号灯

1、新建工程项目及文件

1.1 新建工程

1.1.1新建工程项目
在这里插入图片描述
1.1.2选择保存路径以及工程名称
在这里插入图片描述
1.1.3选择51芯片
在这里插入图片描述
选择AT89C51
工程即可创建完成

1.2 新建文件

1.2.1新建文件
在这里插入图片描述
1.2.2将代码写入保存
代码如下

#include "reg52.h"			 
#define dm P0
typedef unsigned int u16;	 
typedef unsigned char u8;

sbit ISA=P3^5;	
sbit ISB=P3^6;
sbit ISC=P3^7;
sbit k1=P3^4;
sbit fmq=P3^3;

u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//u8 code smgduan[10]={0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f};
u8  smgdata[8];
u8 second=0;

void delay(u16 i)
{
	while(i--);	
}

void Time01Init()
{
	TMOD|=0X11;
	TH0=0XFC;	
	TL0=0X18;	
	ET0=1;
	TH1=0XFF;	
	TL1=0X9C;	
	ET1=1;
	EA=1;			
}

void SmgDisplay()
{
	u8 i;
	for(i=0;i<8;i++)
	{
		switch(i)	 
		{
			case(0):
				ISA=0;ISB=0;ISC=0; break;
			case(1):
				ISA=1;ISB=0;ISC=0; break;
			case(2):
				ISA=0;ISB=1;ISC=0; break;
			case(3):
				ISA=1;ISB=1;ISC=0; break;
			case(4):
				ISA=0;ISB=0;ISC=1; break;
			case(5):
				ISA=1;ISB=0;ISC=1; break;
			case(6):
				ISA=0;ISB=1;ISC=1; break;
			case(7):
				ISA=1;ISB=1;ISC=1; break;	
		}
		dm=smgdata[i];
		delay(100); 	
		dm=0x00;
	}
}

sbit	p1_0=P1^0;
sbit	p1_1=P1^1;
sbit	p1_2=P1^2;
sbit	p1_3=P1^3;
sbit	p1_4=P1^4;
sbit	p1_5=P1^5;
sbit	p1_6=P1^6;
sbit	p1_7=P1^7;
sbit	p2_0=P2^0;
sbit	p2_1=P2^1;
sbit	p2_2=P2^2;
sbit	p2_3=P2^3;

void deng()
{
	 	if(second==56)
		{
		  second=0;
		}
		if(second<25)
		{
		  smgdata[0]=smgduan[(25-second)/10%10]; //Î÷ÂÌ25-01
		  smgdata[1]=smgduan[(25-second)/1%10];

		  smgdata[2]=smgduan[(28-second)/10%10];//±±ºì28-03
		  smgdata[3]=smgduan[(28-second)/1%10];

		  smgdata[4]=smgduan[(25-second)/10%10];//¶«ÂÌ25-01
		  smgdata[5]=smgduan[(25-second)/1%10];

		  smgdata[6]=smgduan[(28-second)/10%10];//ÄϺì28-03
		  smgdata[7]=smgduan[(28-second)/1%10];
		  SmgDisplay();
		  p1_0=0;
		  p1_1=0;
		  p1_2=1;
		  p1_3=0;
		  p1_4=0;
		  p1_5=1;
		  p1_6=1;
		  p1_7=0;
          p2_0=0;	//8
          p2_1=1;	//9
          p2_2=0;	//10
          p2_3=0;	//11 
		}
		else if(second<28)
		{
		  smgdata[0]=smgduan[(28-second)/10%10];//Î÷»Æ03-01
		  smgdata[1]=smgduan[(28-second)/1%10];

		  smgdata[2]=smgduan[(28-second)/10%10];//±±ºì03-01
		  smgdata[3]=smgduan[(28-second)/1%10];

		  smgdata[4]=smgduan[(28-second)/10%10];//¶«»Æ03-01
		  smgdata[5]=smgduan[(28-second)/1%10];

		  smgdata[6]=smgduan[(28-second)/10%10];//ÄϺì03-01
		  smgdata[7]=smgduan[(28-second)/1%10];
		  SmgDisplay();
		  p1_0=0;
		  p1_1=1;
		  p1_2=0;
		  p1_3=0;
		  p1_4=1;
		  p1_5=0;
		  p1_6=1;
		  p1_7=0;
          p2_0=0;	//8
          p2_1=1;	//9
          p2_2=0;	//10
          p2_3=0;	//11 
		}
		else if(second<53)
		{
		  smgdata[0]=smgduan[(56-second)/10%10];//Î÷ºì28-03
		  smgdata[1]=smgduan[(56-second)/1%10];

		  smgdata[2]=smgduan[(53-second)/10%10];//±±ÂÌ25-01
		  smgdata[3]=smgduan[(53-second)/1%10];

		  smgdata[4]=smgduan[(56-second)/10%10];//¶«ºì28-03
		  smgdata[5]=smgduan[(56-second)/1%10];

		  smgdata[6]=smgduan[(53-second)/10%10];//ÄÏÂÌ25-01
		  smgdata[7]=smgduan[(53-second)/1%10];
		  SmgDisplay();
		  p1_0=1;
		  p1_1=0;
		  p1_2=0;
		  p1_3=1;
		  p1_4=0;
		  p1_5=0;
		  p1_6=0;
		  p1_7=0;
          p2_0=1;	//8
          p2_1=0;	//9
          p2_2=0;	//10
          p2_3=1;	//11 */
		}
		else if(second<56)
		{
		  smgdata[0]=smgduan[(56-second)/10%10];//Î÷ºì05-01
		  smgdata[1]=smgduan[(56-second)/1%10];

		  smgdata[2]=smgduan[(56-second)/10%10];//±±»Æ05-01
		  smgdata[3]=smgduan[(56-second)/1%10];

		  smgdata[4]=smgduan[(56-second)/10%10];//¶«ºì05-01
		  smgdata[5]=smgduan[(56-second)/1%10];

		  smgdata[6]=smgduan[(56-second)/10%10]; //ÄÏ»Æ05-01
		  smgdata[7]=smgduan[(56-second)/1%10];
		  SmgDisplay();
		  p1_0=1;
		  p1_1=0;
		  p1_2=0;
		  p1_3=1;
		  p1_4=0;
		  p1_5=0;
		  p1_6=0;
		  p1_7=1;
          p2_0=0;	//8
          p2_1=0;	//9
          p2_2=1;	//10
          p2_3=0;	//11*/
		}
}	  

void main()
{	
	while(1)
	{	
		Time01Init();
		//key();
	    TR0=1;
		TR1=0;
		deng();
		
	}		
}

void Time0() interrupt 1
{
	static u16 i;
	TH0=0XFC;	
	TL0=0X18;
	i++;
	if(i==1000)	//1s==1000ms 
	{
		i=0;
		second++;	
	}	
}

保存文件并选择路径编辑文件名
在这里插入图片描述
在这里插入图片描述
点击保存即可
1.2.3添加文件到工程并编译文件
在这里插入图片描述
在这里插入图片描述
1.2.4 生成hex文件
在这里插入图片描述
在这里插入图片描述
点击ok再次编译即可生成

2、新建protues电路

2.1 新建工程

2.1.1新建工程
在这里插入图片描述
2.1.2编辑文件名称及路径
在这里插入图片描述
点击下一步直至完成即可

2.2 选择元器件

2.2.1添加元器件
打开元器件库并选择需要的元器件
在这里插入图片描述

2.3 连接元器件

将元器件按图示连接
在这里插入图片描述
在这里插入图片描述

3、导入文件并仿真

3.1 导入文件

3.1.1导入
双击51芯片并导入之前生成的hex文件
在这里插入图片描述

添加完成后点击确定

3.2 开始仿真

点击开始仿真
在这里插入图片描述
结果如图
在这里插入图片描述
总结:通过本次用51单片机实现交通信号灯,简单的了解了51单片机的应用。也通过本次仿真,了解到硬件编程和软件所不同的区别。

评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值