交通灯运行一周耗时40秒,运行情况是东西方向绿灯亮10秒后灭,黄灯闪烁3秒后灭,左转向灯亮4秒后灭,黄灯闪烁3秒后灭,红灯亮20秒
南北方向交通灯运行情况是红灯亮20秒后灭,绿灯亮10秒后灭,黄灯闪烁3秒后灭
左转向灯亮4秒后灭,黄灯闪烁3秒
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit RED_A=P0^0;
- sbit YELLOW_A=P0^1;
- sbit GREEN_A=P0^2;
- sbit LEFT_A=P2^0;
- sbit RED_B=P0^3;
- sbit YELLOW_B=P0^4;
- sbit GREEN_B=P0^5;
- sbit LEFT_B=P2^1;
- uchar Flash_Count = 0;
- Operation_Type = 1;
- void DelayMS(uint x)
- {
- uchar t;
- while(x--)
- {
- for(t=120;t>0;t--);
- }
- }
- void Traffic_lignt()
- {
- switch(Operation_Type)
- {
- case 1:
- RED_A=1;YELLOW_A=1;GREEN_A=0;LEFT_A=1;
- RED_B=0;YELLOW_B=1;GREEN_B=1;LEFT_B=1;
- DelayMS(10000);
- Operation_Type = 2;
- break;
- case 2:
- GREEN_A=1;
- DelayMS(300);
- YELLOW_A=~YELLOW_A;
- if(++Flash_Count !=10)
- return;
- Flash_Count=0;
- Operation_Type = 3;
- break;
- case 3:
- RED_A=1;YELLOW_A=1;GREEN_A=1;LEFT_A=0;
- // RED_B=0;YELLOW_B=1;GREEN_B=1;LEFT_B=1;
- DelayMS(4000);
- Operation_Type = 4;
- break;
- case 4:
- LEFT_A=1;
- DelayMS(300);
- YELLOW_A=~YELLOW_A;
- if(++Flash_Count !=10)
- return;
- Flash_Count=0;
- Operation_Type = 5;
- break;
- case 5:
- RED_A=0;YELLOW_A=1;GREEN_A=1;LEFT_A=1;
- RED_B=1;YELLOW_B=1;GREEN_B=0;LEFT_B=1;
- DelayMS(10000);
- Operation_Type = 6;
- break;
- case 6:
- GREEN_B=1;
- DelayMS(300);
- YELLOW_B=~YELLOW_B;
- if(++Flash_Count !=10)
- return;
- Flash_Count=0;
- Operation_Type = 7;
- break;
- case 7:
- // RED_A=0;YELLOW_A=1;GREEN_A=1;LEFT_A=1;
- RED_B=1;YELLOW_B=1;GREEN_B=1;LEFT_B=0;
- DelayMS(4000);
- Operation_Type = 8;
- break;
- case 8:
- LEFT_B=1;
- // RED_A=0;YELLOW_A=1;GREEN_A=1;LEFT_A=1;
- DelayMS(300);
- YELLOW_B=~YELLOW_B;
- if(++Flash_Count !=10)
- return;
- Flash_Count=0;
- Operation_Type = 1;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
LED模拟交通灯(带左转向).zip
(70.12 KB, 下载次数: 46)
|