交通灯程序/***********************************************************十字路口交通灯控制C程序***********************************************************/#include#defineucharunsignedchar#defineuintunsignedint/*****定义控制位*******************************************/sbitTime_Show_LED2=P2^5;//Time_Show_LED2(直行时间显示)控制位sbitTime_Show_LED1=P2^4;//Time_Show_LED1(直行时间显示)控制位sbitEW_LED2=P2^3;//EW_LED2控制位sbitEW_LED1=P2^2;//EW_LED1控制位sbitSN_LED2=P2^1;//SN_LED2控制位sbitSN_LED1=P2^0;//SN_LED1控制位sbitSN_Yellow=P1^6;//SN黄灯sbitEW_Yellow=P1^2;//EW黄灯sbitEW_ManGreen=P3^0;//EW人行道绿灯sbitSN_ManGreen=P3^1;//SN人行道绿灯sbitSpecial_LED=P2^6;//交通特殊指示灯sbitBusy_LED=P2^7;//交通繁忙指示灯sbitNomor_Button=P3^5;//交通正常按键sbitBusy_Btton=P3^6;//交通繁忙按键sbitSpecial_Btton=P3^7;//交通特殊按键sbitEW_ManRed=P3^3;//EW人行道红灯sbitSN_ManRed=P3^4;//SN人行道红灯bitFlag_SN_Yellow;//SN黄灯标志位bitFlag_EW_Yellow;//EW黄灯标志位charTime_EW;//东西方向倒计时单元charTime_SN;//南北方向倒计时单元ucharEW=60,SN=40,EWL=19,SNL=19;//程序初始化赋值,正常模式ucharEW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0-9段选码ucharcodeS[8]={0x28,0x48,0x18,0x48,0x82,0x84,0x81,0x84};//交通信号灯控制代码/**********************延时子程序**************************/voidDelay(uchara){uchari;i=a;while(i--){;}}/*****************显示子函数******************************/voidDisplay(void){ucharh,l;h=Time_EW/10;l=Time_EW%10;P0=table[l];EW_LED2=1;//点亮EW_LED2Delay(2);EW_LED2=0;//熄灭EW_LED2P0=table[h];EW_LED1=1;//点亮EW_LED1Delay(2);EW_LED1=0;h=Time_SN/10;l=Time_SN%10;P0=table[l];SN_LED2=1;//点亮SN_LED2Delay(2);SN_LED2=0;P0=table[h];SN_LED1=1;//点亮SN_LED1Delay(2);SN_LED1=0;h=EW1/10;l=EW1%10;P0=table[l];Time_Show_LED1=1;//点亮Time_Show_LED1Delay(2);Time_Show_LED1=0;P0=table[h];Time_Show_LED2=1;//点亮Time_Show_LED2Delay(2);Time_Show_LED2=0;}/**********************外部0中断服务程序******************/voidINT0_srv(void)interrupt0using1{EX0=0;//关中断if(Nomor_Button==0)//测试按键是否按下,按下为正常状态{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;//开特殊信号灯}EX0=1;//开中断}/**********************T0中断服务程序*******************/voidtimer0(void)interrupt1using1{staticucharcount;TH0=(65536-50000)/256;TL0=(65536-50000)%256;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;}}/*********************主程序开始***********************/voidmain(void){Busy_LED=0;Special_LED=0;IT0=1;//INT0负跳变触发TMOD=0x01;//定时器工作于方式1TH0=(65536-50000)/256;//定时器赋初值TL0=(65536-50000)%256;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_Man...