硬件编程精粹·LED模拟交通灯

硬件编程精粹·LED模拟交通灯

首页休闲益智交通红绿灯模拟器更新时间:2024-06-03

【任务】设计十字路口交通灯,模拟红黄绿灯的亮灭规律。

【硬件平台】交通灯的运行规律是:红灯(R)停,绿灯(G)行,黄灯(Y)准备。同一方向的同色灯同亮通灭,可双向通行,因此单片机对的一个端口控制两盏灯,比如p0.0控制D1和D9。

【编程思路】交通灯的作用是防止东西向的人车流与南北向的人车流对撞。规定:东西向绿灯亮一段时间后(保证东西向正常速度的人车流通过),黄灯闪烁5次后红灯亮,禁止南北方向通行;东西向的红灯亮后,南北向交通灯由红变绿(允许通行),保持若干秒后(保证南北向正常速度的人车流通过),南北向的黄灯闪烁5次后红灯亮,东西向绿灯亮,如此两个方向轮流通过。两个方向的红绿状态互反。下面的编程思想是使用Switch开关语句及标志位实现程序的条件跳转。

1 #include <reg51.h>

2 #define uchar unsigned char

3 #define uint unsigned int

4

5 sbit red_A=P0^0; //定义东西向红黄绿指示灯控制位,以便进行位操作

6 sbit yellow_A=P0^1;

7 sbit green_A=P0^2;

8

9 sbit red_B=P0^3; //定义南北向红黄绿指示灯控制位,以便进行位操作

10 sbit yellow_B=P0^4;

11 sbit green_B=P0^5;

12

13 uchar flash_count=0; //定义闪烁次数变量

14 operation_type=1; //定义操作类型变量

15

16 void delay(uint x) //延时函数

17 {

18 uchar i;

19 while(x--) for(i=0;i<100;i );

20 }

18

19 void traffic_light() //交通灯切换函数

20 {

21 switch(operation_type)

22 {

23 case 1://东西向绿灯与南北向红灯亮

24 red_A=1; yellow_A=1;green_A=0;

25 red_B=0; yellow_B=1;green_B=1;

26 delay(1000); //延时

27 operation_type=2; //下一步操作

28 break;

29 case 2://东西向黄灯开始闪烁,绿灯关闭

30 delay(200); //延时

31 yellow_A=!yellow_A;green_A=1;

32 //闪烁5次

33 if( flash_count!=5) return;

34 flash_count=0;

35 operation_type=2; //下一步操作

36 break;

37 case 3://东西向红灯与南北向绿灯亮

38 red_A=0; yellow_A=1;green_A=0;

39 red_B=1; yellow_B=1;green_B=0;

40 //南北向黄灯亮若干秒后切换

41 delay(1000);

42 operation_type=4; //下一步操作

43 break;
44 case 4://南北向黄灯开始闪烁,绿灯灭

45 delay(200); //延时

46 yellow_B=!yellow_B;green_B=1;

47 //闪烁5次

48 if( flash_count!=5) return;

49 flash_count=0;

50 operation_type=1; //回到第一种操作

51 }

52 }

53

54 //主程序

55 void main()

56 {

57 while(1) void traffic_light(); //主函数在形式上越简洁越好,频繁调用的函数应在主函数外部详细定义

58 }

【说明】清晰表达编程思路绝非简单的事情,有时候鬼使神差地写出了程序,但要表达出为什么这样写却很难说清楚。实事求是地说,阅读程序比阅读自然语言文本难,因为语句比较散乱,不符合人类的思维习惯。

【程序截图】

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved