51单片机C程序实验LED灯:[5]模拟交通灯

名称: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

    (0)

    相关推荐

    • 51单片机C程序实验LED灯:[2]左到右的流水灯

      依旧是基础的LED灯部分的实验 说明:实现一排灯从左到右依次一个一个点亮熄灭,实现流水灯 proteus电路图 01 元件清单:(分别是) 51单片机 电容 瓷片电容(也可用普通电容) 晶振 红色二极 ...

    • 51单片机C程序实验LED灯:[3]来回点亮

      一个简单的LED灯例子. 两种编译方法. 目标:实现8个LED灯来回点亮 proteus电路图 01 画proteus电路图,给出元件清单: 51单片机 电容 瓷片电容(也可用普通电容) 晶振 红色二 ...

    • 51单片机C程序实验LED灯:[1]单个灯闪烁

      说明:单片机控制LED灯间隔时间闪烁 所用程序很简单,实际情况可作相应变化,也有多种方式实现. proteus电路图 01 所需元件清单:(分别是) 51单片机 电容 瓷片电容(也可用普通电容) 晶振 ...

    • 51单片机C程序实验LED灯:单个灯闪烁

      我们在学习单片机的时候,最开始接触的就是用单片机点亮LED灯.今天,小编就来说说,如何用51单片机做单个LED灯闪烁的实验. 操作方法 01 首先,打开电脑中的proteus软件,其界面如图所示. 0 ...

    • 51单片机C程序实验LED灯:[4]花样流水灯

      前篇的升级版. 目标:实现花样流水灯. 由于花样流水灯的变换很多,所需变量太多,所以一般没有使用移动语句,而是利用数组编译好每个时刻各个灯的赋值,然后读取数据输出到端口显示. proteus电路图 0 ...

    • 利用51单片机控制来使LED灯闪烁

      通过51单片机控制时钟,从而控制时间,来完成闪烁 操作方法 01 /****************************************/ /*程序名称:点亮一个P1.0口的发光管*/ / ...

    • Multisim中如何设计交通灯控制电路?

      在仿真软件Multisim中,可以自己设计各种电路,仿真运行,出现错误可以迅速改正,在实际连接中能减少很多不必要的问题,那么,用此仿真软件如何模拟交通灯电路呢?下面我们就来看下,敬请批评指正. 操作方 ...

    • 51单片机如何用c语言点亮led灯

      在初学51单片机的时候,都喜欢将点亮led灯作为第一个实验.小编今天就教大家如何在keil软件中用c语言编写这一个程序. 操作方法 01 首先打开桌面上的keil软件,在进行对51单片机进行编程时最常 ...

    • Keil uVision4 51单片机开关LED灯编程

      Keil uVision4 51单片机LED多路开关编程,多路开关状态指示.开关LED灯编程 操作方法 01 新建项目,如图所示. 02 添加reg51.h头文件. #include<reg51 ...