关于交通灯控制问题
程序代码:
#include<reg51.h> #include<intrins.h> sbit D1=P1^0; //led灯引脚定义 sbit D2=P1^1; sbit D3=P1^2; sbit LS138A=P2^2; //数码管引脚定义 sbit LS138B=P2^3; sbit LS138C=P2^4; void delay(unsigned int i); unsigned char aa,num,num1,a; unsigned int LedOut[2]; unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //0~9数模 void main() { unsigned char i; TMOD=0x01,TH0=0x3c,TL0=0xb0, EA=1; //定时器初始化(50ms中断一次) ET0=1; TR0=1; num = 40; D1=1;D2=1;D3=0; //led灯初始化 while(1) { num1=num/2; LedOut[0]=Disp_Tab[num1/10]; LedOut[1]=Disp_Tab[num1%10]; for( i=0; i<2; i++) //实现8位动态扫描循环 { P0 = LedOut[i]; //将字模送到P0口显示 switch(i) //使用switch 语句控制位选 也可以是用查表的方式 学员可以试着自己修改 { case 0:LS138A=0; LS138B=0; LS138C=0; break; case 1:LS138A=1; LS138B=0; LS138C=0; break; } delay(10); } } } void timer0(void) interrupt 1 { TH0=0x3c,TL0=0xb0; aa++; if(aa == 10) { //如果到了0.5s aa = 0; num--; if(num <= 6) D1 = ~D1; //黄灯闪烁 else if(a==2&&num==39) //变量a是控制不能重如这个通道 { D1 = 1; //关闭黄灯. D2 = 1; //关闭红灯. D3 = 0; //打开绿灯. a=0; } if(num == 0) { D1 = 1; //关闭黄灯. D2 = 0; //打开红灯. D3 = 1; //关闭绿灯. num = 40; //开始20s倒计时. a++; } } } void delay(unsigned int i) { char j; for(i; i > 0; i--) for(j = 200; j > 0; j--); }这怎么在灯交换时,它的秒数跳得不正常,望高手解决.......谢谢!