|
電路原理圖
源程序如下
//基于51單片機的交通燈設計,黃燈亮起時會閃爍
//并發(fā)出警報,提醒行人或車輛快速通過
//定時準確,誤差小,便于調節(jié)時間長短
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit NB=P1^0; //南北走向黃燈報警器控制端口
sbit DX=P1^1; //東西走向黃燈報警器控制端口
//簡易毫秒延時函數
void delay( uint n)
{
uint i;
uchar j;
for(i=0;i<n;i++)
for(j=0;j<114;j++);
}
void main()
{
uchar a=0,b=0,BIAOZHI=3;
//定時器初始化
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TMOD=0x01; //設置定時/計數器方式為16位定時模式
TH0 = 0x4b;
TL0 = 0xfc;//0x4bfc 定時50ms
TR0=1; //啟動定時器
while(1)
{
if(TF0 == 1)//判斷T1是否溢出
{ //定時器溢出后重賦處置
TH0 = 0x4b;
TL0 = 0xfc;//0x4bfc 定時50ms
TF0 = 0;//清零便于下次判斷
a++;//50毫秒計數加1
if(a==20) {a=0;b--;}//a=20;說明一秒時間到
}
if(b==0)
{
switch(BIAOZHI)
{
case 0:
BIAOZHI=1;b=3; break; //南北黃燈時長
case 1:
BIAOZHI=2;b=10; break;//南北紅燈時長
case 2:
BIAOZHI=3;b=3; break; //南北綠燈時長
case 3: BIAOZHI=0;b=10; break; //東西黃燈時長
}
}
switch(BIAOZHI)
{
case 0:
P0=0X33; break;
case 1: if(a%4==1) //黃燈閃爍 每隔200 毫秒閃爍一次
{P0=0X35; NB=0;}
if(a%4==0)
{P0=0x37; NB=1;}
break;
case 2:
P0=0X1E; break;
case 3: if(a%4==1) //黃燈閃爍 每隔200 毫秒閃爍一次
{P0=0X2e;DX=0;}
if(a%4==0)
{P0=0x3e;DX=1;}
break;
}
}
|
|