用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单片机的应用。也通过本次仿真,了解到硬件编程和软件所不同的区别。