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

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

  • 1、新建工程项目及文件
    • 1.1 新建工程
    • 1.2 新建文件
  • 2、新建protues电路
    • 2.1 新建工程
    • 2.2 选择元器件
    • 2.3 连接元器件
  • 3、导入文件并仿真
    • 3.1 导入文件
    • 3.2 开始仿真

1、新建工程项目及文件

1.1 新建工程

1.1.1新建工程项目
用51单片机实现交通信号灯_第1张图片
1.1.2选择保存路径以及工程名称
用51单片机实现交通信号灯_第2张图片
1.1.3选择51芯片
用51单片机实现交通信号灯_第3张图片
选择AT89C51
工程即可创建完成

1.2 新建文件

1.2.1新建文件
用51单片机实现交通信号灯_第4张图片
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++;	
	}	
}

保存文件并选择路径编辑文件名
用51单片机实现交通信号灯_第5张图片
用51单片机实现交通信号灯_第6张图片
点击保存即可
1.2.3添加文件到工程并编译文件
用51单片机实现交通信号灯_第7张图片
用51单片机实现交通信号灯_第8张图片
1.2.4 生成hex文件
用51单片机实现交通信号灯_第9张图片
用51单片机实现交通信号灯_第10张图片
点击ok再次编译即可生成

2、新建protues电路

2.1 新建工程

2.1.1新建工程
用51单片机实现交通信号灯_第11张图片
2.1.2编辑文件名称及路径
用51单片机实现交通信号灯_第12张图片
点击下一步直至完成即可

2.2 选择元器件

2.2.1添加元器件
打开元器件库并选择需要的元器件
用51单片机实现交通信号灯_第13张图片

2.3 连接元器件

将元器件按图示连接
用51单片机实现交通信号灯_第14张图片
用51单片机实现交通信号灯_第15张图片

3、导入文件并仿真

3.1 导入文件

3.1.1导入
双击51芯片并导入之前生成的hex文件
用51单片机实现交通信号灯_第16张图片

添加完成后点击确定

3.2 开始仿真

点击开始仿真
用51单片机实现交通信号灯_第17张图片
结果如图
用51单片机实现交通信号灯_第18张图片
总结:通过本次用51单片机实现交通信号灯,简单的了解了51单片机的应用。也通过本次仿真,了解到硬件编程和软件所不同的区别。

你可能感兴趣的:(单片机)