at89c51单片机-交通灯控制系统(含源码及仿真图)教案资料

发布时间 : 星期三 文章at89c51单片机-交通灯控制系统(含源码及仿真图)教案资料更新完毕开始阅读

x=a; while(x--){;} }

/*************************数码管显示子程序*************************/ void Display(uchar j)//j控制显示table中连续位的起始点 { char h,l; if(j<11)//根据状态判定时间 { h=Time_EW/10;//EW通行时间十位 l=Time_EW;//EW通行时间个位 } else if(j<23) { h=Time_SN/10;//SN通行时间十位 l=Time_SN;//SN通行时间个位 } for(i=0;i<4;)//按位显示通行状况及时间 { P0=table1[j];//通行状况显示 P3=tab[i];//位选显示 i++; j++; if(i%2)//两位计时显示 { P1=table[l]; Delay(400); } else { P1=table[h]; Delay(400); } } Delay(5); }

/***********************INT0外部中断服务程序***********************/ void EXINT0(void) interrupt 0//INT0外部中断 { EX0=0;//关中断 if(Busy_Button==0) {

P0=0xFE;//意外按钮按下全显示红灯 for(;Busy_Button!=1;)//意外按钮弹起时恢复之前状态 Display(24); } /*四个时间控制按钮分别控制SN、EW方向初始通行时间加减, 最长不超过s,最少不低于s*/ if(SN_Add==0)//SN+1 { SN1+=1; if(SN1>99) SN1=99; } if(SN_Red==0)//SN-1 { SN1-=1; if(SN1<20) SN1=20; } if(EW_Add==0)//EW+1 { EW1+=1; if(EW1>99) EW1=99; } if(EW_Red==0)//EW-1 { EW1-=1; if(EW1<20) EW1=20; } EX0=1;//开中断 }

/************************TO计时中断服务程序************************/ void timer0(void) interrupt 1 using 1//T0中断 { TH0=0x3C; TL0=0xB0;//定时计数初值 count++;//中断溢出一次count+1 if(count==20) { Time_EW--; Time_SN--;

count=0; //中断次计数s,count回,倒计时时间-1 } }

/**************************亮灯控制**************************/ void Process() { Time_EW=EW;//初始化东西方向通行时间 while(Time_EW>3)//状态:EW绿灯,SN红灯 { j=0; Display(j);//调用显示函数 } while(Time_EW>0)//状态-3:EW黄灯闪烁 { if(count<10)//状态:EW黄灯亮 { j=4; Display(j); } else//状态:EW黄灯灭 { j=8; Display(j); } } SN=SN1;//重置SN方向时间 Time_SN=SN;//初始化南北方向通行时间 while(Time_SN>3)//状态:EW红灯,SN绿灯 { j=12; Display(j); } while(Time_SN>0)//状态-6:SN黄灯闪烁 { j=16; if(count<10)//状态:SN黄灯亮 { Display(j); } else//状态:SN黄灯灭 { j=20;

Display(j); } } EW=EW1;//重置EW初始时间 }

/**************************主程序**************************/ main() { TMOD=0x01;//定时器工作方式 TH0=0x3C;//定时器初始化 TL0=0xB0; IT0=1;//中断触发方式为下降沿触发 EA=1;//CPU开中断 ET0=1;//开定时中断 TR0=1;//启动定时 EX0=1;//开外部INT0中断 while(1) { Process(); } }

5.5 程序运行效果图

联系合同范文客服:xxxxx#qq.com(#替换为@)