微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 二极管(STC89C52): 编写程序实现类似交通灯

二极管(STC89C52): 编写程序实现类似交通灯

时间:11-22 来源:互联网 点击:
一. 硬件设计


二. 软件设计

1. 程序功能

编写程序实现类似交通灯:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复

2. 程序源码

#include

#define uchar unsigned char

#define uint unsigned int

sbit red_east_west = P1 ^ 0;

sbit yellow_east_west = P1 ^ 1;

sbit green_east_west = P1 ^ 2;

sbit red_south_north = P1 ^ 3;

sbit yellow_south_north = P1 ^ 4;

sbit green_south_north = P1 ^ 5;

uchar flash_count = 0;

uchar operation_type = 1;

void delayms(uint xms);

void traffic_light();

void main()

{

while(1)

traffic_light();

}

void traffic_light()

{

switch(operation_type)

{

case 1: //green between east and west, red between south and north

red_east_west = 1; yellow_east_west = 1; green_east_west = 0;

red_south_north = 0; yellow_south_north = 1; green_south_north = 1;

delayms(2000);

operation_type = 2;

break;

case 2: //yellow flash between east and west, green close between east and west

delayms(300);

yellow_east_west = ~yellow_east_west; green_east_west = 1;

if (++flash_count != 10)

return;

flash_count = 0;

operation_type = 3;

break;

case 3: //red between east and west, green between south and north

red_east_west = 0; yellow_east_west = 1; green_east_west = 1;

red_south_north = 1; yellow_south_north = 1; green_south_north = 0;

delayms(2000);

operation_type = 4;

break;

case 4: //yellow flash between south and north

delayms(300);

yellow_south_north = ~yellow_south_north; green_south_north = 1;

if (++flash_count != 10)

return;

flash_count = 0;

operation_type = 1;

break;

}

}

void delayms(uint xms)

{

uint i, j;

for (i = xms; i > 0; i--)

for (j = 110; j > 0; j--)

;

}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top