这一篇文章主要介绍用C语言制作一个简易的十字路口红绿灯。

基本电路图如下:

  使用的代码如下:

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit LED0 = P0^0;
sbit LED1 = P0^1;
sbit LED2 = P0^2;
sbit LED3 = P0^3;
sbit LED4 = P0^4;
sbit LED5 = P0^5;

uchar Time = 0,Flash = 0;
uint flag = 1;
//T0 中断函数   
void LED_Flash()interrupt 1
{
	TH0 = (65536-5000)/256;		
	TL0 = (65536-5000)%256;
	switch(flag)
	{	
		case 1:
			LED0 = 0;LED1 = 0;LED2 = 1;	
			LED3 = 1;LED4 = 0;LED5 = 0;
			if(++Time != 200) 
		return;
			Time = 0;flag = 2;
		break;
		case 2:
			if(++Time != 10) 
		return;
			Time = 0;
			LED0 = 0;LED1 =! LED1;LED2 = 0;
			LED3 = 0;LED4 =! LED4;LED5 = 0;
			if(++Flash != 10)
		return;
			Flash = 0;flag = 3;
		break;
		case 3:
			LED0 = 1;LED1 = 0;LED2 = 0;	
			LED3 = 0;LED4 = 0;LED5 = 1;
			if(++Time != 200) 
		return;
			Time = 0;flag = 4;
		break;
		case 4:
			if(++Time != 10) 
		return;
			Time = 0;
			LED0 = 0;LED1 =! LED1;LED2 = 0;
			LED3 = 0;LED4 =! LED4;LED5 = 0;
			if(++Flash != 10)
		return;
			Flash = 0;flag = 1;
		break;
		default:break; 
	}
}
void main()
{
	EA = 1;
	ET0 = 1;
	TMOD = 0x01;		//定时器//计数器方式寄存器TMOD,定时器T0,工作于模式0
						//方式:Mode 0x00,位数13位,计数范围:0——8191
	TH0 = (65536-5000)/256;		
	TL0 = (65536-5000)%256;
	IE = 0x82;
	TR0 = 1;			//定时器开关	
	while(1);
}
/*仅供学习参考*/

更多推荐

单片机(ISIS 7 Professional):实现简易十字路口红绿灯代码项目