BVCCD98MRCLKQ2Q3Q4Q5Q6Q7610111213D1DE1DF1DG1DH1DBVCCD98MRCLKQ2Q3Q4Q5Q6Q7610111213D2DE2DF2DG2DH2DBVCCD98MRCLKQ2Q3Q4Q5Q6Q7610111213D3DE3DF3DG3DH3DBVCCD98MRCLKQ2Q3Q4Q5Q6Q7610111213D4DE4DF4DG4DH4D74LS164CLK74LS164
74LS16474LS164 JD4D12345678P2.0-P2.7U8DP2.2DP2.3DP2.4DP2.5DP2.6DP2.7DP2.7DP2.6DP2.5DP2.4DP2.3DP2.2DVCCD976543217B6B5B4B3B2B1BCOM7C6C5C4C3C2C1CGND101112131415168W3N1N2N3北W1VCCDE1W2E2东ULN2003西E3
#include
# define uchar unsigned char uchar data R2,R3,R4;
sbit LED_G2=P2^2;//南北绿灯 sbit LED_Y2=P2^3;//南北黄灯 sbit LED_R2=P2^4;//南北红灯
sbit LED_G1=P2^5;//东西绿灯 sbit LED_Y1=P2^6;//东西黄灯 sbit LED_R1=P2^7;//东西红灯 void delay(int count) {
unsigned int i; for(i=0;i //状态1 void state1() { LED_G1=1;//东西绿灯亮 LED_Y1=0; LED_R1=0; LED_G2=0; LED_Y2=0; LED_R2=1; //南北红灯亮 } //状态2 void state2() ; S1S2S3南 { LED_Y1=0; LED_R1=0; LED_G2=0; LED_Y2=0; LED_R2=1 ;//南北红灯亮 } //状态3 void state3() { LED_G1=0; LED_R1=0; LED_G2=0; LED_Y2=0; LED_R2=1 ;//南北红灯亮 LED_Y1=1 ;//东西黄灯亮 } //状态4 void state4() { LED_G1=0; LED_Y1=0; LED_R1=1 ;//东西红灯亮 LED_G2=1 ;//南北绿灯亮 LED_Y2=0; LED_R2=0; } //状态5 void state5() { LED_G1=0; LED_Y1=0; LED_R1=1 ;//东西红灯亮 LED_Y2=0; LED_R2=0; } //状态6 void state6() { LED_G1=0; LED_Y1=0; LED_R1=1;//东西红灯亮 LED_G2=0; LED_R2=0; LED_Y2=1;//南北黄灯亮 } void main() { P2=0x00;//关闭不相关的LED P0=0xff; P1=0xff; TMOD=0x01 ;//置T0工作方式1 TH0=0x3c ;//置T0定时初值50mS TL0=0xb0 ; TR0=1; //启动T0 EA=0; LOOP: R2=20 ;//置1S计数初值 50mS*20=1S R3=20 ;//红灯20S state1() ;//调用状态1 WAIT1:while(!TF0); TF0=0; TH0=0x3c; TL0=0xb0; TR0=1 ;//启动T0 R2--; if (R2>0) goto WAIT1 ;//判1S到否?未到继续状态1 R2=20 ;//置50mS计数初值 R3--; if (R3>0) goto WAIT1 ;//状态1维持20S //*************************************************** R2=5 ;//置50mS计数初值 5*4=20 R3=3 ;//绿灯闪3S R4=4 ;//闪烁间隔200mS WAIT2: state2() ;//调用状态2 if(!TF0) goto WAIT2 ;//查询50mS到否 TF0=0; TH0=0x3c ;//恢复T0定时初值50mS TL0=0xb0; R4--; if(R4>0) goto WAIT2 ;//判200mS到否?未到继续状态2 LED_G1=~LED_G1 ;//东西绿灯闪 R4=4 ;//闪烁间隔200mS R2-- ; if(R2>0) goto WAIT2 ;//判1S到否?未到继续状态2 R2=5 ;//置50mS计数初值 R3--; if(R3>0) goto WAIT2 ;//状态2维持3S //*************************************************** R2=20 ;//置50mS计数初值 R3=2 ;//黄灯2S WAIT3: state3() ;//调用状态3 if(!TF0) goto WAIT3 ;//查询30mS到否 TF0=0; TH0=0x3c ;//恢复T0定时初值50mS TL0=0xb0; R2--; if(R2>0) goto WAIT3 ;//判1S到否?未到继续状态3 R2=20 ;//置50mS计数初值 R3--; if(R3>0) goto WAIT3 ;//状态3维持2S //;*************************************************** R2=20 ;//置50mS计数初值 R3=20 ;//黄灯2S WAIT4: state4() ;//调用状态4 if(!TF0) goto WAIT4 ;//查询30mS到否 TF0=0; TH0=0x3c ;//恢复T0定时初值50mS TL0=0xb0; R2--; if(R2>0) goto WAIT4 ;//判1S到否?未到继续状态3 R2=20 ;//置50mS计数初值 R3--; if(R3>0) goto WAIT4 ;//状态4维持20S ///////////////////////////////////// R2=5 ;//置50mS计数初值 5*4=20 R4=4 ;//闪烁间隔200mS R3=3 ;//绿灯闪3S WAIT5: state5() ;//调用状态35 if(!TF0) goto WAIT5 ;//查询50mS到否 TF0=0; TH0=0x3c ;//恢复T0定时初值100mS TL0=0xb0; R4--; if(R4>0) goto WAIT5;//判200mS到否?未到继续状态5 LED_G2=~LED_G2 ;//南北绿灯闪 R4=4 ;//闪烁200mS R2--; if(R2>0) goto WAIT5; R2=5 ;//置100mS计数初值 R3--; if(R3>0) goto WAIT5;//状态5维持3S //;*************************************************** R2=20 ;//置50mS计数初值 R3=2 ;//黄灯2S WAIT6: state6() ;//调用状态6 if(!TF0) goto WAIT6 ;//查询100mS到否 TF0=0; TH0=0x3c ;//恢复T0定时初值100mS TL0=0xb0; R2--; if(R2>0) goto WAIT6 ;//判1S到否?未到继续状态6 R2=20 ;//置100mS计数初值 R3--; if(R3>0) goto WAIT6;//状态6维持2 goto LOOP ;//大循环 } 五实验心得体会 通过实验及仿真,基本熟悉了解了ULN2003芯片工作原理,通过软件的仿真,了解了交通灯的运行原理,同时,对于51单片机的应用有了进一步的认识。