交通信号灯C语言源程序.docx
《交通信号灯C语言源程序.docx》由会员分享,可在线阅读,更多相关《交通信号灯C语言源程序.docx(16页珍藏版)》请在冰豆网上搜索。
![交通信号灯C语言源程序.docx](https://file1.bdocx.com/fileroot1/2022-11/30/a7a0f30b-328b-437b-a1a9-c402029d3484/a7a0f30b-328b-437b-a1a9-c402029d34841.gif)
交通信号灯C语言源程序
#include"reg51.h"
#include"absacc.h"
sbitSN_LED_RED=P1^3;
sbitSN_LED_GREEN=P1^5;
sbitSN_LED_YELLOW=P1^4;
sbitEW_LED_RED=P1^0;
sbitEW_LED_GREEN=P1^2;
sbitEW_LED_YELLOW=P1^1;
unsignedcharcodedisptab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};
unsignedcharcodebittab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};unsignedcharnum=0;//数码管序号
unsignedcharled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
charset_value[4]={60,4,40,4};//设置数码管在显示值unsignedcharsign[4]={1,0,0,0};
unsignedchardisp_ew,disp_sn;
unsignedcharfalsh_sign,direction_sign,flash_count;
unsignedintsecnum;
unsignedcharkey;
voiddelay_ms(unsignedinta);
voidadd_process();
voidsub_process();
voidset_process();
voidscan_key();
voidinit();
voiddelay_ms(unsignedinta)
{unsignedchari;
while(a--)
{i=70;
while(i--);
}
}
voidadd_process()
{
delay_ms(600);
if(!
P3^2)
{
delay_ms(500);
if(P3^2)
{
if(key==1)
{
set_value[0]=set_value[0]+10;
if(set_value[0]>99)
{
set_value[0]=set_value[0]%10;
}
disp_ew=set_value[0];
}
if(key==2)
{
set_value[1]++;
if(set_value[1]>9)
{
set_value[1]=0;
}
disp_ew=set_value[1];
}
if(key==3)
{
set_value[2]=set_value[2]+10;
if(set_value[2]>99)
{
set_value[2]=set_value[2]%10;
}
disp_sn=set_value[2];
}
if(key==4)
{
set_value[3]++;
if(set_value[3]>9)
{
set_value[3]=0;
}
disp_sn=set_value[3];
}
}
while(!
P3^2)
{
if(key==1)
{
set_value[0]=set_value[0]+10;
if(set_value[0]>99)
{
set_value[0]=set_value[0]%10;
}
disp_ew=set_value[0];
}
if(key==2)
{
set_value[1]++;
if(set_value[1]>9)
{
set_value[1]=0;
}
disp_ew=set_value[1];
}
if(key==3)
{
set_value[2]=set_value[2]+10;
if(set_value[2]>99)
{
set_value[2]=set_value[2]%10;
}
disp_sn=set_value[2];
}
if(key==4)
{
set_value[3]++;
if(set_value[3]>9)
{
set_value[3]=0;
}
disp_sn=set_value[3];
}
delay_ms(1200);
}
}
else
{
while(!
P3^2);
if(key==1)
{
set_value[0]++;
if(set_value[0]>99)
{
set_value[0]=0;
}
disp_ew=set_value[0];
}
if(key==2)
{
set_value[1]++;
if(set_value[1]>9)
{
set_value[1]=0;
}
disp_ew=set_value[1];
}
if(key==3)
{
set_value[2]++;
if(set_value[2]>99)
{
set_value[2]=0;
}
disp_sn=set_value[2];
}
if(key==4)
{
set_value[3]++;
if(set_value[3]>9)
{
set_value[3]=0;
}
disp_sn=set_value[3];
}
}
}
voidsub_process()
{
delay_ms(600);
if(!
P3^3)
{
delay_ms(500);
if(P3^3)
{
while(!
P3^3);
if(key==1)
{
set_value[0]=set_value[0]-10;
if(set_value[0]<0)
{
set_value[0]=set_value[0]+100;
}
disp_ew=set_value[0];
}
if(key==2)
{
set_value[1]--;
if(set_value[1]<0)
{
set_value[1]=9;
}
disp_ew=set_value[1];
}
if(key==3)
{
set_value[2]=set_value[2]-10;
if(set_value[2]<0)
{
set_value[2]=set_value[2]+100;
}
disp_sn=set_value[2];
}
if(key==4)
{
set_value[3]--;
if(set_value[3]<0)
{
set_value[3]=9;
}
disp_sn=set_value[3];
}
}
while(!
P3^3)
{
if(key==1)
{
set_value[0]=set_value[0]-10;
if(set_value[0]<0)
{
set_value[0]=set_value[0]+100;
}
disp_ew=set_value[0];
}
if(key==2)
{
set_value[1]--;
if(set_value[1]<0)
{
set_value[1]=9;
}
disp_ew=set_value[1];
}
if(key==3)
{
set_value[2]=set_value[2]-10;
if(set_value[2]<0)
{
set_value[2]=set_value[2]+100;
}
disp_sn=set_value[2];
}
if(key==4)
{
set_value[3]--;
if(set_value[3]<0)
{
set_value[3]=9;
}
disp_sn=set_value[3];
}
delay_ms(1200);
}
}
else
{
while(!
P3^3);
if(key==1)
{
set_value[0]--;
if(set_value[0]<0)
{
set_value[0]=99;
}
disp_ew=set_value[0];
}
if(key==2)
{
set_value[1]--;
if(set_value[1]<0)
{
set_value[1]=9;
}
disp_ew=set_value[1];
}
if(key==3)
{
set_value[2]--;
if(set_value[2]<0)
{
set_value[2]=99;
}
disp_sn=set_value[2];
}
if(key==4)
{
set_value[3]--;
if(set_value[3]<0)
{
set_value[3]=9;
}
disp_sn=set_value[3];
}
}
}
voidset_process()
{
while(!
P3^0);
ET1=0;
TR1=0;
key=key+1;
falsh_sign=1;
if(key>5)
{
key=1;
}
if(key==1)
{
disp_ew=set_value[0];
P1=0xfb;
direction_sign=1;
}
if(key==2)
{
disp_ew=set_value[1];
P1=0xfd;
direction_sign=1;
}
if(key==3)
{
disp_sn=set_value[2];
P1=0xdf;
direction_sign=2;
}
if(key==4)
{
disp_sn=set_value[3];
P1=0xef;
direction_sign=2;
}
if(key==5)
{
disp_sn=set_value[0]+set_value[1];
disp_ew=set_value[0];
P1=0xf3;
falsh_sign=0;
ET1=1;
TR1=1;
}
}
voidscan_key()
{
while(P3^0&&P3^2&&P3^3);
delay_ms(15);
if(!
P3^0)
{
set_process();
}
if(!
P3^2)
{
add_process();
}
if(!
P3^3)
{
sub_process();
}
else
return;
}
voiddisp_t0(void)interrupt1
{
TR0=0;
num++;
num=(num%4);
P2=0xff;
P0=0xff;
P2=bittab[num];
switch(num)
{
case0:
case1:
case2:
case3:
default:
P0=disptab[disp_sn%10];P0=disptab[disp_sn/10];P0=disptab[disp_ew%10];P0=disptab[disp_ew/10];;
break;
break;
break;
break;
}
TH0=0xD8;
TL0=0xF0;
TR0=1;
}
voiddisp_count_t1(void)interrupt3
{
TH1=0x3C;
TL1=0xB0;
secnum++;
if(secnum==20)
{
disp_sn--;
disp_ew--;
if(disp_ew==0&&sign[0]==1)
{
disp_ew=set_value[1];
EW_LED_GREEN=1;
EW_LED_YELLOW=0;
sign[1]=1;
sign[0]=0;
}
if(disp_ew==0&&sign[1]==1)
{
disp_ew=set_value[2]+set_value[3];
disp_sn=set_value[2];
SN_LED_RED=1;
EW_LED_YELLOW=1;
EW_LED_RED=0;
SN_LED_GREEN=0;
sign[2]=1;
sign[1]=0;
}
if(disp_sn==0&&sign[2]==1)
{
disp_sn=set_value[3];
SN_LED_GREEN=1;
SN_LED_YELLOW=0;
sign[3]=1;
sign[2]=0;
}
if(disp_sn==0&&sign[3]==1)
{
disp_sn=set_value[0]+set_value[1];
disp_ew=set_value[0];
EW_LED_RED=1;
SN_LED_YELLOW=1;
EW_LED_GREEN=0;
SN_LED_RED=0;
sign[0]=1;
sign[3]=0;
}
secnum=0;
}
}
voidinit()
{
direction_sign=0;
falsh_sign=0;
flash_count=0;
secnum=0;
key=0;
P0=0xff;
disp_sn=set_value[0]+set_value[1];
disp_ew=set_value[0];
EW_LED_GREEN=0;
SN_LED_RED=0;
P3=0xf8;
TMOD=0x11;
TH0=0xD8;
TL0=0xF0;
TH1=0x3C;
TL1=0xB0;
EA=1;
TR0=1;
ET0=1;
TR1=1;
ET1=1;
}
voidmain()
{
init();
while
(1)
{
scan_key();
}