45 XH=0; #define uc unsigned char 46 NR=0; #define ui unsigned int 47 BR=0; uc 48 }shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,049 if((j>24)&&(j<30))//到了25秒 xf8,0x80,0x90}; 50 { sbit DL=P1^0; 51 NL=0; sbit DH=P1^1; 52 BL=0; //南北绿灯灭 sbit DR=P1^2; 53 if(h<=10) sbit NL=P1^3; 54 { sbit NH=P1^4; 55 NH=1; //南北黄灯闪 sbit NR=P1^5; 56 BH=1; sbit XL=P3^0; 57 } sbit XH=P3^1; 58 if(h>10) sbit XR=P3^2; 59 { sbit BR=P3^3; 60 NH=0; //南北黄灯闪 sbit BH=P1^7; 61 BH=0; sbit BL=P1^6; 62 } unsigned char h,j;//定义60秒和外延时变量 63 } sbit by=P2^0; if(j>30) sbit be=P2^1; 65 { sbit ny=P2^2; 66 NH=0; //南北黄灯灭 sbit ne=P2^3; 67 BH=0; sbit dy=P2^4; 68 NR=1;//南北红灯亮 sbit de=P2^5; 69 BR=1; sbit xy=P2^6; 70 if(j<55) sbit xe=P2^7; 71 { uc a=30,b=5,c=25;//a为红灯 b为黄灯 c为72 DL=1;//东西绿灯亮
73 XL=1; 绿灯
void delay(ui x) 74 } { 75 DR=0; ui i,r; 76 XR=0; for(i=x;i>0;i--) 77 } for(r=125;r>0;r--); 78 if((j>54)&&(j<60)) } 79 { void deng() 80 DL=0;//东西绿灯灭 { 81 XL=0; if(j<25) 82 if(h<=10) { 83 { DR=1; 84 DH=1;//东西黄灯闪
85 XH=1; XR=1; //东西红灯亮
NL=1; 86 }
87 if(h>10) BL=1; //南北绿灯亮
DH=0; 88 {
DH=0;//东西黄灯闪 90 XH=0; 91 } 92 } 93 }
94 void xianshi() 95 {
96 P0=0xff; 97 P2=0x00; 98 if(j<31) 99 {
100 P0=shu[a/10];//动数码管显示101 de=1; 102 delay(4); 103 P0=0xff; 104 P2=0x00;
105 P0=shu[a%10]; 106 de=0; 107 dy=1; 108 delay(4); 109 P0=0xff; 110 P2=0x00;
111 P0=shu[a/10];//西数码管显示112 dy=0; 113 xe=1; 114 delay(4); 115 P0=0xff; 116 P2=0x00;
117 P0=shu[a%10]; 118 xe=0; 119 xy=1; 120 delay(4); 121 xy=0; 122 if(j<26) 123 {
124 P0=0xff; 125 P2=0x00;
126 P0=shu[c/10];//南数码管显示 127 ne=1; 128 delay(4); 129 P0=0xff; 130 P2=0x00;
131 P0=shu[c%10]; 132
ne=0;
133 ny=1; 134 delay(4); 135 P0=0xff; 136 P2=0x00;
137 P0=shu[c/10];//北数码管显示 138 ny=0; 139 be=1; 140 delay(4); 141 P0=0xff; 142 P2=0x00;
143 P0=shu[c%10]; 144 be=0; 145 by=1; 146 delay(4); 147 by=0; 148 } 149 }
150 if((j>25)&&(j<31))//到了25秒 151 {
152 P0=0xff; 153 P2=0x00;
154 P0=shu[b/10];//南数码管黄显示 155 ne=1; 156 delay(4); 157 P0=0xff; 158 P2=0x00;
159 P0=shu[b%10]; 160 ne=0; 161 ny=1; 162 delay(4); 163 P0=0xff; 1 P2=0x00;
165 P0=shu[b/10];//北数码管黄显示 166 ny=0; 167 be=1; 168 delay(4); 169 P0=0xff; 170 P2=0x00;
171 P0=shu[b%10]; 172 be=0; 173 by=1; 174 delay(4); 175 by=0; 176
}
177 if(j>30) 178 {
179 P0=0xff; 180 P2=0x00;
181 P0=shu[a/10];//南数码管黄显示 182 ne=1; 183 delay(4); 184 P0=0xff; 185 P2=0x00;
186 P0=shu[a%10]; 187 ne=0; 188 ny=1; 1 delay(4); 190 P0=0xff; 191 P2=0x00;
192 P0=shu[a/10];//北数码管黄显示 193 ny=0; 194 be=1; 195 delay(4); 196 P0=0xff; 197 P2=0x00;
198 P0=shu[a%10]; 199 be=0; 200 by=1; 201 delay(4); 202 by=0; 203 if(j<55) 204 {
205 P0=0xff; 206 P2=0x00;
207 P0=shu[c/10];//动数码管绿灯显示208 de=1; 209 delay(4); 210 P0=0xff; 211 P2=0x00;
212 P0=shu[c%10]; 213 de=0; 214 dy=1; 215 delay(4); 216 P0=0xff; 217 P2=0x00;
218 P0=shu[c/10];//西数码管绿灯显示219 dy=0; 220
xe=1;
221 delay(4); 222 P0=0xff; 223 P2=0x00;
224 P0=shu[c%10]; 225 xe=0; 226 xy=1; 227 delay(4); 228 xy=0; 229 } 230 }
231 if((j>54)&&(j<60)) 232 {
233 P0=0xff; 234 P2=0x00;
235 P0=shu[b/10];//动数码管黄灯显示 236 de=1; 237 delay(4); 238 P0=0xff; 239 P2=0x00;
240 P0=shu[b%10]; 241 de=0; 242 dy=1; 243 delay(4); 244 P0=0xff; 245 P2=0x00;
246 P0=shu[b/10];//西数码管黄灯显示 247 dy=0; 248 xe=1; 249 delay(4); 250 P0=0xff; 251 P2=0x00;
252 P0=shu[b%10]; 253 xe=0; 254 xy=1; 255 delay(4); 256 xy=0; 257 } 258 }
259 void main() 260 {
261 TMOD=0x01;//t0工作在方式1 262 EA=1;//开总的中断 263 ET0=1;//开T0的中断
2
TH0=0x3C;//定时中断50毫秒
265 TL0=0xB0; 266 TR0=1; 267 P1=0; 268 P3=0; 269 while(1) 270 {
271 deng(); 272 xianshi(); 273 } 274 }
275 void time0() interrupt 1 276 {
277 h=h+1;//计中断的次数 278 TH0=0x3C; 279 TL0=0xB0;
280 if(h==20)//延时到了1秒 281 {
282 j=j+1;//60秒的变量加一 283 if(j>59)//判断是否到了60秒284 j=0;//重新清零 285 h=0;//重新清零 286 if(a==0) 287
a=30;
288 if((j<31)||(j>30))//判断秒数是否小于31、是2 否大于30;小于31秒则说明东西红灯亮,290 大于30秒则说明南北红灯亮 291 a=a-1;
292 if(b==0)//判断是否到零 293 b=5;//重新置数
294 if((j>25)&&(j<31))//判断是否大于25至小于295 31秒
296 b=b-1;//南北黄灯的显示 297 if(c==0) 298 c=25; 299 if(j<56) 300 {
301 if((j<26)||(j>30)) 302 c=c-1; 303 }
304 if(b==0) 305 b=5;
306 if((j>54)&&(j<60)) 307 b=b-1; 308 309 310
311 312
313
314
315 }