51单片机C程序实验LED灯:[5]模拟交通灯
人气:0名称:LED 模拟交通灯
目的:东西向绿灯亮若干秒,黄灯闪3次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁3次后变红灯,东西向变绿灯,如此重复。
分析一共有12个灯,每个与每个又有逻辑联系,但其实不是很复杂,分析比较重要,只要把交通灯的规律总结出来就很简单了,而且每个人总结规律是不同的,程序也就有更多种,所以这里算是一个比较广泛的例子。
proteus电路图
- 01
LED灯方面的元器件不是很复杂,之前说了很多,也差不多,只是灯不一样。51单片机电容瓷片电容晶振绿色二极管红色二极管黄色二极管电阻
- 02
电路图:1为总体图,2,3为大图PS:图要是不会画也可以评论提问。。
程序清单
- 01
说明分析(不想看请直接跳往下一步):通过思考我们发现灯的循环大致分为1、横向绿灯亮,竖向红灯亮2、横向黄灯闪三下,竖向红灯依旧亮3、横向红灯亮,竖向绿灯亮4、横向红灯依旧亮,竖向黄灯闪三下由分析我们把程序也分为四个循环
- 02
【程序】图片版按照程序顺序截图,前面是子程序,最后为主程序
- 03
【文字版】/* 名称:LED 模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪3次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁3次后变红灯,东西向变绿灯,如此重复。*/#include<reg51.h>#define uchar unsigned char#define uint unsigned int//规划好各个脚连接的灯,方便使用sbit RED_1=P0^0; //东西向灯sbit YELLOW_1=P0^1;sbit GREEN_1=P0^2;sbit RED_2=P0^3; //南北向灯sbit YELLOW_2=P0^4;sbit GREEN_2=P0^5;uchar number=0,type=1; //闪烁次数,操作类型变量//延时子程序void Delay(uint x){uchar i;while(x--) for(i=0;i<120;i++);}//交通灯切换程序//总共分为四种情况,如此循环//注:1为关灯,0为开灯traffic(){switch(type){case 1: //东西向绿灯与南北向红灯亮RED_1=1;YELLOW_1=1;GREEN_1=0;RED_2=0;YELLOW_2=1;GREEN_2=1;Delay(2000);type=2;break;case 2: //东西向黄灯闪烁,绿灯关闭Delay(300);YELLOW_1=~YELLOW_1;GREEN_1=1;if(++number!=6) return; //闪烁3次number=0;type=3;break;case 3: //东西向红灯,南北向绿灯亮RED_1=0;YELLOW_1=1;GREEN_1=1;RED_2=1;YELLOW_2=1;GREEN_2=0;Delay(2000);type=4;break;case 4: //南北向黄灯闪烁3次Delay(300);YELLOW_2=~YELLOW_2;GREEN_2=1;if(++number!=6) return;number=0;type=1;}}//主程序,由于用了switch,为了便于循环选择,用一个traffic子函数写在外面void main(){while(1) traffic();}
完成结果仿真图
- 01
加载全部内容