本科毕业论文(设计) 第 17 页
;
h=Time_SN/10;
l=Time_SN; P0=table[l];
SN_LED2=1; //点亮SN_LED2 Delay(2); SN_LED2=0; P0=table[h]; SN_LED1=1; Delay(2); SN_LED1=0;
//点亮SN_LED1
h= EW1/10; l= EW1; P0=table[l];
Time_Show_LED1=1; //点亮Time_Show_LED1 Delay(2);
Time_Show_LED1=0; P0=table[h];
Time_Show_LED2=1; //点亮Time_Show_LED2 Delay(2); Time_Show_LED2=0; }
/**********************外部0中断服务程序******************/
void INT0_srv(void)interrupt 0 using 1 {
EX0=0; //关中断
if(Nomor_Button==0) //测试按键是否按下,按下为正常状态 {
本科毕业论文(设计) 第 18 页
EW1=60; SN1=40; EWL1=19; SNL1=19;
Busy_LED=0; //关繁忙信号灯 Special_LED =0; //关特殊信号灯
}
if(Busy_Btton==0) //测试按键是否按下,按下为繁忙状态 {
EW1=45; SN1=30; EWL1=14; SNL1=14;
Special_LED=0; //关特殊信号灯 Busy_LED=1; //开繁忙信号灯
}
if(Special_Btton==0)//测试按键是否按下,按下为特殊状态 {
EW1=75; SN1=55; EWL1=19; SNL1=19;
Busy_LED=0; //关繁忙信号灯 Special_LED =1;//开特殊信号灯
} }
/**********************T0中断服务程序*******************/ void timer0(void)interrupt 1 using 1 {
EX0=1; //开中断
本科毕业论文(设计) 第 19 页
static uchar count;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6; count++;
if(count==10) {
if(Flag_SN_Yellow==1) //测试南北黄灯标志位 {SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1) //测试东西黄灯标志位 {EW_Yellow=~EW_Yellow;} }
if(count==20) {
Time_EW--; Time_SN--;
if(Flag_SN_Yellow==1) //测试南北黄灯标志位 {SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1) //测试东西黄灯标志位 {EW_Yellow=~EW_Yellow;} count=0; } }
/*********************主程序开始***********************/ void main(void) {
Busy_LED=0; Special_LED=0; IT0=1;
//INT0负跳变触发
TMOD=0x01; //定时器工作于方式1 TH0=(65536-50000)/256; //定时器赋初值
本科毕业论文(设计) 第 20 页
TL0=(65536-50000)%6; EA=1; //CPU开中断总允许 ET0=1; //开定时中断 EX0=1; //开外部INTO中断 TR0=1; //启动定时
while(1) {
/*******S0状态**********/ SN_ManRed=0;
SN_ManGreen=1; //SN人行道通行 EW_ManRed=1; //EW人行道禁止 EW_ManGreen=0;
Flag_EW_Yellow=0; //EW关黄灯显示信号 Time_EW=EW; Time_SN=SN; while(Time_SN>=5)
/*******S1状态**********/ P1=0x00;
while(Time_SN>=0) { {
P1=S[0]; //SN绿灯,EW红灯 Display(); }
Flag_SN_Yellow=1; //SN开黄灯信号位 P1=P1|0x08; //保持EW红灯 Display();
}
本科毕业论文(设计) 第 21 页
/*******S2状态**********/ SN_ManRed=1; //SN人行道禁止 SN_ManGreen=0; EW_ManRed=1; //EW人行道禁止 EW_ManGreen=0;
Flag_SN_Yellow=0; //SN关黄灯显示信号 Time_SN=SNL;
while(Time_SN>=5) {
P1=S[2]; //SN左拐绿灯亮,EW红灯 Display(); }
/*******S3状态**********/ P1=0x00;
while(Time_SN>=0) {
Flag_SN_Yellow=1; //SN开黄灯信号位 P1=P1|0x08; //保持EW红灯 Display(); }
/***********赋值*********/ EW=EW1; SN=SN1; EWL=EWL1; SNL=SNL1;
/*******S4状态**********/ SN_ManRed=1; //SN人行道禁止 SN_ManGreen=0; EW_ManRed=0;
EW_ManGreen=1; //EW人行道通行 Flag_SN_Yellow=0; //SN关黄灯显示信号 Time_EW=SN; Time_SN=EW;
while(Time_EW>=5) {
P1=S[4]; //EW通行,SN红灯 Display(); }
/*******S5状态**********/ P1=0X00;
while(Time_EW>=0)