用四盏双色灯模拟,P1口控制;南北红灯亮30秒,同时东西绿灯亮25秒,绿灯闪烁3次(间隔为1秒),然后黄灯亮2秒;然后东西与南北互换一下;重复;
#include "reg51.h" // #define uint unsigned int #define uchar unsigned char #define ON 0 //0的时候灯亮 #define OFF 1 //1的时候灯亮 //管脚定义 //南北道 黄灯亮3秒 红灯亮 30秒 黄灯3秒 绿灯38秒 //东西道 黄灯亮3秒 绿灯亮 28秒 黄灯3秒 红灯40秒 sbit PortDX_Yellow = P1^0; //东西方向黄灯 sbit PortDX_Red = P1^1; //东西方向红灯 sbit PortDX_Green = P1^2; //东西方向绿灯 sbit PortNB_Yellow = P1^3; //南北方向黄灯 sbit PortNB_Red = P1^4; //南北方向红灯 sbit PortNB_Green = P1^5; //南北方向绿灯 void delay(uint ms) // 毫秒级延时(AT89C52 @ 11.0592MHz) { uint ti; while(ms--) { for(ti=0;ti<112;ti++){}//112 } } /*==================== 主函数 ====================*/ void main(void) { delay(400); //开机延时400ms while(1) { PortNB_Yellow = ON ;PortNB_Red = OFF;PortNB_Green = OFF;//南北黄灯亮3秒 PortDX_Yellow = ON ;PortDX_Red = OFF;PortDX_Green = OFF;//东西黄灯亮3秒 delay(3000); PortNB_Yellow = OFF;PortNB_Red = ON ;PortNB_Green = OFF;//南北红灯亮28秒 PortDX_Yellow = OFF;PortDX_Red = OFF;PortDX_Green = ON ;//东西绿灯亮28秒 delay(28000); PortNB_Yellow = OFF;PortNB_Red = ON ;PortNB_Green = OFF;//南北红灯亮2秒 PortDX_Yellow = ON ;PortDX_Red = OFF;PortDX_Green = OFF;//东西黄灯亮2秒 delay(2000); PortNB_Yellow = ON ;PortNB_Red = OFF;PortNB_Green = OFF;//南北黄灯亮1秒 PortDX_Yellow = ON ;PortDX_Red = OFF;PortDX_Green = OFF;//东西黄灯亮1秒 delay(1000); PortNB_Yellow = ON ;PortNB_Red = OFF;PortNB_Green = OFF;//南北黄灯亮2秒 PortDX_Yellow = OFF;PortDX_Red = ON ;PortDX_Green = OFF;//东西红灯亮2秒 delay(2000); PortNB_Yellow = OFF;PortNB_Red = OFF;PortNB_Green = ON ;//南北绿灯亮38秒 PortDX_Yellow = OFF;PortDX_Red = ON ;PortDX_Green = OFF;//东西红灯亮38秒 delay(3800); } } 1.当为黄灯时南北、东西两道同时为黄灯;以提示行人或车辆下一个灯色即将到来时间 3秒。 2.当南北为红灯,南北道车辆禁止通行,时间30秒;南北道为绿灯,南北道车辆通过时间38秒 。 3.当东西道绿灯,东西道车辆通行,时间为28秒;东西道为红灯,东西道车辆禁止通过时间为40秒。 4.这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。