#include<stcreg.h>
#define uchar unsigned char
#define uint unsigned int
sbit FMQ=P3^4;
sbit QR=P2^7;
sbit QY=P2^6;
sbit QG=P2^5;
sbit HR=P2^7;
sbit HY=P2^6;
sbit HG=P2^5;
sbit ZR=P2^4;
sbit ZY=P2^3;
sbit ZG=P2^2;
sbit YR=P2^4;
sbit YY=P2^3;
sbit YG=P2^2;
sbit SWITCH1=P1^0;
sbit SWITCH2=P1^1;
sbit SWITCH3=P1^2;
sbit SWITCH4=P1^3;
sbit P3_2=P3^2;
sbit P3_3=P3^3;
uchar DAT1,DAT2; //显示时间变量
uchar DISP1[2]={0,0}; //显示缓冲区1,南北
uchar DISP2[2]={0,0}; //显示缓冲区2,东西
uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};
void DISPCLK1(uchar i);
void DISPCLK2(uchar i);
void DEL1MS(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<123;y++);
}
void main()
{
uchar i,j;
TCON=0x5;
PX1=1;
EX0=1;
EX1=1;
EA=1;
P0=0xFF;
P1=0xFF;
P2=0xFF;
P3=0xFF;
while(1)
{
P1=0xFF;
P2=0xFF;
DAT1=25;
DAT2=25;
QG=0;
HG=0;
ZR=0;
YR=0;
for(i=0;i<20;i++)
{
for(j=0;j<200;j++)
{
DISPCLK1(DAT1);
DISPCLK2(DAT2);
DEL1MS(25); //延时5毫秒
}
FMQ=1;
DAT1=DAT1-1;
DAT2=DAT2-1;
}
P1=0xFF;
P2=0xFF;
ZY=0;
YY=0;
QY=0;
HY=0;
for(i = 0; i < 5; i++)
{
for(j = 0; j < 200; j++)
{
DISPCLK1(DAT1);//显示
DISPCLK2(DAT2);//显示
DEL1MS(25); //延时3毫秒
}
QY = ~QY; //南北向黄灯亮
HY = ~HY;
ZY = ~ZY; //东西方向黄灯亮
YY = ~YY;
FMQ = ~FMQ; //黄灯时蜂鸣器叫一声
DAT1 = DAT1 - 1;//完成数字的减1操作,调整好的数字送显存
DAT2 = DAT2 - 1;//完成数字的减1操作,调整好的数字送显存
}
P1 = 0xff;
P2 = 0xff;
DAT1 = 15; //汇编0x20
DAT2 = 15; //汇编0x20
ZG = 0; //东西方向绿灯亮
YG = 0;
QR = 0; //南北方向红灯亮
HR = 0;
for(i = 0; i < 10; i++)//执行15秒
{
for(j = 0; j < 200; j++)
{
DISPCLK1(DAT1);//显示
DISPCLK2(DAT2);//显示
DEL1MS(25); //延时3毫秒
}
FMQ = 1; //蜂鸣器响
DAT1 = DAT1 - 1;//完成数字的减1操作,调整好的数字送显存
DAT2 = DAT2 - 1;//完成数字的减1操作,调整好的数字送显存
}
//最后5秒黄灯闪
P1 = 0xff;
P2 = 0xff; //关所有的灯
ZY = 0; //黄灯亮
YY = 0;
QY = 0;
HY = 0;
for(i = 0; i < 5; i++)
{
for(j = 0; j < 200; j++)
{
DISPCLK1(DAT1);//显示
DISPCLK2(DAT2);//显示
DEL1MS(25); //延时3毫秒
}
QY = ~QY; //南北向黄灯亮
HY = ~HY;
ZY = ~ZY; //东西方向黄灯亮
YY = ~YY;
FMQ = ~FMQ; //黄灯时蜂鸣器叫一声
DAT1 = DAT1 - 1;//完成数字的减1操作 ,调整好的数字送显存
DAT2 = DAT2 - 1;//完成数字的减1操作 ,调整好的数字送显存
}
}
}
void D_X() interrupt 0 using 0
{
uchar i,j,temp0,temp1,temp2,temp3;
EA=0;
P3_2=1;
while(!P3_2);
temp0=DAT1;
temp1=DAT2;
temp2=P1;
temp3=P2;
DAT1=60;
DAT2=60;
P1=0xff;
P2=0xff;
ZG=0;
YG=0;
QR=0;
HR=0;
for(i=0;i<60;i++)
{
for(j=0;j<200;j++)
{
DISPCLK1(DAT1);
DISPCLK2(DAT2);
DEL1MS(25);
}
DAT1=DAT1-1;
DAT2=DAT2-1;
}
DAT1=temp0;
DAT2=temp1;
P1=temp2;
P2=temp3;
EA=1;
}
void N_B() interrupt 2 using 0
{
uchar i,j,temp0,temp1,temp2,temp3;
EA=0;
P3_3=1;
while(!P3_3);
temp0=DAT1;
temp1=DAT2;
temp2=P1;
temp3=P2;
DAT1=60;
DAT2=60;
P1=0xff;
P2=0xff;
ZR=0;
YR=0;
QG=0;
HG=0;
for(i=0;i<60;i++)
{
for(j=0;j<200;j++)
{
DISPCLK1(DAT1);
DISPCLK2(DAT2);
DEL1MS(25);
}
DAT1=DAT1-1;
DAT2=DAT2-1;
}
DAT1=temp0;
DAT2=temp1;
P1=temp2;
P2=temp3;
EA=1;
}
void DISPCLK1(uchar i)
{
DISP1[0]=i%10;
DISP1[1]=i/10;
P0=table[DISP1[0]];
SWITCH2=0;
DEL1MS(2);
SWITCH2=1;
P0=table[DISP1[1]];
SWITCH1=0;
DEL1MS(2);
SWITCH1=1;
}
void DISPCLK2(uchar i)
{
DISP2[0]=i%10;
DISP2[1]=i/10;
P0=table[DISP2[0]];
SWITCH4=0;
DEL1MS(2);
SWITCH4=1;
P0=table[DISP2[1]];
SWITCH3=0;
DEL1MS(2);
SWITCH3=1;
}
单片机案例开发——交通灯设计
最新推荐文章于 2024-08-04 07:00:00 发布