单片机C语言交通信号灯控制程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
交通信号灯控制(源程序)
#include
int sum=0; /* 定义计数器*/
keyscan(); /* 键盘扫描函数*/
void delay50ms(unsigned int i); /* 延时函数*/
xhd( ); /* 信号灯函数xhd( ) */
/* ------------------------- 主函数----------------------------*/
main( ) /* 主函数*/
{
keyscan(); /* 键盘扫描*/
TMOD=0x01; /* 设定T0为模式1 */
EA=1; /* 总允许中断*/
ET0=1; /* 允许定时器T0中断*/ /*----状态0---*/
P1=0x6f; /* P1初始值,所有路口亮红灯*/
delay50ms(20); /* 延时1s*/
xhd( ); /* 调用信号灯函数*/
}
/* ---------------------- 键盘扫描函数------------------------- */ keyscan()
{
int j=0;
while (j==0)
{
while (P2_0==0); /*等待启动按键闭合*/ delay50ms(1);
if (P2_0==0) /*确认启动按键闭合*/
j=1;
}
}
/* ----------------------- -延时函数----------------------------*/ void delay50ms(unsigned int i) /* 延时50ms*i*/
{
TR0=1;
while ( i!=0)
{ /*启动T0定时器*/
TH0=-(50000/256); /* 定时器赋初始值*/ TL0=-(50000%256);
while(TF0!=1); /*等待T0溢出*/
TF0=0; /* 溢出标志位清0*/ i--; /* 循环-1 */
}
TR0=0; /*关闭T0定时器*/
}
/* ---------------------- 信号灯函数------------------------ */
xhd( ) /* 信号灯函数*/
{
while(1) /* 无限循环*/
{
/* ----状态1----*/
P1_2=0; P1_3=0; /* 南北绿灯亮,东西红灯亮*/ delay50ms(100); /*延时5s*/
/* ----状态2----*/
while(sum<3) /*南北绿灯闪3次*/
{
P1_2=0; /*亮0.5s*/
delay50ms(10);
P1_2=1; /*暗0.5s*/
delay50ms(10);
sum++;
}
sum=0; /*计数器清零*/
P1_2=1; P1_1=0; /* 南北绿灯熄灭,黄灯亮*/ delay50ms(60); /*延时3s*/
/*----状态3----*/
P1_1=1; P1_0=0; /* 南北黄灯熄灭,红灯亮*/ P1_3=1; P1_5=0; /* 东西红灯熄灭,绿灯亮*/ delay50ms(100); /*延时5s*/
/* ----状态4----*/
while(sum<3) /*东西绿灯闪3次*/
{
P1_5=0; /*亮0.5s*/
delay50ms(10);
P1_5=1; /*暗0.5s*/
delay50ms(10);
sum++;
}
sum=0; /*计数器清零*/
P1_5=1; P1_4=0; /* 东西绿灯熄灭,黄灯亮*/
delay50ms(60);
/* ----状态1做准备----*/
P1_4=1; P1_0=1; /* 东西黄灯熄灭,南北红灯熄灭*/
}
}
程序编译通过,如图: